@@ -62,9 +62,6 @@ func payloadForSequenceNumber(sequenceNumber int) []byte {
6262 return payload
6363}
6464
65- // payloadIndex recovers the packet index from a payload built by indexPayload, or -1 if
66- // the payload is not a single repeated index - meaning bytes from two different packets
67- // were interleaved into the buffer.
6865func sequenceNumberFromPayload (payload []byte ) int {
6966 if len (payload ) < 2 || len (payload )% 2 != 0 {
7067 return - 1
@@ -78,53 +75,42 @@ func verifyRTPPacket(h *rtp.Header, payload []byte) error {
7875 return fmt .Errorf ("header never written: ReadRTP reported %d bytes carrying packet %d, but left the header zeroed" ,
7976 len (payload ), sequenceNumberFromPayload (payload ))
8077 }
78+
8179 if h .Version != 2 || h .PayloadType != testPayloadType || h .SSRC != testStreamSSRC {
8280 return fmt .Errorf ("torn header: got version=%d pt=%d ssrc=%#x, want version=2 pt=%d ssrc=%#x (seq=%d ts=%d)" ,
8381 h .Version , h .PayloadType , h .SSRC , testPayloadType , uint32 (testStreamSSRC ), h .SequenceNumber , h .Timestamp )
8482 }
83+
8584 sequenceNumber := int (h .SequenceNumber )
8685 if exp := uint32 (sequenceNumber ) * testClockPerPkt ; h .Timestamp != exp {
8786 return fmt .Errorf ("torn header: seq=%d implies ts=%d, got ts=%d - header fields came from two packets" ,
8887 sequenceNumber , exp , h .Timestamp )
8988 }
89+
9090 if len (payload ) != testPayloadSize {
9191 return fmt .Errorf ("unexpected payload length: header says seq=%d, but ReadRTP returned %d payload bytes, want %d" ,
9292 sequenceNumber , len (payload ), testPayloadSize )
9393 }
94- switch got := sequenceNumberFromPayload (payload ); got {
95- case sequenceNumber :
96- return nil
97- default :
94+
95+ gotSequeneceNumber := sequenceNumberFromPayload (payload )
96+ if gotSequeneceNumber != sequenceNumber {
9897 return fmt .Errorf ("mixed payload: header says seq=%d, but the buffer holds packet %d" ,
99- sequenceNumber , got )
98+ sequenceNumber , gotSequeneceNumber )
10099 }
100+ return nil
101101}
102102
103103func TestSessionZeroCopyHandoff (t * testing.T ) {
104- // Deliberately not gated on enableZeroCopy: "every delivered packet is internally
105- // consistent" must hold on both delivery paths, so this test is also the check that
106- // compiling the handoff out is a safe mitigation.
107- for i := range 10 {
108- t .Run (fmt .Sprint (i ), func (t * testing.T ) {
109- testZeroCopyHandoff (t , 8000 )
110- })
111- }
112- }
113-
114- func testZeroCopyHandoff (t * testing.T , packets int ) {
104+ numPackets := 8000
115105 cli , srv := net .Pipe ()
116106 defer cli .Close ()
117107 require .NoError (t , srv .SetReadDeadline (time .Now ().Add (30 * time .Second )))
118108
119109 sess := NewSession (logger .GetLogger (), srv )
120110 defer sess .Close ()
121111
122- // TODO(alexfish): Clean this up.
123-
124- // Blast one SSRC with no pacing, so the pump delivers packets microseconds apart
125- // rather than a frame apart, then a sentinel SSRC to mark the end of the run.
126- sent := make ([][]byte , 0 , packets + 1 )
127- for i := range packets {
112+ sent := make ([][]byte , 0 , numPackets + 1 )
113+ for i := range numPackets {
128114 sent = append (sent , newRTPPacket (t , testStreamSSRC , i ))
129115 }
130116 sent = append (sent , newRTPPacket (t , testSentinelSSRC , 0 ))
@@ -138,8 +124,6 @@ func testZeroCopyHandoff(t *testing.T, packets int) {
138124 }
139125 })
140126
141- // The first AcceptStream returns the stream for testStreamSSRC. Its first packet is
142- // already sitting in r.recv - AcceptStream calls r.write before it returns.
143127 r , ssrc , err := sess .AcceptStream ()
144128 require .NoError (t , err )
145129 require .EqualValues (t , uint32 (testStreamSSRC ), ssrc )
@@ -181,5 +165,5 @@ func testZeroCopyHandoff(t *testing.T, packets int) {
181165
182166 require .NoError (t , verifyErr , "ReadRTP delivered a corrupted packet" )
183167 require .NotZero (t , delivered , "no packets were delivered" )
184- t .Logf ("delivered %d/%d packets" , delivered , packets )
168+ t .Logf ("delivered %d/%d packets" , delivered , numPackets )
185169}
0 commit comments