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