Live video on the AT Protocol
1package misttriggers
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7)
8
9var streamBufferPayloadFull = MistTriggerBody(`
10 stream1
11 FULL
12 {"track1":{"codec":"h264","kbits":1000,"keys":{"B":"1"},"fpks":30,"height":720,"width":1280},"jitter":420}`)
13
14var streamBufferPayloadIssues = MistTriggerBody(`
15 stream1
16 RECOVER
17 {"track1":{"codec":"h264","kbits":1000,"keys":{"B":"1"},"fpks":30,"height":720,"width":1280},"issues":"The aqueous linear entity, in a manner pertaining to its metaphorical state of existence, appears to be experiencing an ostensibly suboptimal condition that is reminiscent of an individual's disposition when subjected to an unfavorable meteorological phenomenon","human_issues":["Stream is feeling under the weather"]}
18`)
19
20var streamBufferPayloadInvalid = MistTriggerBody(`
21 stream1
22 FULL
23 {"track1":{},"notatrack":{"codec":2}}
24`)
25
26var streamBufferPayloadEmpty = MistTriggerBody(`
27 stream1
28 EMPTY
29`)
30
31func TestItCanParseAValidStreamBufferPayload(t *testing.T) {
32 p, err := ParseStreamBufferPayload(streamBufferPayloadFull)
33 require.NoError(t, err)
34 require.Equal(t, p.StreamName, "stream1")
35 require.Equal(t, p.State, "FULL")
36 require.NotNil(t, p.Details)
37 require.Equal(t, p.Details.Issues, "")
38 require.Len(t, p.Details.Tracks, 1)
39 require.Contains(t, p.Details.Tracks, "track1")
40 require.Equal(t, p.Details.Extra["jitter"], float64(420))
41}
42
43func TestItCanParseAStreamBufferPayloadWithStreamIssues(t *testing.T) {
44 p, err := ParseStreamBufferPayload(streamBufferPayloadIssues)
45 require.NoError(t, err)
46 require.Equal(t, p.StreamName, "stream1")
47 require.Equal(t, p.State, "RECOVER")
48 require.NotNil(t, p.Details)
49 require.Equal(t, p.Details.HumanIssues, []string{"Stream is feeling under the weather"})
50 require.Contains(t, p.Details.Issues, "unfavorable meteorological phenomenon")
51 require.Len(t, p.Details.Tracks, 1)
52 require.Contains(t, p.Details.Tracks, "track1")
53}
54
55func TestItCanParseAValidStreamBufferPayloadWithEmptyState(t *testing.T) {
56 p, err := ParseStreamBufferPayload(streamBufferPayloadEmpty)
57 require.NoError(t, err)
58 require.Equal(t, p.StreamName, "stream1")
59 require.Equal(t, p.State, "EMPTY")
60 require.Nil(t, p.Details)
61}
62
63func TestItFailsToParseAnInvalidStreamBufferPayload(t *testing.T) {
64 _, err := ParseStreamBufferPayload(streamBufferPayloadInvalid)
65 require.Error(t, err)
66 require.Contains(t, err.Error(), "cannot unmarshal number into Go struct field TrackDetails.codec of type string")
67}