streaming

Media streaming and broadcast systems in Go
Log | Files | Refs | README | LICENSE

commit 98958a8b50e9398fe443c5fc1af6564227b4bfb8
parent de0ee9781f1a9dc39f34bf012c85bb8ef6438179
Author: Oliver Lowe <o@olowe.co>
Date:   Thu,  8 Aug 2024 17:42:23 +1000

pcap: test for expected values

Checking just the number of elements in a slice, then eyeballing
printed output is prone to human error.

Diffstat:
Mpcap/pcap_test.go | 86++++++++++++++++++++++++++++++-------------------------------------------------
Dpcap/testing/pcap_file_encode.pcap | 0
2 files changed, 33 insertions(+), 53 deletions(-)

diff --git a/pcap/pcap_test.go b/pcap/pcap_test.go @@ -1,82 +1,62 @@ package pcap import ( - "fmt" + "bytes" "os" "testing" "time" ) -func TestReadFile(t *testing.T) { - filePath := "testing/srt_capture_test.pcap" - - file, err := os.Open(filePath) - if err != nil { - t.Fatal("Failed to open file") - } - defer file.Close() - - pcapFile, err := decode(file) +func TestDecode(t *testing.T) { + f, err := os.Open("testing/srt_capture_test.pcap") if err != nil { - t.Fatalf("Failed to read PCAP file: %v", err) - } - - if len(pcapFile.Packets) == 0 { - t.Fatal("Should be at least one packet but there is 0") + t.Fatal(err) } + defer f.Close() - fmt.Printf("PCAP Header: %+v\n", pcapFile.Header) - - for i, packet := range pcapFile.Packets { - fmt.Printf("Packet %d: %+v\n", i, packet.Header) - - fmt.Printf("Data %d: %x\n", i, packet.Data) + gheader := GlobalHeader{ + VersionMajor: 2, + VersionMinor: 4, + SnapLen: 524288, } - - encodePcapFile, err := encode(pcapFile) - - if err != nil { - t.Fatalf("encode file: %v", err) + header := Header{ + // from tcpdump -tt -r testing/srt_capture_test.pcap + Time: time.UnixMicro(1721314372204926), + OrigLen: 45, } - fmt.Printf("Encoded PCAP: %x\n", encodePcapFile) - - f, err := os.Create("testing/pcap_file_encode.pcap") + capture, err := decode(f) if err != nil { t.Fatal(err) } - defer f.Close() - _, err = f.Write(encodePcapFile) - if err != nil { - t.Fatalf("Failed to write to PCAP file") + if len(capture.Packets) != 1 { + t.Fatalf("expected 1 packet, found %d", len(capture.Packets)) } + if capture.Header != gheader { + t.Errorf("decoded global header %v, want %v", capture.Header, gheader) + } + if capture.Packets[0].Header != header { + t.Errorf("decoded packet header %v, want %v", capture.Packets[0].Header, header) + } +} - filePathTwo := "testing/pcap_file_encode.pcap" - - fileTwo, err := os.Open(filePathTwo) +func TestEncode(t *testing.T) { + want, err := os.ReadFile("testing/srt_capture_test.pcap") if err != nil { - t.Fatal("Failed to open file") + t.Fatal(err) } - defer fileTwo.Close() - - pcap, err := decode(fileTwo) + capture, err := decode(bytes.NewReader(want)) if err != nil { - t.Fatalf("Failed to read PCAP file: %v", err) + t.Fatal(err) } - - if len(pcap.Packets) == 0 { - t.Fatal("Should be at least one packet but there is 0") + got, err := encode(capture) + if err != nil { + t.Fatalf("encode: %v", err) } - - fmt.Printf("PCAP Header: %+v\n", pcap.Header) - - for i, packet := range pcap.Packets { - fmt.Printf("Packet %d: %+v\n", i, packet.Header) - - fmt.Printf("Data %d: %x\n", i, packet.Data) + if !bytes.Equal(got, want) { + t.Errorf("encode(%v) = %x, want %x", capture, got, want) } - } func TestTimestamp(t *testing.T) { diff --git a/pcap/testing/pcap_file_encode.pcap b/pcap/testing/pcap_file_encode.pcap Binary files differ.