run_test_client.py
Go to the documentation of this file.
1 # Copyright 2020 gRPC authors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 import logging
15 
16 from absl import app
17 from absl import flags
18 
19 from framework import xds_flags
20 from framework import xds_k8s_flags
21 from framework.infrastructure import gcp
22 from framework.infrastructure import k8s
23 from framework.test_app import client_app
24 
25 logger = logging.getLogger(__name__)
26 # Flags
27 _CMD = flags.DEFINE_enum('cmd',
28  default='run',
29  enum_values=['run', 'cleanup'],
30  help='Command')
31 _SECURE = flags.DEFINE_bool("secure",
32  default=False,
33  help="Run client in the secure mode")
34 _QPS = flags.DEFINE_integer('qps', default=25, help='Queries per second')
35 _PRINT_RESPONSE = flags.DEFINE_bool("print_response",
36  default=False,
37  help="Client prints responses")
38 _CONFIG_MESH = flags.DEFINE_bool(
39  "config_mesh",
40  default=None,
41  help="Optional. Supplied to bootstrap generator to indicate AppNet mesh.")
42 _REUSE_NAMESPACE = flags.DEFINE_bool("reuse_namespace",
43  default=True,
44  help="Use existing namespace if exists")
45 _CLEANUP_NAMESPACE = flags.DEFINE_bool(
46  "cleanup_namespace",
47  default=False,
48  help="Delete namespace during resource cleanup")
49 flags.adopt_module_key_flags(xds_flags)
50 flags.adopt_module_key_flags(xds_k8s_flags)
51 # Running outside of a test suite, so require explicit resource_suffix.
52 flags.mark_flag_as_required("resource_suffix")
53 
54 # Type aliases
55 KubernetesClientRunner = client_app.KubernetesClientRunner
56 
57 
58 def main(argv):
59  if len(argv) > 1:
60  raise app.UsageError('Too many command-line arguments.')
61 
62  project: str = xds_flags.PROJECT.value
63  # GCP Service Account email
64  gcp_service_account: str = xds_k8s_flags.GCP_SERVICE_ACCOUNT.value
65 
66  # KubernetesClientRunner arguments.
67  runner_kwargs = dict(
68  deployment_name=xds_flags.CLIENT_NAME.value,
69  image_name=xds_k8s_flags.CLIENT_IMAGE.value,
70  td_bootstrap_image=xds_k8s_flags.TD_BOOTSTRAP_IMAGE.value,
71  gcp_project=project,
72  gcp_api_manager=gcp.api.GcpApiManager(),
73  gcp_service_account=gcp_service_account,
74  xds_server_uri=xds_flags.XDS_SERVER_URI.value,
75  network=xds_flags.NETWORK.value,
76  stats_port=xds_flags.CLIENT_PORT.value,
77  reuse_namespace=_REUSE_NAMESPACE.value)
78 
79  if _SECURE.value:
80  runner_kwargs.update(
81  deployment_template='client-secure.deployment.yaml')
82 
83  k8s_api_manager = k8s.KubernetesApiManager(xds_k8s_flags.KUBE_CONTEXT.value)
84  client_namespace = KubernetesClientRunner.make_namespace_name(
85  xds_flags.RESOURCE_PREFIX.value, xds_flags.RESOURCE_SUFFIX.value)
86  client_runner = KubernetesClientRunner(
87  k8s.KubernetesNamespace(k8s_api_manager, client_namespace),
88  **runner_kwargs)
89 
90  # Server target
91  server_xds_host = xds_flags.SERVER_XDS_HOST.value
92  server_xds_port = xds_flags.SERVER_XDS_PORT.value
93 
94  if _CMD.value == 'run':
95  logger.info('Run client, secure_mode=%s', _SECURE.value)
96  client_runner.run(
97  server_target=f'xds:///{server_xds_host}:{server_xds_port}',
98  qps=_QPS.value,
99  print_response=_PRINT_RESPONSE.value,
100  secure_mode=_SECURE.value,
101  config_mesh=_CONFIG_MESH.value)
102 
103  elif _CMD.value == 'cleanup':
104  logger.info('Cleanup client')
105  client_runner.cleanup(force=True,
106  force_namespace=_CLEANUP_NAMESPACE.value)
107 
108 
109 if __name__ == '__main__':
110  app.run(main)
framework.test_app
Definition: tools/run_tests/xds_k8s_test_driver/framework/test_app/__init__.py:1
framework.infrastructure
Definition: tools/run_tests/xds_k8s_test_driver/framework/infrastructure/__init__.py:1
bin.run_test_client.main
def main(argv)
Definition: run_test_client.py:58
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
bin.run_test_client.KubernetesClientRunner
KubernetesClientRunner
Definition: run_test_client.py:55


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:14