// SPDX-FileCopyrightText: 2023 The Pion community // SPDX-License-Identifier: MIT //go:build !js // +build !js package webrtc import ( "context" "testing" "time" "github.com/pion/interceptor" "github.com/pion/transport/v3/test" "github.com/pion/webrtc/v4/pkg/media" "github.com/stretchr/testify/assert" ) // Assert that SetReadDeadline works as expected // This test uses VNet since we must have zero loss. func Test_RTPReceiver_SetReadDeadline(t *testing.T) { lim := test.TimeOut(time.Second * 30) defer lim.Stop() report := test.CheckRoutines(t) defer report() sender, receiver, wan := createVNetPair(t, &interceptor.Registry{}) track, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion") assert.NoError(t, err) _, err = sender.AddTrack(track) assert.NoError(t, err) seenPacket, seenPacketCancel := context.WithCancel(context.Background()) receiver.OnTrack(func(trackRemote *TrackRemote, r *RTPReceiver) { // Set Deadline for both RTP and RTCP Stream assert.NoError(t, r.SetReadDeadline(time.Now().Add(time.Second))) assert.NoError(t, trackRemote.SetReadDeadline(time.Now().Add(time.Second))) // First call will not error because we cache for probing _, _, readErr := trackRemote.ReadRTP() assert.NoError(t, readErr) _, _, readErr = trackRemote.ReadRTP() assert.Error(t, readErr) _, _, readErr = r.ReadRTCP() assert.Error(t, readErr) seenPacketCancel() }) peerConnectionsConnected := untilConnectionState(PeerConnectionStateConnected, sender, receiver) assert.NoError(t, signalPair(sender, receiver)) peerConnectionsConnected.Wait() assert.NoError(t, track.WriteSample(media.Sample{Data: []byte{0xAA}, Duration: time.Second})) <-seenPacket.Done() assert.NoError(t, wan.Stop()) closePairNow(t, sender, receiver) }