From 82bd98dfd8a461a61798b9aecb7f6ff21feebd47 Mon Sep 17 00:00:00 2001 From: M57 Date: Thu, 25 Jun 2026 23:40:08 +0300 Subject: [PATCH] Fix HermesWsClientTest teardown and OkHttp 5.x deprecation warnings - Widen catch in tearDown() from Exception to Throwable so MockWebServer.shutdown() AssertionError is caught (OkHttp 5.x enforces clean connection state on shutdown) - Increase teardown wait from 100ms to 500ms for WS close handshake - Replace deprecated RequestBody.create(null, ...) with toRequestBody() extension from Kotlin API --- .../java/com/m57/hermescontrol/data/ws/HermesWsClient.kt | 4 +++- .../m57/hermescontrol/ui/authlogin/AuthLoginViewModel.kt | 6 +++--- .../com/m57/hermescontrol/data/ws/HermesWsClientTest.kt | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/m57/hermescontrol/data/ws/HermesWsClient.kt b/app/src/main/java/com/m57/hermescontrol/data/ws/HermesWsClient.kt index bad4c3e2..1cd610c9 100644 --- a/app/src/main/java/com/m57/hermescontrol/data/ws/HermesWsClient.kt +++ b/app/src/main/java/com/m57/hermescontrol/data/ws/HermesWsClient.kt @@ -25,7 +25,9 @@ import kotlinx.coroutines.launch import okhttp3.CertificatePinner import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import okhttp3.WebSocket import okhttp3.WebSocketListener @@ -166,7 +168,7 @@ object HermesWsClient { Request.Builder() .url("http://${AuthManager.getHost()}:${AuthManager.getPort()}/api/auth/ws-ticket") .header("Cookie", "hermes_session_at=$sessionCookie") - .post(RequestBody.create(null, "{}")) + .post("{}".toRequestBody()) .build() val response = client.newCall(request).execute() if (response.isSuccessful) { diff --git a/app/src/main/java/com/m57/hermescontrol/ui/authlogin/AuthLoginViewModel.kt b/app/src/main/java/com/m57/hermescontrol/ui/authlogin/AuthLoginViewModel.kt index da338816..c24106c9 100644 --- a/app/src/main/java/com/m57/hermescontrol/ui/authlogin/AuthLoginViewModel.kt +++ b/app/src/main/java/com/m57/hermescontrol/ui/authlogin/AuthLoginViewModel.kt @@ -18,7 +18,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request -import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import java.util.concurrent.TimeUnit /** @@ -341,7 +341,7 @@ class AuthLoginViewModel(private val app: Application) : ViewModel() { Request.Builder() .url("$baseUrl/auth/password-login") .header("Content-Type", "application/json") - .post(RequestBody.create(null, jsonBody)) + .post(jsonBody.toRequestBody()) .build() val loginResp = loginClient.newCall(loginReq).execute() @@ -389,7 +389,7 @@ class AuthLoginViewModel(private val app: Application) : ViewModel() { Request.Builder() .url("$baseUrl/api/auth/ws-ticket") .header("Cookie", cookieHeader) - .post(RequestBody.create(null, "{}")) + .post("{}".toRequestBody()) .build() val ticketResp = ticketClient.newCall(ticketReq).execute() diff --git a/app/src/test/java/com/m57/hermescontrol/data/ws/HermesWsClientTest.kt b/app/src/test/java/com/m57/hermescontrol/data/ws/HermesWsClientTest.kt index 0e4e8c86..531004a5 100644 --- a/app/src/test/java/com/m57/hermescontrol/data/ws/HermesWsClientTest.kt +++ b/app/src/test/java/com/m57/hermescontrol/data/ws/HermesWsClientTest.kt @@ -60,10 +60,11 @@ class HermesWsClientTest { fun tearDown() { HermesWsClient.disconnect() // Wait a bit to allow internal OkHttp coroutines to clean up before shutting down MockWebServer - Thread.sleep(100) + // Increased from 100ms for OkHttp 5.x — needs more time for the WS close handshake + Thread.sleep(500) try { mockWebServer.shutdown() - } catch (e: Exception) { + } catch (e: Throwable) { e.printStackTrace() } unmockkAll()