From 6788ae157412407af3fe05e2807b6618e3b74c93 Mon Sep 17 00:00:00 2001 From: Kanat Kiialbaev Date: Tue, 5 Sep 2023 11:28:38 -0700 Subject: [PATCH] [i118] Fix NPE in StreamWebSocket (onFailure) (#4943) * Fix NPE in StreamWebSocket (onFailure) (cherry picked from commit db8eee895c671b18cf0f6b2b58037e3849e5eea9) * Add test (cherry picked from commit d16d02acc71e0acc31241f95b7e72d1f4f202b06) * add CHANGELOG --------- Co-authored-by: Daniel Novak --- CHANGELOG.md | 1 + .../client/socket/experimental/ws/StreamWebSocket.kt | 8 ++++---- .../client/socket/experimental/ws/StreamWebSocketTest.kt | 8 ++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23e18108e89..ea1a7d0dddf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ## stream-chat-android-client ### 🐞 Fixed +- Fixed NPE in `StreamWebSocket.onFailure`. [#4943](https://github.com/GetStream/stream-chat-android/pull/4943) ### ⬆️ Improved diff --git a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocket.kt b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocket.kt index 9affb4b21d8..4d7ae0f157b 100644 --- a/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocket.kt +++ b/stream-chat-android-client/src/main/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocket.kt @@ -38,7 +38,9 @@ internal class StreamWebSocket( private val parser: ChatParser, socketCreator: (WebSocketListener) -> WebSocket, ) { - private val webSocketListener = object : WebSocketListener() { + private val eventFlow = MutableSharedFlow(extraBufferCapacity = EVENTS_BUFFER_SIZE) + + private val webSocket = socketCreator(object : WebSocketListener() { override fun onMessage(webSocket: WebSocket, text: String) { eventFlow.tryEmit(parseMessage(text)) } @@ -57,9 +59,7 @@ internal class StreamWebSocket( eventFlow.tryEmit(StreamWebSocketEvent.Error(ChatNetworkError.create(ChatErrorCode.SOCKET_CLOSED))) } } - } - private val webSocket = socketCreator(webSocketListener) - private val eventFlow = MutableSharedFlow(extraBufferCapacity = EVENTS_BUFFER_SIZE) + }) fun send(chatEvent: ChatEvent): Boolean = webSocket.send(parser.toJson(chatEvent)) fun close(): Boolean = webSocket.close(CLOSE_SOCKET_CODE, CLOSE_SOCKET_REASON) diff --git a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocketTest.kt b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocketTest.kt index 7251eb1e380..982269edfe6 100644 --- a/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocketTest.kt +++ b/stream-chat-android-client/src/test/java/io/getstream/chat/android/client/socket/experimental/ws/StreamWebSocketTest.kt @@ -52,6 +52,14 @@ internal class StreamWebSocketTest { webSocket } + @Test + fun `Class can be created correctly with listener invoked during creation`() { + StreamWebSocket(parser, socketCreator = { + it.onFailure(webSocket, IllegalStateException(), null) + webSocket + }) + } + @Test fun `When a chatEvent is sent, websocket should send a parsed event`() { val chatEvent = mock()