@@ -17,29 +17,30 @@ load("@rules_pkg//:pkg.bzl", "pkg_tar")
1717load ("@repo_absolute_path//:build_root.bzl" , "BUILD_WORKSPACE_DIRECTORY" )
1818load ("@rules_oci//oci:defs.bzl" , "oci_image" , "oci_tarball" )
1919
20+ common_tags = [
21+ "docker" , # these tests depend on docker
22+ "exclusive" , # these tests should run independent of others
23+ "external" , # test has an external dependency; disable test caching
24+ ]
25+
2026def docker_compose_test (
2127 name ,
2228 docker_compose_file ,
2329 docker_compose_test_container ,
30+ pre_compose_up_script = "" ,
2431 local_image_targets = "" ,
2532 data = [],
2633 tags = [],
2734 size = "large" ,
2835 ** kwargs ):
29- tags = [
30- "external" , # test has an external dependency; disable test caching
31- ] + tags
32-
36+ tags = common_tags + tags
3337 data = data + [ docker_compose_file ]
38+ if len (pre_compose_up_script ):
39+ data = data + [ pre_compose_up_script ]
3440 native .sh_test (
3541 name = name ,
3642 srcs = ["@rules_docker_compose//docker_compose:docker_compose_test.sh" ],
37- env = {
38- "WORKSPACE_PATH" : BUILD_WORKSPACE_DIRECTORY ,
39- "DOCKER_COMPOSE_FILE" : "$(location " + docker_compose_file + ")" ,
40- "DOCKER_COMPOSE_TEST_CONTAINER" : docker_compose_test_container ,
41- "LOCAL_IMAGE_TARGETS" : local_image_targets .replace (":" , "/" ),
42- },
43+ env = _get_env (docker_compose_file , local_image_targets , docker_compose_test_container , pre_compose_up_script ),
4344 size = size ,
4445 tags = tags ,
4546 data = data ,
@@ -51,6 +52,7 @@ def junit_docker_compose_test(
5152 name ,
5253 docker_compose_file ,
5354 docker_compose_test_container ,
55+ pre_compose_up_script = "" ,
5456 local_image_targets = "" ,
5557 classpath_jars = [],
5658 test_image_base = None ,
@@ -60,86 +62,92 @@ def junit_docker_compose_test(
6062 tags = [],
6163 size = "large" ,
6264 ** kwargs ):
63- tags = [
64- "external" , # test has an external dependency; disable test caching
65- ] + tags
66-
65+ tags = common_tags + tags
6766 data = data + [ docker_compose_file ]
67+ if len (pre_compose_up_script ):
68+ data = data + [ pre_compose_up_script ]
69+
70+ if test_image_base == None :
71+ fail ("if you are definiing test_srcs, you need to provide a test_image_base" )
72+
73+ # building an uber jar with test srcs & all dependencies
74+ native .java_binary (
75+ name = name + "_uber_jar" ,
76+ srcs = test_srcs ,
77+ testonly = True ,
78+ deps = test_deps ,
79+ resources = test_deps ,
80+ main_class = "not_used" ,
81+ )
82+
83+ # uber jar contains test classes
84+ pkg_tar (
85+ name = name + "_uber_jar_tar" ,
86+ srcs = [name + "_uber_jar_deploy.jar" ],
87+ testonly = True ,
88+ )
89+
90+ # these are jars that need to be on the classpath for the junit tests to execute
91+ pkg_tar (
92+ name = name + "_required_classpath_jars_tar" ,
93+ srcs = classpath_jars ,
94+ testonly = True ,
95+ )
96+
97+ # this is what actually runs the junit jar for your test execution
98+ pkg_tar (
99+ name = name + "_test_container_entrypoint" ,
100+ srcs = ["@rules_docker_compose//docker_compose:test_container_entrypoint.sh" ],
101+ )
68102
69- # if there are srcs, build a test container that includes the tests
70- if len (test_srcs ):
71-
72- if test_image_base == None :
73- fail ("if you are definiing test_srcs, you need to provide a test_image_base" )
74-
75- # building an uber jar with test srcs & all dependencies
76- native .java_binary (
77- name = name + "_uber_jar" ,
78- srcs = test_srcs ,
79- testonly = True ,
80- deps = test_deps ,
81- main_class = "not_used" ,
82- )
83-
84- # uber jar contains test classes
85- pkg_tar (
86- name = name + "_uber_jar_tar" ,
87- srcs = [name + "_uber_jar" ],
88- testonly = True ,
89- )
90-
91- # these are jars that need to be on the classpath for the junit tests to execute
92- pkg_tar (
93- name = name + "_required_classpath_jars_tar" ,
94- srcs = classpath_jars ,
95- testonly = True ,
96- )
97-
98- # this is what actually runs the junit jar for your test execution
99- pkg_tar (
100- name = name + "_test_container_entrypoint" ,
101- srcs = ["@rules_docker_compose//docker_compose:test_container_entrypoint.sh" ],
102- )
103-
104- oci_image (
105- name = "java_image" ,
106- base = test_image_base ,
107- tars = [
108- name + "_uber_jar_tar" ,
109- name + "_required_classpath_jars_tar" ,
110- name + "_test_container_entrypoint" ,
111- ],
112- testonly = True ,
113- )
114-
115- oci_tarball (
116- name = docker_compose_test_container ,
117- image = ":java_image" ,
118- repo_tags = ["%s:%s" % (native .package_name (), docker_compose_test_container )],
119- testonly = True ,
120- )
121-
122- # this builds & installs the test image.
123- native .sh_binary (
124- name = name + "_integration_test_image_fixture" ,
125- srcs = [docker_compose_test_container ],
126- testonly = True ,
127- )
128-
129- data .append (name + "_integration_test_image_fixture" )
130- local_image_targets += "%s:%s" % (native .package_name (), docker_compose_test_container )
103+ oci_image (
104+ name = name .lower () + "_java_image" ,
105+ base = test_image_base ,
106+ tars = [
107+ name + "_uber_jar_tar" ,
108+ name + "_required_classpath_jars_tar" ,
109+ name + "_test_container_entrypoint" ,
110+ ],
111+ testonly = True ,
112+ )
131113
114+ oci_tarball (
115+ name = docker_compose_test_container ,
116+ image = name .lower () + "_java_image" ,
117+ repo_tags = ["%s:%s" % (native .package_name (), docker_compose_test_container )],
118+ testonly = True ,
119+ )
120+
121+ # this builds & installs the test image.
122+ native .sh_binary (
123+ name = name + "_integration_test_image_fixture" ,
124+ srcs = [docker_compose_test_container ],
125+ testonly = True ,
126+ )
127+
128+ data .append (name + "_integration_test_image_fixture" )
129+ if len (local_image_targets ):
130+ local_image_targets += ","
131+ local_image_targets += "%s:%s" % (native .package_name (), docker_compose_test_container )
132132 native .sh_test (
133133 name = name ,
134134 srcs = ["@rules_docker_compose//docker_compose:docker_compose_test.sh" ],
135- env = {
136- "WORKSPACE_PATH" : BUILD_WORKSPACE_DIRECTORY ,
137- "DOCKER_COMPOSE_FILE" : "$(location " + docker_compose_file + ")" ,
138- "DOCKER_COMPOSE_TEST_CONTAINER" : docker_compose_test_container ,
139- "LOCAL_IMAGE_TARGETS" : local_image_targets .replace (":" , "/" ),
140- },
135+ env = _get_env (docker_compose_file , local_image_targets , docker_compose_test_container , pre_compose_up_script ),
141136 size = size ,
142137 tags = tags ,
143138 data = data ,
144139 ** kwargs ,
145140 )
141+
142+
143+ def _get_env (docker_compose_file , local_image_targets , docker_compose_test_container , pre_compose_up_script ):
144+ env = {
145+ "WORKSPACE_PATH" : BUILD_WORKSPACE_DIRECTORY ,
146+ "DOCKER_COMPOSE_FILE" : "$(location " + docker_compose_file + ")" ,
147+ "LOCAL_IMAGE_TARGETS" : local_image_targets .replace (":" , "/" ),
148+ "DOCKER_COMPOSE_TEST_CONTAINER" : docker_compose_test_container ,
149+ }
150+
151+ if len (pre_compose_up_script ):
152+ env ["PRE_COMPOSE_UP_SCRIPT" ] = "$(location " + pre_compose_up_script + ")"
153+ return env
0 commit comments