resolver_component_tests_runner.py 31 KB

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