/* 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) } } }