mirror of
https://github.com/pion/webrtc.git
synced 2025-10-05 07:06:51 +08:00

This change adapts pion/ice to use a new interface for most network related operations. The interface was formerly a simple struct vnet.Net which was originally intended to facilicate testing. By replacing it with an interface we have greater flexibility and allow users to hook into the networking stack by providing their own implementation of the interface.
63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
//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)
|
|
}
|