Skip to content

Commit f920e80

Browse files
committed
Rewrite test matrix generator to correctly use executables
1 parent 4222862 commit f920e80

File tree

2 files changed

+25
-56
lines changed

2 files changed

+25
-56
lines changed

example/routeguide/BUILD.bazel

-5
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,5 @@ routeguide_test_matrix(
3434
tagmap = {
3535
# Don't sandbox any csharp test and set to manual
3636
"csharp": ["no-sandbox", "manual"],
37-
38-
# Ruby clients and servers don't run due to a problem with their
39-
# launcher script being run outside the original package. Make them
40-
# manual only
41-
"ruby": ["manual"],
4237
},
4338
)
+25-51
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,6 @@
11
def _routeguide_test_impl(ctx):
2-
server = None
3-
for f in ctx.files.server:
4-
if f.basename == "server.bash" or f.basename == "server" or f.basename == "server_deploy.jar":
5-
server = f
6-
7-
if not server:
8-
fail("Failed to identify server entrypoint file in %r" % ctx.files.server)
9-
10-
server_entrypoint = server.short_path
11-
if server.extension == "jar":
12-
server_entrypoint = "java -jar %s" % server.short_path
13-
14-
client = None
15-
for f in ctx.files.client:
16-
if f.basename == "client.bash" or f.basename == "client" or f.basename == "client_deploy.jar":
17-
client = f
18-
19-
if not client:
20-
fail("Failed to identify client entrypoint file in %r" % ctx.files.client)
21-
22-
client_entrypoint = client.short_path
23-
if client.extension == "jar":
24-
client_entrypoint = "java -jar %s" % client.short_path
25-
26-
ctx.actions.write(ctx.outputs.executable, """
27-
set -x # Print commands
2+
# Build test execution script
3+
ctx.actions.write(ctx.outputs.executable, """set -x # Print commands
284
set -e # Fail on error
295
306
export DATABASE_FILE={database_file}
@@ -41,48 +17,44 @@ sleep 2
4117
# Print completion for log
4218
echo '---- DONE ----'
4319
""".format(
44-
client = client_entrypoint,
45-
server = server_entrypoint,
20+
client = ctx.executable.client.short_path,
21+
server = ctx.executable.server.short_path,
4622
database_file = ctx.file.database.short_path,
4723
server_port = ctx.attr.port,
4824
), is_executable = True)
4925

50-
files = ctx.files.client + ctx.files.server + ctx.files.data + [ctx.file.database]
26+
# Build runfiles and default provider
27+
runfiles = ctx.runfiles(
28+
files = [ctx.executable.client, ctx.executable.server, ctx.file.database],
29+
)
30+
runfiles = runfiles.merge(ctx.attr.client[DefaultInfo].default_runfiles)
31+
runfiles = runfiles.merge(ctx.attr.server[DefaultInfo].default_runfiles)
5132

5233
return [DefaultInfo(
53-
runfiles = ctx.runfiles(
54-
files = files,
55-
collect_data = True,
56-
collect_default = True,
57-
),
34+
runfiles = runfiles,
5835
)]
5936

37+
6038
routeguide_test = rule(
6139
implementation = _routeguide_test_impl,
6240
attrs = {
6341
"client": attr.label(
6442
doc = "Client binary",
6543
executable = True,
6644
mandatory = True,
67-
allow_files = True,
6845
cfg = "target",
6946
),
7047
"server": attr.label(
7148
doc = "Server binary",
7249
executable = True,
7350
mandatory = True,
74-
allow_files = True,
7551
cfg = "target",
7652
),
7753
"database": attr.label(
7854
doc = "Path to the feature database json file",
7955
mandatory = True,
8056
allow_single_file = True,
8157
),
82-
"data": attr.label_list(
83-
doc = "Additional data files",
84-
allow_files = True,
85-
),
8658
"port": attr.int(
8759
doc = "Port to use for the client/server communication (value for SERVER_PORT env var)",
8860
default = 50051,
@@ -91,38 +63,40 @@ routeguide_test = rule(
9163
test = True,
9264
)
9365

66+
9467
def get_parent_dirname(label):
9568
if label.startswith("//"):
9669
label = label[2:]
9770
return label.partition("/")[0]
9871

72+
9973
def routeguide_test_matrix(clients = [], servers = [], database = "//example/proto:routeguide_features", tagmap = {}):
74+
"""Build a matrix of tests that checks every client against every server"""
10075
port = 50051
10176
for server in servers:
102-
sname = get_parent_dirname(server)
77+
server_name = get_parent_dirname(server)
10378
for client in clients:
104-
cname = get_parent_dirname(client)
105-
name = "%s_%s" % (cname, sname)
79+
client_name = get_parent_dirname(client)
80+
name = "%s_%s" % (client_name, server_name)
10681

82+
# Extract tags for client and server
10783
tags = []
108-
if tagmap.get(cname):
109-
tags.extend(tagmap.get(cname))
110-
if tagmap.get(sname):
111-
tags.extend(tagmap.get(sname))
84+
if tagmap.get(client_name):
85+
tags.extend(tagmap.get(client_name))
86+
if tagmap.get(server_name):
87+
tags.extend(tagmap.get(server_name))
11288
if tagmap.get(name):
11389
tags.extend(tagmap.get(name))
11490

91+
# Setup test with next available port number
11592
routeguide_test(
11693
name = name,
11794
client = client,
11895
server = server,
11996
database = database,
12097
port = port,
121-
data = [
122-
client,
123-
server,
124-
],
12598
tags = tags,
12699
size = "small",
127100
)
101+
128102
port += 1

0 commit comments

Comments
 (0)