Live video on the AT Protocol
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}