Skip to content

Commit e155e31

Browse files
committed
Add test for negotiating out of order
1 parent 7445f12 commit e155e31

File tree

1 file changed

+38
-14
lines changed

1 file changed

+38
-14
lines changed

peer/conn_test.go

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func TestConn(t *testing.T) {
6464
t.Run("Ping", func(t *testing.T) {
6565
t.Parallel()
6666
client, server, _ := createPair(t)
67+
exchange(client, server)
6768
_, err := client.Ping()
6869
require.NoError(t, err)
6970
_, err = server.Ping()
@@ -72,7 +73,8 @@ func TestConn(t *testing.T) {
7273

7374
t.Run("PingNetworkOffline", func(t *testing.T) {
7475
t.Parallel()
75-
_, server, wan := createPair(t)
76+
client, server, wan := createPair(t)
77+
exchange(client, server)
7678
_, err := server.Ping()
7779
require.NoError(t, err)
7880
err = wan.Stop()
@@ -83,7 +85,8 @@ func TestConn(t *testing.T) {
8385

8486
t.Run("PingReconnect", func(t *testing.T) {
8587
t.Parallel()
86-
_, server, wan := createPair(t)
88+
client, server, wan := createPair(t)
89+
exchange(client, server)
8790
_, err := server.Ping()
8891
require.NoError(t, err)
8992
// Create a channel that closes on disconnect.
@@ -104,6 +107,7 @@ func TestConn(t *testing.T) {
104107
t.Run("Accept", func(t *testing.T) {
105108
t.Parallel()
106109
client, server, _ := createPair(t)
110+
exchange(client, server)
107111
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
108112
require.NoError(t, err)
109113

@@ -119,6 +123,7 @@ func TestConn(t *testing.T) {
119123
t.Run("AcceptNetworkOffline", func(t *testing.T) {
120124
t.Parallel()
121125
client, server, wan := createPair(t)
126+
exchange(client, server)
122127
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
123128
require.NoError(t, err)
124129
sch, err := server.Accept(context.Background())
@@ -135,6 +140,7 @@ func TestConn(t *testing.T) {
135140
t.Run("Buffering", func(t *testing.T) {
136141
t.Parallel()
137142
client, server, _ := createPair(t)
143+
exchange(client, server)
138144
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
139145
require.NoError(t, err)
140146
sch, err := server.Accept(context.Background())
@@ -159,6 +165,7 @@ func TestConn(t *testing.T) {
159165
t.Run("NetConn", func(t *testing.T) {
160166
t.Parallel()
161167
client, server, _ := createPair(t)
168+
exchange(client, server)
162169
srv, err := net.Listen("tcp", "127.0.0.1:0")
163170
require.NoError(t, err)
164171
defer srv.Close()
@@ -211,6 +218,7 @@ func TestConn(t *testing.T) {
211218
t.Run("CloseBeforeNegotiate", func(t *testing.T) {
212219
t.Parallel()
213220
client, server, _ := createPair(t)
221+
exchange(client, server)
214222
err := client.Close()
215223
require.NoError(t, err)
216224
err = server.Close()
@@ -230,6 +238,7 @@ func TestConn(t *testing.T) {
230238
t.Run("PingConcurrent", func(t *testing.T) {
231239
t.Parallel()
232240
client, server, _ := createPair(t)
241+
exchange(client, server)
233242
var wg sync.WaitGroup
234243
wg.Add(2)
235244
go func() {
@@ -244,6 +253,19 @@ func TestConn(t *testing.T) {
244253
}()
245254
wg.Wait()
246255
})
256+
257+
t.Run("NegotiateOutOfOrder", func(t *testing.T) {
258+
t.Parallel()
259+
client, server, _ := createPair(t)
260+
server.SetRemoteSessionDescription(<-client.LocalSessionDescription())
261+
err := client.AddRemoteCandidate(<-server.LocalCandidate())
262+
require.NoError(t, err)
263+
client.SetRemoteSessionDescription(<-server.LocalSessionDescription())
264+
err = server.AddRemoteCandidate(<-client.LocalCandidate())
265+
require.NoError(t, err)
266+
_, err = client.Ping()
267+
require.NoError(t, err)
268+
})
247269
}
248270

249271
func createPair(t *testing.T) (client *peer.Conn, server *peer.Conn, wan *vnet.Router) {
@@ -302,14 +324,18 @@ func createPair(t *testing.T) (client *peer.Conn, server *peer.Conn, wan *vnet.R
302324
_ = wan.Stop()
303325
})
304326

327+
return channel1, channel2, wan
328+
}
329+
330+
func exchange(client *peer.Conn, server *peer.Conn) {
305331
go func() {
306332
for {
307333
select {
308-
case c := <-channel2.LocalCandidate():
309-
_ = channel1.AddRemoteCandidate(c)
310-
case c := <-channel2.LocalSessionDescription():
311-
channel1.SetRemoteSessionDescription(c)
312-
case <-channel2.Closed():
334+
case c := <-server.LocalCandidate():
335+
_ = client.AddRemoteCandidate(c)
336+
case c := <-server.LocalSessionDescription():
337+
client.SetRemoteSessionDescription(c)
338+
case <-server.Closed():
313339
return
314340
}
315341
}
@@ -318,15 +344,13 @@ func createPair(t *testing.T) (client *peer.Conn, server *peer.Conn, wan *vnet.R
318344
go func() {
319345
for {
320346
select {
321-
case c := <-channel1.LocalCandidate():
322-
_ = channel2.AddRemoteCandidate(c)
323-
case c := <-channel1.LocalSessionDescription():
324-
channel2.SetRemoteSessionDescription(c)
325-
case <-channel1.Closed():
347+
case c := <-client.LocalCandidate():
348+
_ = server.AddRemoteCandidate(c)
349+
case c := <-client.LocalSessionDescription():
350+
server.SetRemoteSessionDescription(c)
351+
case <-client.Closed():
326352
return
327353
}
328354
}
329355
}()
330-
331-
return channel1, channel2, wan
332356
}

0 commit comments

Comments
 (0)