@@ -64,6 +64,7 @@ func TestConn(t *testing.T) {
64
64
t .Run ("Ping" , func (t * testing.T ) {
65
65
t .Parallel ()
66
66
client , server , _ := createPair (t )
67
+ exchange (client , server )
67
68
_ , err := client .Ping ()
68
69
require .NoError (t , err )
69
70
_ , err = server .Ping ()
@@ -72,7 +73,8 @@ func TestConn(t *testing.T) {
72
73
73
74
t .Run ("PingNetworkOffline" , func (t * testing.T ) {
74
75
t .Parallel ()
75
- _ , server , wan := createPair (t )
76
+ client , server , wan := createPair (t )
77
+ exchange (client , server )
76
78
_ , err := server .Ping ()
77
79
require .NoError (t , err )
78
80
err = wan .Stop ()
@@ -83,7 +85,8 @@ func TestConn(t *testing.T) {
83
85
84
86
t .Run ("PingReconnect" , func (t * testing.T ) {
85
87
t .Parallel ()
86
- _ , server , wan := createPair (t )
88
+ client , server , wan := createPair (t )
89
+ exchange (client , server )
87
90
_ , err := server .Ping ()
88
91
require .NoError (t , err )
89
92
// Create a channel that closes on disconnect.
@@ -104,6 +107,7 @@ func TestConn(t *testing.T) {
104
107
t .Run ("Accept" , func (t * testing.T ) {
105
108
t .Parallel ()
106
109
client , server , _ := createPair (t )
110
+ exchange (client , server )
107
111
cch , err := client .Dial (context .Background (), "hello" , & peer.ChannelOptions {})
108
112
require .NoError (t , err )
109
113
@@ -119,6 +123,7 @@ func TestConn(t *testing.T) {
119
123
t .Run ("AcceptNetworkOffline" , func (t * testing.T ) {
120
124
t .Parallel ()
121
125
client , server , wan := createPair (t )
126
+ exchange (client , server )
122
127
cch , err := client .Dial (context .Background (), "hello" , & peer.ChannelOptions {})
123
128
require .NoError (t , err )
124
129
sch , err := server .Accept (context .Background ())
@@ -135,6 +140,7 @@ func TestConn(t *testing.T) {
135
140
t .Run ("Buffering" , func (t * testing.T ) {
136
141
t .Parallel ()
137
142
client , server , _ := createPair (t )
143
+ exchange (client , server )
138
144
cch , err := client .Dial (context .Background (), "hello" , & peer.ChannelOptions {})
139
145
require .NoError (t , err )
140
146
sch , err := server .Accept (context .Background ())
@@ -159,6 +165,7 @@ func TestConn(t *testing.T) {
159
165
t .Run ("NetConn" , func (t * testing.T ) {
160
166
t .Parallel ()
161
167
client , server , _ := createPair (t )
168
+ exchange (client , server )
162
169
srv , err := net .Listen ("tcp" , "127.0.0.1:0" )
163
170
require .NoError (t , err )
164
171
defer srv .Close ()
@@ -211,6 +218,7 @@ func TestConn(t *testing.T) {
211
218
t .Run ("CloseBeforeNegotiate" , func (t * testing.T ) {
212
219
t .Parallel ()
213
220
client , server , _ := createPair (t )
221
+ exchange (client , server )
214
222
err := client .Close ()
215
223
require .NoError (t , err )
216
224
err = server .Close ()
@@ -230,6 +238,7 @@ func TestConn(t *testing.T) {
230
238
t .Run ("PingConcurrent" , func (t * testing.T ) {
231
239
t .Parallel ()
232
240
client , server , _ := createPair (t )
241
+ exchange (client , server )
233
242
var wg sync.WaitGroup
234
243
wg .Add (2 )
235
244
go func () {
@@ -244,6 +253,19 @@ func TestConn(t *testing.T) {
244
253
}()
245
254
wg .Wait ()
246
255
})
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
+ })
247
269
}
248
270
249
271
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
302
324
_ = wan .Stop ()
303
325
})
304
326
327
+ return channel1 , channel2 , wan
328
+ }
329
+
330
+ func exchange (client * peer.Conn , server * peer.Conn ) {
305
331
go func () {
306
332
for {
307
333
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 ():
313
339
return
314
340
}
315
341
}
@@ -318,15 +344,13 @@ func createPair(t *testing.T) (client *peer.Conn, server *peer.Conn, wan *vnet.R
318
344
go func () {
319
345
for {
320
346
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 ():
326
352
return
327
353
}
328
354
}
329
355
}()
330
-
331
- return channel1 , channel2 , wan
332
356
}
0 commit comments