15 from typing
import Tuple
17 from absl
import flags
18 from absl.testing
import absltest
21 from framework
import xds_url_map_testcase
26 HostRule = xds_url_map_testcase.HostRule
27 PathMatcher = xds_url_map_testcase.PathMatcher
28 GcpResourceManager = xds_url_map_testcase.GcpResourceManager
29 DumpedXdsConfig = xds_url_map_testcase.DumpedXdsConfig
30 RpcTypeUnaryCall = xds_url_map_testcase.RpcTypeUnaryCall
31 XdsTestClient = client_app.XdsTestClient
32 ExpectedResult = xds_url_map_testcase.ExpectedResult
35 logger = logging.getLogger(__name__)
36 flags.adopt_module_key_flags(xds_url_map_testcase)
41 _LENGTH_OF_RPC_SENDING_SEC = 16
46 _NON_RANDOM_ERROR_TOLERANCE = 0.01
47 _RPC_BEHAVIOR_HEADER_NAME =
'rpc-behavior'
54 'fullPathMatch':
'/grpc.testing.TestService/UnaryCall'
59 'retryConditions': retryConditions,
60 'numRetries': num_retries,
69 if config.client_lang
in _Lang.CPP | _Lang.JAVA | _Lang.PYTHON:
70 return config.version_gte(
'v1.40.x')
71 elif config.client_lang == _Lang.GO:
72 return config.version_gte(
'v1.41.x')
73 elif config.client_lang == _Lang.NODE:
87 path_matcher: PathMatcher) -> Tuple[HostRule, PathMatcher]:
88 path_matcher[
"routeRules"] = [
92 return host_rule, path_matcher
95 self.assertNumEndpoints(xds_config, 1)
96 retry_config = xds_config.rds[
'virtualHosts'][0][
'routes'][0][
'route'][
98 self.assertEqual(3, retry_config[
'numRetries'])
99 self.assertEqual(
'unavailable', retry_config[
'retryOn'])
102 self.configure_and_send(test_client,
103 rpc_types=(RpcTypeUnaryCall,),
106 _RPC_BEHAVIOR_HEADER_NAME,
107 'error-code-14,succeed-on-retry-attempt-4')
110 self.assertRpcStatusCode(test_client,
112 rpc_type=RpcTypeUnaryCall,
113 status_code=grpc.StatusCode.UNAVAILABLE,
115 length=_LENGTH_OF_RPC_SENDING_SEC,
116 tolerance=_NON_RANDOM_ERROR_TOLERANCE)
128 path_matcher: PathMatcher) -> Tuple[HostRule, PathMatcher]:
129 path_matcher[
"routeRules"] = [
133 return host_rule, path_matcher
136 self.assertNumEndpoints(xds_config, 1)
137 retry_config = xds_config.rds[
'virtualHosts'][0][
'routes'][0][
'route'][
139 self.assertEqual(4, retry_config[
'numRetries'])
140 self.assertEqual(
'unavailable', retry_config[
'retryOn'])
143 self.configure_and_send(test_client,
144 rpc_types=(RpcTypeUnaryCall,),
147 _RPC_BEHAVIOR_HEADER_NAME,
148 'error-code-14,succeed-on-retry-attempt-4')
151 self.assertRpcStatusCode(test_client,
153 rpc_type=RpcTypeUnaryCall,
154 status_code=grpc.StatusCode.OK,
156 length=_LENGTH_OF_RPC_SENDING_SEC,
157 tolerance=_NON_RANDOM_ERROR_TOLERANCE)
160 if __name__ ==
'__main__':