@@ -6,6 +6,7 @@ import io.mockk.verify
66import org.junit.jupiter.api.Assertions.assertArrayEquals
77import org.junit.jupiter.api.Assertions.assertEquals
88import org.junit.jupiter.api.Assertions.assertNull
9+ import org.junit.jupiter.api.Assertions.assertTrue
910import org.junit.jupiter.api.Test
1011import dev.typetype.server.sabr.SabrMediaHeader
1112import dev.typetype.server.sabr.SabrMediaSegment
@@ -17,6 +18,20 @@ import dev.typetype.server.sabr.YoutubeSabrStreamState
1718import java.time.Instant
1819
1920class SabrSegmentCacheTest {
21+ @Test
22+ fun `segment demand refreshes session idle timestamp` () {
23+ val audio = format(140 , isAudio = true )
24+ val video = format(137 , isAudio = false )
25+ val holder = holder(audio, video)
26+ val stale = holder.lastRequestAt
27+ val request = SabrSegmentRequest .media(audio, 1 )
28+
29+ holder.requestSegmentDemand(request)
30+
31+ assertTrue(holder.lastRequestAt.isAfter(stale))
32+ SabrSegmentDemandTracker .clearAll()
33+ }
34+
2035 @Test
2136 fun `vod cache observes media without copying segment bytes` () {
2237 val segmentCache = SabrSegmentCache ()
@@ -57,6 +72,8 @@ class SabrSegmentCacheTest {
5772 val session = mockk<YoutubeSabrSession >()
5873 val state = mockk<YoutubeSabrStreamState >()
5974 every { session.streamState } returns state
75+ every { session.getCachedSegment(any()) } returns null
76+ every { session.isBeyondEnd(any()) } returns false
6077 every { state.setActiveTrackTypes(any(), any()) } returns Unit
6178 return SabrSessionHolder (
6279 session = session,
0 commit comments