candidate_server_reflexive_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. //go:build !js
  4. // +build !js
  5. package ice
  6. import (
  7. "net"
  8. "strconv"
  9. "testing"
  10. "time"
  11. "github.com/pion/stun"
  12. "github.com/pion/transport/v2/test"
  13. "github.com/pion/turn/v2"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestServerReflexiveOnlyConnection(t *testing.T) {
  17. report := test.CheckRoutines(t)
  18. defer report()
  19. // Limit runtime in case of deadlocks
  20. lim := test.TimeOut(time.Second * 30)
  21. defer lim.Stop()
  22. serverPort := randomPort(t)
  23. serverListener, err := net.ListenPacket("udp4", "127.0.0.1:"+strconv.Itoa(serverPort))
  24. assert.NoError(t, err)
  25. server, err := turn.NewServer(turn.ServerConfig{
  26. Realm: "pion.ly",
  27. AuthHandler: optimisticAuthHandler,
  28. PacketConnConfigs: []turn.PacketConnConfig{
  29. {
  30. PacketConn: serverListener,
  31. RelayAddressGenerator: &turn.RelayAddressGeneratorNone{Address: "127.0.0.1"},
  32. },
  33. },
  34. })
  35. assert.NoError(t, err)
  36. cfg := &AgentConfig{
  37. NetworkTypes: []NetworkType{NetworkTypeUDP4},
  38. Urls: []*stun.URI{
  39. {
  40. Scheme: SchemeTypeSTUN,
  41. Host: "127.0.0.1",
  42. Port: serverPort,
  43. },
  44. },
  45. CandidateTypes: []CandidateType{CandidateTypeServerReflexive},
  46. }
  47. aAgent, err := NewAgent(cfg)
  48. if err != nil {
  49. t.Fatal(err)
  50. }
  51. aNotifier, aConnected := onConnected()
  52. if err = aAgent.OnConnectionStateChange(aNotifier); err != nil {
  53. t.Fatal(err)
  54. }
  55. bAgent, err := NewAgent(cfg)
  56. if err != nil {
  57. t.Fatal(err)
  58. }
  59. bNotifier, bConnected := onConnected()
  60. if err = bAgent.OnConnectionStateChange(bNotifier); err != nil {
  61. t.Fatal(err)
  62. }
  63. connect(aAgent, bAgent)
  64. <-aConnected
  65. <-bConnected
  66. assert.NoError(t, aAgent.Close())
  67. assert.NoError(t, bAgent.Close())
  68. assert.NoError(t, server.Close())
  69. }