/* NAME flv_test.go DESCRIPTION flv_test.go provides testing for functionality provided in flv.go. AUTHORS Saxon A. Nelson-Milton <saxon@ausocean.org> LICENSE Copyright (C) 2019 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 flv import ( "bytes" "testing" ) // TestVideoTagBytes checks that we can correctly get a []byte representation // of a VideoTag using VideoTag.Bytes(). func TestVideoTagBytes(t *testing.T) { tests := []struct { tag VideoTag expected []byte }{ { tag: VideoTag{ TagType: VideoTagType, DataSize: 12, Timestamp: 1234, TimestampExtended: 56, FrameType: KeyFrameType, Codec: H264, PacketType: AVCNALU, CompositionTime: 0, Data: []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}, }, expected: []byte{ 0x09, // TagType. 0x00, 0x00, 0x0c, // DataSize. 0x00, 0x04, 0xd2, // Timestamp. 0x38, // TimestampExtended. 0x00, 0x00, 0x00, // StreamID. (always 0) 0x17, // FrameType=0001, Codec=0111 0x01, // PacketType. 0x00, 0x00, 0x00, // CompositionTime 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // VideoData. 0x00, 0x00, 0x00, 0x00, // previousTagSize. }, }, } for testNum, test := range tests { got := test.tag.Bytes() if !bytes.Equal(got, test.expected) { t.Errorf("did not get expected result for test: %v.\n Got: %v\n Want: %v\n", testNum, got, test.expected) } } } // TestAudioTagBytes checks that we can correctly get a []byte representation of // an AudioTag using AudioTag.Bytes(). func TestAudioTagBytes(t *testing.T) { tests := []struct { tag AudioTag expected []byte }{ { tag: AudioTag{ TagType: AudioTagType, DataSize: 8, Timestamp: 1234, TimestampExtended: 56, SoundFormat: AACAudioFormat, SoundRate: 3, SoundSize: true, SoundType: true, Data: []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}, }, expected: []byte{ 0x08, // TagType. 0x00, 0x00, 0x08, // DataSize. 0x00, 0x04, 0xd2, // Timestamp. 0x38, // TimestampExtended. 0x00, 0x00, 0x00, // StreamID. (always 0) 0xaf, // SoundFormat=1010,SoundRate=11,SoundSize=1,SoundType=1 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // AudioData. 0x00, 0x00, 0x00, 0x00, // previousTagSize. }, }, } for testNum, test := range tests { got := test.tag.Bytes() if !bytes.Equal(got, test.expected) { t.Errorf("did not get expected result for test: %v.\n Got: %v\n Want: %v\n", testNum, got, test.expected) } } }