15 from typing
import List
17 from absl
import flags
18 from absl.testing
import absltest
20 from framework
import xds_k8s_testcase
24 logger = logging.getLogger(__name__)
25 flags.adopt_module_key_flags(xds_k8s_testcase)
28 _XdsTestServer = xds_k8s_testcase.XdsTestServer
29 _XdsTestClient = xds_k8s_testcase.XdsTestClient
34 MAX_RATE_PER_ENDPOINT = 100
39 k8s.KubernetesNamespace(self.secondary_k8s_api_manager,
40 self.server_namespace),
41 deployment_name=self.server_name +
'-alt',
42 image_name=self.server_image,
43 gcp_service_account=self.gcp_service_account,
44 td_bootstrap_image=self.td_bootstrap_image,
45 gcp_project=self.project,
46 gcp_api_manager=self.gcp_api_manager,
47 xds_server_uri=self.xds_server_uri,
49 debug_use_port_forwarding=self.debug_use_port_forwarding,
53 if hasattr(self,
'secondary_server_runner'):
58 with self.subTest(
'00_create_health_check'):
61 with self.subTest(
'01_create_backend_services'):
62 self.td.create_backend_service()
64 with self.subTest(
'02_create_url_map'):
67 with self.subTest(
'03_create_target_proxy'):
70 with self.subTest(
'04_create_forwarding_rule'):
71 self.td.create_forwarding_rule(self.server_xds_port)
73 default_test_servers: List[_XdsTestServer]
74 alternate_test_servers: List[_XdsTestServer]
75 with self.subTest(
'05_start_test_servers'):
76 default_test_servers = self.startTestServers(
79 alternate_test_servers = self.startTestServers(
82 with self.subTest(
'06_add_server_backends_to_backend_services'):
83 self.setupServerBackends(
85 self.setupServerBackends(
89 test_client: _XdsTestClient
90 with self.subTest(
'07_start_test_client'):
91 test_client = self.startTestClient(default_test_servers[0])
93 with self.subTest(
'08_test_client_xds_config_exists'):
94 self.assertXdsConfigExists(test_client)
96 with self.subTest(
'09_primary_locality_receives_requests'):
97 self.assertRpcsEventuallyGoToGivenServers(test_client,
101 '10_secondary_locality_receives_no_requests_on_partial_primary_failure'
103 default_test_servers[0].set_not_serving()
104 self.assertRpcsEventuallyGoToGivenServers(test_client,
105 default_test_servers[1:])
107 with self.subTest(
'11_gentle_failover'):
108 default_test_servers[1].set_not_serving()
109 self.assertRpcsEventuallyGoToGivenServers(
110 test_client, default_test_servers[2:] + alternate_test_servers)
113 '12_secondary_locality_receives_requests_on_primary_failure'):
114 default_test_servers[2].set_not_serving()
115 self.assertRpcsEventuallyGoToGivenServers(test_client,
116 alternate_test_servers)
118 with self.subTest(
'13_traffic_resumes_to_healthy_backends'):
120 default_test_servers[i].set_serving()
121 self.assertRpcsEventuallyGoToGivenServers(test_client,
122 default_test_servers)
125 if __name__ ==
'__main__':
126 absltest.main(failfast=
True)