@@ -28,7 +28,6 @@ class UserDecisionRegistryTest {
2828
2929 @Before
3030 fun setUp () {
31- mockkObject(NotificationUtils )
3231 mockkObject(registry)
3332 }
3433
@@ -58,25 +57,32 @@ class UserDecisionRegistryTest {
5857 val canSendFeedback = Semaphore (0 )
5958 val getUserDecision: suspend (X509Certificate ) -> Boolean = mockk {
6059 coEvery { this @mockk(testCert) } coAnswers {
61- canSendFeedback.acquire()
60+ canSendFeedback.acquire() // block call until released
6261 false
6362 }
6463 }
6564 val results = Collections .synchronizedList(mutableListOf<Boolean >())
66- runBlocking {
67- repeat(5 ) {
68- launch(Dispatchers .Default ) {
69- results + = registry.check(testCert, this , getUserDecision)
65+ runBlocking(Dispatchers .Default ) {
66+ try {
67+ // "enqueue" 5 getUserDecision calls (each blocked by the semaphore)
68+ repeat(5 ) {
69+ launch {
70+ results + = registry.check(testCert, this , getUserDecision)
71+ }
7072 }
73+ } finally {
74+ // release all calls
75+ canSendFeedback.release(5 )
7176 }
72- canSendFeedback.release()
7377 }
78+
79+ // pendingDecisions should be empty
7480 synchronized(registry.pendingDecisions) {
7581 assertFalse(registry.pendingDecisions.containsKey(testCert))
7682 }
77- assertEquals(5 , results.size)
78- assertTrue(results.all { ! it })
79- coVerify(exactly = 1 ) { getUserDecision(testCert) }
83+ assertEquals(5 , results.size) // should be 5 results
84+ assertTrue(results.all { result -> ! result }) // all results should be false
85+ coVerify(exactly = 1 ) { getUserDecision(testCert) } // getUserDecision should be called only once
8086 }
8187
8288 @Test
@@ -89,13 +95,16 @@ class UserDecisionRegistryTest {
8995 }
9096 }
9197 val results = Collections .synchronizedList(mutableListOf<Boolean >())
92- runBlocking {
93- repeat(5 ) {
94- launch(Dispatchers .Default ) {
95- results + = registry.check(testCert, this , getUserDecision)
98+ runBlocking(Dispatchers .Default ) {
99+ try {
100+ repeat(5 ) {
101+ launch {
102+ results + = registry.check(testCert, this , getUserDecision)
103+ }
96104 }
105+ } finally {
106+ canSendFeedback.release(5 )
97107 }
98- canSendFeedback.release()
99108 }
100109 synchronized(registry.pendingDecisions) {
101110 assertFalse(registry.pendingDecisions.containsKey(testCert))
0 commit comments