Search in sources :

Example 1 with ClientSdsHandler

use of io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler in project grpc-java by grpc.

the class SdsProtocolNegotiatorsTest method clientSdsProtocolNegotiatorNewHandler_fireProtocolNegotiationEvent.

@Test
public void clientSdsProtocolNegotiatorNewHandler_fireProtocolNegotiationEvent() throws InterruptedException, TimeoutException, ExecutionException {
    FakeClock executor = new FakeClock();
    CommonCertProviderTestUtils.register(executor);
    Bootstrapper.BootstrapInfo bootstrapInfoForClient = CommonBootstrapperTestUtils.buildBootstrapInfo("google_cloud_private_spiffe-client", CLIENT_KEY_FILE, CLIENT_PEM_FILE, CA_PEM_FILE, null, null, null, null);
    UpstreamTlsContext upstreamTlsContext = CommonTlsContextTestsUtil.buildUpstreamTlsContext("google_cloud_private_spiffe-client", true);
    SslContextProviderSupplier sslContextProviderSupplier = new SslContextProviderSupplier(upstreamTlsContext, new TlsContextManagerImpl(bootstrapInfoForClient));
    SdsProtocolNegotiators.ClientSdsHandler clientSdsHandler = new SdsProtocolNegotiators.ClientSdsHandler(grpcHandler, sslContextProviderSupplier);
    pipeline.addLast(clientSdsHandler);
    channelHandlerCtx = pipeline.context(clientSdsHandler);
    // non-null since we just added it
    assertNotNull(channelHandlerCtx);
    // kick off protocol negotiation.
    pipeline.fireUserEventTriggered(InternalProtocolNegotiationEvent.getDefault());
    final SettableFuture<Object> future = SettableFuture.create();
    sslContextProviderSupplier.updateSslContext(new SslContextProvider.Callback(MoreExecutors.directExecutor()) {

        @Override
        public void updateSecret(SslContext sslContext) {
            future.set(sslContext);
        }

        @Override
        protected void onException(Throwable throwable) {
            future.set(throwable);
        }
    });
    executor.runDueTasks();
    // need this for tasks to execute on eventLoop
    channel.runPendingTasks();
    Object fromFuture = future.get(5, TimeUnit.SECONDS);
    assertThat(fromFuture).isInstanceOf(SslContext.class);
    channel.runPendingTasks();
    channelHandlerCtx = pipeline.context(clientSdsHandler);
    assertThat(channelHandlerCtx).isNull();
    Object sslEvent = SslHandshakeCompletionEvent.SUCCESS;
    pipeline.fireUserEventTriggered(sslEvent);
    // need this for tasks to execute on eventLoop
    channel.runPendingTasks();
    assertTrue(channel.isOpen());
    CommonCertProviderTestUtils.register0();
}
Also used : ClientSdsHandler(io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler) FakeClock(io.grpc.internal.FakeClock) UpstreamTlsContext(io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext) Bootstrapper(io.grpc.xds.Bootstrapper) ClientSdsHandler(io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler) SslContext(io.netty.handler.ssl.SslContext) Test(org.junit.Test)

Example 2 with ClientSdsHandler

use of io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler in project grpc-java by grpc.

the class SdsProtocolNegotiatorsTest method clientSdsHandler_addLast.

@Test
public void clientSdsHandler_addLast() throws InterruptedException, TimeoutException, ExecutionException {
    FakeClock executor = new FakeClock();
    CommonCertProviderTestUtils.register(executor);
    Bootstrapper.BootstrapInfo bootstrapInfoForClient = CommonBootstrapperTestUtils.buildBootstrapInfo("google_cloud_private_spiffe-client", CLIENT_KEY_FILE, CLIENT_PEM_FILE, CA_PEM_FILE, null, null, null, null);
    UpstreamTlsContext upstreamTlsContext = CommonTlsContextTestsUtil.buildUpstreamTlsContext("google_cloud_private_spiffe-client", true);
    SslContextProviderSupplier sslContextProviderSupplier = new SslContextProviderSupplier(upstreamTlsContext, new TlsContextManagerImpl(bootstrapInfoForClient));
    SdsProtocolNegotiators.ClientSdsHandler clientSdsHandler = new SdsProtocolNegotiators.ClientSdsHandler(grpcHandler, sslContextProviderSupplier);
    pipeline.addLast(clientSdsHandler);
    channelHandlerCtx = pipeline.context(clientSdsHandler);
    // clientSdsHandler ctx is non-null since we just added it
    assertNotNull(channelHandlerCtx);
    // kick off protocol negotiation.
    pipeline.fireUserEventTriggered(InternalProtocolNegotiationEvent.getDefault());
    final SettableFuture<Object> future = SettableFuture.create();
    sslContextProviderSupplier.updateSslContext(new SslContextProvider.Callback(MoreExecutors.directExecutor()) {

        @Override
        public void updateSecret(SslContext sslContext) {
            future.set(sslContext);
        }

        @Override
        protected void onException(Throwable throwable) {
            future.set(throwable);
        }
    });
    assertThat(executor.runDueTasks()).isEqualTo(1);
    channel.runPendingTasks();
    Object fromFuture = future.get(2, TimeUnit.SECONDS);
    assertThat(fromFuture).isInstanceOf(SslContext.class);
    channel.runPendingTasks();
    channelHandlerCtx = pipeline.context(clientSdsHandler);
    assertThat(channelHandlerCtx).isNull();
    // pipeline should have SslHandler and ClientTlsHandler
    Iterator<Map.Entry<String, ChannelHandler>> iterator = pipeline.iterator();
    assertThat(iterator.next().getValue()).isInstanceOf(SslHandler.class);
    // ProtocolNegotiators.ClientTlsHandler.class not accessible, get canonical name
    assertThat(iterator.next().getValue().getClass().getCanonicalName()).contains("ProtocolNegotiators.ClientTlsHandler");
    CommonCertProviderTestUtils.register0();
}
Also used : ClientSdsHandler(io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler) FakeClock(io.grpc.internal.FakeClock) UpstreamTlsContext(io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext) Bootstrapper(io.grpc.xds.Bootstrapper) ClientSdsHandler(io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler) SslContext(io.netty.handler.ssl.SslContext) Test(org.junit.Test)

Aggregations

FakeClock (io.grpc.internal.FakeClock)2 Bootstrapper (io.grpc.xds.Bootstrapper)2 UpstreamTlsContext (io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext)2 ClientSdsHandler (io.grpc.xds.internal.sds.SdsProtocolNegotiators.ClientSdsHandler)2 SslContext (io.netty.handler.ssl.SslContext)2 Test (org.junit.Test)2