From f51316b84a70910ff580dd0b6dec357bced170ac Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Mon, 9 Jan 2017 13:15:32 -0800 Subject: [PATCH] testing: Move echo interceptors out of TestUtils The interceptors are quite specific, and probably not helpful for current testing strategies. They really are only useful for interop testing. Moving them to interop-testing avoids them appearing to be in a public API (even if that API is experimental). No functional changes were made; just code movement. --- .../integration/AbstractInteropTest.java | 4 +- .../testing/integration/TestServiceImpl.java | 100 ++++++++++++++++++ .../integration/TestServiceServer.java | 4 +- .../main/java/io/grpc/testing/TestUtils.java | 92 +--------------- 4 files changed, 103 insertions(+), 97 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 f4e44716ca..bb84b5b067 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 @@ -145,9 +145,7 @@ public abstract class AbstractInteropTest { List allInterceptors = ImmutableList.builder() .add(TestUtils.recordServerCallInterceptor(serverCallCapture)) .add(TestUtils.recordRequestHeadersInterceptor(requestHeadersCapture)) - .add(TestUtils.echoRequestHeadersInterceptor(Util.METADATA_KEY)) - .add(TestUtils.echoRequestMetadataInHeaders(Util.ECHO_INITIAL_METADATA_KEY)) - .add(TestUtils.echoRequestMetadataInTrailers(Util.ECHO_TRAILING_METADATA_KEY)) + .addAll(TestServiceImpl.interceptors()) .add(interceptors) .build(); diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java index 3c51986feb..580f72bf08 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java @@ -36,6 +36,11 @@ import com.google.common.collect.Queues; import com.google.protobuf.ByteString; import com.google.protobuf.EmptyProtos; +import io.grpc.ForwardingServerCall.SimpleForwardingServerCall; +import io.grpc.Metadata; +import io.grpc.ServerCall; +import io.grpc.ServerCallHandler; +import io.grpc.ServerInterceptor; import io.grpc.Status; import io.grpc.internal.LogExceptionRunnable; import io.grpc.stub.ServerCallStreamObserver; @@ -51,9 +56,13 @@ import io.grpc.testing.integration.Messages.StreamingOutputCallResponse; import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; +import java.util.HashSet; import java.util.LinkedList; +import java.util.List; import java.util.Queue; import java.util.Random; +import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.annotation.concurrent.GuardedBy; @@ -496,4 +505,95 @@ public class TestServiceImpl extends TestServiceGrpc.TestServiceImplBase { } return payload; } + + /** Returns interceptors necessary for full service implementation. */ + public static List interceptors() { + return Arrays.asList( + echoRequestHeadersInterceptor(Util.METADATA_KEY), + echoRequestMetadataInHeaders(Util.ECHO_INITIAL_METADATA_KEY), + echoRequestMetadataInTrailers(Util.ECHO_TRAILING_METADATA_KEY)); + } + + /** + * Echo the request headers from a client into response headers and trailers. Useful for + * testing end-to-end metadata propagation. + */ + private static ServerInterceptor echoRequestHeadersInterceptor(final Metadata.Key... keys) { + final Set> keySet = new HashSet>(Arrays.asList(keys)); + return new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall call, + final Metadata requestHeaders, + ServerCallHandler next) { + return next.startCall(new SimpleForwardingServerCall(call) { + @Override + public void sendHeaders(Metadata responseHeaders) { + responseHeaders.merge(requestHeaders, keySet); + super.sendHeaders(responseHeaders); + } + + @Override + public void close(Status status, Metadata trailers) { + trailers.merge(requestHeaders, keySet); + super.close(status, trailers); + } + }, requestHeaders); + } + }; + } + + /** + * Echoes request headers with the specified key(s) from a client into response headers only. + */ + private static ServerInterceptor echoRequestMetadataInHeaders(final Metadata.Key... keys) { + final Set> keySet = new HashSet>(Arrays.asList(keys)); + return new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall call, + final Metadata requestHeaders, + ServerCallHandler next) { + return next.startCall(new SimpleForwardingServerCall(call) { + @Override + public void sendHeaders(Metadata responseHeaders) { + responseHeaders.merge(requestHeaders, keySet); + super.sendHeaders(responseHeaders); + } + + @Override + public void close(Status status, Metadata trailers) { + super.close(status, trailers); + } + }, requestHeaders); + } + }; + } + + /** + * Echoes request headers with the specified key(s) from a client into response trailers only. + */ + private static ServerInterceptor echoRequestMetadataInTrailers(final Metadata.Key... keys) { + final Set> keySet = new HashSet>(Arrays.asList(keys)); + return new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall call, + final Metadata requestHeaders, + ServerCallHandler next) { + return next.startCall(new SimpleForwardingServerCall(call) { + @Override + public void sendHeaders(Metadata responseHeaders) { + super.sendHeaders(responseHeaders); + } + + @Override + public void close(Status status, Metadata trailers) { + trailers.merge(requestHeaders, keySet); + super.close(status, trailers); + } + }, requestHeaders); + } + }; + } } diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java index 5a1d8d7da1..3f0d9480d7 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java @@ -146,9 +146,7 @@ public class TestServiceServer { .maxMessageSize(AbstractInteropTest.MAX_MESSAGE_SIZE) .addService(ServerInterceptors.intercept( new TestServiceImpl(executor), - TestUtils.echoRequestHeadersInterceptor(Util.METADATA_KEY), - TestUtils.echoRequestMetadataInHeaders(Util.ECHO_INITIAL_METADATA_KEY), - TestUtils.echoRequestMetadataInTrailers(Util.ECHO_TRAILING_METADATA_KEY))) + TestServiceImpl.interceptors())) .build().start(); } diff --git a/testing/src/main/java/io/grpc/testing/TestUtils.java b/testing/src/main/java/io/grpc/testing/TestUtils.java index dadb2b9a30..e4c26c3f31 100644 --- a/testing/src/main/java/io/grpc/testing/TestUtils.java +++ b/testing/src/main/java/io/grpc/testing/TestUtils.java @@ -32,12 +32,10 @@ package io.grpc.testing; import io.grpc.ExperimentalApi; -import io.grpc.ForwardingServerCall.SimpleForwardingServerCall; import io.grpc.Metadata; import io.grpc.ServerCall; import io.grpc.ServerCallHandler; import io.grpc.ServerInterceptor; -import io.grpc.Status; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -57,11 +55,8 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import javax.net.ssl.SSLContext; @@ -77,92 +72,7 @@ public class TestUtils { public static final String TEST_SERVER_HOST = "foo.test.google.fr"; /** - * Echo the request headers from a client into response headers and trailers. Useful for - * testing end-to-end metadata propagation. - */ - public static ServerInterceptor echoRequestHeadersInterceptor(final Metadata.Key... keys) { - final Set> keySet = new HashSet>(Arrays.asList(keys)); - return new ServerInterceptor() { - @Override - public ServerCall.Listener interceptCall( - ServerCall call, - final Metadata requestHeaders, - ServerCallHandler next) { - return next.startCall(new SimpleForwardingServerCall(call) { - @Override - public void sendHeaders(Metadata responseHeaders) { - responseHeaders.merge(requestHeaders, keySet); - super.sendHeaders(responseHeaders); - } - - @Override - public void close(Status status, Metadata trailers) { - trailers.merge(requestHeaders, keySet); - super.close(status, trailers); - } - }, requestHeaders); - } - }; - } - - /** - * Echoes request headers with the specified key(s) from a client into response headers only. - */ - public static ServerInterceptor echoRequestMetadataInHeaders(final Metadata.Key... keys) { - final Set> keySet = new HashSet>(Arrays.asList(keys)); - return new ServerInterceptor() { - @Override - public ServerCall.Listener interceptCall( - ServerCall call, - final Metadata requestHeaders, - ServerCallHandler next) { - return next.startCall(new SimpleForwardingServerCall(call) { - @Override - public void sendHeaders(Metadata responseHeaders) { - responseHeaders.merge(requestHeaders, keySet); - super.sendHeaders(responseHeaders); - } - - @Override - public void close(Status status, Metadata trailers) { - super.close(status, trailers); - } - }, requestHeaders); - } - }; - } - - /** - * Echoes request headers with the specified key(s) from a client into response trailers only. - */ - public static ServerInterceptor echoRequestMetadataInTrailers(final Metadata.Key... keys) { - final Set> keySet = new HashSet>(Arrays.asList(keys)); - return new ServerInterceptor() { - @Override - public ServerCall.Listener interceptCall( - ServerCall call, - final Metadata requestHeaders, - ServerCallHandler next) { - return next.startCall(new SimpleForwardingServerCall(call) { - @Override - public void sendHeaders(Metadata responseHeaders) { - super.sendHeaders(responseHeaders); - } - - @Override - public void close(Status status, Metadata trailers) { - trailers.merge(requestHeaders, keySet); - super.close(status, trailers); - } - }, requestHeaders); - } - }; - } - - /** - * Capture the request headers from a client. Useful for testing metadata propagation without - * requiring that it be symmetric on client and server, as with - * {@link #echoRequestHeadersInterceptor}. + * Capture the request headers from a client. Useful for testing metadata propagation. */ public static ServerInterceptor recordRequestHeadersInterceptor( final AtomicReference headersCapture) {