31
31
import io .grpc .ServerCredentials ;
32
32
import io .grpc .ServerInterceptor ;
33
33
import io .grpc .ServerInterceptors ;
34
+ import io .grpc .ServerServiceDefinition ;
34
35
import io .grpc .Status ;
35
36
import io .grpc .gcp .csm .observability .CsmObservability ;
36
37
import io .grpc .health .v1 .HealthCheckResponse .ServingStatus ;
@@ -82,6 +83,7 @@ public final class XdsTestServer {
82
83
private int port = 8080 ;
83
84
private int maintenancePort = 8080 ;
84
85
private boolean secureMode = false ;
86
+ private boolean xdsServerMode = false ;
85
87
private boolean enableCsmObservability ;
86
88
private String serverId = "java_server" ;
87
89
private HealthStatusManager health ;
@@ -142,7 +144,10 @@ void parseArgs(String[] args) {
142
144
maintenancePort = Integer .valueOf (value );
143
145
} else if ("secure_mode" .equals (key )) {
144
146
secureMode = Boolean .parseBoolean (value );
145
- } else if ("enable_csm_observability" .equals (key )) {
147
+ } else if ("xds_server_mode" .equals (key )) {
148
+ xdsServerMode = Boolean .parseBoolean (value );
149
+ }
150
+ else if ("enable_csm_observability" .equals (key )) {
146
151
enableCsmObservability = Boolean .valueOf (value );
147
152
} else if ("server_id" .equals (key )) {
148
153
serverId = value ;
@@ -163,6 +168,9 @@ void parseArgs(String[] args) {
163
168
+ maintenancePort );
164
169
usage = true ;
165
170
}
171
+ if (secureMode ) {
172
+ xdsServerMode = true ;
173
+ }
166
174
167
175
if (usage ) {
168
176
XdsTestServer s = new XdsTestServer ();
@@ -179,6 +187,9 @@ void parseArgs(String[] args) {
179
187
+ " port and maintenance_port should be different for secure mode."
180
188
+ "\n Default: "
181
189
+ s .secureMode
190
+ + "\n --xds_server_mode=BOOLEAN Start in xDS Server mode."
191
+ + "\n Default: "
192
+ + s .xdsServerMode
182
193
+ "\n --enable_csm_observability=BOOL Enable CSM observability reporting. Default: "
183
194
+ s .enableCsmObservability
184
195
+ "\n --server_id=STRING server ID for response."
@@ -211,74 +222,93 @@ void start() throws Exception {
211
222
logger .log (Level .SEVERE , "Failed to get host" , e );
212
223
throw new RuntimeException (e );
213
224
}
225
+
214
226
health = new HealthStatusManager ();
227
+ ServerServiceDefinition testServiceInterceptor = ServerInterceptors .intercept (
228
+ new TestServiceImpl (serverId , host ),
229
+ new TestInfoInterceptor (host ));
230
+ ServerCredentials insecureServerCreds = InsecureServerCredentials .create ();
231
+
215
232
if (secureMode ) {
216
233
if (addressType != Util .AddressType .IPV4_IPV6 ) {
217
234
throw new IllegalArgumentException ("Secure mode only supports IPV4_IPV6 address type" );
218
235
}
219
236
maintenanceServer =
220
- Grpc .newServerBuilderForPort (maintenancePort , InsecureServerCredentials . create () )
237
+ Grpc .newServerBuilderForPort (maintenancePort , insecureServerCreds )
221
238
.addService (new XdsUpdateHealthServiceImpl (health ))
222
239
.addService (health .getHealthService ())
223
240
.addService (ProtoReflectionService .newInstance ())
224
241
.addService (ProtoReflectionServiceV1 .newInstance ())
225
242
.addServices (AdminInterface .getStandardServices ())
226
243
.build ();
227
244
maintenanceServer .start ();
228
- server =
229
- XdsServerBuilder .forPort (
230
- port , XdsServerCredentials .create (InsecureServerCredentials .create ()))
231
- .addService (
232
- ServerInterceptors .intercept (
233
- new TestServiceImpl (serverId , host ), new TestInfoInterceptor (host )))
245
+ server = XdsServerBuilder .forPort (port , XdsServerCredentials .create (insecureServerCreds ))
246
+ .addService (testServiceInterceptor )
234
247
.build ();
235
248
server .start ();
236
- } else {
237
- ServerBuilder <?> serverBuilder ;
238
- ServerCredentials insecureServerCreds = InsecureServerCredentials .create ();
239
- switch (addressType ) {
240
- case IPV4_IPV6 :
241
- serverBuilder = Grpc .newServerBuilderForPort (port , insecureServerCreds );
242
- break ;
243
- case IPV4 :
244
- SocketAddress v4Address = Util .getV4Address (port );
245
- InetSocketAddress localV4Address = new InetSocketAddress ("127.0.0.1" , port );
246
- serverBuilder = NettyServerBuilder .forAddress (
247
- localV4Address , insecureServerCreds );
248
- if (v4Address != null && !v4Address .equals (localV4Address ) ) {
249
- ((NettyServerBuilder ) serverBuilder ).addListenAddress (v4Address );
250
- }
251
- break ;
252
- case IPV6 :
253
- List <SocketAddress > v6Addresses = Util .getV6Addresses (port );
254
- InetSocketAddress localV6Address = new InetSocketAddress ("::1" , port );
255
- serverBuilder = NettyServerBuilder .forAddress (localV6Address , insecureServerCreds );
256
- for (SocketAddress address : v6Addresses ) {
257
- if (!address .equals (localV6Address )) {
258
- ((NettyServerBuilder ) serverBuilder ).addListenAddress (address );
259
- }
260
- }
261
- break ;
262
- default :
263
- throw new AssertionError ("Unknown address type: " + addressType );
264
- }
265
-
266
- logger .info ("Starting server on port " + port + " with address type " + addressType );
249
+ health .setStatus ("" , ServingStatus .SERVING );
250
+ return ;
251
+ }
267
252
268
- server =
269
- serverBuilder
270
- .addService (
271
- ServerInterceptors .intercept (
272
- new TestServiceImpl (serverId , host ), new TestInfoInterceptor (host )))
273
- .addService (new XdsUpdateHealthServiceImpl (health ))
274
- .addService (health .getHealthService ())
275
- .addService (ProtoReflectionService .newInstance ())
276
- .addService (ProtoReflectionServiceV1 .newInstance ())
277
- .addServices (AdminInterface .getStandardServices ())
278
- .build ();
253
+ if (xdsServerMode ) {
254
+ if (addressType != Util .AddressType .IPV4_IPV6 ) {
255
+ throw new IllegalArgumentException ("xDS Server mode only supports IPV4_IPV6 address type" );
256
+ }
257
+ server = XdsServerBuilder .forPort (port , XdsServerCredentials .create (insecureServerCreds ))
258
+ .addService (testServiceInterceptor )
259
+ .addService (new XdsUpdateHealthServiceImpl (health ))
260
+ .addService (health .getHealthService ())
261
+ .addService (ProtoReflectionService .newInstance ())
262
+ .addService (ProtoReflectionServiceV1 .newInstance ())
263
+ .addServices (AdminInterface .getStandardServices ())
264
+ .build ();
279
265
server .start ();
280
266
maintenanceServer = null ;
267
+ health .setStatus ("" , ServingStatus .SERVING );
268
+ return ;
269
+ }
270
+
271
+ ServerBuilder <?> serverBuilder ;
272
+ switch (addressType ) {
273
+ case IPV4_IPV6 :
274
+ serverBuilder = Grpc .newServerBuilderForPort (port , insecureServerCreds );
275
+ break ;
276
+ case IPV4 :
277
+ SocketAddress v4Address = Util .getV4Address (port );
278
+ InetSocketAddress localV4Address = new InetSocketAddress ("127.0.0.1" , port );
279
+ serverBuilder = NettyServerBuilder .forAddress (
280
+ localV4Address , insecureServerCreds );
281
+ if (v4Address != null && !v4Address .equals (localV4Address ) ) {
282
+ ((NettyServerBuilder ) serverBuilder ).addListenAddress (v4Address );
283
+ }
284
+ break ;
285
+ case IPV6 :
286
+ List <SocketAddress > v6Addresses = Util .getV6Addresses (port );
287
+ InetSocketAddress localV6Address = new InetSocketAddress ("::1" , port );
288
+ serverBuilder = NettyServerBuilder .forAddress (localV6Address , insecureServerCreds );
289
+ for (SocketAddress address : v6Addresses ) {
290
+ if (!address .equals (localV6Address )) {
291
+ ((NettyServerBuilder ) serverBuilder ).addListenAddress (address );
292
+ }
293
+ }
294
+ break ;
295
+ default :
296
+ throw new AssertionError ("Unknown address type: " + addressType );
281
297
}
298
+
299
+ logger .info ("Starting server on port " + port + " with address type " + addressType );
300
+
301
+ server =
302
+ serverBuilder
303
+ .addService (testServiceInterceptor )
304
+ .addService (new XdsUpdateHealthServiceImpl (health ))
305
+ .addService (health .getHealthService ())
306
+ .addService (ProtoReflectionService .newInstance ())
307
+ .addService (ProtoReflectionServiceV1 .newInstance ())
308
+ .addServices (AdminInterface .getStandardServices ())
309
+ .build ();
310
+ server .start ();
311
+ maintenanceServer = null ;
282
312
health .setStatus ("" , ServingStatus .SERVING );
283
313
}
284
314
0 commit comments