diff --git a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/CallAudioLifecycleTest.kt b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/CallAudioLifecycleTest.kt index 9646f133..bc0c0a7c 100644 --- a/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/CallAudioLifecycleTest.kt +++ b/tools/chatgui-android/router-tests/src/test/kotlin/com/utun/chat/data/CallAudioLifecycleTest.kt @@ -205,4 +205,23 @@ class CallAudioLifecycleTest { assertTrue(diagnostic("record stop failed")); assertTrue(diagnostic("track pause failed")) assertEquals(1, stops()) } + + @Test fun zeroCallIdCannotAcquireResourcesAndBackgroundStopCannotReleaseThem() { + assertThrows(IllegalArgumentException::class.java) { engine.start(0) } + assertTrue(NativeLib.callAudioCommands.isEmpty()); assertTrue(diagnostic("zero call id")) + start() + var failure: Exception? = null + Thread { try { engine.stop() } catch (e: Exception) { failure = e } }.apply { start(); join() } + assertTrue(failure is IllegalStateException); assertTrue(engine.isActive()); assertEquals(0, stops()) + assertFalse(AudioRecord.created.single().released); assertTrue(diagnostic("stop outside main")) + } + + @Test fun lateTelecomOwnershipPreventsRestoringTheFallbackModeDuringStop() { + start() + engine.bindTelecom(UtunConnection()) + manager.mode = AudioManager.MODE_IN_COMMUNICATION + engine.stop() + assertEquals(AudioManager.MODE_IN_COMMUNICATION, manager.mode) + assertEquals(false, field("modeOwned")); assertEquals(1, stops()) + } }