Home / Class/ SniClientTest Class — netty Architecture

SniClientTest Class — netty Architecture

Architecture documentation for the SniClientTest class in SniClientTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  03760603_e76a_2487_b3a8_7faf239ef462["SniClientTest"]
  138f1a01_2438_02d2_b299_c3995381df64["SniClientTest.java"]
  03760603_e76a_2487_b3a8_7faf239ef462 -->|defined in| 138f1a01_2438_02d2_b299_c3995381df64
  754c6e67_5228_b9a2_976d_5b03e4d646f0["parameters()"]
  03760603_e76a_2487_b3a8_7faf239ef462 -->|method| 754c6e67_5228_b9a2_976d_5b03e4d646f0
  f5abc307_f250_cdab_14be_a00489a9420e["testSniSNIMatcherMatchesClient()"]
  03760603_e76a_2487_b3a8_7faf239ef462 -->|method| f5abc307_f250_cdab_14be_a00489a9420e
  6e9e8ebe_6e1e_b494_8130_c943cd3653dd["testSniSNIMatcherDoesNotMatchClient()"]
  03760603_e76a_2487_b3a8_7faf239ef462 -->|method| 6e9e8ebe_6e1e_b494_8130_c943cd3653dd
  b5f56e00_c555_2f1e_8389_b36b8ea4bf9c["testSniClient()"]
  03760603_e76a_2487_b3a8_7faf239ef462 -->|method| b5f56e00_c555_2f1e_8389_b36b8ea4bf9c

Relationship Graph

Source Code

handler/src/test/java/io/netty/handler/ssl/SniClientTest.java lines 52–165

public class SniClientTest {
    private static final String PARAMETERIZED_NAME = "{index}: serverSslProvider = {0}, clientSslProvider = {1}";
    static Collection<Object[]> parameters() {
        List<SslProvider> providers = new ArrayList<SslProvider>(Arrays.asList(SslProvider.values()));
        if (!OpenSsl.isAvailable()) {
            providers.remove(SslProvider.OPENSSL);
            providers.remove(SslProvider.OPENSSL_REFCNT);
        }

        List<Object[]> params = new ArrayList<Object[]>();
        for (SslProvider sp: providers) {
            for (SslProvider cp: providers) {
                params.add(new Object[] { sp, cp });
            }
        }
        return params;
    }

    @ParameterizedTest(name = PARAMETERIZED_NAME)
    @Timeout(value = 30000, unit = TimeUnit.MILLISECONDS)
    @MethodSource("parameters")
    public void testSniSNIMatcherMatchesClient(SslProvider serverProvider, SslProvider clientProvider)
            throws Exception {
        SniClientJava8TestUtil.testSniClient(serverProvider, clientProvider, true);
    }

    @ParameterizedTest(name = PARAMETERIZED_NAME)
    @Timeout(value = 30000, unit = TimeUnit.MILLISECONDS)
    @MethodSource("parameters")
    public void testSniSNIMatcherDoesNotMatchClient(
            final SslProvider serverProvider, final SslProvider clientProvider) {
        assertThrows(SSLException.class, new Executable() {
            @Override
            public void execute() throws Throwable {
                SniClientJava8TestUtil.testSniClient(serverProvider, clientProvider, false);
            }
        });
    }

    @ParameterizedTest(name = PARAMETERIZED_NAME)
    @Timeout(value = 30000, unit = TimeUnit.MILLISECONDS)
    @MethodSource("parameters")
    public void testSniClient(SslProvider sslServerProvider, SslProvider sslClientProvider) throws Exception {
        String sniHostName = "sni.netty.io";
        LocalAddress address = new LocalAddress("SniClientTest");
        EventLoopGroup group = new MultiThreadIoEventLoopGroup(1, LocalIoHandler.newFactory());
        SelfSignedCertificate cert = CachedSelfSignedCertificate.getCachedCertificate();
        SslContext sslServerContext = null;
        SslContext sslClientContext = null;

        Channel sc = null;
        Channel cc = null;
        try {
            if ((sslServerProvider == SslProvider.OPENSSL || sslServerProvider == SslProvider.OPENSSL_REFCNT)
                && !OpenSsl.useKeyManagerFactory()) {
                sslServerContext = SslContextBuilder.forServer(cert.certificate(), cert.privateKey())
                                                    .sslProvider(sslServerProvider)
                                                    .build();
            } else {
                // The used OpenSSL version does support a KeyManagerFactory, so use it.
                KeyManagerFactory kmf = SniClientJava8TestUtil.newSniX509KeyManagerFactory(cert, sniHostName);

               sslServerContext = SslContextBuilder.forServer(kmf)
                                                   .sslProvider(sslServerProvider)
                                                   .build();
            }

            final SslContext finalContext = sslServerContext;
            final Promise<String> promise = group.next().newPromise();
            ServerBootstrap sb = new ServerBootstrap();
            sc = sb.group(group).channel(LocalServerChannel.class).childHandler(new ChannelInitializer<Channel>() {
                @Override
                protected void initChannel(Channel ch) throws Exception {
                    ch.pipeline().addFirst(new SniHandler(new Mapping<String, SslContext>() {
                        @Override
                        public SslContext map(String input) {
                            promise.setSuccess(input);
                            return finalContext;
                        }
                    }));
                }

Frequently Asked Questions

What is the SniClientTest class?
SniClientTest is a class in the netty codebase, defined in handler/src/test/java/io/netty/handler/ssl/SniClientTest.java.
Where is SniClientTest defined?
SniClientTest is defined in handler/src/test/java/io/netty/handler/ssl/SniClientTest.java at line 52.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free