Verify pending router cleanup through repeatable stop calls

This commit is contained in:
evgeny committed 2026-10-29 13:34:23 +01:00
1 parent f7ebf81061
commit 3ef245fc0a
2 files changed
+10 -7

No files matched your search

@@ -525,8 +525,10 @@ class CallAudioRouter {
val accepted = adapter.getProfileProxy(ChatApplication.instance, object : BluetoothProfile.ServiceListener {
override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
synchronized(this@CallAudioRouter) {
if (proxy in received && proxy !== btHeadset && proxy !in btProxies) {
LogManager.addLog("WARN", "CallAudioRouter", "released BT proxy callback ignored proxy=$proxy generation=$generation")
if (proxy in received && proxy !== btHeadset) {
LogManager.addLog("WARN", "CallAudioRouter", "retired BT proxy callback ignored proxy=$proxy generation=$generation")
releaseBtProxies()
scheduleCleanup()
return
}
received.add(proxy)
@@ -108,12 +108,13 @@ class CallAudioRouterRoutingTest {
BluetoothAdapter.current = adapter
router.start(); adapter.connect(0)
audio.failures = setOf("unregister after")
router.stop()
assertThrows(IllegalStateException::class.java) { router.stop() }
assertTrue(adapter.live.isEmpty())
assertTrue(audio.callbacks.isEmpty())
assertNull(audio.communicationDevice)
assertNull(router.currentOutputDevice)
assertFalse(router.btInputAvailable)
assertTrue(router.cleanupPending)
diagnostic("device callback unregister failed")
}
@@ -122,15 +123,15 @@ class CallAudioRouterRoutingTest {
val callback = audio.callbacks.single()
audio.failures = setOf("unregister")
try {
router.stop()
assertThrows(IllegalStateException::class.java) { router.stop() }
val count = audio.operations.size
callback.onAudioDevicesAdded(arrayOf(wired))
assertEquals(count, audio.operations.size)
assertNull(audio.communicationDevice)
assertNull(router.currentOutputDevice)
} finally {
// Имитация отказавшей ОС оставляет регистрацию: убрать только fixture после проверки best-effort stop.
audio.failures = emptySet(); audio.unregisterAudioDeviceCallback(callback)
audio.failures = emptySet(); router.stop()
assertTrue(audio.callbacks.isEmpty()); assertFalse(router.cleanupPending)
}
diagnostic("device callback unregister failed")
}
@@ -140,7 +141,7 @@ class CallAudioRouterRoutingTest {
router.setAutoHeadset(true); router.start()
assertTrue(router.headsetAvailable)
audio.failures = setOf("clear")
router.stop()
assertThrows(IllegalStateException::class.java) { router.stop() }
assertNull(router.currentOutputDevice); assertNull(router.currentInputDevice)
assertFalse(router.headsetAvailable); assertFalse(router.wiredInputAvailable); assertFalse(router.btInputAvailable)
assertTrue(audio.callbacks.isEmpty())