2018-11-16 12:05:19 +03:00
|
|
|
/*
|
|
|
|
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
|
|
|
|
|
2018-11-17 09:22:57 +03:00
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2018-11-17 10:13:04 +03:00
|
|
|
// TODO (saxon): add more tests
|
2018-11-16 12:05:19 +03:00
|
|
|
var rtpTests = []struct {
|
2018-11-17 09:22:57 +03:00
|
|
|
num int
|
2019-05-08 09:15:08 +03:00
|
|
|
pkt Packet
|
2018-11-17 09:22:57 +03:00
|
|
|
want []byte
|
2018-11-16 12:05:19 +03:00
|
|
|
}{
|
2019-03-29 08:18:34 +03:00
|
|
|
// No padding, no CSRC and no extension.
|
2018-11-16 12:05:19 +03:00
|
|
|
{
|
2018-11-17 09:22:57 +03:00
|
|
|
num: 1,
|
2019-05-08 09:15:08 +03:00
|
|
|
pkt: Packet{
|
2020-05-20 06:28:53 +03:00
|
|
|
Version: 2,
|
|
|
|
CSRCCount: 0,
|
|
|
|
PacketType: 6,
|
|
|
|
Sync: 167,
|
|
|
|
Timestamp: 160,
|
|
|
|
SSRC: 10,
|
2019-03-29 08:18:34 +03:00
|
|
|
Payload: []byte{
|
|
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
|
|
},
|
2018-11-17 09:22:57 +03:00
|
|
|
},
|
|
|
|
want: []byte{
|
|
|
|
0x80, 0x06, 0x00, 0xa7,
|
|
|
|
0x00, 0x00, 0x00, 0xa0,
|
|
|
|
0x00, 0x00, 0x00, 0x0a,
|
|
|
|
0x00, 0x01, 0x07, 0xf0,
|
|
|
|
0x56, 0x37, 0x0a, 0x0f,
|
|
|
|
},
|
2018-11-16 12:05:19 +03:00
|
|
|
},
|
2019-03-29 08:18:34 +03:00
|
|
|
// With padding.
|
|
|
|
{
|
|
|
|
num: 2,
|
2019-05-08 09:15:08 +03:00
|
|
|
pkt: Packet{
|
2020-05-20 06:28:53 +03:00
|
|
|
Version: 2,
|
|
|
|
PaddingFlag: true,
|
|
|
|
CSRCCount: 0,
|
|
|
|
PacketType: 6,
|
|
|
|
Sync: 167,
|
|
|
|
Timestamp: 160,
|
|
|
|
SSRC: 10,
|
2019-03-29 08:18:34 +03:00
|
|
|
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,
|
2019-05-08 09:15:08 +03:00
|
|
|
pkt: Packet{
|
2020-05-20 06:28:53 +03:00
|
|
|
Version: 2,
|
|
|
|
PaddingFlag: true,
|
|
|
|
CSRCCount: 2,
|
|
|
|
PacketType: 6,
|
|
|
|
Sync: 167,
|
|
|
|
Timestamp: 160,
|
|
|
|
SSRC: 10,
|
2019-03-29 08:18:34 +03:00
|
|
|
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,
|
2019-05-08 09:15:08 +03:00
|
|
|
pkt: Packet{
|
2020-05-20 06:28:53 +03:00
|
|
|
Version: 2,
|
|
|
|
PaddingFlag: true,
|
|
|
|
ExtHeadFlag: true,
|
|
|
|
CSRCCount: 2,
|
|
|
|
PacketType: 6,
|
|
|
|
Sync: 167,
|
|
|
|
Timestamp: 160,
|
|
|
|
SSRC: 10,
|
2019-03-29 08:18:34 +03:00
|
|
|
CSRC: [][4]byte{
|
|
|
|
{0x01, 0x02, 0x03, 0x04},
|
|
|
|
{0x05, 0x06, 0x07, 0x08},
|
|
|
|
},
|
|
|
|
Extension: ExtensionHeader{
|
2019-04-02 14:19:11 +03:00
|
|
|
ID: 15,
|
2019-03-29 08:18:34 +03:00
|
|
|
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,
|
|
|
|
},
|
|
|
|
},
|
2018-11-16 12:05:19 +03:00
|
|
|
}
|
2018-11-17 09:22:57 +03:00
|
|
|
|
|
|
|
func TestRtpPktToByteSlice(t *testing.T) {
|
2018-11-17 09:34:26 +03:00
|
|
|
for _, test := range rtpTests {
|
2018-12-27 07:14:30 +03:00
|
|
|
got := test.pkt.Bytes(nil)
|
2018-11-17 09:34:26 +03:00
|
|
|
if !reflect.DeepEqual(got, test.want) {
|
2019-03-29 08:18:34 +03:00
|
|
|
t.Errorf("unexpected error for test %v: \ngot :%v\n want:%v\n", test.num, got,
|
2018-11-17 10:13:04 +03:00
|
|
|
test.want)
|
2018-11-17 09:34:26 +03:00
|
|
|
}
|
2018-11-17 09:22:57 +03:00
|
|
|
}
|
|
|
|
}
|