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
Calls
Source
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