diff --git a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioCallLifecycleTest.kt b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioCallLifecycleTest.kt index f41a5a6d4..630bcbe69 100644 --- a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioCallLifecycleTest.kt +++ b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioCallLifecycleTest.kt @@ -235,11 +235,11 @@ class RadioCallLifecycleTest { @Test fun outcomeNotificationPreservesForegroundServiceAndPhoneOutcomeNotifications() { val manager = requireNotNull(context.notificationManager) - val overlay = Notification(); val phone = Notification() - manager.active[1002] = overlay; manager.active[1003] = phone + val call = Notification(); val phone = Notification(); val stream = Notification() + manager.active[1002] = call; manager.active[1003] = phone; manager.active[1004] = stream val id = outgoing(); emit(id, 4, 2, false) - assertSame(overlay, manager.active[1002]); assertSame(phone, manager.active[1003]) - assertTrue(manager.active.containsKey(1004)) + assertSame(call, manager.active[1002]); assertSame(phone, manager.active[1003]); assertSame(stream, manager.active[1004]) + assertTrue(manager.active.containsKey(1006)) } @Test fun outcomePresentationFailuresCannotStrandTheEndedState() { diff --git a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioOverlayLifecycleTest.kt b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioOverlayLifecycleTest.kt index 84edbff1e..6b55dc774 100644 --- a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioOverlayLifecycleTest.kt +++ b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioOverlayLifecycleTest.kt @@ -86,8 +86,9 @@ class RadioOverlayLifecycleTest { if (it.foregroundId != 0 && it.stops == 0) { drain(); radio.onSettingsApplied(NativeLib.radioRequest, true); drain() } } private fun show(): RadioOverlayService = create().also { it.onStartCommand(null, 0, 1); dispatcher.scheduler.runCurrent() } - private fun diagnostic(fragment: String) = assertTrue("Missing diagnostic: $fragment", - LogManager.entries.any { fragment in it.message && it.level in listOf("ERROR", "WARN") }) + private fun diagnostic(fragment: String) = synchronized(LogManager.entries) { + assertTrue("Missing diagnostic: $fragment", LogManager.entries.any { fragment in it.message && it.level in listOf("ERROR", "WARN") }) + } private fun touch(action: Int, time: Long = 100, down: Long = time, x: Float = 0f, target: View = view): Boolean { val handled = target.touch(MotionEvent(action, rawX = x, eventTime = time, downTime = down)) drain() diff --git a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioWorkerLifecycleTest.kt b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioWorkerLifecycleTest.kt index 525a37e4e..0882ffc14 100644 --- a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioWorkerLifecycleTest.kt +++ b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/RadioWorkerLifecycleTest.kt @@ -178,7 +178,10 @@ class RadioWorkerLifecycleTest { NativeLib.radioFailures = setOf(failure) assertTrue(engine.talkBegin()); drain() await("capture startup diagnostic $failure") { diagnostic("capture startup failed") } - captureEnded(); assertTrue(AndroidMicrophoneCapture.opened.all { it.closed }) + captureEnded() + val mediaIo = MediaAudioSession::class.java.getDeclaredField("io").apply { isAccessible = true } + .get(MediaAudioController) as ExecutorService + assertTrue(mediaIo.submit { AndroidMicrophoneCapture.opened.all { it.closed } }.get(5, TimeUnit.SECONDS)) NativeLib.radioFailures = emptySet(); engine.cancelTalk() } }