Home / Class/ WebSocketHandshakeHandOverTest Class — netty Architecture

WebSocketHandshakeHandOverTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902["WebSocketHandshakeHandOverTest"]
  08a6f2d2_d250_b19f_7a09_7e8fcee2696e["WebSocketHandshakeHandOverTest.java"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|defined in| 08a6f2d2_d250_b19f_7a09_7e8fcee2696e
  59e6ec30_4080_33eb_4650_b8f8b910ccd2["setUp()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| 59e6ec30_4080_33eb_4650_b8f8b910ccd2
  9ed7bce0_e335_5d6a_b465_b14a56ba6a90["testHandover()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| 9ed7bce0_e335_5d6a_b465_b14a56ba6a90
  dd9e5ef2_79fa_2034_1449_21cd8d663c13["testClientHandshakeTimeout()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| dd9e5ef2_79fa_2034_1449_21cd8d663c13
  a67d0487_9937_f01a_860c_76b3effb9bb7["testHandshakeFutureIsNotifiedOnChannelClose()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| a67d0487_9937_f01a_860c_76b3effb9bb7
  70999066_6bf3_6340_8da2_5b0391bf3457["testClientHandshakerForceClose()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| 70999066_6bf3_6340_8da2_5b0391bf3457
  8e12a079_6d1e_af18_a1a8_3016f84016ff["transferAllDataWithMerge()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| 8e12a079_6d1e_af18_a1a8_3016f84016ff
  817febfc_1cd7_c3aa_75aa_eb6cd76b02d3["EmbeddedChannel()"]
  f9cd3101_4b2b_a61c_41fe_b9876a6a0902 -->|method| 817febfc_1cd7_c3aa_75aa_eb6cd76b02d3

Relationship Graph

Source Code

codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketHandshakeHandOverTest.java lines 45–364

public class WebSocketHandshakeHandOverTest {

    private boolean serverReceivedHandshake;
    private WebSocketServerProtocolHandler.HandshakeComplete serverHandshakeComplete;
    private boolean clientReceivedHandshake;
    private boolean clientReceivedMessage;
    private boolean serverReceivedCloseHandshake;
    private boolean clientForceClosed;
    private boolean clientHandshakeTimeout;

    private final class CloseNoOpServerProtocolHandler extends WebSocketServerProtocolHandler {
        CloseNoOpServerProtocolHandler(String websocketPath) {
            super(WebSocketServerProtocolConfig.newBuilder()
                .websocketPath(websocketPath)
                .allowExtensions(false)
                .sendCloseFrame(null)
                .build());
        }

        @Override
        protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame, List<Object> out) throws Exception {
            if (frame instanceof CloseWebSocketFrame) {
                serverReceivedCloseHandshake = true;
                return;
            }
            super.decode(ctx, frame, out);
        }
    }

    @BeforeEach
    public void setUp() {
        serverReceivedHandshake = false;
        serverHandshakeComplete = null;
        clientReceivedHandshake = false;
        clientReceivedMessage = false;
        serverReceivedCloseHandshake = false;
        clientForceClosed = false;
        clientHandshakeTimeout = false;
    }

    @Test
    public void testHandover() throws Exception {
        EmbeddedChannel serverChannel = createServerChannel(new SimpleChannelInboundHandler<Object>() {
            @Override
            public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
                if (evt == ServerHandshakeStateEvent.HANDSHAKE_COMPLETE) {
                    serverReceivedHandshake = true;
                    // immediately send a message to the client on connect
                    ctx.writeAndFlush(new TextWebSocketFrame("abc"));
                } else if (evt instanceof WebSocketServerProtocolHandler.HandshakeComplete) {
                    serverHandshakeComplete = (WebSocketServerProtocolHandler.HandshakeComplete) evt;
                }
            }
            @Override
            protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
            }
        });

        EmbeddedChannel clientChannel = createClientChannel(new SimpleChannelInboundHandler<Object>() {
            @Override
            public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
                if (evt == ClientHandshakeStateEvent.HANDSHAKE_COMPLETE) {
                    clientReceivedHandshake = true;
                }
            }
            @Override
            protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
                if (msg instanceof TextWebSocketFrame) {
                    clientReceivedMessage = true;
                }
            }
        });

        // Transfer the handshake from the client to the server
        transferAllDataWithMerge(clientChannel, serverChannel);
        assertTrue(serverReceivedHandshake);
        assertNotNull(serverHandshakeComplete);
        assertEquals("/test", serverHandshakeComplete.requestUri());
        assertEquals(8, serverHandshakeComplete.requestHeaders().size());
        assertEquals("test-proto-2", serverHandshakeComplete.selectedSubprotocol());

Frequently Asked Questions

What is the WebSocketHandshakeHandOverTest class?
WebSocketHandshakeHandOverTest is a class in the netty codebase, defined in codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketHandshakeHandOverTest.java.
Where is WebSocketHandshakeHandOverTest defined?
WebSocketHandshakeHandOverTest is defined in codec-http/src/test/java/io/netty/handler/codec/http/websocketx/WebSocketHandshakeHandOverTest.java at line 45.

Analyze Your Own Codebase

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

Try Supermodel Free