Skip to content

Commit 6f2d264

Browse files
authored
Merge pull request #2498 from OneSignal/chore-flaky-startupservice-test
Chore: Tests: fix a flaky test in StartupServiceTests
2 parents 5054a44 + 98962cd commit 6f2d264

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/startup/StartupServiceTests.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import com.onesignal.common.services.ServiceBuilder
44
import com.onesignal.common.services.ServiceProvider
55
import com.onesignal.debug.LogLevel
66
import com.onesignal.debug.internal.logging.Logging
7+
import com.onesignal.mocks.IOMockHelper
78
import io.kotest.assertions.throwables.shouldThrowUnit
89
import io.kotest.core.spec.style.FunSpec
910
import io.kotest.matchers.shouldBe
10-
import io.mockk.coVerifyOrder
1111
import io.mockk.every
1212
import io.mockk.mockk
1313
import io.mockk.spyk
1414
import io.mockk.verify
15+
import kotlinx.coroutines.CompletableDeferred
1516

1617
class StartupServiceTests : FunSpec({
1718
fun setupServiceProvider(
@@ -26,6 +27,8 @@ class StartupServiceTests : FunSpec({
2627
return serviceBuilder.build()
2728
}
2829

30+
listener(IOMockHelper)
31+
2932
beforeAny {
3033
Logging.logLevel = LogLevel.NONE
3134
}
@@ -97,21 +100,22 @@ class StartupServiceTests : FunSpec({
97100
// Given
98101
val mockStartableService1 = spyk<IStartableService>()
99102
val mockStartableService2 = spyk<IStartableService>()
100-
val mockStartableService3 = spyk<IStartableService>()
103+
val startupService = StartupService(setupServiceProvider(listOf(), listOf(mockStartableService1)))
101104

102-
val startupService = StartupService(setupServiceProvider(listOf(), listOf(mockStartableService1, mockStartableService2)))
105+
// Block the scheduled services until we're ready
106+
val blockTrigger = CompletableDeferred<Unit>()
107+
every { mockStartableService1.start() } coAnswers {
108+
blockTrigger.await() // Block until released
109+
}
103110

104111
// When
105112
startupService.scheduleStart()
106-
mockStartableService3.start()
113+
mockStartableService2.start()
107114

108115
// Then
109-
Thread.sleep(10)
110-
coVerifyOrder {
111-
// service3 will call start() first even though service1 and service2 are scheduled first
112-
mockStartableService3.start()
113-
mockStartableService1.start()
114-
mockStartableService2.start()
115-
}
116+
// service2 does not block even though service1 is blocked
117+
verify(exactly = 1) { mockStartableService2.start() }
118+
blockTrigger.complete(Unit)
119+
verify { mockStartableService1.start() }
116120
}
117121
})

0 commit comments

Comments
 (0)