-
Notifications
You must be signed in to change notification settings - Fork 0
/
gather_vnet_test.go
139 lines (117 loc) · 3.32 KB
/
gather_vnet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package ice
import (
"net"
"testing"
"github.com/pion/logging"
"github.com/pion/transport/vnet"
)
func TestVNetGather(t *testing.T) {
loggerFactory := logging.NewDefaultLoggerFactory()
//log := loggerFactory.NewLogger("test")
t.Run("No local IP address", func(t *testing.T) {
a, err := NewAgent(&AgentConfig{
Net: vnet.NewNet(&vnet.NetConfig{}),
})
if err != nil {
t.Fatalf("Failed to create agent: %s", err)
}
localIPs, err := a.localInterfaces([]NetworkType{NetworkTypeUDP4})
if len(localIPs) > 0 {
t.Fatal("should return no local IP")
} else if err != nil {
t.Fatal(err)
}
})
t.Run("Gather a dynamic IP address", func(t *testing.T) {
cider := "1.2.3.0/24"
_, ipNet, err := net.ParseCIDR(cider)
if err != nil {
t.Fatalf("Failed to parse CIDR: %s", err)
}
r, err := vnet.NewRouter(&vnet.RouterConfig{
CIDR: cider,
LoggerFactory: loggerFactory,
})
if err != nil {
t.Fatalf("Failed to create a router: %s", err)
}
nw := vnet.NewNet(&vnet.NetConfig{})
if nw == nil {
t.Fatalf("Failed to create a Net: %s", err)
}
err = r.AddNet(nw)
if err != nil {
t.Fatalf("Failed to add a Net to the router: %s", err)
}
a, err := NewAgent(&AgentConfig{
Net: nw,
})
if err != nil {
t.Fatalf("Failed to create agent: %s", err)
}
localIPs, err := a.localInterfaces([]NetworkType{NetworkTypeUDP4})
if len(localIPs) == 0 {
t.Fatal("should have one local IP")
} else if err != nil {
t.Fatal(err)
}
for _, ip := range localIPs {
if ip.IsLoopback() {
t.Fatal("should not return loopback IP")
}
if !ipNet.Contains(ip) {
t.Fatal("should be contained in the CIDR")
}
}
})
t.Run("listenUDP", func(t *testing.T) {
r, err := vnet.NewRouter(&vnet.RouterConfig{
CIDR: "1.2.3.0/24",
LoggerFactory: loggerFactory,
})
if err != nil {
t.Fatalf("Failed to create a router: %s", err)
}
nw := vnet.NewNet(&vnet.NetConfig{})
if nw == nil {
t.Fatalf("Failed to create a Net: %s", err)
}
err = r.AddNet(nw)
if err != nil {
t.Fatalf("Failed to add a Net to the router: %s", err)
}
a, err := NewAgent(&AgentConfig{Net: nw})
if err != nil {
t.Fatalf("Failed to create agent: %s", err)
}
localIPs, err := a.localInterfaces([]NetworkType{NetworkTypeUDP4})
if len(localIPs) == 0 {
t.Fatal("localInterfaces found no interfaces, unable to test")
} else if err != nil {
t.Fatal(err)
}
ip := localIPs[0]
conn, err := a.listenUDP(0, 0, udp, &net.UDPAddr{IP: ip, Port: 0})
if err != nil {
t.Fatalf("listenUDP error with no port restriction %v", err)
} else if conn == nil {
t.Fatalf("listenUDP error with no port restriction return a nil conn")
}
_, err = a.listenUDP(4999, 5000, udp, &net.UDPAddr{IP: ip, Port: 0})
if err != ErrPort {
t.Fatal("listenUDP with invalid port range did not return ErrPort")
}
conn, err = a.listenUDP(5000, 5000, udp, &net.UDPAddr{IP: ip, Port: 0})
if err != nil {
t.Fatalf("listenUDP error with no port restriction %v", err)
} else if conn == nil {
t.Fatalf("listenUDP error with no port restriction return a nil conn")
}
_, port, err := net.SplitHostPort(conn.LocalAddr().String())
if err != nil {
t.Fatal(err)
} else if port != "5000" {
t.Fatalf("listenUDP with port restriction of 5000 listened on incorrect port (%s)", port)
}
})
}