Skip to content

Commit f347251

Browse files
committed
XdsTestServer: add --xds_server_mode
1 parent ad4d9f9 commit f347251

File tree

1 file changed

+80
-50
lines changed

1 file changed

+80
-50
lines changed

interop-testing/src/main/java/io/grpc/testing/integration/XdsTestServer.java

Lines changed: 80 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import io.grpc.ServerCredentials;
3232
import io.grpc.ServerInterceptor;
3333
import io.grpc.ServerInterceptors;
34+
import io.grpc.ServerServiceDefinition;
3435
import io.grpc.Status;
3536
import io.grpc.gcp.csm.observability.CsmObservability;
3637
import io.grpc.health.v1.HealthCheckResponse.ServingStatus;
@@ -82,6 +83,7 @@ public final class XdsTestServer {
8283
private int port = 8080;
8384
private int maintenancePort = 8080;
8485
private boolean secureMode = false;
86+
private boolean xdsServerMode = false;
8587
private boolean enableCsmObservability;
8688
private String serverId = "java_server";
8789
private HealthStatusManager health;
@@ -142,7 +144,10 @@ void parseArgs(String[] args) {
142144
maintenancePort = Integer.valueOf(value);
143145
} else if ("secure_mode".equals(key)) {
144146
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)) {
146151
enableCsmObservability = Boolean.valueOf(value);
147152
} else if ("server_id".equals(key)) {
148153
serverId = value;
@@ -163,6 +168,9 @@ void parseArgs(String[] args) {
163168
+ maintenancePort);
164169
usage = true;
165170
}
171+
if (secureMode) {
172+
xdsServerMode = true;
173+
}
166174

167175
if (usage) {
168176
XdsTestServer s = new XdsTestServer();
@@ -179,6 +187,9 @@ void parseArgs(String[] args) {
179187
+ " port and maintenance_port should be different for secure mode."
180188
+ "\n Default: "
181189
+ s.secureMode
190+
+ "\n --xds_server_mode=BOOLEAN Start in xDS Server mode."
191+
+ "\n Default: "
192+
+ s.xdsServerMode
182193
+ "\n --enable_csm_observability=BOOL Enable CSM observability reporting. Default: "
183194
+ s.enableCsmObservability
184195
+ "\n --server_id=STRING server ID for response."
@@ -211,74 +222,93 @@ void start() throws Exception {
211222
logger.log(Level.SEVERE, "Failed to get host", e);
212223
throw new RuntimeException(e);
213224
}
225+
214226
health = new HealthStatusManager();
227+
ServerServiceDefinition testServiceInterceptor = ServerInterceptors.intercept(
228+
new TestServiceImpl(serverId, host),
229+
new TestInfoInterceptor(host));
230+
ServerCredentials insecureServerCreds = InsecureServerCredentials.create();
231+
215232
if (secureMode) {
216233
if (addressType != Util.AddressType.IPV4_IPV6) {
217234
throw new IllegalArgumentException("Secure mode only supports IPV4_IPV6 address type");
218235
}
219236
maintenanceServer =
220-
Grpc.newServerBuilderForPort(maintenancePort, InsecureServerCredentials.create())
237+
Grpc.newServerBuilderForPort(maintenancePort, insecureServerCreds)
221238
.addService(new XdsUpdateHealthServiceImpl(health))
222239
.addService(health.getHealthService())
223240
.addService(ProtoReflectionService.newInstance())
224241
.addService(ProtoReflectionServiceV1.newInstance())
225242
.addServices(AdminInterface.getStandardServices())
226243
.build();
227244
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)
234247
.build();
235248
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+
}
267252

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();
279265
server.start();
280266
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);
281297
}
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;
282312
health.setStatus("", ServingStatus.SERVING);
283313
}
284314

0 commit comments

Comments
 (0)