16 from typing
import List
18 from absl
import flags
19 from absl
import logging
20 from absl.testing
import absltest
23 from framework
import xds_k8s_testcase
24 from framework
import xds_url_map_testcase
27 flags.adopt_module_key_flags(xds_k8s_testcase)
30 _XdsTestServer = xds_k8s_testcase.XdsTestServer
31 _XdsTestClient = xds_k8s_testcase.XdsTestClient
45 return config.version_gte(
'master')
48 with self.subTest(
'00_create_health_check'):
51 with self.subTest(
'01_create_backend_services'):
52 self.td.create_backend_service(subset_size=_SUBSET_SIZE)
54 with self.subTest(
'02_create_url_map'):
57 with self.subTest(
'03_create_target_proxy'):
60 with self.subTest(
'04_create_forwarding_rule'):
61 self.td.create_forwarding_rule(self.server_xds_port)
63 test_servers: List[_XdsTestServer]
64 with self.subTest(
'05_start_test_servers'):
65 test_servers = self.startTestServers(replica_count=_NUM_BACKENDS)
67 with self.subTest(
'06_add_server_backends_to_backend_services'):
68 self.setupServerBackends()
70 rpc_distribution = collections.defaultdict(int)
71 with self.subTest(
'07_start_test_client'):
72 for i
in range(_NUM_CLIENTS):
74 self.client_runner.
cleanup(force=
True)
76 test_client: _XdsTestClient = self.startTestClient(
79 config = test_client.csds.fetch_client_status(
80 log_level=logging.INFO)
81 self.assertIsNotNone(config)
82 json_config = json_format.MessageToDict(config)
83 parsed = xds_url_map_testcase.DumpedXdsConfig(json_config)
84 logging.info(
'Client %d received endpoints (len=%s): %s', i,
85 len(parsed.endpoints), parsed.endpoints)
86 self.assertLen(parsed.endpoints, _SUBSET_SIZE)
88 lb_stats = self.getClientRpcStats(test_client,
90 for key, value
in lb_stats.rpcs_by_peer.items():
91 rpc_distribution[key] += value
93 with self.subTest(
'08_log_rpc_distribution'):
94 server_entries = sorted(rpc_distribution.items(),
99 self.assertGreater(
len(server_entries), _SUBSET_SIZE)
100 logging.info(
'RPC distribution (len=%s): %s',
len(server_entries),
102 peak = server_entries[0][1]
103 mean =
sum(
map(
lambda x: x[1],
104 server_entries)) /
len(server_entries)
105 logging.info(
'Peak=%d Mean=%.1f Peak-to-Mean-Ratio=%.2f', peak,
109 if __name__ ==
'__main__':
110 absltest.main(failfast=
True)