Consume Android batches with independent track completion

This commit is contained in:
evgeny committed 2026-10-21 00:13:01 +02:00
1 parent a538f99bf0
commit c887780022
3 files changed
+139 -10

No files matched your search

@@ -0,0 +1,55 @@
package com.utun.chat.data
import org.junit.Assert.*
import org.junit.Test
import java.nio.ByteBuffer
class StreamReadQueueTest {
private fun record(kind: Int, pts: Long = 0, bytes: ByteArray = byteArrayOf()): ByteArray =
ByteBuffer.allocate(28 + bytes.size).apply {
put(0, kind.toByte()); putLong(8, pts); putInt(16, bytes.size); position(28); put(bytes)
}.array()
@Test fun videoEndPassesBlockedAudioButPreservesVideoOrder() {
val queue = StreamReadQueue()
queue.add(record(2, 20) + record(1, 40) + record(7) + record(8) + record(5))
assertNull(queue.take(video = false, audio = false))
assertEquals(1, queue.take(video = true, audio = false)!![0].toInt())
assertEquals(7, queue.take(video = false, audio = false)!![0].toInt())
assertNull(queue.take(video = false, audio = false))
assertEquals(2, queue.take(video = false, audio = true)!![0].toInt())
assertEquals(8, queue.take(video = false, audio = false)!![0].toInt())
assertEquals(5, queue.take(video = false, audio = false)!![0].toInt())
assertEquals(0, queue.size)
}
@Test fun audioEndPassesBlockedVideo() {
val queue = StreamReadQueue()
queue.add(record(1) + record(2) + record(8) + record(7) + record(5))
assertEquals(2, queue.take(video = false, audio = true)!![0].toInt())
assertEquals(8, queue.take(video = false, audio = false)!![0].toInt())
assertNull(queue.take(video = false, audio = false))
assertEquals(1, queue.take(video = true, audio = false)!![0].toInt())
assertEquals(7, queue.take(video = false, audio = false)!![0].toInt())
assertEquals(5, queue.take(video = false, audio = false)!![0].toInt())
}
@Test fun gapAndCloseImmediatelyCancelBlockedTracks() {
for (kind in listOf(3, 6)) {
val queue = StreamReadQueue()
queue.add(record(1) + record(2))
queue.add(record(kind))
assertEquals(kind, queue.take(video = false, audio = false)!![0].toInt())
assertEquals(0, queue.size)
}
}
@Test fun variablePayloadsKeepRecordBoundaries() {
val queue = StreamReadQueue()
val video = record(1, 42, byteArrayOf(1, 2, 3))
val audio = record(2, 43, byteArrayOf(4))
assertEquals(2, queue.add(video + audio))
assertArrayEquals(audio, queue.take(video = false, audio = true))
assertArrayEquals(video, queue.take(video = true, audio = false))
}
}