private ManagedChannel createSingleChannel() throws IOException { ScheduledExecutorService executor = executorProvider.getExecutor(); GrpcHeaderInterceptor headerInterceptor = new GrpcHeaderInterceptor(headerProvider.getHeaders()); GrpcMetadataHandlerInterceptor metadataHandlerInterceptor = new GrpcMetadataHandlerInterceptor(); .intercept(headerInterceptor) .intercept(metadataHandlerInterceptor) .userAgent(headerInterceptor.getUserAgentHeader()) .executor(executor);
@Test public void testInterceptor() { Map<String, String> data = Collections.singletonMap("x-goog-api-client", "abcd"); GrpcHeaderInterceptor interceptor = new GrpcHeaderInterceptor(data); Channel intercepted = ClientInterceptors.intercept(channel, interceptor); @SuppressWarnings("unchecked") ClientCall.Listener<Integer> listener = mock(ClientCall.Listener.class); ClientCall<String, Integer> interceptedCall = intercepted.newCall(method, CallOptions.DEFAULT); // start() on the intercepted call will eventually reach the call created by the real channel interceptedCall.start(listener, new Metadata()); // The headers passed to the real channel call will contain the information inserted by the // interceptor. ArgumentCaptor<Metadata> captor = ArgumentCaptor.forClass(Metadata.class); verify(call).start(same(listener), captor.capture()); final Metadata.Key<String> headerKey = Metadata.Key.of("x-goog-api-client", Metadata.ASCII_STRING_MARSHALLER); assertEquals("abcd", captor.getValue().get(headerKey)); } }
private ManagedChannel createSingleChannel() throws IOException { ScheduledExecutorService executor = executorProvider.getExecutor(); GrpcHeaderInterceptor headerInterceptor = new GrpcHeaderInterceptor(headerProvider.getHeaders()); GrpcMetadataHandlerInterceptor metadataHandlerInterceptor = new GrpcMetadataHandlerInterceptor(); .intercept(headerInterceptor) .intercept(metadataHandlerInterceptor) .userAgent(headerInterceptor.getUserAgentHeader()) .executor(executor);
@Override public TransportChannel getTransportChannel() throws IOException { ManagedChannelBuilder channelBuilder = InProcessChannelBuilder.forName(address).usePlaintext(); if (headerProvider != null) { GrpcHeaderInterceptor interceptor = new GrpcHeaderInterceptor(headerProvider.getHeaders()); LocalHeaderInterceptor localHeaderInterceptor = new LocalHeaderInterceptor(interceptor); interceptors.add(localHeaderInterceptor); channelBuilder.intercept(localHeaderInterceptor).userAgent(interceptor.getUserAgentHeader()); } return GrpcTransportChannel.newBuilder().setManagedChannel(channelBuilder.build()).build(); }