@@ -91,6 +91,8 @@ func TestConn(t *testing.T) {
91
91
// Create a channel that closes on disconnect.
92
92
channel , err := server .CreateChannel (context .Background (), "wow" , nil )
93
93
assert .NoError (t , err )
94
+ defer channel .Close ()
95
+
94
96
err = wan .Stop ()
95
97
require .NoError (t , err )
96
98
// Once the connection is marked as disconnected, this
@@ -107,10 +109,13 @@ func TestConn(t *testing.T) {
107
109
t .Parallel ()
108
110
client , server , _ := createPair (t )
109
111
exchange (t , client , server )
110
- cch , err := client .CreateChannel (context .Background (), "hello" , & peer.ChannelOptions {})
112
+ ctx , cancel := context .WithTimeout (context .Background (), 15 * time .Second )
113
+ defer cancel ()
114
+ cch , err := client .CreateChannel (ctx , "hello" , & peer.ChannelOptions {})
111
115
require .NoError (t , err )
116
+ defer cch .Close ()
112
117
113
- sch , err := server .Accept (context . Background () )
118
+ sch , err := server .Accept (ctx )
114
119
require .NoError (t , err )
115
120
defer sch .Close ()
116
121
@@ -123,9 +128,12 @@ func TestConn(t *testing.T) {
123
128
t .Parallel ()
124
129
client , server , wan := createPair (t )
125
130
exchange (t , client , server )
126
- cch , err := client .CreateChannel (context .Background (), "hello" , & peer.ChannelOptions {})
131
+ ctx , cancel := context .WithTimeout (context .Background (), 15 * time .Second )
132
+ defer cancel ()
133
+ cch , err := client .CreateChannel (ctx , "hello" , & peer.ChannelOptions {})
127
134
require .NoError (t , err )
128
- sch , err := server .Accept (context .Background ())
135
+ defer cch .Close ()
136
+ sch , err := server .Accept (ctx )
129
137
require .NoError (t , err )
130
138
defer sch .Close ()
131
139
@@ -140,26 +148,44 @@ func TestConn(t *testing.T) {
140
148
t .Parallel ()
141
149
client , server , _ := createPair (t )
142
150
exchange (t , client , server )
143
- cch , err := client . CreateChannel (context .Background (), "hello" , & peer. ChannelOptions {} )
144
- require . NoError ( t , err )
145
- sch , err := server . Accept ( context . Background () )
151
+ ctx , cancel := context . WithTimeout (context .Background (), 15 * time . Second )
152
+ defer cancel ( )
153
+ cch , err := client . CreateChannel ( ctx , "hello" , & peer. ChannelOptions {} )
146
154
require .NoError (t , err )
147
- defer sch .Close ()
155
+ defer cch .Close ()
156
+
157
+ readErr := make (chan error , 1 )
148
158
go func () {
159
+ sch , err := server .Accept (ctx )
160
+ if err != nil {
161
+ readErr <- err
162
+ _ = cch .Close ()
163
+ return
164
+ }
165
+ defer sch .Close ()
166
+
149
167
bytes := make ([]byte , 4096 )
150
- for i := 0 ; i < 1024 ; i ++ {
151
- _ , err := cch .Write (bytes )
152
- require .NoError (t , err )
168
+ for {
169
+ _ , err = sch .Read (bytes )
170
+ if err != nil {
171
+ readErr <- err
172
+ return
173
+ }
153
174
}
154
- _ = cch .Close ()
155
175
}()
176
+
156
177
bytes := make ([]byte , 4096 )
157
- for {
158
- _ , err = sch .Read (bytes )
159
- if err != nil {
160
- require .ErrorIs (t , err , peer .ErrClosed )
161
- break
162
- }
178
+ for i := 0 ; i < 1024 ; i ++ {
179
+ _ , err = cch .Write (bytes )
180
+ require .NoError (t , err , "write i=%d" , i )
181
+ }
182
+ _ = cch .Close ()
183
+
184
+ select {
185
+ case err = <- readErr :
186
+ require .ErrorIs (t , err , peer .ErrClosed , "read error" )
187
+ case <- ctx .Done ():
188
+ require .Fail (t , "timeout waiting for read error" )
163
189
}
164
190
})
165
191
@@ -170,13 +196,29 @@ func TestConn(t *testing.T) {
170
196
srv , err := net .Listen ("tcp" , "127.0.0.1:0" )
171
197
require .NoError (t , err )
172
198
defer srv .Close ()
199
+ ctx , cancel := context .WithTimeout (context .Background (), 15 * time .Second )
200
+ defer cancel ()
173
201
go func () {
174
- sch , err := server .Accept (context .Background ())
175
- assert .NoError (t , err )
202
+ sch , err := server .Accept (ctx )
203
+ if err != nil {
204
+ assert .NoError (t , err )
205
+ return
206
+ }
207
+ defer sch .Close ()
208
+
176
209
nc2 := sch .NetConn ()
210
+ defer nc2 .Close ()
211
+
177
212
nc1 , err := net .Dial ("tcp" , srv .Addr ().String ())
178
- assert .NoError (t , err )
213
+ if err != nil {
214
+ assert .NoError (t , err )
215
+ return
216
+ }
217
+ defer nc1 .Close ()
218
+
179
219
go func () {
220
+ defer nc1 .Close ()
221
+ defer nc2 .Close ()
180
222
_ , _ = io .Copy (nc1 , nc2 )
181
223
}()
182
224
_ , _ = io .Copy (nc2 , nc1 )
@@ -204,7 +246,7 @@ func TestConn(t *testing.T) {
204
246
c := http.Client {
205
247
Transport : defaultTransport ,
206
248
}
207
- req , err := http .NewRequestWithContext (context . Background () , "GET" , "http://localhost/" , nil )
249
+ req , err := http .NewRequestWithContext (ctx , "GET" , "http://localhost/" , nil )
208
250
require .NoError (t , err )
209
251
resp , err := c .Do (req )
210
252
require .NoError (t , err )
@@ -272,14 +314,21 @@ func TestConn(t *testing.T) {
272
314
t .Parallel ()
273
315
client , server , _ := createPair (t )
274
316
exchange (t , client , server )
317
+ ctx , cancel := context .WithTimeout (context .Background (), 15 * time .Second )
318
+ defer cancel ()
275
319
go func () {
276
- channel , err := client .CreateChannel (context .Background (), "test" , nil )
277
- assert .NoError (t , err )
320
+ channel , err := client .CreateChannel (ctx , "test" , nil )
321
+ if err != nil {
322
+ assert .NoError (t , err )
323
+ return
324
+ }
325
+ defer channel .Close ()
278
326
_ , err = channel .Write ([]byte {1 , 2 })
279
327
assert .NoError (t , err )
280
328
}()
281
- channel , err := server .Accept (context . Background () )
329
+ channel , err := server .Accept (ctx )
282
330
require .NoError (t , err )
331
+ defer channel .Close ()
283
332
data := make ([]byte , 1 )
284
333
_ , err = channel .Read (data )
285
334
require .NoError (t , err )
0 commit comments