generate_tests.bzl 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. #!/usr/bin/env python2.7
  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. """Generates the appropriate build.json data for all the end2end tests."""
  16. load("//bazel:grpc_build_system.bzl", "grpc_cc_binary", "grpc_cc_library")
  17. POLLERS = ["epollex", "epoll1", "poll"]
  18. def _fixture_options(
  19. fullstack = True,
  20. includes_proxy = False,
  21. dns_resolver = True,
  22. name_resolution = True,
  23. secure = True,
  24. tracing = False,
  25. _platforms = ["windows", "linux", "mac", "posix"],
  26. is_inproc = False,
  27. is_1byte = False,
  28. is_http2 = True,
  29. supports_proxy_auth = False,
  30. supports_write_buffering = True,
  31. client_channel = True,
  32. supports_msvc = True,
  33. flaky_tests = []):
  34. return struct(
  35. fullstack = fullstack,
  36. includes_proxy = includes_proxy,
  37. dns_resolver = dns_resolver,
  38. name_resolution = name_resolution,
  39. secure = secure,
  40. tracing = tracing,
  41. is_inproc = is_inproc,
  42. is_1byte = is_1byte,
  43. is_http2 = is_http2,
  44. supports_proxy_auth = supports_proxy_auth,
  45. supports_write_buffering = supports_write_buffering,
  46. client_channel = client_channel,
  47. supports_msvc = supports_msvc,
  48. _platforms = _platforms,
  49. flaky_tests = flaky_tests,
  50. )
  51. # maps fixture name to whether it requires the security library
  52. END2END_FIXTURES = {
  53. "h2_compress": _fixture_options(),
  54. "h2_census": _fixture_options(),
  55. # TODO(juanlishen): This is disabled for now, but should be considered to re-enable once we have
  56. # decided how the load reporting service should be enabled.
  57. #'h2_load_reporting': _fixture_options(),
  58. "h2_fakesec": _fixture_options(),
  59. "h2_fd": _fixture_options(
  60. dns_resolver = False,
  61. fullstack = False,
  62. client_channel = False,
  63. _platforms = ["linux", "mac", "posix"],
  64. ),
  65. "h2_full": _fixture_options(),
  66. "h2_full+pipe": _fixture_options(_platforms = ["linux"]),
  67. "h2_full+trace": _fixture_options(tracing = True),
  68. "h2_http_proxy": _fixture_options(supports_proxy_auth = True),
  69. "h2_insecure": _fixture_options(secure = True),
  70. "h2_oauth2": _fixture_options(),
  71. "h2_proxy": _fixture_options(includes_proxy = True),
  72. "h2_sockpair_1byte": _fixture_options(
  73. fullstack = False,
  74. dns_resolver = False,
  75. client_channel = False,
  76. is_1byte = True,
  77. ),
  78. "h2_sockpair": _fixture_options(
  79. fullstack = False,
  80. dns_resolver = False,
  81. client_channel = False,
  82. ),
  83. "h2_sockpair+trace": _fixture_options(
  84. fullstack = False,
  85. dns_resolver = False,
  86. tracing = True,
  87. client_channel = False,
  88. ),
  89. "h2_ssl": _fixture_options(secure = True),
  90. "h2_ssl_cred_reload": _fixture_options(secure = True),
  91. "h2_tls": _fixture_options(secure = True),
  92. "h2_local_abstract_uds_percent_encoded": _fixture_options(
  93. secure = True,
  94. dns_resolver = False,
  95. _platforms = ["linux", "posix"],
  96. ),
  97. "h2_local_uds": _fixture_options(
  98. secure = True,
  99. dns_resolver = False,
  100. _platforms = ["linux", "mac", "posix"],
  101. ),
  102. "h2_local_uds_percent_encoded": _fixture_options(
  103. secure = True,
  104. dns_resolver = False,
  105. _platforms = ["linux", "mac", "posix"],
  106. ),
  107. "h2_local_ipv4": _fixture_options(
  108. secure = True,
  109. dns_resolver = False,
  110. _platforms = ["linux", "mac", "posix"],
  111. ),
  112. "h2_local_ipv6": _fixture_options(
  113. secure = True,
  114. dns_resolver = False,
  115. _platforms = ["linux", "mac", "posix"],
  116. ),
  117. "h2_ssl_proxy": _fixture_options(includes_proxy = True, secure = True),
  118. "h2_uds": _fixture_options(
  119. dns_resolver = False,
  120. _platforms = ["linux", "mac", "posix"],
  121. ),
  122. "inproc": _fixture_options(
  123. secure = True,
  124. fullstack = False,
  125. dns_resolver = False,
  126. name_resolution = False,
  127. is_inproc = True,
  128. is_http2 = False,
  129. supports_write_buffering = False,
  130. client_channel = False,
  131. ),
  132. }
  133. # maps fixture name to whether it requires the security library
  134. END2END_NOSEC_FIXTURES = {
  135. "h2_compress": _fixture_options(secure = False),
  136. "h2_census": _fixture_options(secure = False),
  137. # TODO(juanlishen): This is disabled for now, but should be considered to re-enable once we have
  138. # decided how the load reporting service should be enabled.
  139. #'h2_load_reporting': _fixture_options(),
  140. "h2_fakesec": _fixture_options(),
  141. "h2_fd": _fixture_options(
  142. dns_resolver = False,
  143. fullstack = False,
  144. client_channel = False,
  145. secure = False,
  146. _platforms = ["linux", "mac", "posix"],
  147. supports_msvc = False,
  148. ),
  149. "h2_full": _fixture_options(secure = False),
  150. "h2_full+pipe": _fixture_options(
  151. secure = False,
  152. _platforms = ["linux"],
  153. supports_msvc = False,
  154. ),
  155. "h2_full+trace": _fixture_options(secure = False, tracing = True, supports_msvc = False),
  156. "h2_http_proxy": _fixture_options(secure = False, supports_proxy_auth = True),
  157. "h2_proxy": _fixture_options(secure = False, includes_proxy = True),
  158. "h2_sockpair_1byte": _fixture_options(
  159. fullstack = False,
  160. dns_resolver = False,
  161. client_channel = False,
  162. secure = False,
  163. is_1byte = True,
  164. ),
  165. "h2_sockpair": _fixture_options(
  166. fullstack = False,
  167. dns_resolver = False,
  168. client_channel = False,
  169. secure = False,
  170. ),
  171. "h2_sockpair+trace": _fixture_options(
  172. fullstack = False,
  173. dns_resolver = False,
  174. tracing = True,
  175. secure = False,
  176. client_channel = False,
  177. ),
  178. "h2_ssl": _fixture_options(secure = False),
  179. "h2_ssl_cred_reload": _fixture_options(secure = False),
  180. "h2_ssl_proxy": _fixture_options(includes_proxy = True, secure = False),
  181. "h2_uds": _fixture_options(
  182. dns_resolver = False,
  183. _platforms = ["linux", "mac", "posix"],
  184. secure = False,
  185. supports_msvc = False,
  186. ),
  187. }
  188. def _test_options(
  189. needs_fullstack = False,
  190. needs_dns = False,
  191. needs_names = False,
  192. proxyable = True,
  193. secure = False,
  194. traceable = False,
  195. exclude_inproc = False,
  196. exclude_1byte = False,
  197. needs_http2 = False,
  198. needs_proxy_auth = False,
  199. needs_write_buffering = False,
  200. needs_client_channel = False,
  201. short_name = None,
  202. exclude_pollers = []):
  203. return struct(
  204. needs_fullstack = needs_fullstack,
  205. needs_dns = needs_dns,
  206. needs_names = needs_names,
  207. proxyable = proxyable,
  208. secure = secure,
  209. traceable = traceable,
  210. exclude_inproc = exclude_inproc,
  211. exclude_1byte = exclude_1byte,
  212. needs_http2 = needs_http2,
  213. needs_proxy_auth = needs_proxy_auth,
  214. needs_write_buffering = needs_write_buffering,
  215. needs_client_channel = needs_client_channel,
  216. short_name = short_name,
  217. exclude_pollers = exclude_pollers,
  218. )
  219. # maps test names to options
  220. END2END_TESTS = {
  221. "bad_hostname": _test_options(needs_names = True),
  222. "bad_ping": _test_options(needs_fullstack = True, proxyable = False),
  223. "binary_metadata": _test_options(),
  224. "resource_quota_server": _test_options(
  225. proxyable = False,
  226. # TODO(b/151212019): Test case known to be flaky under epoll1.
  227. exclude_pollers = ["epoll1"],
  228. exclude_1byte = True,
  229. ),
  230. "call_creds": _test_options(secure = True),
  231. "call_host_override": _test_options(
  232. needs_fullstack = True,
  233. needs_dns = True,
  234. needs_names = True,
  235. ),
  236. "cancel_after_accept": _test_options(),
  237. "cancel_after_client_done": _test_options(),
  238. "cancel_after_invoke": _test_options(),
  239. "cancel_after_round_trip": _test_options(),
  240. "cancel_before_invoke": _test_options(),
  241. "cancel_in_a_vacuum": _test_options(),
  242. "cancel_with_status": _test_options(),
  243. "client_streaming": _test_options(),
  244. "compressed_payload": _test_options(proxyable = False, exclude_inproc = True),
  245. "connectivity": _test_options(
  246. needs_fullstack = True,
  247. needs_names = True,
  248. proxyable = False,
  249. ),
  250. "channelz": _test_options(),
  251. "default_host": _test_options(
  252. needs_fullstack = True,
  253. needs_dns = True,
  254. needs_names = True,
  255. ),
  256. "disappearing_server": _test_options(needs_fullstack = True, needs_names = True),
  257. "empty_batch": _test_options(),
  258. "filter_causes_close": _test_options(),
  259. "filter_init_fails": _test_options(),
  260. "filter_context": _test_options(),
  261. "graceful_server_shutdown": _test_options(exclude_inproc = True),
  262. "grpc_authz": _test_options(secure = True),
  263. "hpack_size": _test_options(
  264. proxyable = False,
  265. traceable = False,
  266. exclude_inproc = True,
  267. ),
  268. "high_initial_seqno": _test_options(),
  269. "idempotent_request": _test_options(),
  270. "invoke_large_request": _test_options(exclude_1byte = True),
  271. "keepalive_timeout": _test_options(proxyable = False, needs_http2 = True),
  272. "large_metadata": _test_options(exclude_1byte = True),
  273. "max_concurrent_streams": _test_options(
  274. proxyable = False,
  275. exclude_inproc = True,
  276. ),
  277. "max_connection_age": _test_options(exclude_inproc = True),
  278. "max_connection_idle": _test_options(needs_fullstack = True, proxyable = False),
  279. "max_message_length": _test_options(),
  280. "negative_deadline": _test_options(),
  281. "no_error_on_hotpath": _test_options(proxyable = False),
  282. "no_logging": _test_options(traceable = False),
  283. "no_op": _test_options(),
  284. "payload": _test_options(exclude_1byte = True),
  285. # TODO(juanlishen): This is disabled for now because it depends on some generated functions in
  286. # end2end_tests.cc, which are not generated because they would depend on OpenCensus while
  287. # OpenCensus can only be built via Bazel so far.
  288. # 'load_reporting_hook': _test_options(),
  289. "ping_pong_streaming": _test_options(),
  290. "ping": _test_options(needs_fullstack = True, proxyable = False),
  291. "proxy_auth": _test_options(needs_proxy_auth = True),
  292. "registered_call": _test_options(),
  293. "request_with_flags": _test_options(proxyable = False),
  294. "request_with_payload": _test_options(),
  295. "retry": _test_options(needs_client_channel = True),
  296. "retry_cancellation": _test_options(needs_client_channel = True),
  297. "retry_cancel_during_delay": _test_options(needs_client_channel = True),
  298. "retry_cancel_with_multiple_send_batches": _test_options(
  299. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  300. # See b/151617965
  301. short_name = "retry_cancel3",
  302. needs_client_channel = True,
  303. ),
  304. "retry_cancel_after_first_attempt_starts": _test_options(
  305. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  306. # See b/151617965
  307. short_name = "retry_cancel4",
  308. needs_client_channel = True,
  309. ),
  310. "retry_disabled": _test_options(needs_client_channel = True),
  311. "retry_exceeds_buffer_size_in_delay": _test_options(needs_client_channel = True),
  312. "retry_exceeds_buffer_size_in_initial_batch": _test_options(
  313. needs_client_channel = True,
  314. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  315. # See b/151617965
  316. short_name = "retry_exceeds_buffer_size_in_init",
  317. ),
  318. "retry_exceeds_buffer_size_in_subsequent_batch": _test_options(
  319. needs_client_channel = True,
  320. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  321. # See b/151617965
  322. short_name = "retry_exceeds_buffer_size_in_subseq",
  323. ),
  324. "retry_lb_drop": _test_options(needs_client_channel = True),
  325. "retry_lb_fail": _test_options(needs_client_channel = True),
  326. "retry_non_retriable_status": _test_options(needs_client_channel = True),
  327. "retry_non_retriable_status_before_recv_trailing_metadata_started": _test_options(
  328. needs_client_channel = True,
  329. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  330. # See b/151617965
  331. short_name = "retry_non_retriable_status2",
  332. ),
  333. "retry_per_attempt_recv_timeout": _test_options(needs_client_channel = True),
  334. "retry_per_attempt_recv_timeout_on_last_attempt": _test_options(
  335. needs_client_channel = True,
  336. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  337. # See b/151617965
  338. short_name = "retry_per_attempt_recv_timeout2",
  339. ),
  340. "retry_recv_initial_metadata": _test_options(needs_client_channel = True),
  341. "retry_recv_message": _test_options(needs_client_channel = True),
  342. "retry_recv_message_replay": _test_options(needs_client_channel = True),
  343. "retry_recv_trailing_metadata_error": _test_options(needs_client_channel = True),
  344. "retry_send_initial_metadata_refs": _test_options(needs_client_channel = True),
  345. "retry_send_op_fails": _test_options(needs_client_channel = True),
  346. "retry_server_pushback_delay": _test_options(needs_client_channel = True),
  347. "retry_server_pushback_disabled": _test_options(needs_client_channel = True),
  348. "retry_streaming": _test_options(needs_client_channel = True),
  349. "retry_streaming_after_commit": _test_options(needs_client_channel = True),
  350. "retry_streaming_succeeds_before_replay_finished": _test_options(
  351. needs_client_channel = True,
  352. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  353. # See b/151617965
  354. short_name = "retry_streaming2",
  355. ),
  356. "retry_throttled": _test_options(needs_client_channel = True),
  357. "retry_too_many_attempts": _test_options(needs_client_channel = True),
  358. "retry_transparent_goaway": _test_options(needs_client_channel = True),
  359. "retry_transparent_not_sent_on_wire": _test_options(
  360. needs_client_channel = True,
  361. ),
  362. "retry_transparent_max_concurrent_streams": _test_options(
  363. needs_client_channel = True,
  364. proxyable = False,
  365. # TODO(jtattermusch): too long bazel test name makes the test flaky on Windows RBE
  366. # See b/151617965
  367. short_name = "retry_transparent_mcs",
  368. ),
  369. "retry_unref_before_finish": _test_options(needs_client_channel = True),
  370. "retry_unref_before_recv": _test_options(needs_client_channel = True),
  371. "server_finishes_request": _test_options(),
  372. "server_streaming": _test_options(needs_http2 = True),
  373. "shutdown_finishes_calls": _test_options(),
  374. "shutdown_finishes_tags": _test_options(),
  375. "simple_cacheable_request": _test_options(),
  376. "simple_delayed_request": _test_options(needs_fullstack = True),
  377. "simple_metadata": _test_options(),
  378. "simple_request": _test_options(),
  379. "streaming_error_response": _test_options(),
  380. "trailing_metadata": _test_options(),
  381. "authority_not_supported": _test_options(),
  382. "filter_latency": _test_options(),
  383. "filter_status_code": _test_options(),
  384. "write_buffering": _test_options(needs_write_buffering = True),
  385. "write_buffering_at_end": _test_options(needs_write_buffering = True),
  386. }
  387. def _compatible(fopt, topt):
  388. if topt.needs_fullstack:
  389. if not fopt.fullstack:
  390. return False
  391. if topt.needs_dns:
  392. if not fopt.dns_resolver:
  393. return False
  394. if topt.needs_names:
  395. if not fopt.name_resolution:
  396. return False
  397. if not topt.proxyable:
  398. if fopt.includes_proxy:
  399. return False
  400. if not topt.traceable:
  401. if fopt.tracing:
  402. return False
  403. if topt.exclude_inproc:
  404. if fopt.is_inproc:
  405. return False
  406. if topt.exclude_1byte:
  407. if fopt.is_1byte:
  408. return False
  409. if topt.needs_http2:
  410. if not fopt.is_http2:
  411. return False
  412. if topt.needs_proxy_auth:
  413. if not fopt.supports_proxy_auth:
  414. return False
  415. if topt.needs_write_buffering:
  416. if not fopt.supports_write_buffering:
  417. return False
  418. if topt.needs_client_channel:
  419. if not fopt.client_channel:
  420. return False
  421. return True
  422. def _platform_support_tags(fopt):
  423. result = []
  424. if not "windows" in fopt._platforms:
  425. result.append("no_windows")
  426. if not "mac" in fopt._platforms:
  427. result.append("no_mac")
  428. if not "linux" in fopt._platforms:
  429. result.append("no_linux")
  430. return result
  431. # buildifier: disable=unnamed-macro
  432. def grpc_end2end_tests():
  433. """Instantiates the gRPC end2end tests."""
  434. grpc_cc_library(
  435. name = "end2end_tests",
  436. srcs = ["end2end_tests.cc", "end2end_test_utils.cc"] +
  437. ["tests/%s.cc" % t for t in sorted(END2END_TESTS.keys())],
  438. hdrs = [
  439. "tests/cancel_test_helpers.h",
  440. "end2end_tests.h",
  441. ],
  442. language = "C++",
  443. testonly = 1,
  444. deps = [
  445. ":cq_verifier",
  446. ":ssl_test_data",
  447. ":http_proxy",
  448. ":proxy",
  449. ":local_util",
  450. "//test/core/util:test_lb_policies",
  451. "//:grpc_authorization_provider",
  452. "//test/core/compression:args_utils",
  453. ],
  454. )
  455. for f, fopt in END2END_FIXTURES.items():
  456. grpc_cc_binary(
  457. name = "%s_test" % f,
  458. srcs = ["fixtures/%s.cc" % f],
  459. language = "C++",
  460. testonly = 1,
  461. data = [
  462. "//src/core/tsi/test_creds:ca.pem",
  463. "//src/core/tsi/test_creds:server1.key",
  464. "//src/core/tsi/test_creds:server1.pem",
  465. ],
  466. deps = [
  467. ":end2end_tests",
  468. "//test/core/util:grpc_test_util",
  469. "//:grpc",
  470. "//:gpr",
  471. "//test/core/compression:args_utils",
  472. ],
  473. tags = _platform_support_tags(fopt),
  474. )
  475. for t, topt in END2END_TESTS.items():
  476. #print(_compatible(fopt, topt), f, t, fopt, topt)
  477. if not _compatible(fopt, topt):
  478. continue
  479. test_short_name = str(t) if not topt.short_name else topt.short_name
  480. native.sh_test(
  481. name = "%s_test@%s" % (f, test_short_name),
  482. data = [":%s_test" % f],
  483. srcs = ["end2end_test.sh"],
  484. args = [
  485. "$(location %s_test)" % f,
  486. t,
  487. ],
  488. tags = ["no_linux"] + _platform_support_tags(fopt),
  489. flaky = t in fopt.flaky_tests,
  490. )
  491. for poller in POLLERS:
  492. if poller in topt.exclude_pollers:
  493. continue
  494. native.sh_test(
  495. name = "%s_test@%s@poller=%s" % (f, test_short_name, poller),
  496. data = [":%s_test" % f],
  497. srcs = ["end2end_test.sh"],
  498. args = [
  499. "$(location %s_test)" % f,
  500. t,
  501. poller,
  502. ],
  503. tags = ["no_mac", "no_windows"],
  504. flaky = t in fopt.flaky_tests,
  505. )
  506. # buildifier: disable=unnamed-macro
  507. def grpc_end2end_nosec_tests():
  508. """Instantiates the gRPC end2end no security tests"""
  509. grpc_cc_library(
  510. name = "end2end_nosec_tests",
  511. srcs = ["end2end_nosec_tests.cc", "end2end_test_utils.cc"] + [
  512. "tests/%s.cc" % t
  513. for t in sorted(END2END_TESTS.keys())
  514. if not END2END_TESTS[t].secure
  515. ],
  516. hdrs = [
  517. "tests/cancel_test_helpers.h",
  518. "end2end_tests.h",
  519. ],
  520. language = "C++",
  521. testonly = 1,
  522. deps = [
  523. ":cq_verifier",
  524. ":ssl_test_data",
  525. ":http_proxy",
  526. ":proxy",
  527. ":local_util",
  528. "//test/core/util:test_lb_policies",
  529. "//test/core/compression:args_utils",
  530. ],
  531. )
  532. for f, fopt in END2END_NOSEC_FIXTURES.items():
  533. if fopt.secure:
  534. continue
  535. grpc_cc_binary(
  536. name = "%s_nosec_test" % f,
  537. srcs = ["fixtures/%s.cc" % f],
  538. language = "C++",
  539. testonly = 1,
  540. data = [
  541. "//src/core/tsi/test_creds:ca.pem",
  542. "//src/core/tsi/test_creds:server1.key",
  543. "//src/core/tsi/test_creds:server1.pem",
  544. ],
  545. deps = [
  546. ":end2end_nosec_tests",
  547. "//test/core/util:grpc_test_util_unsecure",
  548. "//:grpc_unsecure",
  549. "//:gpr",
  550. "//test/core/compression:args_utils",
  551. ],
  552. tags = _platform_support_tags(fopt),
  553. )
  554. for t, topt in END2END_TESTS.items():
  555. #print(_compatible(fopt, topt), f, t, fopt, topt)
  556. if not _compatible(fopt, topt):
  557. continue
  558. if topt.secure:
  559. continue
  560. test_short_name = str(t) if not topt.short_name else topt.short_name
  561. native.sh_test(
  562. name = "%s_nosec_test@%s" % (f, test_short_name),
  563. data = [":%s_nosec_test" % f],
  564. srcs = ["end2end_test.sh"],
  565. args = [
  566. "$(location %s_nosec_test)" % f,
  567. t,
  568. ],
  569. tags = ["no_linux"] + _platform_support_tags(fopt),
  570. flaky = t in fopt.flaky_tests,
  571. )
  572. for poller in POLLERS:
  573. if poller in topt.exclude_pollers:
  574. continue
  575. native.sh_test(
  576. name = "%s_nosec_test@%s@poller=%s" %
  577. (f, test_short_name, poller),
  578. data = [":%s_nosec_test" % f],
  579. srcs = ["end2end_test.sh"],
  580. args = [
  581. "$(location %s_nosec_test)" % f,
  582. t,
  583. poller,
  584. ],
  585. tags = ["no_mac", "no_windows"],
  586. flaky = t in fopt.flaky_tests,
  587. )