mirror of https://bitbucket.org/ausocean/av.git
202 lines
3.9 KiB
Go
202 lines
3.9 KiB
Go
/*
|
|
NAME
|
|
rtp_test.go
|
|
|
|
DESCRIPTION
|
|
See Readme.md
|
|
|
|
AUTHOR
|
|
Saxon Nelson-Milton (saxon@ausocean.org)
|
|
|
|
LICENSE
|
|
rtp_test.go is Copyright (C) 2017 the Australian Ocean Lab (AusOcean)
|
|
|
|
It is free software: you can redistribute it and/or modify them
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation, either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
It is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with revid in gpl.txt. If not, see http://www.gnu.org/licenses.
|
|
*/
|
|
|
|
package rtp
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
// TODO (saxon): add more tests
|
|
var rtpTests = []struct {
|
|
num int
|
|
pkt Pkt
|
|
want []byte
|
|
}{
|
|
// No padding, no CSRC and no extension.
|
|
{
|
|
num: 1,
|
|
pkt: Pkt{
|
|
V: 2,
|
|
p: false,
|
|
X: false,
|
|
CC: 0,
|
|
M: false,
|
|
PT: 6,
|
|
SN: 167,
|
|
TS: 160,
|
|
SSRC: 10,
|
|
Payload: []byte{
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
},
|
|
},
|
|
want: []byte{
|
|
0x80, 0x06, 0x00, 0xa7,
|
|
0x00, 0x00, 0x00, 0xa0,
|
|
0x00, 0x00, 0x00, 0x0a,
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
},
|
|
},
|
|
// With padding.
|
|
{
|
|
num: 2,
|
|
pkt: Pkt{
|
|
V: 2,
|
|
p: true,
|
|
X: false,
|
|
CC: 0,
|
|
M: false,
|
|
PT: 6,
|
|
SN: 167,
|
|
TS: 160,
|
|
SSRC: 10,
|
|
Payload: []byte{
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
},
|
|
Padding: []byte{
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x0b,
|
|
},
|
|
},
|
|
want: []byte{
|
|
0xa0, 0x06, 0x00, 0xa7,
|
|
0x00, 0x00, 0x00, 0xa0,
|
|
0x00, 0x00, 0x00, 0x0a,
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x0b,
|
|
},
|
|
},
|
|
// With padding and CSRC.
|
|
{
|
|
num: 3,
|
|
pkt: Pkt{
|
|
V: 2,
|
|
p: true,
|
|
X: false,
|
|
CC: 2,
|
|
M: false,
|
|
PT: 6,
|
|
SN: 167,
|
|
TS: 160,
|
|
SSRC: 10,
|
|
CSRC: [][4]byte{
|
|
{0x01, 0x02, 0x03, 0x04},
|
|
{0x05, 0x06, 0x07, 0x08},
|
|
},
|
|
Payload: []byte{
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
},
|
|
Padding: []byte{
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x0b,
|
|
},
|
|
},
|
|
want: []byte{
|
|
0xa2, 0x06, 0x00, 0xa7,
|
|
0x00, 0x00, 0x00, 0xa0,
|
|
0x00, 0x00, 0x00, 0x0a,
|
|
0x01, 0x02, 0x03, 0x04,
|
|
0x05, 0x06, 0x07, 0x08,
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x0b,
|
|
},
|
|
},
|
|
// With padding, CSRC and extension.
|
|
{
|
|
num: 4,
|
|
pkt: Pkt{
|
|
V: 2,
|
|
p: true,
|
|
X: true,
|
|
CC: 2,
|
|
M: false,
|
|
PT: 6,
|
|
SN: 167,
|
|
TS: 160,
|
|
SSRC: 10,
|
|
CSRC: [][4]byte{
|
|
{0x01, 0x02, 0x03, 0x04},
|
|
{0x05, 0x06, 0x07, 0x08},
|
|
},
|
|
Extension: ExtensionHeader{
|
|
ID: 15,
|
|
Header: [][4]byte{
|
|
{0x01, 0x02, 0x03, 0x04},
|
|
{0x05, 0x06, 0x07, 0x08},
|
|
},
|
|
},
|
|
Payload: []byte{
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
},
|
|
Padding: []byte{
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x0b,
|
|
},
|
|
},
|
|
want: []byte{
|
|
0xb2, 0x06, 0x00, 0xa7,
|
|
0x00, 0x00, 0x00, 0xa0,
|
|
0x00, 0x00, 0x00, 0x0a,
|
|
0x01, 0x02, 0x03, 0x04,
|
|
0x05, 0x06, 0x07, 0x08,
|
|
0x00, 0x0f, 0x00, 0x02,
|
|
0x01, 0x02, 0x03, 0x04,
|
|
0x05, 0x06, 0x07, 0x08,
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x0b,
|
|
},
|
|
},
|
|
}
|
|
|
|
func TestRtpPktToByteSlice(t *testing.T) {
|
|
for _, test := range rtpTests {
|
|
got := test.pkt.Bytes(nil)
|
|
if !reflect.DeepEqual(got, test.want) {
|
|
t.Errorf("unexpected error for test %v: \ngot :%v\n want:%v\n", test.num, got,
|
|
test.want)
|
|
}
|
|
}
|
|
}
|