From 03a00aa8cf6e928a007a35a45f013e0a7c58ad07 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Thu, 29 Mar 2018 00:51:03 +0200 Subject: [PATCH] interop-testing: client compressed tests without probing (#4279) --- .../integration/AbstractInteropTest.java | 38 ++++++++++--------- .../grpc/testing/integration/TestCases.java | 4 ++ .../integration/TestServiceClient.java | 12 +++++- .../testing/integration/TestCasesTest.java | 11 +++++- 4 files changed, 45 insertions(+), 20 deletions(-) diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java b/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java index e54b3cc982..6fa7812468 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java @@ -390,7 +390,7 @@ public abstract class AbstractInteropTest { * Tests client per-message compression for unary calls. The Java API does not support inspecting * a message's compression level, so this is primarily intended to run against a gRPC C++ server. */ - public void clientCompressedUnary() throws Exception { + public void clientCompressedUnary(boolean probe) throws Exception { assumeEnoughMemory(); final SimpleRequest expectCompressedRequest = SimpleRequest.newBuilder() @@ -409,15 +409,17 @@ public abstract class AbstractInteropTest { .setPayload(Payload.newBuilder().setBody(ByteString.copyFrom(new byte[314159]))) .build(); - // Send a non-compressed message with expectCompress=true. Servers supporting this test case - // should return INVALID_ARGUMENT. - try { - blockingStub.unaryCall(expectCompressedRequest); - fail("expected INVALID_ARGUMENT"); - } catch (StatusRuntimeException e) { - assertEquals(Status.INVALID_ARGUMENT.getCode(), e.getStatus().getCode()); + if (probe) { + // Send a non-compressed message with expectCompress=true. Servers supporting this test case + // should return INVALID_ARGUMENT. + try { + blockingStub.unaryCall(expectCompressedRequest); + fail("expected INVALID_ARGUMENT"); + } catch (StatusRuntimeException e) { + assertEquals(Status.INVALID_ARGUMENT.getCode(), e.getStatus().getCode()); + } + assertStatsTrace("grpc.testing.TestService/UnaryCall", Status.Code.INVALID_ARGUMENT); } - assertStatsTrace("grpc.testing.TestService/UnaryCall", Status.Code.INVALID_ARGUMENT); assertEquals( goldenResponse, blockingStub.withCompression("gzip").unaryCall(expectCompressedRequest)); @@ -557,7 +559,7 @@ public abstract class AbstractInteropTest { * inspecting a message's compression level, so this is primarily intended to run against a gRPC * C++ server. */ - public void clientCompressedStreaming() throws Exception { + public void clientCompressedStreaming(boolean probe) throws Exception { final StreamingInputCallRequest expectCompressedRequest = StreamingInputCallRequest.newBuilder() .setExpectCompressed(BoolValue.newBuilder().setValue(true)) @@ -575,13 +577,15 @@ public abstract class AbstractInteropTest { StreamObserver requestObserver = asyncStub.streamingInputCall(responseObserver); - // Send a non-compressed message with expectCompress=true. Servers supporting this test case - // should return INVALID_ARGUMENT. - requestObserver.onNext(expectCompressedRequest); - responseObserver.awaitCompletion(operationTimeoutMillis(), TimeUnit.MILLISECONDS); - Throwable e = responseObserver.getError(); - assertNotNull("expected INVALID_ARGUMENT", e); - assertEquals(Status.INVALID_ARGUMENT.getCode(), Status.fromThrowable(e).getCode()); + if (probe) { + // Send a non-compressed message with expectCompress=true. Servers supporting this test case + // should return INVALID_ARGUMENT. + requestObserver.onNext(expectCompressedRequest); + responseObserver.awaitCompletion(operationTimeoutMillis(), TimeUnit.MILLISECONDS); + Throwable e = responseObserver.getError(); + assertNotNull("expected INVALID_ARGUMENT", e); + assertEquals(Status.INVALID_ARGUMENT.getCode(), Status.fromThrowable(e).getCode()); + } // Start a new stream responseObserver = StreamRecorder.create(); diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestCases.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestCases.java index 2efbd31062..7056d38482 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestCases.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestCases.java @@ -26,9 +26,13 @@ public enum TestCases { CACHEABLE_UNARY("cacheable unary rpc sent using GET"), LARGE_UNARY("single request and (large) response"), CLIENT_COMPRESSED_UNARY("client compressed unary request"), + CLIENT_COMPRESSED_UNARY_NOPROBE( + "client compressed unary request (skip initial feature-probing request)"), SERVER_COMPRESSED_UNARY("server compressed unary response"), CLIENT_STREAMING("request streaming with single response"), CLIENT_COMPRESSED_STREAMING("client per-message compression on stream"), + CLIENT_COMPRESSED_STREAMING_NOPROBE( + "client per-message compression on stream (skip initial feature-probing request)"), SERVER_STREAMING("single request with response streaming"), SERVER_COMPRESSED_STREAMING("server per-message compression on stream"), PING_PONG("full-duplex ping-pong streaming"), diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java index bdf7eb1366..4d891c9324 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java @@ -221,7 +221,11 @@ public class TestServiceClient { break; case CLIENT_COMPRESSED_UNARY: - tester.clientCompressedUnary(); + tester.clientCompressedUnary(true); + break; + + case CLIENT_COMPRESSED_UNARY_NOPROBE: + tester.clientCompressedUnary(false); break; case SERVER_COMPRESSED_UNARY: @@ -233,7 +237,11 @@ public class TestServiceClient { break; case CLIENT_COMPRESSED_STREAMING: - tester.clientCompressedStreaming(); + tester.clientCompressedStreaming(true); + break; + + case CLIENT_COMPRESSED_STREAMING_NOPROBE: + tester.clientCompressedStreaming(false); break; case SERVER_STREAMING: diff --git a/interop-testing/src/test/java/io/grpc/testing/integration/TestCasesTest.java b/interop-testing/src/test/java/io/grpc/testing/integration/TestCasesTest.java index aac5cbc670..6e54f5c210 100644 --- a/interop-testing/src/test/java/io/grpc/testing/integration/TestCasesTest.java +++ b/interop-testing/src/test/java/io/grpc/testing/integration/TestCasesTest.java @@ -65,12 +65,21 @@ public class TestCasesTest { "timeout_on_sleeping_server" }; - assertEquals(testCases.length, TestCases.values().length); + // additional test cases + String[] additionalTestCases = { + "client_compressed_unary_noprobe", + "client_compressed_streaming_noprobe" + }; + + assertEquals(testCases.length + additionalTestCases.length, TestCases.values().length); Set testCaseSet = new HashSet(testCases.length); for (String testCase : testCases) { testCaseSet.add(TestCases.fromString(testCase)); } + for (String testCase : additionalTestCases) { + testCaseSet.add(TestCases.fromString(testCase)); + } assertEquals(TestCases.values().length, testCaseSet.size()); }