224 lines
5.5 KiB
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)
|
|
}
|