From 62baf074ee66b3045dfd9e267da0bc4809e2671f Mon Sep 17 00:00:00 2001 From: Florian-Limpoeck Date: Thu, 24 Oct 2024 18:15:42 +0200 Subject: [PATCH] fixed retain of CONNECT message in ClientConnection. --- .../mqtt/handler/connect/ConnectHandler.java | 4 +-- .../handler/connect/ConnectHandlerTest.java | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hivemq/mqtt/handler/connect/ConnectHandler.java b/src/main/java/com/hivemq/mqtt/handler/connect/ConnectHandler.java index 2354b7bf5..6d055d1e0 100644 --- a/src/main/java/com/hivemq/mqtt/handler/connect/ConnectHandler.java +++ b/src/main/java/com/hivemq/mqtt/handler/connect/ConnectHandler.java @@ -225,8 +225,8 @@ public void connectSuccessfulUndecided( } clientConnectionContext.proposeClientState(ClientState.AUTHENTICATED); - connectAuthenticated(ctx, clientConnectionContext, connect, clientSettings); cleanChannelAttributesAfterAuth(clientConnectionContext); + connectAuthenticated(ctx, clientConnectionContext, connect, clientSettings); } public void connectSuccessfulAuthenticated( @@ -236,8 +236,8 @@ public void connectSuccessfulAuthenticated( final @Nullable ModifiableClientSettingsImpl clientSettings) { clientConnectionContext.proposeClientState(ClientState.AUTHENTICATED); - connectAuthenticated(ctx, clientConnectionContext, connect, clientSettings); cleanChannelAttributesAfterAuth(clientConnectionContext); + connectAuthenticated(ctx, clientConnectionContext, connect, clientSettings); } private static void cleanChannelAttributesAfterAuth(final @NotNull ClientConnectionContext clientConnectionContext) { diff --git a/src/test/java/com/hivemq/mqtt/handler/connect/ConnectHandlerTest.java b/src/test/java/com/hivemq/mqtt/handler/connect/ConnectHandlerTest.java index e7ea70c89..515bd6c80 100644 --- a/src/test/java/com/hivemq/mqtt/handler/connect/ConnectHandlerTest.java +++ b/src/test/java/com/hivemq/mqtt/handler/connect/ConnectHandlerTest.java @@ -1467,6 +1467,36 @@ public void test_set_client_settings() { assertEquals(123, connect.getReceiveMaximum()); } + @Test(timeout = 5000) + public void test_connectAuthenticated_connectMessageCleared() { + createHandler(); + final CONNECT connect = + new CONNECT.Mqtt5Builder().withClientIdentifier("client").withAuthMethod("someMethod").build(); + final ModifiableClientSettingsImpl clientSettings = new ModifiableClientSettingsImpl(65535, null); + clientConnectionContext.setAuthConnect(connect); + + handler.connectSuccessfulAuthenticated(ctx, clientConnectionContext, connect, clientSettings); + + final ClientConnection clientConnection = ClientConnection.of(channel); + assertEquals(ClientState.AUTHENTICATED, clientConnection.getClientState()); + assertNull(clientConnection.getAuthConnect()); + } + + @Test(timeout = 5000) + public void test_connectUnauthenticated_connectMessageCleared() { + createHandler(); + final CONNECT connect = + new CONNECT.Mqtt5Builder().withClientIdentifier("client").withAuthMethod("someMethod").build(); + final ModifiableClientSettingsImpl clientSettings = new ModifiableClientSettingsImpl(65535, null); + clientConnectionContext.setAuthConnect(connect); + + handler.connectSuccessfulUndecided(ctx, clientConnectionContext, connect, clientSettings); + + final ClientConnection clientConnection = ClientConnection.of(channel); + assertEquals(ClientState.AUTHENTICATED, clientConnection.getClientState()); + assertNull(clientConnection.getAuthConnect()); + } + @Test public void test_start_connection_persistent() throws Exception { final CONNECT connect = new CONNECT.Mqtt3Builder().withClientIdentifier("client")