xref: /aosp_15_r20/external/grpc-grpc/test/cpp/naming/resolver_component_tests_runner.py (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1#!/usr/bin/env python3
2# Copyright 2015 gRPC authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16# This file is auto-generated
17
18import argparse
19import os
20import platform
21import signal
22import subprocess
23import sys
24import tempfile
25import time
26
27argp = argparse.ArgumentParser(description='Run c-ares resolver tests')
28argp.add_argument('--test_bin_path', default=None, type=str,
29                  help='Path to gtest test binary to invoke.')
30argp.add_argument('--dns_server_bin_path', default=None, type=str,
31                  help='Path to local DNS server python script.')
32argp.add_argument('--records_config_path', default=None, type=str,
33                  help=('Path to DNS records yaml file that '
34                        'specifies records for the DNS sever. '))
35argp.add_argument('--dns_server_port', default=None, type=int,
36                  help=('Port that local DNS server is listening on.'))
37argp.add_argument('--dns_resolver_bin_path', default=None, type=str,
38                  help=('Path to the DNS health check utility.'))
39argp.add_argument('--tcp_connect_bin_path', default=None, type=str,
40                  help=('Path to the TCP health check utility.'))
41argp.add_argument('--extra_args', default='', type=str,
42                  help=('Comma-separate list of command args to '
43		        'plumb through to --test_bin_path'))
44args = argp.parse_args()
45
46def test_runner_log(msg):
47  sys.stderr.write('\n%s: %s\n' % (__file__, msg))
48
49def python_args(arg_list):
50  if platform.system() == 'Windows' and arg_list[0].endswith('.py'):
51    return [sys.executable] + arg_list
52  return arg_list
53
54cur_resolver = os.environ.get('GRPC_DNS_RESOLVER')
55if cur_resolver and cur_resolver != 'ares':
56  test_runner_log(('WARNING: cur resolver set to %s. This set of tests '
57      'needs to use GRPC_DNS_RESOLVER=ares.'))
58  test_runner_log('Exit 1 without running tests.')
59  sys.exit(1)
60os.environ.update({'GRPC_TRACE': 'cares_resolver,cares_address_sorting'})
61experiments = os.environ.get('GRPC_EXPERIMENTS')
62if experiments is not None and 'event_engine_dns' in experiments:
63  os.environ.update({'GRPC_TRACE': 'event_engine_client_channel_resolver,cares_resolver'})
64
65def wait_until_dns_server_is_up(args,
66                                dns_server_subprocess,
67                                dns_server_subprocess_output):
68  for i in range(0, 30):
69    test_runner_log('Health check: attempt to connect to DNS server over TCP.')
70    tcp_connect_subprocess = subprocess.Popen(python_args([
71        args.tcp_connect_bin_path,
72        '--server_host', '127.0.0.1',
73        '--server_port', str(args.dns_server_port),
74        '--timeout', str(1)]))
75    tcp_connect_subprocess.communicate()
76    if tcp_connect_subprocess.returncode == 0:
77      test_runner_log(('Health check: attempt to make an A-record '
78                       'query to DNS server.'))
79      dns_resolver_subprocess = subprocess.Popen(python_args([
80          args.dns_resolver_bin_path,
81          '--qname', 'health-check-local-dns-server-is-alive.resolver-tests.grpctestingexp',
82          '--server_host', '127.0.0.1',
83          '--server_port', str(args.dns_server_port)]),
84          stdout=subprocess.PIPE)
85      dns_resolver_stdout, _ = dns_resolver_subprocess.communicate(str.encode('ascii'))
86      if dns_resolver_subprocess.returncode == 0:
87        if '123.123.123.123'.encode('ascii') in dns_resolver_stdout:
88          test_runner_log(('DNS server is up! '
89                           'Successfully reached it over UDP and TCP.'))
90        return
91    time.sleep(0.1)
92  dns_server_subprocess.kill()
93  dns_server_subprocess.wait()
94  test_runner_log(('Failed to reach DNS server over TCP and/or UDP. '
95                   'Exitting without running tests.'))
96  test_runner_log('======= DNS server stdout '
97                  '(merged stdout and stderr) =============')
98  with open(dns_server_subprocess_output, 'r') as l:
99    test_runner_log(l.read())
100  test_runner_log('======= end DNS server output=========')
101  sys.exit(1)
102
103dns_server_subprocess_output = tempfile.mktemp()
104with open(dns_server_subprocess_output, 'w') as l:
105  dns_server_subprocess = subprocess.Popen(python_args([
106      args.dns_server_bin_path,
107      '--port', str(args.dns_server_port),
108      '--records_config_path', args.records_config_path]),
109      stdin=subprocess.PIPE,
110      stdout=l,
111      stderr=l)
112
113def _quit_on_signal(signum, _frame):
114  test_runner_log('Received signal: %d' % signum)
115  dns_server_subprocess.kill()
116  dns_server_subprocess.wait()
117  sys.exit(1)
118
119signal.signal(signal.SIGINT, _quit_on_signal)
120signal.signal(signal.SIGTERM, _quit_on_signal)
121wait_until_dns_server_is_up(args,
122                            dns_server_subprocess,
123                            dns_server_subprocess_output)
124num_test_failures = 0
125
126test_runner_log('Run test with target: %s' % 'no-srv-ipv4-single-target.resolver-tests-version-4.grpctestingexp.')
127current_test_subprocess = subprocess.Popen([
128  args.test_bin_path,
129  '--target_name', 'no-srv-ipv4-single-target.resolver-tests-version-4.grpctestingexp.',
130  '--do_ordered_address_comparison', 'False',
131  '--expected_addrs', '5.5.5.5:443,False',
132  '--expected_chosen_service_config', '',
133  '--expected_service_config_error', '',
134  '--expected_lb_policy', '',
135  '--enable_srv_queries', 'True',
136  '--enable_txt_queries', 'True',
137  '--inject_broken_nameserver_list', 'False',
138  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
139  ] + args.extra_args.split(','))
140current_test_subprocess.communicate()
141if current_test_subprocess.returncode != 0:
142  num_test_failures += 1
143
144test_runner_log('Run test with target: %s' % 'srv-ipv4-single-target.resolver-tests-version-4.grpctestingexp.')
145current_test_subprocess = subprocess.Popen([
146  args.test_bin_path,
147  '--target_name', 'srv-ipv4-single-target.resolver-tests-version-4.grpctestingexp.',
148  '--do_ordered_address_comparison', 'False',
149  '--expected_addrs', '1.2.3.4:1234,True',
150  '--expected_chosen_service_config', '',
151  '--expected_service_config_error', '',
152  '--expected_lb_policy', '',
153  '--enable_srv_queries', 'True',
154  '--enable_txt_queries', 'True',
155  '--inject_broken_nameserver_list', 'False',
156  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
157  ] + args.extra_args.split(','))
158current_test_subprocess.communicate()
159if current_test_subprocess.returncode != 0:
160  num_test_failures += 1
161
162test_runner_log('Run test with target: %s' % 'srv-ipv4-multi-target.resolver-tests-version-4.grpctestingexp.')
163current_test_subprocess = subprocess.Popen([
164  args.test_bin_path,
165  '--target_name', 'srv-ipv4-multi-target.resolver-tests-version-4.grpctestingexp.',
166  '--do_ordered_address_comparison', 'False',
167  '--expected_addrs', '1.2.3.5:1234,True;1.2.3.6:1234,True;1.2.3.7:1234,True',
168  '--expected_chosen_service_config', '',
169  '--expected_service_config_error', '',
170  '--expected_lb_policy', '',
171  '--enable_srv_queries', 'True',
172  '--enable_txt_queries', 'True',
173  '--inject_broken_nameserver_list', 'False',
174  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
175  ] + args.extra_args.split(','))
176current_test_subprocess.communicate()
177if current_test_subprocess.returncode != 0:
178  num_test_failures += 1
179
180test_runner_log('Run test with target: %s' % 'srv-ipv6-single-target.resolver-tests-version-4.grpctestingexp.')
181current_test_subprocess = subprocess.Popen([
182  args.test_bin_path,
183  '--target_name', 'srv-ipv6-single-target.resolver-tests-version-4.grpctestingexp.',
184  '--do_ordered_address_comparison', 'False',
185  '--expected_addrs', '[2607:f8b0:400a:801::1001]:1234,True',
186  '--expected_chosen_service_config', '',
187  '--expected_service_config_error', '',
188  '--expected_lb_policy', '',
189  '--enable_srv_queries', 'True',
190  '--enable_txt_queries', 'True',
191  '--inject_broken_nameserver_list', 'False',
192  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
193  ] + args.extra_args.split(','))
194current_test_subprocess.communicate()
195if current_test_subprocess.returncode != 0:
196  num_test_failures += 1
197
198test_runner_log('Run test with target: %s' % 'srv-ipv6-multi-target.resolver-tests-version-4.grpctestingexp.')
199current_test_subprocess = subprocess.Popen([
200  args.test_bin_path,
201  '--target_name', 'srv-ipv6-multi-target.resolver-tests-version-4.grpctestingexp.',
202  '--do_ordered_address_comparison', 'False',
203  '--expected_addrs', '[2607:f8b0:400a:801::1002]:1234,True;[2607:f8b0:400a:801::1003]:1234,True;[2607:f8b0:400a:801::1004]:1234,True',
204  '--expected_chosen_service_config', '',
205  '--expected_service_config_error', '',
206  '--expected_lb_policy', '',
207  '--enable_srv_queries', 'True',
208  '--enable_txt_queries', 'True',
209  '--inject_broken_nameserver_list', 'False',
210  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
211  ] + args.extra_args.split(','))
212current_test_subprocess.communicate()
213if current_test_subprocess.returncode != 0:
214  num_test_failures += 1
215
216test_runner_log('Run test with target: %s' % 'srv-ipv4-simple-service-config.resolver-tests-version-4.grpctestingexp.')
217current_test_subprocess = subprocess.Popen([
218  args.test_bin_path,
219  '--target_name', 'srv-ipv4-simple-service-config.resolver-tests-version-4.grpctestingexp.',
220  '--do_ordered_address_comparison', 'False',
221  '--expected_addrs', '1.2.3.4:1234,True',
222  '--expected_chosen_service_config', '{"loadBalancingPolicy":"round_robin","methodConfig":[{"name":[{"method":"Foo","service":"SimpleService"}],"waitForReady":true}]}',
223  '--expected_service_config_error', '',
224  '--expected_lb_policy', 'round_robin',
225  '--enable_srv_queries', 'True',
226  '--enable_txt_queries', 'True',
227  '--inject_broken_nameserver_list', 'False',
228  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
229  ] + args.extra_args.split(','))
230current_test_subprocess.communicate()
231if current_test_subprocess.returncode != 0:
232  num_test_failures += 1
233
234test_runner_log('Run test with target: %s' % 'ipv4-no-srv-simple-service-config.resolver-tests-version-4.grpctestingexp.')
235current_test_subprocess = subprocess.Popen([
236  args.test_bin_path,
237  '--target_name', 'ipv4-no-srv-simple-service-config.resolver-tests-version-4.grpctestingexp.',
238  '--do_ordered_address_comparison', 'False',
239  '--expected_addrs', '1.2.3.4:443,False',
240  '--expected_chosen_service_config', '{"loadBalancingPolicy":"round_robin","methodConfig":[{"name":[{"method":"Foo","service":"NoSrvSimpleService"}],"waitForReady":true}]}',
241  '--expected_service_config_error', '',
242  '--expected_lb_policy', 'round_robin',
243  '--enable_srv_queries', 'True',
244  '--enable_txt_queries', 'True',
245  '--inject_broken_nameserver_list', 'False',
246  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
247  ] + args.extra_args.split(','))
248current_test_subprocess.communicate()
249if current_test_subprocess.returncode != 0:
250  num_test_failures += 1
251
252test_runner_log('Run test with target: %s' % 'ipv4-no-config-for-cpp.resolver-tests-version-4.grpctestingexp.')
253current_test_subprocess = subprocess.Popen([
254  args.test_bin_path,
255  '--target_name', 'ipv4-no-config-for-cpp.resolver-tests-version-4.grpctestingexp.',
256  '--do_ordered_address_comparison', 'False',
257  '--expected_addrs', '1.2.3.4:443,False',
258  '--expected_chosen_service_config', '',
259  '--expected_service_config_error', '',
260  '--expected_lb_policy', '',
261  '--enable_srv_queries', 'True',
262  '--enable_txt_queries', 'True',
263  '--inject_broken_nameserver_list', 'False',
264  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
265  ] + args.extra_args.split(','))
266current_test_subprocess.communicate()
267if current_test_subprocess.returncode != 0:
268  num_test_failures += 1
269
270test_runner_log('Run test with target: %s' % 'ipv4-cpp-config-has-zero-percentage.resolver-tests-version-4.grpctestingexp.')
271current_test_subprocess = subprocess.Popen([
272  args.test_bin_path,
273  '--target_name', 'ipv4-cpp-config-has-zero-percentage.resolver-tests-version-4.grpctestingexp.',
274  '--do_ordered_address_comparison', 'False',
275  '--expected_addrs', '1.2.3.4:443,False',
276  '--expected_chosen_service_config', '',
277  '--expected_service_config_error', '',
278  '--expected_lb_policy', '',
279  '--enable_srv_queries', 'True',
280  '--enable_txt_queries', 'True',
281  '--inject_broken_nameserver_list', 'False',
282  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
283  ] + args.extra_args.split(','))
284current_test_subprocess.communicate()
285if current_test_subprocess.returncode != 0:
286  num_test_failures += 1
287
288test_runner_log('Run test with target: %s' % 'ipv4-second-language-is-cpp.resolver-tests-version-4.grpctestingexp.')
289current_test_subprocess = subprocess.Popen([
290  args.test_bin_path,
291  '--target_name', 'ipv4-second-language-is-cpp.resolver-tests-version-4.grpctestingexp.',
292  '--do_ordered_address_comparison', 'False',
293  '--expected_addrs', '1.2.3.4:443,False',
294  '--expected_chosen_service_config', '{"loadBalancingPolicy":"round_robin","methodConfig":[{"name":[{"method":"Foo","service":"CppService"}],"waitForReady":true}]}',
295  '--expected_service_config_error', '',
296  '--expected_lb_policy', 'round_robin',
297  '--enable_srv_queries', 'True',
298  '--enable_txt_queries', 'True',
299  '--inject_broken_nameserver_list', 'False',
300  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
301  ] + args.extra_args.split(','))
302current_test_subprocess.communicate()
303if current_test_subprocess.returncode != 0:
304  num_test_failures += 1
305
306test_runner_log('Run test with target: %s' % 'ipv4-config-with-percentages.resolver-tests-version-4.grpctestingexp.')
307current_test_subprocess = subprocess.Popen([
308  args.test_bin_path,
309  '--target_name', 'ipv4-config-with-percentages.resolver-tests-version-4.grpctestingexp.',
310  '--do_ordered_address_comparison', 'False',
311  '--expected_addrs', '1.2.3.4:443,False',
312  '--expected_chosen_service_config', '{"loadBalancingPolicy":"round_robin","methodConfig":[{"name":[{"method":"Foo","service":"AlwaysPickedService"}],"waitForReady":true}]}',
313  '--expected_service_config_error', '',
314  '--expected_lb_policy', 'round_robin',
315  '--enable_srv_queries', 'True',
316  '--enable_txt_queries', 'True',
317  '--inject_broken_nameserver_list', 'False',
318  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
319  ] + args.extra_args.split(','))
320current_test_subprocess.communicate()
321if current_test_subprocess.returncode != 0:
322  num_test_failures += 1
323
324test_runner_log('Run test with target: %s' % 'srv-ipv4-target-has-backend-and-balancer.resolver-tests-version-4.grpctestingexp.')
325current_test_subprocess = subprocess.Popen([
326  args.test_bin_path,
327  '--target_name', 'srv-ipv4-target-has-backend-and-balancer.resolver-tests-version-4.grpctestingexp.',
328  '--do_ordered_address_comparison', 'False',
329  '--expected_addrs', '1.2.3.4:1234,True;1.2.3.4:443,False',
330  '--expected_chosen_service_config', '',
331  '--expected_service_config_error', '',
332  '--expected_lb_policy', '',
333  '--enable_srv_queries', 'True',
334  '--enable_txt_queries', 'True',
335  '--inject_broken_nameserver_list', 'False',
336  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
337  ] + args.extra_args.split(','))
338current_test_subprocess.communicate()
339if current_test_subprocess.returncode != 0:
340  num_test_failures += 1
341
342test_runner_log('Run test with target: %s' % 'srv-ipv6-target-has-backend-and-balancer.resolver-tests-version-4.grpctestingexp.')
343current_test_subprocess = subprocess.Popen([
344  args.test_bin_path,
345  '--target_name', 'srv-ipv6-target-has-backend-and-balancer.resolver-tests-version-4.grpctestingexp.',
346  '--do_ordered_address_comparison', 'False',
347  '--expected_addrs', '[2607:f8b0:400a:801::1002]:1234,True;[2607:f8b0:400a:801::1002]:443,False',
348  '--expected_chosen_service_config', '',
349  '--expected_service_config_error', '',
350  '--expected_lb_policy', '',
351  '--enable_srv_queries', 'True',
352  '--enable_txt_queries', 'True',
353  '--inject_broken_nameserver_list', 'False',
354  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
355  ] + args.extra_args.split(','))
356current_test_subprocess.communicate()
357if current_test_subprocess.returncode != 0:
358  num_test_failures += 1
359
360test_runner_log('Run test with target: %s' % 'ipv4-config-causing-fallback-to-tcp.resolver-tests-version-4.grpctestingexp.')
361current_test_subprocess = subprocess.Popen([
362  args.test_bin_path,
363  '--target_name', 'ipv4-config-causing-fallback-to-tcp.resolver-tests-version-4.grpctestingexp.',
364  '--do_ordered_address_comparison', 'False',
365  '--expected_addrs', '1.2.3.4:443,False',
366  '--expected_chosen_service_config', '{"loadBalancingPolicy":"round_robin","methodConfig":[{"name":[{"method":"Foo","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooTwo","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooThree","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooFour","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooFive","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooSix","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooSeven","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooEight","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooNine","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooTen","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooEleven","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooTwelve","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooThirteen","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooFourteen","service":"SimpleService"}],"waitForReady":true},{"name":[{"method":"FooFifteen","service":"SimpleService"}],"waitForReady":true}]}',
367  '--expected_service_config_error', '',
368  '--expected_lb_policy', '',
369  '--enable_srv_queries', 'True',
370  '--enable_txt_queries', 'True',
371  '--inject_broken_nameserver_list', 'False',
372  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
373  ] + args.extra_args.split(','))
374current_test_subprocess.communicate()
375if current_test_subprocess.returncode != 0:
376  num_test_failures += 1
377
378test_runner_log('Run test with target: %s' % 'srv-ipv4-single-target-srv-disabled.resolver-tests-version-4.grpctestingexp.')
379current_test_subprocess = subprocess.Popen([
380  args.test_bin_path,
381  '--target_name', 'srv-ipv4-single-target-srv-disabled.resolver-tests-version-4.grpctestingexp.',
382  '--do_ordered_address_comparison', 'False',
383  '--expected_addrs', '2.3.4.5:443,False',
384  '--expected_chosen_service_config', '',
385  '--expected_service_config_error', '',
386  '--expected_lb_policy', '',
387  '--enable_srv_queries', 'False',
388  '--enable_txt_queries', 'True',
389  '--inject_broken_nameserver_list', 'False',
390  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
391  ] + args.extra_args.split(','))
392current_test_subprocess.communicate()
393if current_test_subprocess.returncode != 0:
394  num_test_failures += 1
395
396test_runner_log('Run test with target: %s' % 'srv-ipv4-multi-target-srv-disabled.resolver-tests-version-4.grpctestingexp.')
397current_test_subprocess = subprocess.Popen([
398  args.test_bin_path,
399  '--target_name', 'srv-ipv4-multi-target-srv-disabled.resolver-tests-version-4.grpctestingexp.',
400  '--do_ordered_address_comparison', 'False',
401  '--expected_addrs', '9.2.3.5:443,False;9.2.3.6:443,False;9.2.3.7:443,False',
402  '--expected_chosen_service_config', '',
403  '--expected_service_config_error', '',
404  '--expected_lb_policy', '',
405  '--enable_srv_queries', 'False',
406  '--enable_txt_queries', 'True',
407  '--inject_broken_nameserver_list', 'False',
408  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
409  ] + args.extra_args.split(','))
410current_test_subprocess.communicate()
411if current_test_subprocess.returncode != 0:
412  num_test_failures += 1
413
414test_runner_log('Run test with target: %s' % 'srv-ipv6-single-target-srv-disabled.resolver-tests-version-4.grpctestingexp.')
415current_test_subprocess = subprocess.Popen([
416  args.test_bin_path,
417  '--target_name', 'srv-ipv6-single-target-srv-disabled.resolver-tests-version-4.grpctestingexp.',
418  '--do_ordered_address_comparison', 'False',
419  '--expected_addrs', '[2600::1001]:443,False',
420  '--expected_chosen_service_config', '',
421  '--expected_service_config_error', '',
422  '--expected_lb_policy', '',
423  '--enable_srv_queries', 'False',
424  '--enable_txt_queries', 'True',
425  '--inject_broken_nameserver_list', 'False',
426  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
427  ] + args.extra_args.split(','))
428current_test_subprocess.communicate()
429if current_test_subprocess.returncode != 0:
430  num_test_failures += 1
431
432test_runner_log('Run test with target: %s' % 'srv-ipv6-multi-target-srv-disabled.resolver-tests-version-4.grpctestingexp.')
433current_test_subprocess = subprocess.Popen([
434  args.test_bin_path,
435  '--target_name', 'srv-ipv6-multi-target-srv-disabled.resolver-tests-version-4.grpctestingexp.',
436  '--do_ordered_address_comparison', 'False',
437  '--expected_addrs', '[2600::1002]:443,False;[2600::1003]:443,False;[2600::1004]:443,False',
438  '--expected_chosen_service_config', '',
439  '--expected_service_config_error', '',
440  '--expected_lb_policy', '',
441  '--enable_srv_queries', 'False',
442  '--enable_txt_queries', 'True',
443  '--inject_broken_nameserver_list', 'False',
444  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
445  ] + args.extra_args.split(','))
446current_test_subprocess.communicate()
447if current_test_subprocess.returncode != 0:
448  num_test_failures += 1
449
450test_runner_log('Run test with target: %s' % 'srv-ipv4-simple-service-config-srv-disabled.resolver-tests-version-4.grpctestingexp.')
451current_test_subprocess = subprocess.Popen([
452  args.test_bin_path,
453  '--target_name', 'srv-ipv4-simple-service-config-srv-disabled.resolver-tests-version-4.grpctestingexp.',
454  '--do_ordered_address_comparison', 'False',
455  '--expected_addrs', '5.5.3.4:443,False',
456  '--expected_chosen_service_config', '{"loadBalancingPolicy":"round_robin","methodConfig":[{"name":[{"method":"Foo","service":"SimpleService"}],"waitForReady":true}]}',
457  '--expected_service_config_error', '',
458  '--expected_lb_policy', 'round_robin',
459  '--enable_srv_queries', 'False',
460  '--enable_txt_queries', 'True',
461  '--inject_broken_nameserver_list', 'False',
462  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
463  ] + args.extra_args.split(','))
464current_test_subprocess.communicate()
465if current_test_subprocess.returncode != 0:
466  num_test_failures += 1
467
468test_runner_log('Run test with target: %s' % 'srv-ipv4-simple-service-config-txt-disabled.resolver-tests-version-4.grpctestingexp.')
469current_test_subprocess = subprocess.Popen([
470  args.test_bin_path,
471  '--target_name', 'srv-ipv4-simple-service-config-txt-disabled.resolver-tests-version-4.grpctestingexp.',
472  '--do_ordered_address_comparison', 'False',
473  '--expected_addrs', '1.2.3.4:1234,True',
474  '--expected_chosen_service_config', '',
475  '--expected_service_config_error', '',
476  '--expected_lb_policy', '',
477  '--enable_srv_queries', 'True',
478  '--enable_txt_queries', 'False',
479  '--inject_broken_nameserver_list', 'False',
480  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
481  ] + args.extra_args.split(','))
482current_test_subprocess.communicate()
483if current_test_subprocess.returncode != 0:
484  num_test_failures += 1
485
486test_runner_log('Run test with target: %s' % 'ipv4-cpp-config-has-zero-percentage-txt-disabled.resolver-tests-version-4.grpctestingexp.')
487current_test_subprocess = subprocess.Popen([
488  args.test_bin_path,
489  '--target_name', 'ipv4-cpp-config-has-zero-percentage-txt-disabled.resolver-tests-version-4.grpctestingexp.',
490  '--do_ordered_address_comparison', 'False',
491  '--expected_addrs', '1.2.3.4:443,False',
492  '--expected_chosen_service_config', '',
493  '--expected_service_config_error', '',
494  '--expected_lb_policy', '',
495  '--enable_srv_queries', 'True',
496  '--enable_txt_queries', 'False',
497  '--inject_broken_nameserver_list', 'False',
498  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
499  ] + args.extra_args.split(','))
500current_test_subprocess.communicate()
501if current_test_subprocess.returncode != 0:
502  num_test_failures += 1
503
504test_runner_log('Run test with target: %s' % 'ipv4-second-language-is-cpp-txt-disabled.resolver-tests-version-4.grpctestingexp.')
505current_test_subprocess = subprocess.Popen([
506  args.test_bin_path,
507  '--target_name', 'ipv4-second-language-is-cpp-txt-disabled.resolver-tests-version-4.grpctestingexp.',
508  '--do_ordered_address_comparison', 'False',
509  '--expected_addrs', '1.2.3.4:443,False',
510  '--expected_chosen_service_config', '',
511  '--expected_service_config_error', '',
512  '--expected_lb_policy', '',
513  '--enable_srv_queries', 'True',
514  '--enable_txt_queries', 'False',
515  '--inject_broken_nameserver_list', 'False',
516  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
517  ] + args.extra_args.split(','))
518current_test_subprocess.communicate()
519if current_test_subprocess.returncode != 0:
520  num_test_failures += 1
521
522test_runner_log('Run test with target: %s' % 'ipv4-svc_cfg_bad_json.resolver-tests-version-4.grpctestingexp.')
523current_test_subprocess = subprocess.Popen([
524  args.test_bin_path,
525  '--target_name', 'ipv4-svc_cfg_bad_json.resolver-tests-version-4.grpctestingexp.',
526  '--do_ordered_address_comparison', 'False',
527  '--expected_addrs', '1.2.3.4:443,False',
528  '--expected_chosen_service_config', '',
529  '--expected_service_config_error', 'JSON parse error',
530  '--expected_lb_policy', '',
531  '--enable_srv_queries', 'True',
532  '--enable_txt_queries', 'True',
533  '--inject_broken_nameserver_list', 'False',
534  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
535  ] + args.extra_args.split(','))
536current_test_subprocess.communicate()
537if current_test_subprocess.returncode != 0:
538  num_test_failures += 1
539
540test_runner_log('Run test with target: %s' % 'ipv4-svc_cfg_bad_client_language.resolver-tests-version-4.grpctestingexp.')
541current_test_subprocess = subprocess.Popen([
542  args.test_bin_path,
543  '--target_name', 'ipv4-svc_cfg_bad_client_language.resolver-tests-version-4.grpctestingexp.',
544  '--do_ordered_address_comparison', 'False',
545  '--expected_addrs', '1.2.3.4:443,False',
546  '--expected_chosen_service_config', '',
547  '--expected_service_config_error', 'clientLanguage error:is not an array',
548  '--expected_lb_policy', '',
549  '--enable_srv_queries', 'True',
550  '--enable_txt_queries', 'True',
551  '--inject_broken_nameserver_list', 'False',
552  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
553  ] + args.extra_args.split(','))
554current_test_subprocess.communicate()
555if current_test_subprocess.returncode != 0:
556  num_test_failures += 1
557
558test_runner_log('Run test with target: %s' % 'ipv4-svc_cfg_bad_percentage.resolver-tests-version-4.grpctestingexp.')
559current_test_subprocess = subprocess.Popen([
560  args.test_bin_path,
561  '--target_name', 'ipv4-svc_cfg_bad_percentage.resolver-tests-version-4.grpctestingexp.',
562  '--do_ordered_address_comparison', 'False',
563  '--expected_addrs', '1.2.3.4:443,False',
564  '--expected_chosen_service_config', '',
565  '--expected_service_config_error', 'percentage error:failed to parse number',
566  '--expected_lb_policy', '',
567  '--enable_srv_queries', 'True',
568  '--enable_txt_queries', 'True',
569  '--inject_broken_nameserver_list', 'False',
570  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
571  ] + args.extra_args.split(','))
572current_test_subprocess.communicate()
573if current_test_subprocess.returncode != 0:
574  num_test_failures += 1
575
576test_runner_log('Run test with target: %s' % 'ipv4-svc_cfg_bad_wait_for_ready.resolver-tests-version-4.grpctestingexp.')
577current_test_subprocess = subprocess.Popen([
578  args.test_bin_path,
579  '--target_name', 'ipv4-svc_cfg_bad_wait_for_ready.resolver-tests-version-4.grpctestingexp.',
580  '--do_ordered_address_comparison', 'False',
581  '--expected_addrs', '1.2.3.4:443,False',
582  '--expected_chosen_service_config', '',
583  '--expected_service_config_error', 'field:methodConfig[0].waitForReady error:is not a boolean',
584  '--expected_lb_policy', '',
585  '--enable_srv_queries', 'True',
586  '--enable_txt_queries', 'True',
587  '--inject_broken_nameserver_list', 'False',
588  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
589  ] + args.extra_args.split(','))
590current_test_subprocess.communicate()
591if current_test_subprocess.returncode != 0:
592  num_test_failures += 1
593
594test_runner_log('Run test with target: %s' % 'no-srv-ipv4-single-target-inject-broken-nameservers.resolver-tests-version-4.grpctestingexp.')
595current_test_subprocess = subprocess.Popen([
596  args.test_bin_path,
597  '--target_name', 'no-srv-ipv4-single-target-inject-broken-nameservers.resolver-tests-version-4.grpctestingexp.',
598  '--do_ordered_address_comparison', 'False',
599  '--expected_addrs', '5.5.5.5:443,False',
600  '--expected_chosen_service_config', '',
601  '--expected_service_config_error', '',
602  '--expected_lb_policy', '',
603  '--enable_srv_queries', 'True',
604  '--enable_txt_queries', 'True',
605  '--inject_broken_nameserver_list', 'True',
606  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
607  ] + args.extra_args.split(','))
608current_test_subprocess.communicate()
609if current_test_subprocess.returncode != 0:
610  num_test_failures += 1
611
612test_runner_log('Run test with target: %s' % 'ipv4-config-causing-fallback-to-tcp-inject-broken-nameservers.resolver-tests-version-4.grpctestingexp.')
613current_test_subprocess = subprocess.Popen([
614  args.test_bin_path,
615  '--target_name', 'ipv4-config-causing-fallback-to-tcp-inject-broken-nameservers.resolver-tests-version-4.grpctestingexp.',
616  '--do_ordered_address_comparison', 'False',
617  '--expected_addrs', '1.2.3.4:443,False',
618  '--expected_chosen_service_config', '',
619  '--expected_service_config_error', 'field:loadBalancingPolicy error:is not a string',
620  '--expected_lb_policy', '',
621  '--enable_srv_queries', 'True',
622  '--enable_txt_queries', 'True',
623  '--inject_broken_nameserver_list', 'True',
624  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
625  ] + args.extra_args.split(','))
626current_test_subprocess.communicate()
627if current_test_subprocess.returncode != 0:
628  num_test_failures += 1
629
630test_runner_log('Run test with target: %s' % 'load-balanced-name-with-dualstack-balancer.resolver-tests-version-4.grpctestingexp.')
631current_test_subprocess = subprocess.Popen([
632  args.test_bin_path,
633  '--target_name', 'load-balanced-name-with-dualstack-balancer.resolver-tests-version-4.grpctestingexp.',
634  '--do_ordered_address_comparison', 'True',
635  '--expected_addrs', '[::1]:1234,True;[2002::1111]:1234,True',
636  '--expected_chosen_service_config', '',
637  '--expected_service_config_error', '',
638  '--expected_lb_policy', '',
639  '--enable_srv_queries', 'True',
640  '--enable_txt_queries', 'True',
641  '--inject_broken_nameserver_list', 'False',
642  '--local_dns_server_address', '127.0.0.1:%d' % args.dns_server_port
643  ] + args.extra_args.split(','))
644current_test_subprocess.communicate()
645if current_test_subprocess.returncode != 0:
646  num_test_failures += 1
647
648test_runner_log('now kill DNS server')
649dns_server_subprocess.kill()
650dns_server_subprocess.wait()
651test_runner_log('%d tests failed.' % num_test_failures)
652sys.exit(num_test_failures)
653