Skip to content

Commit 78067cb

Browse files
authored
xds: Update rpc-behavior handling in interop server
1 parent ea09d3e commit 78067cb

File tree

1 file changed

+42
-30
lines changed

1 file changed

+42
-30
lines changed

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

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ public final class XdsTestServer {
5959
"succeed-on-retry-attempt-";
6060
private static final String CALL_BEHAVIOR_ERROR_CODE =
6161
"error-code-";
62+
private static final String CALL_BEHAVIOR_HOSTNAME = "hostname=";
6263
private static final Splitter HEADER_VALUE_SPLITTER = Splitter.on(',')
6364
.trimResults()
6465
.omitEmptyStrings();
66+
private static final Splitter HEADER_HOSTNAME_SPLITTER = Splitter.on(' ');
6567

6668
private static Logger logger = Logger.getLogger(XdsTestServer.class.getName());
6769

@@ -300,8 +302,40 @@ public void sendHeaders(Metadata responseHeaders) {
300302
};
301303
ServerCall.Listener<ReqT> noopListener = new ServerCall.Listener<ReqT>() {};
302304

303-
// sleep if instructed by rpc-behavior
305+
int attemptNum = 0;
306+
String attemptNumHeader = requestHeaders.get(ATTEMPT_NUM);
307+
if (attemptNumHeader != null) {
308+
try {
309+
attemptNum = Integer.valueOf(attemptNumHeader);
310+
} catch (NumberFormatException e) {
311+
newCall.close(
312+
Status.INVALID_ARGUMENT.withDescription(
313+
String.format(
314+
"Invalid format for grpc-previous-rpc-attempts header (%s)",
315+
attemptNumHeader)),
316+
new Metadata());
317+
return noopListener;
318+
}
319+
}
320+
304321
for (String callBehavior : callBehaviors) {
322+
if (callBehavior.startsWith(CALL_BEHAVIOR_HOSTNAME)) {
323+
List<String> splitHeader = HEADER_HOSTNAME_SPLITTER.splitToList(callBehavior);
324+
if (splitHeader.size() > 1) {
325+
if (!splitHeader.get(0).substring(CALL_BEHAVIOR_HOSTNAME.length()).equals(host)) {
326+
continue;
327+
}
328+
callBehavior = splitHeader.get(1);
329+
} else {
330+
newCall.close(
331+
Status.INVALID_ARGUMENT.withDescription(
332+
String.format("Invalid format for rpc-behavior header (%s)", callBehavior)),
333+
new Metadata()
334+
);
335+
return noopListener;
336+
}
337+
}
338+
305339
if (callBehavior.startsWith(CALL_BEHAVIOR_SLEEP_VALUE)) {
306340
try {
307341
int timeout = Integer.parseInt(
@@ -321,12 +355,9 @@ public void sendHeaders(Metadata responseHeaders) {
321355
return noopListener;
322356
}
323357
}
324-
}
325358

326-
// succeed the retry attempt if instructed by rpc-behavior
327-
int succeedOnAttemptNum = Integer.MAX_VALUE;
328-
for (String callBehavior : callBehaviors) {
329359
if (callBehavior.startsWith(CALL_BEHAVIOR_SUCCEED_ON_RETRY_ATTEMPT_VALUE)) {
360+
int succeedOnAttemptNum = Integer.MAX_VALUE;
330361
try {
331362
succeedOnAttemptNum = Integer.parseInt(
332363
callBehavior.substring(CALL_BEHAVIOR_SUCCEED_ON_RETRY_ATTEMPT_VALUE.length()));
@@ -337,35 +368,16 @@ public void sendHeaders(Metadata responseHeaders) {
337368
new Metadata());
338369
return noopListener;
339370
}
340-
break;
371+
if (attemptNum == succeedOnAttemptNum) {
372+
return next.startCall(newCall, requestHeaders);
373+
}
341374
}
342-
}
343-
int attemptNum = 0;
344-
String attemptNumHeader = requestHeaders.get(ATTEMPT_NUM);
345-
if (attemptNumHeader != null) {
346-
try {
347-
attemptNum = Integer.valueOf(attemptNumHeader);
348-
} catch (NumberFormatException e) {
349-
newCall.close(
350-
Status.INVALID_ARGUMENT.withDescription(
351-
String.format(
352-
"Invalid format for grpc-previous-rpc-attempts header (%s)",
353-
attemptNumHeader)),
354-
new Metadata());
375+
376+
// hang if instructed by rpc-behavior
377+
if (callBehavior.equals(CALL_BEHAVIOR_KEEP_OPEN_VALUE)) {
355378
return noopListener;
356379
}
357-
}
358-
if (attemptNum == succeedOnAttemptNum) {
359-
return next.startCall(newCall, requestHeaders);
360-
}
361380

362-
// hang if instructed by rpc-behavior
363-
if (callBehaviors.contains(CALL_BEHAVIOR_KEEP_OPEN_VALUE)) {
364-
return noopListener;
365-
}
366-
367-
// fail if instructed by rpc-behavior
368-
for (String callBehavior : callBehaviors) {
369381
if (callBehavior.startsWith(CALL_BEHAVIOR_ERROR_CODE)) {
370382
try {
371383
int codeValue = Integer.valueOf(

0 commit comments

Comments
 (0)