Skip to content

Commit 6e9b4a5

Browse files
authored
[ggj][bazel][goldens] fix: refactor and fix bazel golden_update rules (#363)
* fix: use imperative bazel rule names * fix: refactor and fix bazel golden_update rules
1 parent d59d812 commit 6e9b4a5

6 files changed

Lines changed: 138 additions & 168 deletions

File tree

BUILD.bazel

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -46,50 +46,6 @@ java_binary(
4646
],
4747
)
4848

49-
# JUnit runner binary, this is used to generate test output for updating goldens files.
50-
# Run `bazel run testTarget_update` will trigger this runner.
51-
java_binary(
52-
name = "golden_update_junit_runner",
53-
srcs = [
54-
"//src/test/java/com/google/api/generator/gapic/dummy:dummy_files",
55-
"//src/test/java/com/google/api/generator/engine:engine_files",
56-
"//src/test/java/com/google/api/generator/gapic/composer:composer_files",
57-
"//src/test/java/com/google/api/generator/test/framework:framework_files",
58-
],
59-
data = [
60-
"//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files",
61-
"//src/test/java/com/google/api/generator/engine/goldens:goldens_files",
62-
"//src/test/java/com/google/api/generator/gapic/composer/goldens:goldens_files",
63-
"//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files",
64-
"//src/test/java/com/google/api/generator/gapic/testdata:service_config_files",
65-
],
66-
jvm_flags = ["-Xmx512m"],
67-
main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner",
68-
visibility = ["//visibility:public"],
69-
deps = [
70-
"//src/main/java/com/google/api/generator/engine/ast",
71-
"//src/main/java/com/google/api/generator/engine/writer",
72-
"//src/test/java/com/google/api/generator/test/framework",
73-
"//src/main/java/com/google/api/generator/engine/lexicon",
74-
"//src/main/java/com/google/api/generator/gapic/composer",
75-
"//src/main/java/com/google/api/generator/gapic/model",
76-
"//src/main/java/com/google/api/generator/gapic/protoparser",
77-
"//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto",
78-
"//src/test/java/com/google/api/generator/gapic/testdata:testgapic_java_proto",
79-
"//src/test/java/com/google/api/generator/gapic/composer:common_resources_java_proto",
80-
"@com_google_guava_guava//:com_google_guava_guava",
81-
"@com_google_api_gax_java//gax",
82-
"@com_google_googleapis//google/logging/v2:logging_java_proto",
83-
"@com_google_googleapis//google/pubsub/v1:pubsub_java_proto",
84-
"@com_google_googleapis//google/rpc:rpc_java_proto",
85-
"@com_google_protobuf//:protobuf_java",
86-
"//:service_config_java_proto",
87-
"@com_google_truth_truth//jar",
88-
"@io_github_java_diff_utils//jar",
89-
"@junit_junit//jar",
90-
"@org_hamcrest_hamcrest_core//jar",
91-
],
92-
)
9349

9450
# google-java-format
9551
java_binary(
Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,84 @@
1-
def _junit_output_impl(ctx):
2-
test_class_name = ctx.attr.test_class_name
1+
def _overwrite_golden_impl(ctx):
2+
test_class = ctx.attr.test_class
33
inputs = ctx.files.srcs
4-
output = ctx.outputs.output
4+
goldens_output_zip = ctx.outputs.goldens_output_zip
55
test_runner = ctx.executable.test_runner
66

7-
command = """
8-
mkdir local_tmp
9-
TEST_OUTPUT_HOME="$(pwd)/local_tmp" \
10-
{test_runner_path} $@
11-
cd local_tmp
7+
# Generate the goldens from tests.
8+
generate_goldens_script = """
9+
mkdir local_tmp
10+
TEST_OUTPUT_HOME="$(pwd)/local_tmp" {test_runner_path} $@
11+
cd local_tmp
1212
# Zip all files under local_tmp with all nested parent folders except for local_tmp itself.
1313
# Zip files because there are cases that one Junit test can produce multiple goldens.
14-
zip -r ../{output} .
14+
zip -r ../{goldens_output_zip} .
1515
""".format(
1616
test_runner_path = test_runner.path,
17-
output=output.path,
17+
goldens_output_zip = goldens_output_zip.path,
1818
)
1919

2020
ctx.actions.run_shell(
2121
inputs = inputs,
22-
outputs = [output],
23-
arguments = [test_class_name],
22+
outputs = [goldens_output_zip],
23+
arguments = [test_class],
2424
tools = [test_runner],
25-
command = command,
25+
command = generate_goldens_script,
2626
)
2727

28-
junit_output_zip = rule(
29-
attrs = {
30-
"test_class_name": attr.string(mandatory=True),
31-
"srcs": attr.label_list(
32-
allow_files = True,
33-
mandatory = True,
34-
),
35-
"test_runner": attr.label(
36-
mandatory = True,
37-
executable = True,
38-
cfg = "host",
39-
),
40-
},
41-
outputs = {
42-
"output": "%{name}.zip",
43-
},
44-
implementation = _junit_output_impl,
45-
)
46-
47-
def _overwrite_golden_impl(ctx):
48-
script_content = """
28+
# Overwrite the goldens.
29+
golden_update_script_content = """
4930
#!/bin/bash
5031
cd ${{BUILD_WORKSPACE_DIRECTORY}}
51-
unzip -ao {unit_test_results} -d src/test/java
32+
unzip -ao {goldens_output_zip} -d src/test/java
5233
""".format(
53-
unit_test_results = ctx.file.unit_test_results.path,
34+
goldens_output_zip = goldens_output_zip.path,
5435
)
5536
ctx.actions.write(
56-
output = ctx.outputs.bin,
57-
content = script_content,
37+
output = ctx.outputs.golden_update_script,
38+
content = golden_update_script_content,
5839
is_executable = True,
5940
)
60-
return [DefaultInfo(executable = ctx.outputs.bin)]
61-
41+
return [DefaultInfo(executable = ctx.outputs.golden_update_script)]
6242

6343
overwrite_golden = rule(
6444
attrs = {
65-
"unit_test_results": attr.label(
45+
"test_class": attr.string(mandatory = True),
46+
"srcs": attr.label_list(
47+
allow_files = True,
6648
mandatory = True,
67-
allow_single_file = True),
49+
),
50+
"test_runner": attr.label(
51+
mandatory = True,
52+
executable = True,
53+
cfg = "host",
54+
),
6855
},
6956
outputs = {
70-
"bin": "%{name}.sh",
57+
"goldens_output_zip": "%{name}.zip",
58+
"golden_update_script": "%{name}.sh",
7159
},
7260
executable = True,
7361
implementation = _overwrite_golden_impl,
7462
)
7563

76-
def golden_update(name, test_class_name, srcs):
77-
junit_output_name = "%s_output" % name
78-
junit_output_zip(
79-
name = junit_output_name,
80-
test_class_name = test_class_name,
81-
test_runner = "//:golden_update_junit_runner",
64+
def golden_update(
65+
name,
66+
srcs,
67+
test_class,
68+
data = [],
69+
deps = []):
70+
golden_junit_runner_name = "%s_junit_runner" % name
71+
native.java_binary(
72+
name = golden_junit_runner_name,
8273
srcs = srcs,
74+
data = data,
75+
main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner",
76+
deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"] + deps,
8377
)
78+
8479
overwrite_golden(
8580
name = name,
86-
unit_test_results = ":%s" % junit_output_name
81+
test_class = test_class,
82+
test_runner = ":%s" % golden_junit_runner_name,
83+
srcs = srcs + data,
8784
)

src/test/java/com/google/api/generator/engine/BUILD.bazel

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,30 @@ TESTS = [
1515
"JavaCodeGeneratorTest",
1616
]
1717

18+
TEST_DEPS = [
19+
"//src/main/java/com/google/api/generator/engine/ast",
20+
"//src/main/java/com/google/api/generator/engine/writer",
21+
"//src/test/java/com/google/api/generator/test/framework:asserts",
22+
"//src/test/java/com/google/api/generator/test/framework:utils",
23+
"@junit_junit//jar",
24+
]
25+
1826
[java_test(
1927
name = test_name,
2028
srcs = ["{0}.java".format(test_name)],
2129
data = ["//src/test/java/com/google/api/generator/engine/goldens:goldens_files"],
2230
test_class = "com.google.api.generator.engine.{0}".format(test_name),
23-
deps = [
24-
"//src/main/java/com/google/api/generator/engine/ast",
25-
"//src/main/java/com/google/api/generator/engine/writer",
26-
"//src/test/java/com/google/api/generator/test/framework",
27-
"@junit_junit//jar",
28-
],
31+
deps = TEST_DEPS,
2932
) for test_name in TESTS]
3033

3134
TEST_CLASS_NAME = "com.google.api.generator.engine.JavaCodeGeneratorTest"
3235

3336
# Run `bazel run src/test/java/com/google/api/generator/engine:JavaCodeGeneratorTest_update`
3437
# to update goldens as expected generated code.
35-
golden_update(
36-
name = "JavaCodeGeneratorTest_update",
37-
srcs = [
38-
":engine_files",
39-
],
40-
test_class_name = TEST_CLASS_NAME,
41-
)
38+
[golden_update(
39+
name = "{0}_update".format(test_name),
40+
srcs = ["{0}.java".format(test_name)],
41+
data = ["//src/test/java/com/google/api/generator/engine/goldens:goldens_files"],
42+
test_class = "com.google.api.generator.engine.{0}".format(test_name),
43+
deps = TEST_DEPS,
44+
) for test_name in TESTS]

src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,47 @@ load("//:rules_bazel/java/java_diff_test.bzl", "golden_update")
22

33
package(default_visibility = ["//visibility:public"])
44

5-
TESTS = [
5+
UPDATE_GOLDENS_TESTS = [
66
"BatchingDescriptorComposerTest",
77
"ComposerTest",
8-
"DefaultValueComposerTest",
98
"GrpcServiceCallableFactoryClassComposerTest",
109
"GrpcServiceStubClassComposerTest",
1110
"MockServiceClassComposerTest",
1211
"MockServiceImplClassComposerTest",
1312
"ResourceNameHelperClassComposerTest",
13+
"ServiceSettingsClassComposerTest",
14+
"ServiceStubSettingsClassComposerTest",
15+
"ServiceStubClassComposerTest",
16+
]
17+
18+
TESTS = UPDATE_GOLDENS_TESTS + [
19+
"DefaultValueComposerTest",
1420
"ResourceNameTokenizerTest",
1521
"RetrySettingsComposerTest",
1622
"ServiceClientClassComposerTest",
1723
"ServiceClientTestClassComposerTest",
18-
"ServiceSettingsClassComposerTest",
19-
"ServiceStubSettingsClassComposerTest",
20-
"ServiceStubClassComposerTest",
2124
]
2225

23-
UPDATE_GOLDENS_TESTS = [
24-
"BatchingDescriptorComposerTest",
25-
"ComposerTest",
26-
"GrpcServiceCallableFactoryClassComposerTest",
27-
"GrpcServiceStubClassComposerTest",
28-
"MockServiceClassComposerTest",
29-
"MockServiceImplClassComposerTest",
30-
"ResourceNameHelperClassComposerTest",
31-
"ServiceSettingsClassComposerTest",
32-
"ServiceStubSettingsClassComposerTest",
33-
"ServiceStubClassComposerTest",
26+
TEST_DEPS = [
27+
":common_resources_java_proto",
28+
"//:service_config_java_proto",
29+
"//src/main/java/com/google/api/generator/engine/ast",
30+
"//src/main/java/com/google/api/generator/engine/writer",
31+
"//src/main/java/com/google/api/generator/gapic/composer",
32+
"//src/test/java/com/google/api/generator/test/framework:asserts",
33+
"//src/test/java/com/google/api/generator/test/framework:utils",
34+
"//src/main/java/com/google/api/generator/gapic/model",
35+
"//src/main/java/com/google/api/generator/gapic/protoparser",
36+
"//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto",
37+
"//src/test/java/com/google/api/generator/gapic/testdata:testgapic_java_proto",
38+
"@com_google_api_gax_java//gax",
39+
"@com_google_googleapis//google/logging/v2:logging_java_proto",
40+
"@com_google_googleapis//google/pubsub/v1:pubsub_java_proto",
41+
"@com_google_googleapis//google/rpc:rpc_java_proto",
42+
"@com_google_guava_guava",
43+
"@com_google_protobuf//:protobuf_java",
44+
"@com_google_truth_truth//jar",
45+
"@junit_junit//jar",
3446
]
3547

3648
filegroup(
@@ -55,7 +67,7 @@ java_proto_library(
5567
[java_test(
5668
name = test_name,
5769
srcs = [
58-
"{0}.java".format(test_name),
70+
"{0}.java".format(test_name),
5971
"ComposerConstants.java",
6072
],
6173
data = [
@@ -64,40 +76,25 @@ java_proto_library(
6476
"//src/test/java/com/google/api/generator/gapic/testdata:service_config_files",
6577
],
6678
test_class = "com.google.api.generator.gapic.composer.{0}".format(test_name),
67-
deps = [
68-
":common_resources_java_proto",
69-
"//:service_config_java_proto",
70-
"//src/main/java/com/google/api/generator/engine/ast",
71-
"//src/main/java/com/google/api/generator/engine/writer",
72-
"//src/main/java/com/google/api/generator/gapic/composer",
73-
"//src/test/java/com/google/api/generator/test/framework",
74-
"//src/main/java/com/google/api/generator/gapic/model",
75-
"//src/main/java/com/google/api/generator/gapic/protoparser",
76-
"//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto",
77-
"//src/test/java/com/google/api/generator/gapic/testdata:testgapic_java_proto",
78-
"@com_google_api_gax_java//gax",
79-
"@com_google_googleapis//google/logging/v2:logging_java_proto",
80-
"@com_google_googleapis//google/pubsub/v1:pubsub_java_proto",
81-
"@com_google_googleapis//google/rpc:rpc_java_proto",
82-
"@com_google_protobuf//:protobuf_java",
83-
"@com_google_truth_truth//jar",
84-
"@junit_junit//jar",
85-
],
79+
deps = TEST_DEPS,
8680
) for test_name in TESTS]
8781

88-
89-
9082
TEST_CLASS_DIR = "com.google.api.generator.gapic.composer."
9183
# Run `bazel run src/test/java/com/google/api/generator/gapic/composer:testTargetName_update`
9284
# to update goldens as expected generated code.
9385
# `ServiceClient*` tests are not supported now since they are still in active development.
9486

9587
[golden_update(
96-
name = test_name + "_update",
88+
name = "{0}_update".format(test_name),
9789
srcs = [
98-
":composer_files",
90+
"{0}.java".format(test_name),
91+
"ComposerConstants.java",
92+
],
93+
data = [
94+
"//src/test/java/com/google/api/generator/gapic/composer/goldens:goldens_files",
9995
"//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files",
10096
"//src/test/java/com/google/api/generator/gapic/testdata:service_config_files",
10197
],
102-
test_class_name = TEST_CLASS_DIR + test_name,
103-
) for test_name in UPDATE_GOLDENS_TESTS]
98+
test_class = "com.google.api.generator.gapic.composer.{0}".format(test_name),
99+
deps = TEST_DEPS,
100+
) for test_name in UPDATE_GOLDENS_TESTS]

0 commit comments

Comments
 (0)