1414
1515from gapic .schema import wrappers
1616
17+ import json
1718import proto
1819import pytest
1920
@@ -23,31 +24,6 @@ class RoutingTestRequest(proto.Message):
2324 app_profile_id = proto .Field (proto .STRING , number = 2 )
2425
2526
26- def resolve (rule , request ):
27- """This function performs dynamic header resolution, identical to what's in client.py.j2."""
28-
29- def _get_field (request , field_path : str ):
30- segments = field_path .split ("." )
31- cur = request
32- for x in segments :
33- cur = getattr (cur , x )
34- return cur
35-
36- header_params = {}
37- for routing_param in rule .routing_parameters :
38- # This may raise exception (which we show to clients).
39- request_field_value = _get_field (request , routing_param .field )
40- if routing_param .path_template :
41- routing_param_regex = routing_param .to_regex ()
42- regex_match = routing_param_regex .match (request_field_value )
43- if regex_match :
44- header_params [routing_param .key ] = regex_match .group (
45- routing_param .key )
46- else : # No need to match
47- header_params [routing_param .key ] = request_field_value
48- return header_params
49-
50-
5127@pytest .mark .parametrize (
5228 "req, expected" ,
5329 [
@@ -63,7 +39,10 @@ def _get_field(request, field_path: str):
6339def test_routing_rule_resolve_simple_extraction (req , expected ):
6440 rule = wrappers .RoutingRule (
6541 [wrappers .RoutingParameter ("app_profile_id" , "" )])
66- assert resolve (rule , req ) == expected
42+ assert wrappers .RoutingRule .resolve (
43+ rule ,
44+ RoutingTestRequest .to_dict (req )
45+ ) == expected
6746
6847
6948@pytest .mark .parametrize (
@@ -82,7 +61,10 @@ def test_routing_rule_resolve_rename_extraction(req, expected):
8261 rule = wrappers .RoutingRule (
8362 [wrappers .RoutingParameter ("app_profile_id" , "{routing_id=**}" )]
8463 )
85- assert resolve (rule , req ) == expected
64+ assert wrappers .RoutingRule .resolve (
65+ rule ,
66+ RoutingTestRequest .to_dict (req )
67+ ) == expected
8668
8769
8870@pytest .mark .parametrize (
@@ -111,7 +93,10 @@ def test_routing_rule_resolve_field_match(req, expected):
11193 ),
11294 ]
11395 )
114- assert resolve (rule , req ) == expected
96+ assert wrappers .RoutingRule .resolve (
97+ rule ,
98+ RoutingTestRequest .to_dict (req )
99+ ) == expected
115100
116101
117102@pytest .mark .parametrize (
@@ -135,6 +120,9 @@ def test_routing_rule_resolve_field_match(req, expected):
135120 wrappers .RoutingParameter (
136121 "table_name" , "projects/*/{instance_id=instances/*}/**"
137122 ),
123+ wrappers .RoutingParameter (
124+ "doesnotexist" , "projects/*/{instance_id=instances/*}/**"
125+ ),
138126 ],
139127 RoutingTestRequest (
140128 table_name = "projects/100/instances/200/tables/300" ),
@@ -144,7 +132,15 @@ def test_routing_rule_resolve_field_match(req, expected):
144132)
145133def test_routing_rule_resolve (routing_parameters , req , expected ):
146134 rule = wrappers .RoutingRule (routing_parameters )
147- got = resolve (rule , req )
135+ got = wrappers .RoutingRule .resolve (
136+ rule , RoutingTestRequest .to_dict (req )
137+ )
138+ assert got == expected
139+
140+ rule = wrappers .RoutingRule (routing_parameters )
141+ got = wrappers .RoutingRule .resolve (
142+ rule , json .dumps (RoutingTestRequest .to_dict (req ))
143+ )
148144 assert got == expected
149145
150146
0 commit comments