livekit-protocol 0.7.7

Livekit protocol and utilities for the Rust SDK
Documentation
package observability

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
)

func TestSessionTimer(t *testing.T) {
	t.Run("advance 100ms", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts)

		millis, secs, mins := st.Advance(ts.Add(100 * time.Millisecond))
		require.EqualValues(t, 100, millis)
		require.EqualValues(t, 1, secs)
		require.EqualValues(t, 1, mins)

		millis, secs, mins = st.Advance(ts.Add(200 * time.Millisecond))
		require.EqualValues(t, 100, millis)
		require.EqualValues(t, 0, secs)
		require.EqualValues(t, 0, mins)
	})

	t.Run("advance 2.5m", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts)

		millis, secs, mins := st.Advance(ts.Add(150 * time.Second))
		require.EqualValues(t, 150000, millis)
		require.EqualValues(t, 150, secs)
		require.EqualValues(t, 3, mins)
	})

	t.Run("WithMinSeconds floors first advance and consumes watermark", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts, WithMinSeconds(60))

		_, secs, _ := st.Advance(ts.Add(time.Second))
		require.EqualValues(t, 60, secs)

		_, secs, _ = st.Advance(ts.Add(30 * time.Second))
		require.EqualValues(t, 0, secs)

		_, secs, _ = st.Advance(ts.Add(62 * time.Second))
		require.EqualValues(t, 2, secs)
	})

	t.Run("WithMinSeconds does not lower larger natural value", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts, WithMinSeconds(60))

		_, secs, _ := st.Advance(ts.Add(120 * time.Second))
		require.EqualValues(t, 120, secs)
	})

	t.Run("WithMinSeconds does not trigger on no-op advance", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts, WithMinSeconds(60))

		_, secs, _ := st.Advance(ts)
		require.EqualValues(t, 0, secs)

		_, secs, _ = st.Advance(ts.Add(time.Second))
		require.EqualValues(t, 60, secs)
	})

	t.Run("WithMinMinutes floors first advance", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts, WithMinMinutes(5))

		_, _, mins := st.Advance(ts.Add(time.Second))
		require.EqualValues(t, 5, mins)

		_, _, mins = st.Advance(ts.Add(2 * time.Minute))
		require.EqualValues(t, 0, mins)

		_, _, mins = st.Advance(ts.Add(7 * time.Minute))
		require.EqualValues(t, 2, mins)
	})

	t.Run("WithMinSeconds and WithMinMinutes apply independently", func(t *testing.T) {
		ts := time.Now()
		st := NewSessionTimer(ts, WithMinSeconds(45), WithMinMinutes(3))

		_, secs, mins := st.Advance(ts.Add(time.Second))
		require.EqualValues(t, 45, secs)
		require.EqualValues(t, 3, mins)
	})
}