Live video on the AT Protocol
at eli/buffer-thumbnails 66 lines 1.5 kB view raw
1package media 2 3import ( 4 "context" 5 "io" 6 "math/rand" 7 "os" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/require" 12 "golang.org/x/sync/errgroup" 13 "stream.place/streamplace/pkg/bus" 14) 15 16func TestPacketize(t *testing.T) { 17 withNoGSTLeaks(t, func() { 18 g, _ := errgroup.WithContext(context.Background()) 19 for range streamplaceTestCount { 20 g.Go(func() error { 21 innerTestPacketize(t) 22 return nil 23 }) 24 } 25 err := g.Wait() 26 require.NoError(t, err) 27 }) 28} 29 30func innerTestPacketize(t *testing.T) { 31 filename := getFixture("sample-segment.mp4") 32 inputFile, err := os.Open(filename) 33 require.NoError(t, err) 34 defer inputFile.Close() 35 36 bs, err := io.ReadAll(inputFile) 37 require.NoError(t, err) 38 39 testSeg := &bus.Seg{ 40 Data: bs, 41 Filepath: filename, 42 } 43 44 packet, err := Packetize(context.Background(), testSeg) 45 require.NoError(t, err) 46 require.NotNil(t, packet) 47 require.Equal(t, 49, len(packet.Video)) 48 require.Equal(t, 40, len(packet.Audio)) 49 require.Equal(t, time.Duration(800*time.Millisecond), packet.Duration) 50} 51 52func TestPacketizeInvalid(t *testing.T) { 53 // cur := goleak.IgnoreCurrent() 54 // defer goleak.VerifyNone(t, cur) 55 withNoGSTLeaks(t, func() { 56 rng := rand.New(rand.NewSource(42)) 57 randomData := make([]byte, 1024*1024) // 1MB 58 _, err := rng.Read(randomData) 59 require.NoError(t, err) 60 packet, err := Packetize(context.Background(), &bus.Seg{ 61 Data: randomData, 62 }) 63 require.Error(t, err) 64 require.Nil(t, packet) 65 }) 66}