From 346b4ce22c42f278eefbce256ff99d02e24c6530 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Thu, 9 May 2024 18:33:45 -0400 Subject: [PATCH 1/3] wait for operation repo to start completely Ran 100 times to ensure this test is now stable. --- .../onesignal/core/internal/operations/OperationRepoTests.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationRepoTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationRepoTests.kt index 529e794f63..07c634e892 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationRepoTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationRepoTests.kt @@ -607,6 +607,8 @@ class OperationRepoTests : FunSpec({ // When mocks.operationRepo.addOperationLoadedListener(spyListener) mocks.operationRepo.start() + // enqueueAndWait used to know we are fully loaded. + mocks.operationRepo.enqueueAndWait(mockOperation()) // Then mocks.operationRepo.hasSubscribers shouldBe true From 685e471e14816ffe07544ef7252a35317a5ec1bd Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Thu, 9 May 2024 18:50:41 -0400 Subject: [PATCH 2/3] flaky test due to not waiting for OperationRepo This test had two problems: 1. We were not waiting for OperationRepo.loadSavedOperations to finish 2. After we added waiting, it didn't work we didn't wrap RecoverFromDroppedLoginBug in spyk(). This was causing all fields and properties being cleared from it! --- .../RecoverFromDroppedLoginBugTests.kt | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/migrations/RecoverFromDroppedLoginBugTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/migrations/RecoverFromDroppedLoginBugTests.kt index 4cb82d08ec..bd5082b806 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/migrations/RecoverFromDroppedLoginBugTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/migrations/RecoverFromDroppedLoginBugTests.kt @@ -1,6 +1,8 @@ package com.onesignal.user.internal.migrations +import com.onesignal.common.threading.Waiter import com.onesignal.core.internal.config.ConfigModelStore +import com.onesignal.core.internal.operations.IOperationRepoLoadedListener import com.onesignal.core.internal.operations.impl.OperationModelStore import com.onesignal.core.internal.operations.impl.OperationRepo import com.onesignal.core.internal.time.impl.Time @@ -31,16 +33,24 @@ class RecoverFromDroppedLoginBugTests : FunSpec({ ) every { mockOperationModelStore.loadOperations() } just runs every { mockOperationModelStore.list() } returns listOf() - - val recovery = RecoverFromDroppedLoginBug(operationRepo, MockHelper.identityModelStore(), mockConfigModelStore) - every { recovery.onOperationRepoLoaded() } just runs + val recovery = spyk(RecoverFromDroppedLoginBug(operationRepo, MockHelper.identityModelStore(), mockConfigModelStore)) // When - operationRepo.start() recovery.start() + val waiter = Waiter() + operationRepo.addOperationLoadedListener( + object : IOperationRepoLoadedListener { + override fun onOperationRepoLoaded() { + waiter.wake() + } + }, + ) + operationRepo.start() + // Waiting here ensures recovery.onOperationRepoLoaded() is called consistently + waiter.waitForWake() // Then - verify { + verify(exactly = 1) { operationRepo.subscribe(recovery) recovery.onOperationRepoLoaded() } From 939a164081e05e988b07f24b40cc359965c01a43 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Thu, 9 May 2024 21:10:35 -0400 Subject: [PATCH 3/3] fix flaky Retry-After test Test sometimes failed on "response2 shouldBe null" --- .../java/com/onesignal/core/internal/http/HttpClientTests.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/http/HttpClientTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/http/HttpClientTests.kt index a14039559a..b2fc8d941b 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/http/HttpClientTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/http/HttpClientTests.kt @@ -239,7 +239,7 @@ class HttpClientTests : FunSpec({ mocks.factory.mockResponse = mockSuccessfulResponse val response2 = - withTimeoutOrNull(999) { + withTimeoutOrNull(975) { mocks.httpClient.post("URL", JSONObject()) }