icetransport_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. "sync"
  8. "sync/atomic"
  9. "testing"
  10. "time"
  11. "github.com/pion/transport/v2/test"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestICETransport_OnConnectionStateChange(t *testing.T) {
  15. report := test.CheckRoutines(t)
  16. defer report()
  17. lim := test.TimeOut(time.Second * 30)
  18. defer lim.Stop()
  19. pcOffer, pcAnswer, err := newPair()
  20. assert.NoError(t, err)
  21. var (
  22. iceComplete sync.WaitGroup
  23. peerConnectionConnected sync.WaitGroup
  24. )
  25. iceComplete.Add(2)
  26. peerConnectionConnected.Add(2)
  27. onIceComplete := func(s ICETransportState) {
  28. if s == ICETransportStateConnected {
  29. iceComplete.Done()
  30. }
  31. }
  32. pcOffer.SCTP().Transport().ICETransport().OnConnectionStateChange(onIceComplete)
  33. pcAnswer.SCTP().Transport().ICETransport().OnConnectionStateChange(onIceComplete)
  34. onConnected := func(s PeerConnectionState) {
  35. if s == PeerConnectionStateConnected {
  36. peerConnectionConnected.Done()
  37. }
  38. }
  39. pcOffer.OnConnectionStateChange(onConnected)
  40. pcAnswer.OnConnectionStateChange(onConnected)
  41. assert.NoError(t, signalPair(pcOffer, pcAnswer))
  42. iceComplete.Wait()
  43. peerConnectionConnected.Wait()
  44. closePairNow(t, pcOffer, pcAnswer)
  45. }
  46. func TestICETransport_OnSelectedCandidatePairChange(t *testing.T) {
  47. report := test.CheckRoutines(t)
  48. defer report()
  49. lim := test.TimeOut(time.Second * 30)
  50. defer lim.Stop()
  51. pcOffer, pcAnswer, err := newPair()
  52. assert.NoError(t, err)
  53. iceComplete := make(chan bool)
  54. pcAnswer.OnICEConnectionStateChange(func(iceState ICEConnectionState) {
  55. if iceState == ICEConnectionStateConnected {
  56. time.Sleep(3 * time.Second)
  57. close(iceComplete)
  58. }
  59. })
  60. senderCalledCandidateChange := int32(0)
  61. pcOffer.SCTP().Transport().ICETransport().OnSelectedCandidatePairChange(func(pair *ICECandidatePair) {
  62. atomic.StoreInt32(&senderCalledCandidateChange, 1)
  63. })
  64. assert.NoError(t, signalPair(pcOffer, pcAnswer))
  65. <-iceComplete
  66. if atomic.LoadInt32(&senderCalledCandidateChange) == 0 {
  67. t.Fatalf("Sender ICETransport OnSelectedCandidateChange was never called")
  68. }
  69. closePairNow(t, pcOffer, pcAnswer)
  70. }
  71. func TestICETransport_GetSelectedCandidatePair(t *testing.T) {
  72. offerer, answerer, err := newPair()
  73. assert.NoError(t, err)
  74. peerConnectionConnected := untilConnectionState(PeerConnectionStateConnected, offerer, answerer)
  75. offererSelectedPair, err := offerer.SCTP().Transport().ICETransport().GetSelectedCandidatePair()
  76. assert.NoError(t, err)
  77. assert.Nil(t, offererSelectedPair)
  78. answererSelectedPair, err := answerer.SCTP().Transport().ICETransport().GetSelectedCandidatePair()
  79. assert.NoError(t, err)
  80. assert.Nil(t, answererSelectedPair)
  81. assert.NoError(t, signalPair(offerer, answerer))
  82. peerConnectionConnected.Wait()
  83. offererSelectedPair, err = offerer.SCTP().Transport().ICETransport().GetSelectedCandidatePair()
  84. assert.NoError(t, err)
  85. assert.NotNil(t, offererSelectedPair)
  86. answererSelectedPair, err = answerer.SCTP().Transport().ICETransport().GetSelectedCandidatePair()
  87. assert.NoError(t, err)
  88. assert.NotNil(t, answererSelectedPair)
  89. closePairNow(t, offerer, answerer)
  90. }
  91. func TestICETransport_GetLocalParameters(t *testing.T) {
  92. offerer, answerer, err := newPair()
  93. assert.NoError(t, err)
  94. peerConnectionConnected := untilConnectionState(PeerConnectionStateConnected, offerer, answerer)
  95. assert.NoError(t, signalPair(offerer, answerer))
  96. peerConnectionConnected.Wait()
  97. localParameters, err := offerer.SCTP().Transport().ICETransport().GetLocalParameters()
  98. assert.NoError(t, err)
  99. assert.NotEqual(t, localParameters.UsernameFragment, "")
  100. assert.NotEqual(t, localParameters.Password, "")
  101. closePairNow(t, offerer, answerer)
  102. }