Skip to content

Commit c8c9767

Browse files
committed
.
1 parent a5417a7 commit c8c9767

1 file changed

Lines changed: 90 additions & 0 deletions

File tree

xds/src/test/java/io/grpc/xds/ExternalProcessorServerInterceptorTest.java

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,6 +1521,96 @@ public void onCompleted() {
15211521
channelManager.close();
15221522
}
15231523

1524+
@Test
1525+
public void givenRequestBodyModeNone_whenSendMessageCalled_thenMessageSentDirectlyToDataPlane()
1526+
throws Exception {
1527+
ExternalProcessor proto = createBaseProto(extProcServerName)
1528+
.setProcessingMode(ProcessingMode.newBuilder()
1529+
.setRequestHeaderMode(ProcessingMode.HeaderSendMode.SKIP)
1530+
.setRequestBodyMode(ProcessingMode.BodySendMode.NONE)
1531+
.build())
1532+
.build();
1533+
ConfigOrError<ExternalProcessorFilterConfig> configOrError =
1534+
provider.parseFilterConfig(Any.pack(proto), filterContext);
1535+
assertThat(configOrError.errorDetail).isNull();
1536+
ExternalProcessorFilterConfig filterConfig = configOrError.config;
1537+
1538+
final AtomicInteger extProcBodyCount = new AtomicInteger(0);
1539+
ExternalProcessorGrpc.ExternalProcessorImplBase extProcImpl =
1540+
new ExternalProcessorGrpc.ExternalProcessorImplBase() {
1541+
@Override
1542+
@SuppressWarnings("unchecked")
1543+
public StreamObserver<ProcessingRequest> process(
1544+
final StreamObserver<ProcessingResponse> responseObserver) {
1545+
((ServerCallStreamObserver<ProcessingResponse>) responseObserver).request(100);
1546+
return new StreamObserver<ProcessingRequest>() {
1547+
@Override
1548+
public void onNext(ProcessingRequest request) {
1549+
if (request.hasRequestBody()) {
1550+
extProcBodyCount.incrementAndGet();
1551+
}
1552+
}
1553+
1554+
@Override
1555+
public void onError(Throwable t) {}
1556+
1557+
@Override
1558+
public void onCompleted() {
1559+
responseObserver.onCompleted();
1560+
}
1561+
};
1562+
}
1563+
};
1564+
1565+
grpcCleanup.register(InProcessServerBuilder.forName(extProcServerName)
1566+
.addService(extProcImpl)
1567+
.directExecutor()
1568+
.build().start());
1569+
1570+
CachedChannelManager channelManager = new CachedChannelManager(config -> {
1571+
return grpcCleanup.register(
1572+
InProcessChannelBuilder.forName(extProcServerName).directExecutor().build());
1573+
});
1574+
1575+
ExternalProcessorServerInterceptor interceptor = new ExternalProcessorServerInterceptor(
1576+
filterConfig, channelManager, FAKE_CONTEXT);
1577+
1578+
final AtomicReference<String> receivedBody = new AtomicReference<>();
1579+
final CountDownLatch dataPlaneLatch = new CountDownLatch(1);
1580+
dataPlaneHandler = new DataPlaneServiceHandler() {
1581+
@Override
1582+
public void sayHello(InputStream request, StreamObserver<InputStream> responseObserver) {
1583+
try {
1584+
byte[] bytes = ByteStreams.toByteArray(request);
1585+
receivedBody.set(new String(bytes, StandardCharsets.UTF_8));
1586+
} catch (Exception e) {
1587+
receivedBody.set("Error reading: " + e.getMessage());
1588+
}
1589+
responseObserver.onNext(
1590+
new ByteArrayInputStream("Hello Back".getBytes(StandardCharsets.UTF_8)));
1591+
responseObserver.onCompleted();
1592+
dataPlaneLatch.countDown();
1593+
}
1594+
};
1595+
1596+
startDataPlane(interceptor);
1597+
1598+
io.grpc.ClientCall<InputStream, InputStream> clientCall = dataPlaneChannel.newCall(
1599+
METHOD_SAY_HELLO_RAW, io.grpc.CallOptions.DEFAULT);
1600+
1601+
clientCall.start(new io.grpc.ClientCall.Listener<InputStream>() {}, new Metadata());
1602+
clientCall.request(1);
1603+
clientCall.sendMessage(new ByteArrayInputStream("Original".getBytes(StandardCharsets.UTF_8)));
1604+
clientCall.halfClose();
1605+
1606+
assertThat(dataPlaneLatch.await(5, TimeUnit.SECONDS)).isTrue();
1607+
assertThat(receivedBody.get()).isEqualTo("Original");
1608+
assertThat(extProcBodyCount.get()).isEqualTo(0);
1609+
1610+
clientCall.cancel("Cleanup", null);
1611+
channelManager.close();
1612+
}
1613+
15241614
// ============================================================================
15251615
// Category 5: Response Header Mutation
15261616
// ============================================================================

0 commit comments

Comments
 (0)