mirror of
				https://github.com/pion/webrtc.git
				synced 2025-10-31 18:52:55 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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/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)
 | |
| }
 | 
