candidate_relay_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 optimisticAuthHandler(string, string, net.Addr) (key []byte, ok bool) {
  17. return turn.GenerateAuthKey("username", "pion.ly", "password"), true
  18. }
  19. func TestRelayOnlyConnection(t *testing.T) {
  20. // Limit runtime in case of deadlocks
  21. lim := test.TimeOut(time.Second * 30)
  22. defer lim.Stop()
  23. report := test.CheckRoutines(t)
  24. defer report()
  25. serverPort := randomPort(t)
  26. serverListener, err := net.ListenPacket("udp", "127.0.0.1:"+strconv.Itoa(serverPort))
  27. assert.NoError(t, err)
  28. server, err := turn.NewServer(turn.ServerConfig{
  29. Realm: "pion.ly",
  30. AuthHandler: optimisticAuthHandler,
  31. PacketConnConfigs: []turn.PacketConnConfig{
  32. {
  33. PacketConn: serverListener,
  34. RelayAddressGenerator: &turn.RelayAddressGeneratorNone{Address: "127.0.0.1"},
  35. },
  36. },
  37. })
  38. assert.NoError(t, err)
  39. cfg := &AgentConfig{
  40. NetworkTypes: supportedNetworkTypes(),
  41. Urls: []*stun.URI{
  42. {
  43. Scheme: stun.SchemeTypeTURN,
  44. Host: "127.0.0.1",
  45. Username: "username",
  46. Password: "password",
  47. Port: serverPort,
  48. Proto: stun.ProtoTypeUDP,
  49. },
  50. },
  51. CandidateTypes: []CandidateType{CandidateTypeRelay},
  52. }
  53. aAgent, err := NewAgent(cfg)
  54. if err != nil {
  55. t.Fatal(err)
  56. }
  57. aNotifier, aConnected := onConnected()
  58. if err = aAgent.OnConnectionStateChange(aNotifier); err != nil {
  59. t.Fatal(err)
  60. }
  61. bAgent, err := NewAgent(cfg)
  62. if err != nil {
  63. t.Fatal(err)
  64. }
  65. bNotifier, bConnected := onConnected()
  66. if err = bAgent.OnConnectionStateChange(bNotifier); err != nil {
  67. t.Fatal(err)
  68. }
  69. connect(aAgent, bAgent)
  70. <-aConnected
  71. <-bConnected
  72. assert.NoError(t, aAgent.Close())
  73. assert.NoError(t, bAgent.Close())
  74. assert.NoError(t, server.Close())
  75. }