mirror of https://bitbucket.org/ausocean/av.git
194 lines
3.9 KiB
Go
194 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 Packet
|
||
|
want []byte
|
||
|
}{
|
||
|
// No padding, no CSRC and no extension.
|
||
|
{
|
||
|
num: 1,
|
||
|
pkt: Packet{
|
||
|
Version: 2,
|
||
|
CSRCCount: 0,
|
||
|
PacketType: 6,
|
||
|
Sync: 167,
|
||
|
Timestamp: 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: Packet{
|
||
|
Version: 2,
|
||
|
PaddingFlag: true,
|
||
|
CSRCCount: 0,
|
||
|
PacketType: 6,
|
||
|
Sync: 167,
|
||
|
Timestamp: 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: Packet{
|
||
|
Version: 2,
|
||
|
PaddingFlag: true,
|
||
|
CSRCCount: 2,
|
||
|
PacketType: 6,
|
||
|
Sync: 167,
|
||
|
Timestamp: 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: Packet{
|
||
|
Version: 2,
|
||
|
PaddingFlag: true,
|
||
|
ExtHeadFlag: true,
|
||
|
CSRCCount: 2,
|
||
|
PacketType: 6,
|
||
|
Sync: 167,
|
||
|
Timestamp: 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)
|
||
|
}
|
||
|
}
|
||
|
}
|