transport_vnet_test.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. "fmt"
  8. "net"
  9. "testing"
  10. "time"
  11. "github.com/pion/stun"
  12. "github.com/pion/transport/v2/test"
  13. "github.com/pion/transport/v2/vnet"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestRemoteLocalAddr(t *testing.T) {
  17. // Check for leaking routines
  18. report := test.CheckRoutines(t)
  19. defer report()
  20. // Limit runtime in case of deadlocks
  21. lim := test.TimeOut(time.Second * 20)
  22. defer lim.Stop()
  23. // Agent0 is behind 1:1 NAT
  24. natType0 := &vnet.NATType{Mode: vnet.NATModeNAT1To1}
  25. // Agent1 is behind 1:1 NAT
  26. natType1 := &vnet.NATType{Mode: vnet.NATModeNAT1To1}
  27. v, errVnet := buildVNet(natType0, natType1)
  28. if !assert.NoError(t, errVnet, "should succeed") {
  29. return
  30. }
  31. defer v.close()
  32. stunServerURL := &stun.URI{
  33. Scheme: stun.SchemeTypeSTUN,
  34. Host: vnetSTUNServerIP,
  35. Port: vnetSTUNServerPort,
  36. Proto: stun.ProtoTypeUDP,
  37. }
  38. t.Run("Disconnected Returns nil", func(t *testing.T) {
  39. disconnectedAgent, err := NewAgent(&AgentConfig{})
  40. assert.NoError(t, err)
  41. disconnectedConn := Conn{agent: disconnectedAgent}
  42. assert.Nil(t, disconnectedConn.RemoteAddr())
  43. assert.Nil(t, disconnectedConn.LocalAddr())
  44. assert.NoError(t, disconnectedConn.Close())
  45. })
  46. t.Run("Remote/Local Pair Match between Agents", func(t *testing.T) {
  47. ca, cb := pipeWithVNet(v,
  48. &agentTestConfig{
  49. urls: []*stun.URI{stunServerURL},
  50. },
  51. &agentTestConfig{
  52. urls: []*stun.URI{stunServerURL},
  53. },
  54. )
  55. aRAddr := ca.RemoteAddr()
  56. aLAddr := ca.LocalAddr()
  57. bRAddr := cb.RemoteAddr()
  58. bLAddr := cb.LocalAddr()
  59. // Assert that nothing is nil
  60. assert.NotNil(t, aRAddr)
  61. assert.NotNil(t, aLAddr)
  62. assert.NotNil(t, bRAddr)
  63. assert.NotNil(t, bLAddr)
  64. // Assert addresses
  65. assert.Equal(t, aLAddr.String(),
  66. fmt.Sprintf("%s:%d", vnetLocalIPA, bRAddr.(*net.UDPAddr).Port), //nolint:forcetypeassert
  67. )
  68. assert.Equal(t, bLAddr.String(),
  69. fmt.Sprintf("%s:%d", vnetLocalIPB, aRAddr.(*net.UDPAddr).Port), //nolint:forcetypeassert
  70. )
  71. assert.Equal(t, aRAddr.String(),
  72. fmt.Sprintf("%s:%d", vnetGlobalIPB, bLAddr.(*net.UDPAddr).Port), //nolint:forcetypeassert
  73. )
  74. assert.Equal(t, bRAddr.String(),
  75. fmt.Sprintf("%s:%d", vnetGlobalIPA, aLAddr.(*net.UDPAddr).Port), //nolint:forcetypeassert
  76. )
  77. // Close
  78. assert.NoError(t, ca.Close())
  79. assert.NoError(t, cb.Close())
  80. })
  81. }