1 #!/usr/bin/env python2.7
2 # Copyright 2015 gRPC authors.
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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 JSON data for LB interop test scenarios."""
23 # TODO(https://github.com/grpc/grpc-go/issues/2347): enable
24 # client_falls_back_because_no_backends_* scenarios for Java/Go.
26 # TODO(https://github.com/grpc/grpc-java/issues/4887): enable
27 # *short_stream* scenarios for Java.
29 # TODO(https://github.com/grpc/grpc-java/issues/4912): enable
30 # Java TLS tests involving TLS to the balancer.
33 def server_sec(transport_sec):
34 if transport_sec == 'google_default_credentials':
35 return 'alts', 'alts', 'tls'
36 return transport_sec, transport_sec, transport_sec
39 def generate_no_balancer_because_lb_a_record_returns_nx_domain():
41 for transport_sec in [
42 'insecure', 'alts', 'tls', 'google_default_credentials'
44 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
47 'no_balancer_because_lb_a_record_returns_nx_domain_%s' %
52 'balancer_configs': [],
53 'backend_configs': [],
54 'fallback_configs': [{
55 'transport_sec': fallback_sec,
57 'cause_no_error_no_data_for_balancer_a_record':
60 all_configs.append(config)
64 all_scenarios += generate_no_balancer_because_lb_a_record_returns_nx_domain()
67 def generate_no_balancer_because_lb_a_record_returns_no_data():
69 for transport_sec in [
70 'insecure', 'alts', 'tls', 'google_default_credentials'
72 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
75 'no_balancer_because_lb_a_record_returns_no_data_%s' %
80 'balancer_configs': [],
81 'backend_configs': [],
82 'fallback_configs': [{
83 'transport_sec': fallback_sec,
85 'cause_no_error_no_data_for_balancer_a_record':
88 all_configs.append(config)
92 all_scenarios += generate_no_balancer_because_lb_a_record_returns_no_data()
95 def generate_client_referred_to_backend():
97 for balancer_short_stream in [True, False]:
98 for transport_sec in [
99 'insecure', 'alts', 'tls', 'google_default_credentials'
101 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
103 if transport_sec == 'tls':
104 skip_langs += ['java']
105 if balancer_short_stream:
106 skip_langs += ['java']
109 'client_referred_to_backend_%s_short_stream_%s' %
110 (transport_sec, balancer_short_stream),
115 'balancer_configs': [{
116 'transport_sec': balancer_sec,
117 'short_stream': balancer_short_stream,
119 'backend_configs': [{
120 'transport_sec': backend_sec,
122 'fallback_configs': [],
123 'cause_no_error_no_data_for_balancer_a_record':
126 all_configs.append(config)
130 all_scenarios += generate_client_referred_to_backend()
133 def generate_client_referred_to_backend_fallback_broken():
135 for balancer_short_stream in [True, False]:
136 for transport_sec in ['alts', 'tls', 'google_default_credentials']:
137 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
139 if transport_sec == 'tls':
140 skip_langs += ['java']
141 if balancer_short_stream:
142 skip_langs += ['java']
145 'client_referred_to_backend_fallback_broken_%s_short_stream_%s'
146 % (transport_sec, balancer_short_stream),
151 'balancer_configs': [{
152 'transport_sec': balancer_sec,
153 'short_stream': balancer_short_stream,
155 'backend_configs': [{
156 'transport_sec': backend_sec,
158 'fallback_configs': [{
159 'transport_sec': 'insecure',
161 'cause_no_error_no_data_for_balancer_a_record':
164 all_configs.append(config)
168 all_scenarios += generate_client_referred_to_backend_fallback_broken()
171 def generate_client_referred_to_backend_multiple_backends():
173 for balancer_short_stream in [True, False]:
174 for transport_sec in [
175 'insecure', 'alts', 'tls', 'google_default_credentials'
177 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
179 if transport_sec == 'tls':
180 skip_langs += ['java']
181 if balancer_short_stream:
182 skip_langs += ['java']
185 'client_referred_to_backend_multiple_backends_%s_short_stream_%s'
186 % (transport_sec, balancer_short_stream),
191 'balancer_configs': [{
192 'transport_sec': balancer_sec,
193 'short_stream': balancer_short_stream,
195 'backend_configs': [{
196 'transport_sec': backend_sec,
198 'transport_sec': backend_sec,
200 'transport_sec': backend_sec,
202 'transport_sec': backend_sec,
204 'transport_sec': backend_sec,
206 'fallback_configs': [],
207 'cause_no_error_no_data_for_balancer_a_record':
210 all_configs.append(config)
214 all_scenarios += generate_client_referred_to_backend_multiple_backends()
217 def generate_client_falls_back_because_no_backends():
219 for balancer_short_stream in [True, False]:
220 for transport_sec in [
221 'insecure', 'alts', 'tls', 'google_default_credentials'
223 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
224 skip_langs = ['go', 'java']
225 if transport_sec == 'tls':
226 skip_langs += ['java']
227 if balancer_short_stream:
228 skip_langs += ['java']
231 'client_falls_back_because_no_backends_%s_short_stream_%s' %
232 (transport_sec, balancer_short_stream),
237 'balancer_configs': [{
238 'transport_sec': balancer_sec,
239 'short_stream': balancer_short_stream,
241 'backend_configs': [],
242 'fallback_configs': [{
243 'transport_sec': fallback_sec,
245 'cause_no_error_no_data_for_balancer_a_record':
248 all_configs.append(config)
252 all_scenarios += generate_client_falls_back_because_no_backends()
255 def generate_client_falls_back_because_balancer_connection_broken():
257 for transport_sec in ['alts', 'tls', 'google_default_credentials']:
258 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
260 if transport_sec == 'tls':
261 skip_langs = ['java']
264 'client_falls_back_because_balancer_connection_broken_%s' %
270 'balancer_configs': [{
271 'transport_sec': 'insecure',
272 'short_stream': False,
274 'backend_configs': [],
275 'fallback_configs': [{
276 'transport_sec': fallback_sec,
278 'cause_no_error_no_data_for_balancer_a_record':
281 all_configs.append(config)
285 all_scenarios += generate_client_falls_back_because_balancer_connection_broken()
288 def generate_client_referred_to_backend_multiple_balancers():
290 for balancer_short_stream in [True, False]:
291 for transport_sec in [
292 'insecure', 'alts', 'tls', 'google_default_credentials'
294 balancer_sec, backend_sec, fallback_sec = server_sec(transport_sec)
296 if transport_sec == 'tls':
297 skip_langs += ['java']
298 if balancer_short_stream:
299 skip_langs += ['java']
302 'client_referred_to_backend_multiple_balancers_%s_short_stream_%s'
303 % (transport_sec, balancer_short_stream),
308 'balancer_configs': [
310 'transport_sec': balancer_sec,
311 'short_stream': balancer_short_stream,
314 'transport_sec': balancer_sec,
315 'short_stream': balancer_short_stream,
318 'transport_sec': balancer_sec,
319 'short_stream': balancer_short_stream,
322 'transport_sec': balancer_sec,
323 'short_stream': balancer_short_stream,
326 'transport_sec': balancer_sec,
327 'short_stream': balancer_short_stream,
330 'backend_configs': [{
331 'transport_sec': backend_sec,
333 'fallback_configs': [],
334 'cause_no_error_no_data_for_balancer_a_record':
337 all_configs.append(config)
341 all_scenarios += generate_client_referred_to_backend_multiple_balancers()
344 'lb_interop_test_scenarios': all_scenarios,