Home / Class/ SniHandlerTest Class — netty Architecture

SniHandlerTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  00b45f27_cbf5_af92_430f_7f0426117fa5["SniHandlerTest"]
  21c53ef4_8ec1_7385_0648_b8ecf474bb86["SniHandlerTest.java"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|defined in| 21c53ef4_8ec1_7385_0648_b8ecf474bb86
  7710678f_8a35_d670_787b_1b44442f5721["ApplicationProtocolConfig()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 7710678f_8a35_d670_787b_1b44442f5721
  aa2f3685_bc96_20af_d66f_21464476764c["assumeAlpnSupported()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| aa2f3685_bc96_20af_d66f_21464476764c
  e59fe9ff_f558_8c64_301b_dbdee78e4015["SslContext()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| e59fe9ff_f558_8c64_301b_dbdee78e4015
  3e2a1e59_d538_2150_3f4c_cc854fb5b3b8["data()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 3e2a1e59_d538_2150_3f4c_cc854fb5b3b8
  02e72b34_5450_3300_17a5_7248b006addd["testNonSslRecord()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 02e72b34_5450_3300_17a5_7248b006addd
  3efd7f2f_21dc_cb46_829b_8c61ff62ab2a["testServerNameParsing()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 3efd7f2f_21dc_cb46_829b_8c61ff62ab2a
  9d09277d_ec2b_339c_e74b_86f8eaff441b["testNonAsciiServerNameParsing()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 9d09277d_ec2b_339c_e74b_86f8eaff441b
  0d39212f_5156_26fb_4253_c89b55750f03["testFallbackToDefaultContext()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 0d39212f_5156_26fb_4253_c89b55750f03
  72581b62_3ddc_fa4d_8223_78ba93f28a95["testMajorVersionNot3()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 72581b62_3ddc_fa4d_8223_78ba93f28a95
  925607e8_a787_e27e_c903_01fcc053a644["testSniWithAlpnHandler()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 925607e8_a787_e27e_c903_01fcc053a644
  43ec0116_7195_0a12_237d_6e2484e5347d["testReplaceHandler()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 43ec0116_7195_0a12_237d_6e2484e5347d
  495097de_5185_3185_66b9_43abc32cf9ab["releaseAll()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 495097de_5185_3185_66b9_43abc32cf9ab
  685aab7d_04b9_f473_82b1_13966c171abd["testNonFragmented()"]
  00b45f27_cbf5_af92_430f_7f0426117fa5 -->|method| 685aab7d_04b9_f473_82b1_13966c171abd

Relationship Graph

Source Code

handler/src/test/java/io/netty/handler/ssl/SniHandlerTest.java lines 84–855

public class SniHandlerTest {

    private static ApplicationProtocolConfig newAlpnConfig() {
        return new ApplicationProtocolConfig(
                ApplicationProtocolConfig.Protocol.ALPN,
                // NO_ADVERTISE is currently the only mode supported by both OpenSsl and JDK providers.
                ApplicationProtocolConfig.SelectorFailureBehavior.NO_ADVERTISE,
                // ACCEPT is currently the only mode supported by both OpenSsl and JDK providers.
                ApplicationProtocolConfig.SelectedListenerFailureBehavior.ACCEPT,
                "myprotocol");
    }

    private static void assumeAlpnSupported(SslProvider provider) {
        switch (provider) {
            case OPENSSL:
            case OPENSSL_REFCNT:
                assumeTrue(OpenSsl.isAlpnSupported());
                break;
            case JDK:
                break;
            default:
                throw new Error("Unexpected alpn provider: " + provider);
        }
    }

    private static SslContext makeSslContext(SslProvider provider, boolean alpn) throws Exception {
        if (alpn) {
            assumeAlpnSupported(provider);
        }

        File keyFile = ResourcesUtil.getFile(SniHandlerTest.class, "test_encrypted.pem");
        File crtFile = ResourcesUtil.getFile(SniHandlerTest.class, "test.crt");

        SslContextBuilder sslCtxBuilder = SslContextBuilder.forServer(crtFile, keyFile, "12345")
                .sslProvider(provider);
        if (alpn) {
            sslCtxBuilder.applicationProtocolConfig(newAlpnConfig());
        }
        return sslCtxBuilder.build();
    }

    private static SslContext makeSslClientContext(SslProvider provider, boolean alpn) throws Exception {
        if (alpn) {
            assumeAlpnSupported(provider);
        }

        File crtFile = ResourcesUtil.getFile(SniHandlerTest.class, "test.crt");

        SslContextBuilder sslCtxBuilder = SslContextBuilder.forClient()
                .trustManager(crtFile)
                .endpointIdentificationAlgorithm(null)
                .sslProvider(provider);
        if (alpn) {
            sslCtxBuilder.applicationProtocolConfig(newAlpnConfig());
        }
        return sslCtxBuilder.build();
    }

    static Iterable<?> data() {
        List<SslProvider> params = new ArrayList<SslProvider>(3);
        if (OpenSsl.isAvailable()) {
            params.add(SslProvider.OPENSSL);
            params.add(SslProvider.OPENSSL_REFCNT);
        }
        params.add(SslProvider.JDK);
        return params;
    }

    @ParameterizedTest(name = "{index}: sslProvider={0}")
    @MethodSource("data")
    public void testNonSslRecord(SslProvider provider) throws Exception {
        SslContext nettyContext = makeSslContext(provider, false);
        try {
            final AtomicReference<SslHandshakeCompletionEvent> evtRef =
                    new AtomicReference<SslHandshakeCompletionEvent>();
            SniHandler handler = new SniHandler(new DomainNameMappingBuilder<SslContext>(nettyContext).build());
            final EmbeddedChannel ch = new EmbeddedChannel(handler, new ChannelInboundHandlerAdapter() {
                @Override
                public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                    if (evt instanceof SslHandshakeCompletionEvent) {
                        assertTrue(evtRef.compareAndSet(null, (SslHandshakeCompletionEvent) evt));

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free