Home / Function/ testCloseNotifySequence() — netty Function Reference

testCloseNotifySequence() — netty Function Reference

Architecture documentation for the testCloseNotifySequence() function in SSLEngineTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79["testCloseNotifySequence()"]
  9150c92a_2afc_b83a_c3bf_86dfac6e9d9b["SSLEngineTest"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|defined in| 9150c92a_2afc_b83a_c3bf_86dfac6e9d9b
  bf19737b_7dc7_9dfd_0a67_ae31448ebbe8["protocols()"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|calls| bf19737b_7dc7_9dfd_0a67_ae31448ebbe8
  7380f50e_d3f0_3078_ee65_de1cb780c79d["handshake()"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|calls| 7380f50e_d3f0_3078_ee65_de1cb780c79d
  13aca077_a788_4333_9f8b_2b1437653846["delegate()"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|calls| 13aca077_a788_4333_9f8b_2b1437653846
  5b123f90_9ac9_26e0_c382_637d0fcbc28b["assertEngineRemainsClosed()"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|calls| 5b123f90_9ac9_26e0_c382_637d0fcbc28b
  87e8e20d_ffbe_f5c3_4fd0_7d8ac419206d["cleanupClientSslEngine()"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|calls| 87e8e20d_ffbe_f5c3_4fd0_7d8ac419206d
  78ad5fe5_58d2_9877_f633_22a7048c0e5e["cleanupServerSslEngine()"]
  de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 -->|calls| 78ad5fe5_58d2_9877_f633_22a7048c0e5e
  style de1c51ac_1e6a_c9e2_ab64_b5f00fba9a79 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java lines 2544–2693

    @MethodSource("newTestParams")
    @ParameterizedTest
    public void testCloseNotifySequence(SSLEngineTestParam param) throws Exception {
        SelfSignedCertificate cert = CachedSelfSignedCertificate.getCachedCertificate();

        clientSslCtx = wrapContext(param, SslContextBuilder
                .forClient()
                .trustManager(cert.cert())
                .sslContextProvider(clientSslContextProvider())
                .sslProvider(sslClientProvider())
                .endpointIdentificationAlgorithm(null)
                // This test only works for non TLSv1.3 for now
                .protocols(SslProtocols.TLS_v1_2)
                .build());
        SSLEngine client = wrapEngine(clientSslCtx.newEngine(UnpooledByteBufAllocator.DEFAULT));

        serverSslCtx = wrapContext(param, SslContextBuilder
                .forServer(cert.certificate(), cert.privateKey())
                .sslContextProvider(serverSslContextProvider())
                .sslProvider(sslServerProvider())
                // This test only works for non TLSv1.3 for now
                .protocols(SslProtocols.TLS_v1_2)
                .build());
        SSLEngine server = wrapEngine(serverSslCtx.newEngine(UnpooledByteBufAllocator.DEFAULT));

        try {
            ByteBuffer plainClientOut = allocateBuffer(param.type(), client.getSession().getApplicationBufferSize());
            ByteBuffer plainServerOut = allocateBuffer(param.type(), server.getSession().getApplicationBufferSize());

            ByteBuffer encryptedClientToServer =
                    allocateBuffer(param.type(), client.getSession().getPacketBufferSize());
            ByteBuffer encryptedServerToClient =
                    allocateBuffer(param.type(), server.getSession().getPacketBufferSize());
            ByteBuffer empty = allocateBuffer(param.type(), 0);

            handshake(param.type(), param.delegate(), client, server);

            // This will produce a close_notify
            client.closeOutbound();

            // Something still pending in the outbound buffer.
            assertFalse(client.isOutboundDone());
            assertFalse(client.isInboundDone());

            // Now wrap and so drain the outbound buffer.
            SSLEngineResult result = client.wrap(empty, encryptedClientToServer);
            encryptedClientToServer.flip();

            assertEquals(SSLEngineResult.Status.CLOSED, result.getStatus());
            SSLEngineResult.HandshakeStatus hs = result.getHandshakeStatus();
            // Need an UNWRAP to read the response of the close_notify
            if (sslClientProvider() == SslProvider.JDK || Conscrypt.isEngineSupported(client)) {
                assertTrue(hs == SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING
                        || hs == SSLEngineResult.HandshakeStatus.NEED_UNWRAP);
            } else {
                assertEquals(SSLEngineResult.HandshakeStatus.NEED_UNWRAP, hs);
            }

            int produced = result.bytesProduced();
            int consumed = result.bytesConsumed();
            int closeNotifyLen = produced;

            assertTrue(produced > 0);
            assertEquals(0, consumed);
            assertEquals(produced, encryptedClientToServer.remaining());
            // Outbound buffer should be drained now.
            assertTrue(client.isOutboundDone());
            assertFalse(client.isInboundDone());

            assertFalse(server.isOutboundDone());
            assertFalse(server.isInboundDone());
            result = server.unwrap(encryptedClientToServer, plainServerOut);
            plainServerOut.flip();

            assertEquals(SSLEngineResult.Status.CLOSED, result.getStatus());
            // Need a WRAP to respond to the close_notify
            assertEquals(SSLEngineResult.HandshakeStatus.NEED_WRAP, result.getHandshakeStatus());

            produced = result.bytesProduced();
            consumed = result.bytesConsumed();
            assertEquals(closeNotifyLen, consumed);

Domain

Subdomains

Frequently Asked Questions

What does testCloseNotifySequence() do?
testCloseNotifySequence() is a function in the netty codebase, defined in handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java.
Where is testCloseNotifySequence() defined?
testCloseNotifySequence() is defined in handler/src/test/java/io/netty/handler/ssl/SSLEngineTest.java at line 2544.
What does testCloseNotifySequence() call?
testCloseNotifySequence() calls 6 function(s): assertEngineRemainsClosed, cleanupClientSslEngine, cleanupServerSslEngine, delegate, handshake, protocols.

Analyze Your Own Codebase

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

Try Supermodel Free