Live video on the AT Protocol
1package rtcrec
2
3import (
4 "io"
5 "os"
6 "testing"
7 "time"
8
9 "github.com/fxamacker/cbor/v2"
10 "github.com/stretchr/testify/require"
11)
12
13func TestWebRTCRecording(t *testing.T) {
14 // Create a temporary file for testing
15 tmpfile, err := os.CreateTemp("", "webrtc-recording-test-*")
16 require.NoError(t, err)
17
18 // Create recorder stream writing to temp file
19 recorder, err := MakeWebRTCEncoder(tmpfile)
20 require.NoError(t, err)
21
22 // Test recording an offer event
23 offerEvent := WebRTCEvent{
24 Offer: &Offer{
25 SDPOffer: "test-offer",
26 },
27 Time: time.Now().UTC(),
28 }
29 recorder.Event(offerEvent)
30
31 // Test recording an answer event
32 answerEvent := WebRTCEvent{
33 CreateAnswer: &CreateAnswer{
34 SDPAnswer: "test-answer",
35 },
36 Time: time.Now().UTC(),
37 }
38 recorder.Event(answerEvent)
39
40 // err = recorder.Close()
41 // require.NoError(t, err)
42 err = tmpfile.Close()
43 require.NoError(t, err)
44
45 tmpfile, err = os.Open(tmpfile.Name())
46 require.NoError(t, err)
47 defer tmpfile.Close()
48
49 dec := cbor.NewDecoder(tmpfile)
50
51 evs := []WebRTCEvent{}
52 err = nil
53 for err == nil {
54 var ev WebRTCEvent
55 err = dec.Decode(&ev)
56 if err == nil {
57 evs = append(evs, ev)
58 }
59 }
60
61 require.ErrorIs(t, err, io.EOF)
62
63 off, ok := evs[0].Detail().(*Offer)
64 require.True(t, ok)
65 ans, ok := evs[1].Detail().(*CreateAnswer)
66 require.True(t, ok)
67
68 require.Equal(t, 2, len(evs))
69 require.Equal(t, off.SDPOffer, offerEvent.Offer.SDPOffer)
70 require.Equal(t, ans.SDPAnswer, answerEvent.CreateAnswer.SDPAnswer)
71
72}