From 22bfafc3176825ca517053534b93e7d17cb66fb6 Mon Sep 17 00:00:00 2001 From: andrew-signal Date: Mon, 10 Feb 2025 08:55:43 -0500 Subject: [PATCH] Add fix + regression test for null disconnectReason in onConnectionInterrupted. --- .../internal/websocket/LibSignalChatConnection.kt | 2 +- .../internal/websocket/LibSignalChatConnectionTest.kt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt index 16ffc88969..f34fe1daa7 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt @@ -379,7 +379,7 @@ class LibSignalChatConnection( incomingRequestQueue.put(incomingWebSocketRequest) } - override fun onConnectionInterrupted(chat: ChatConnection, disconnectReason: ChatServiceException) { + override fun onConnectionInterrupted(chat: ChatConnection, disconnectReason: ChatServiceException?) { CHAT_SERVICE_LOCK.withLock { Log.i(TAG, "$name connection interrupted", disconnectReason) chatConnection = null diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnectionTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnectionTest.kt index b7df1dc0a0..9b559bace7 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnectionTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnectionTest.kt @@ -69,6 +69,12 @@ class LibSignalChatConnectionTest { delay { it.complete(null) disconnectLatch?.countDown() + + // The disconnectReason is null when the disconnect is due to the local client requesting the disconnect. + // This is a regression test because we previously forgot to update the Kotlin type definitions to + // match this when the behavior changed in libsignal-client, causing NullPointerExceptions + // missed connection interrupted events. + chatListener!!.onConnectionInterrupted(chatConnection, null) } }