1
1
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
28
4
set -e # Fail on error
29
5
30
6
export DATABASE_FILE={database_file}
@@ -41,48 +17,44 @@ sleep 2
41
17
# Print completion for log
42
18
echo '---- DONE ----'
43
19
""" .format (
44
- client = client_entrypoint ,
45
- server = server_entrypoint ,
20
+ client = ctx . executable . client . short_path ,
21
+ server = ctx . executable . server . short_path ,
46
22
database_file = ctx .file .database .short_path ,
47
23
server_port = ctx .attr .port ,
48
24
), is_executable = True )
49
25
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 )
51
32
52
33
return [DefaultInfo (
53
- runfiles = ctx .runfiles (
54
- files = files ,
55
- collect_data = True ,
56
- collect_default = True ,
57
- ),
34
+ runfiles = runfiles ,
58
35
)]
59
36
37
+
60
38
routeguide_test = rule (
61
39
implementation = _routeguide_test_impl ,
62
40
attrs = {
63
41
"client" : attr .label (
64
42
doc = "Client binary" ,
65
43
executable = True ,
66
44
mandatory = True ,
67
- allow_files = True ,
68
45
cfg = "target" ,
69
46
),
70
47
"server" : attr .label (
71
48
doc = "Server binary" ,
72
49
executable = True ,
73
50
mandatory = True ,
74
- allow_files = True ,
75
51
cfg = "target" ,
76
52
),
77
53
"database" : attr .label (
78
54
doc = "Path to the feature database json file" ,
79
55
mandatory = True ,
80
56
allow_single_file = True ,
81
57
),
82
- "data" : attr .label_list (
83
- doc = "Additional data files" ,
84
- allow_files = True ,
85
- ),
86
58
"port" : attr .int (
87
59
doc = "Port to use for the client/server communication (value for SERVER_PORT env var)" ,
88
60
default = 50051 ,
@@ -91,38 +63,40 @@ routeguide_test = rule(
91
63
test = True ,
92
64
)
93
65
66
+
94
67
def get_parent_dirname (label ):
95
68
if label .startswith ("//" ):
96
69
label = label [2 :]
97
70
return label .partition ("/" )[0 ]
98
71
72
+
99
73
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"""
100
75
port = 50051
101
76
for server in servers :
102
- sname = get_parent_dirname (server )
77
+ server_name = get_parent_dirname (server )
103
78
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 )
106
81
82
+ # Extract tags for client and server
107
83
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 ))
112
88
if tagmap .get (name ):
113
89
tags .extend (tagmap .get (name ))
114
90
91
+ # Setup test with next available port number
115
92
routeguide_test (
116
93
name = name ,
117
94
client = client ,
118
95
server = server ,
119
96
database = database ,
120
97
port = port ,
121
- data = [
122
- client ,
123
- server ,
124
- ],
125
98
tags = tags ,
126
99
size = "small" ,
127
100
)
101
+
128
102
port += 1
0 commit comments