| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
- // SPDX-License-Identifier: MIT
- //go:build !js
- // +build !js
- package webrtc
- import (
- "context"
- "testing"
- "time"
- "github.com/pion/transport/v2/test"
- "github.com/pion/webrtc/v3/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)
- 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)
- }
|