rtpreceiver_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. //go:build !js
  4. // +build !js
  5. package webrtc
  6. import (
  7. "context"
  8. "testing"
  9. "time"
  10. "github.com/pion/transport/v2/test"
  11. "github.com/pion/webrtc/v3/pkg/media"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. // Assert that SetReadDeadline works as expected
  15. // This test uses VNet since we must have zero loss
  16. func Test_RTPReceiver_SetReadDeadline(t *testing.T) {
  17. lim := test.TimeOut(time.Second * 30)
  18. defer lim.Stop()
  19. report := test.CheckRoutines(t)
  20. defer report()
  21. sender, receiver, wan := createVNetPair(t)
  22. track, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion")
  23. assert.NoError(t, err)
  24. _, err = sender.AddTrack(track)
  25. assert.NoError(t, err)
  26. seenPacket, seenPacketCancel := context.WithCancel(context.Background())
  27. receiver.OnTrack(func(trackRemote *TrackRemote, r *RTPReceiver) {
  28. // Set Deadline for both RTP and RTCP Stream
  29. assert.NoError(t, r.SetReadDeadline(time.Now().Add(time.Second)))
  30. assert.NoError(t, trackRemote.SetReadDeadline(time.Now().Add(time.Second)))
  31. // First call will not error because we cache for probing
  32. _, _, readErr := trackRemote.ReadRTP()
  33. assert.NoError(t, readErr)
  34. _, _, readErr = trackRemote.ReadRTP()
  35. assert.Error(t, readErr)
  36. _, _, readErr = r.ReadRTCP()
  37. assert.Error(t, readErr)
  38. seenPacketCancel()
  39. })
  40. peerConnectionsConnected := untilConnectionState(PeerConnectionStateConnected, sender, receiver)
  41. assert.NoError(t, signalPair(sender, receiver))
  42. peerConnectionsConnected.Wait()
  43. assert.NoError(t, track.WriteSample(media.Sample{Data: []byte{0xAA}, Duration: time.Second}))
  44. <-seenPacket.Done()
  45. assert.NoError(t, wan.Stop())
  46. closePairNow(t, sender, receiver)
  47. }