mirror of https://github.com/grpc/grpc-java.git
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.
This commit is contained in:
parent
d5eb248737
commit
f51316b84a
|
|
@ -145,9 +145,7 @@ public abstract class AbstractInteropTest {
|
|||
List<ServerInterceptor> allInterceptors = ImmutableList.<ServerInterceptor>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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ServerInterceptor> 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<Metadata.Key<?>> keySet = new HashSet<Metadata.Key<?>>(Arrays.asList(keys));
|
||||
return new ServerInterceptor() {
|
||||
@Override
|
||||
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
|
||||
ServerCall<ReqT, RespT> call,
|
||||
final Metadata requestHeaders,
|
||||
ServerCallHandler<ReqT, RespT> next) {
|
||||
return next.startCall(new SimpleForwardingServerCall<ReqT, RespT>(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<Metadata.Key<?>> keySet = new HashSet<Metadata.Key<?>>(Arrays.asList(keys));
|
||||
return new ServerInterceptor() {
|
||||
@Override
|
||||
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
|
||||
ServerCall<ReqT, RespT> call,
|
||||
final Metadata requestHeaders,
|
||||
ServerCallHandler<ReqT, RespT> next) {
|
||||
return next.startCall(new SimpleForwardingServerCall<ReqT, RespT>(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<Metadata.Key<?>> keySet = new HashSet<Metadata.Key<?>>(Arrays.asList(keys));
|
||||
return new ServerInterceptor() {
|
||||
@Override
|
||||
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
|
||||
ServerCall<ReqT, RespT> call,
|
||||
final Metadata requestHeaders,
|
||||
ServerCallHandler<ReqT, RespT> next) {
|
||||
return next.startCall(new SimpleForwardingServerCall<ReqT, RespT>(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);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Metadata.Key<?>> keySet = new HashSet<Metadata.Key<?>>(Arrays.asList(keys));
|
||||
return new ServerInterceptor() {
|
||||
@Override
|
||||
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
|
||||
ServerCall<ReqT, RespT> call,
|
||||
final Metadata requestHeaders,
|
||||
ServerCallHandler<ReqT, RespT> next) {
|
||||
return next.startCall(new SimpleForwardingServerCall<ReqT, RespT>(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<Metadata.Key<?>> keySet = new HashSet<Metadata.Key<?>>(Arrays.asList(keys));
|
||||
return new ServerInterceptor() {
|
||||
@Override
|
||||
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
|
||||
ServerCall<ReqT, RespT> call,
|
||||
final Metadata requestHeaders,
|
||||
ServerCallHandler<ReqT, RespT> next) {
|
||||
return next.startCall(new SimpleForwardingServerCall<ReqT, RespT>(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<Metadata.Key<?>> keySet = new HashSet<Metadata.Key<?>>(Arrays.asList(keys));
|
||||
return new ServerInterceptor() {
|
||||
@Override
|
||||
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
|
||||
ServerCall<ReqT, RespT> call,
|
||||
final Metadata requestHeaders,
|
||||
ServerCallHandler<ReqT, RespT> next) {
|
||||
return next.startCall(new SimpleForwardingServerCall<ReqT, RespT>(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<Metadata> headersCapture) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue