diff --git a/lib/src/androidTest/java/at/bitfire/cert4android/UserDecisionRegistryTest.kt b/lib/src/androidTest/java/at/bitfire/cert4android/UserDecisionRegistryTest.kt index 7ba2b6b..bde1987 100644 --- a/lib/src/androidTest/java/at/bitfire/cert4android/UserDecisionRegistryTest.kt +++ b/lib/src/androidTest/java/at/bitfire/cert4android/UserDecisionRegistryTest.kt @@ -28,7 +28,6 @@ class UserDecisionRegistryTest { @Before fun setUp() { - mockkObject(NotificationUtils) mockkObject(registry) } @@ -58,25 +57,32 @@ class UserDecisionRegistryTest { val canSendFeedback = Semaphore(0) val getUserDecision: suspend (X509Certificate) -> Boolean = mockk { coEvery { this@mockk(testCert) } coAnswers { - canSendFeedback.acquire() + canSendFeedback.acquire() // block call until released false } } val results = Collections.synchronizedList(mutableListOf()) - runBlocking { - repeat(5) { - launch(Dispatchers.Default) { - results += registry.check(testCert, this, getUserDecision) + runBlocking(Dispatchers.Default) { + try { + // "enqueue" 5 getUserDecision calls (each blocked by the semaphore) + repeat(5) { + launch { + results += registry.check(testCert, this, getUserDecision) + } } + } finally { + // release all calls + canSendFeedback.release(5) } - canSendFeedback.release() } + + // pendingDecisions should be empty synchronized(registry.pendingDecisions) { assertFalse(registry.pendingDecisions.containsKey(testCert)) } - assertEquals(5, results.size) - assertTrue(results.all { !it }) - coVerify(exactly = 1) { getUserDecision(testCert) } + assertEquals(5, results.size) // should be 5 results + assertTrue(results.all { result -> !result }) // all results should be false + coVerify(exactly = 1) { getUserDecision(testCert) } // getUserDecision should be called only once } @Test @@ -89,13 +95,16 @@ class UserDecisionRegistryTest { } } val results = Collections.synchronizedList(mutableListOf()) - runBlocking { - repeat(5) { - launch(Dispatchers.Default) { - results += registry.check(testCert, this, getUserDecision) + runBlocking(Dispatchers.Default) { + try { + repeat(5) { + launch { + results += registry.check(testCert, this, getUserDecision) + } } + } finally { + canSendFeedback.release(5) } - canSendFeedback.release() } synchronized(registry.pendingDecisions) { assertFalse(registry.pendingDecisions.containsKey(testCert))