github.com/pion/webrtc/v4@v4.0.1/pkg/media/rtpdump/writer_test.go (about)

     1  // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
     2  // SPDX-License-Identifier: MIT
     3  
     4  package rtpdump
     5  
     6  import (
     7  	"bytes"
     8  	"errors"
     9  	"io"
    10  	"net"
    11  	"reflect"
    12  	"testing"
    13  	"time"
    14  )
    15  
    16  func TestWriter(t *testing.T) {
    17  	buf := bytes.NewBuffer(nil)
    18  
    19  	writer, err := NewWriter(buf, Header{
    20  		Start:  time.Unix(9, 0),
    21  		Source: net.IPv4(2, 2, 2, 2),
    22  		Port:   2222,
    23  	})
    24  	if err != nil {
    25  		t.Fatal(err)
    26  	}
    27  
    28  	if err := writer.WritePacket(Packet{
    29  		Offset:  time.Millisecond,
    30  		IsRTCP:  false,
    31  		Payload: []byte{9},
    32  	}); err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	expected := append(
    37  		[]byte("#!rtpplay1.0 2.2.2.2/2222\n"),
    38  		// header
    39  		0x00, 0x00, 0x00, 0x09,
    40  		0x00, 0x00, 0x00, 0x00,
    41  		0x02, 0x02, 0x02, 0x02,
    42  		0x08, 0xae, 0x00, 0x00,
    43  		// packet header
    44  		0x00, 0x09, 0x00, 0x01,
    45  		0x00, 0x00, 0x00, 0x01,
    46  		0x09,
    47  	)
    48  
    49  	if got, want := buf.Bytes(), expected; !reflect.DeepEqual(got, want) {
    50  		t.Fatalf("wrote %v, want %v", got, want)
    51  	}
    52  }
    53  
    54  func TestRoundTrip(t *testing.T) {
    55  	buf := bytes.NewBuffer(nil)
    56  
    57  	packets := []Packet{
    58  		{
    59  			Offset:  time.Millisecond,
    60  			IsRTCP:  false,
    61  			Payload: []byte{9},
    62  		},
    63  		{
    64  			Offset:  999 * time.Millisecond,
    65  			IsRTCP:  true,
    66  			Payload: []byte{9},
    67  		},
    68  	}
    69  	hdr := Header{
    70  		Start:  time.Unix(9, 0).UTC(),
    71  		Source: net.IPv4(2, 2, 2, 2),
    72  		Port:   2222,
    73  	}
    74  
    75  	writer, err := NewWriter(buf, hdr)
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  
    80  	for _, pkt := range packets {
    81  		if err = writer.WritePacket(pkt); err != nil {
    82  			t.Fatal(err)
    83  		}
    84  	}
    85  
    86  	reader, hdr2, err := NewReader(buf)
    87  	if err != nil {
    88  		t.Fatal(err)
    89  	}
    90  
    91  	if got, want := hdr2, hdr; !reflect.DeepEqual(got, want) {
    92  		t.Fatalf("round trip: header=%v, want %v", got, want)
    93  	}
    94  
    95  	var packets2 []Packet
    96  	for {
    97  		pkt, err := reader.Next()
    98  		if errors.Is(err, io.EOF) {
    99  			break
   100  		}
   101  		if err != nil {
   102  			t.Fatal(err)
   103  		}
   104  
   105  		packets2 = append(packets2, pkt)
   106  	}
   107  
   108  	if got, want := packets2, packets; !reflect.DeepEqual(got, want) {
   109  		t.Fatalf("round trip: packets=%v, want %v", got, want)
   110  	}
   111  }