croc/pkg/utils/utils_test.go

224 lines
5.5 KiB
Go

package utils
import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
)
func Test_ReadStream(t *testing.T) {
assert := assert.New(t)
stream := &bytes.Buffer{}
_, err := stream.WriteString("Hello\n")
assert.Nil(err)
str, err := MustReadStream(stream)
assert.Equal("Hello", str)
assert.Nil(err)
}
func Test_StripSDP(t *testing.T) {
assert := assert.New(t)
tests := []struct {
sdp string
expected string
}{
{
sdp: "",
expected: "",
},
{
sdp: `v=0
o=- 297292268 1552262038 IN IP4 0.0.0.0
s=-
t=0 0
a=fingerprint:sha-256 70:E0:B2:DA:F8:04:D6:0C:32:03:DF:CD:A8:70:EC:45:10:FF:66:6F:3D:72:B1:BA:4C:AF:FB:5E:BE:F9:CF:6A
a=group:BUNDLE audio video data
m=audio 9 UDP/TLS/RTP/SAVPF 111 9
c=IN IP4 0.0.0.0
a=setup:actpass
a=mid:audio
a=ice-ufrag:SNxNaqIiaNoDiCNM
a=ice-pwd:dSZlwOEOKEmBfNiXCtpmPTOVJlwUCaFX
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:9 G722/8000
a=recvonly
a=candidate:foundation 1 udp 3776 192.168.100.207 61879 typ host generation 0
a=candidate:foundation 2 udp 3776 192.168.100.207 61879 typ host generation 0
a=end-of-candidates
a=setup:actpass
m=video 9 UDP/TLS/RTP/SAVPF 96 100 98
c=IN IP4 0.0.0.0
a=setup:actpass
a=mid:video
a=ice-ufrag:SNxNaqIiaNoDiCNM
a=ice-pwd:dSZlwOEOKEmBfNiXCtpmPTOVJlwUCaFX
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtpmap:100 H264/90000
a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:98 VP9/90000
a=recvonly
a=candidate:foundation 1 udp 3776 192.168.100.207 61879 typ host generation 0
a=candidate:foundation 2 udp 3776 192.168.100.207 61879 typ host generation 0
a=end-of-candidates
a=setup:actpass
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=setup:actpass
a=mid:data
a=sendrecv
a=sctpmap:5000 webrtc-datachannel 1024
a=ice-ufrag:SNxNaqIiaNoDiCNM
a=ice-pwd:dSZlwOEOKEmBfNiXCtpmPTOVJlwUCaFX
a=candidate:foundation 1 udp 3776 192.168.100.207 61879 typ host generation 0
a=candidate:foundation 2 udp 3776 192.168.100.207 61879 typ host generation 0
a=end-of-candidates
a=setup:actpass
`,
expected: `v=0
o=- 297292268 1552262038 IN IP4 0.0.0.0
s=-
t=0 0
a=fingerprint:sha-256 70:E0:B2:DA:F8:04:D6:0C:32:03:DF:CD:A8:70:EC:45:10:FF:66:6F:3D:72:B1:BA:4C:AF:FB:5E:BE:F9:CF:6A
a=group:BUNDLE data
a=setup:actpass
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
a=setup:actpass
a=mid:data
a=sendrecv
a=sctpmap:5000 webrtc-datachannel 1024
a=ice-ufrag:SNxNaqIiaNoDiCNM
a=ice-pwd:dSZlwOEOKEmBfNiXCtpmPTOVJlwUCaFX
a=candidate:foundation 1 udp 3776 192.168.100.207 61879 typ host generation 0
a=candidate:foundation 2 udp 3776 192.168.100.207 61879 typ host generation 0
a=end-of-candidates
a=setup:actpass
`,
},
}
for _, cur := range tests {
assert.Equal(cur.expected, StripSDP(cur.sdp))
}
}
func Test_Encode(t *testing.T) {
assert := assert.New(t)
tests := []struct {
input interface{}
shouldErr bool
expected string
}{
// Invalid object
{
input: make(chan int),
shouldErr: true,
},
// Empty input
{
input: nil,
shouldErr: false,
expected: "H4sIAAAAAAAC/8orzckBAAAA//8BAAD//0/8yyUEAAAA",
},
// Not JSON
{
input: "ThisTestIsNotInB64",
shouldErr: false,
expected: "H4sIAAAAAAAC/1IKycgsDkktLvEs9ssv8cxzMjNRAgAAAP//AQAA//8+sWiWFAAAAA==",
},
// JSON
{
input: struct {
Name string `json:"name"`
}{
Name: "TestJson",
},
shouldErr: false,
expected: "H4sIAAAAAAAC/6pWykvMTVWyUgpJLS7xKs7PU6oFAAAA//8BAAD//3cqgZQTAAAA",
},
}
for _, cur := range tests {
res, err := Encode(cur.input)
if cur.shouldErr {
assert.NotNil(err)
} else {
assert.Nil(err)
assert.Equal(cur.expected, res)
}
}
}
func Test_Decode(t *testing.T) {
assert := assert.New(t)
tests := []struct {
input string
shouldErr bool
}{
// Empty string
{
input: "",
shouldErr: true,
},
// Not base64
{
input: "ThisTestIsNotInB64",
shouldErr: true,
},
// Not base64 JSON
{
input: "aGVsbG8gd29ybGQ=",
shouldErr: true,
},
// Base64 JSON
{
input: "H4sIAAAAAAAC/+xVTY/bNhD9KwOdK5ukqK8JdFh77XabNPXGXqcJcmFEystGogiKsuMU/e+FLG/qtEWBBRo0h4UgCTPz+OaRegP9FvijVQEGwnQH5YLvgk7aAIN9Qd65d6YtQojzmCRpmmZA45ixhFNO4eYl3Kw4kMnpGqBdEQ4vXxA4xaKotNkpZ502Hrt7EbI4gYjiLMKE4oIhYZgskWXIyfCcLZFdY5ZgxnEeYTRDHmGeYsyQ57icIWdI5ji/wnmClCBLMUowjjBLcXGFEUHOx8Y71/YWZ3cvr18sQPRSt7DXUrUghRcDpCnGbA5316vp5sV6+mqzmq6vtqslUEohH0Bl8fdNiqJTvrcoSq/3asw0WuKJbgx1qcK+cmKH5avl6zflzeGu8z9vd4df/qzbg8TXerH7cfnrQj9/u/a36+2b55ubulosDx9u5eb2p7cj2vnShk3/8SJynf6kHmLbCIuD5Nb23ZRnhJApOx9/48dSo431ulEFJc/6TmnzXhhZqbKgX7Dk8H3K2HSgOCs1l9sshZFaCq+wansjhdetAQq9tBClaQI0ZxOaZBMyoVkOcRQnCfijhfu287BTRrlxCfkXOvbf0p3VUUKApxM63CyfRAxinhJ6outcVX8EJ6R0f2npbOv8Gfk4+V+jnzIybKvwc9tutPFo63+ycZ7AoCPPHmvlE+X/ZuU8ge0qm+bkswsfPE4I/MASflkaHU4I1Gqv6lB0x6ZR3h1DUdftQcmCPrOi/KC8/nQ6zLBppRqSrq10rcJxmZYFZ4TQ6kshGWxX+WW3p3H45sdBWFvrckTmcD1MxHq+WUF8/oiPmYOHf8VQN9Kpcn+OytEgAycc1Hvny3DAlvfCGFUDJYx/jfF5Mtw3Z7jg9z8AAAD//wEAAP//RjpVQj8JAAA=",
shouldErr: false,
},
}
var obj interface{}
for _, cur := range tests {
err := Decode(cur.input, &obj)
if cur.shouldErr {
assert.NotNil(err)
} else {
assert.Nil(err)
}
}
}
func Test_EncodeDecode(t *testing.T) {
assert := assert.New(t)
input := struct {
Name string `json:"name"`
}{
Name: "TestJson",
}
encoded, err := Encode(input)
assert.Nil(err)
assert.Equal("H4sIAAAAAAAC/6pWykvMTVWyUgpJLS7xKs7PU6oFAAAA//8BAAD//3cqgZQTAAAA", encoded)
var obj struct {
Name string `json:"name"`
}
err = Decode(encoded, &obj)
assert.Nil(err)
assert.Equal(input, obj)
}