Skip to content

Commit 68ceea8

Browse files
authored
test: Fix goroutine leak in peer exchange exit (#370)
Closes #361.
1 parent f630fc5 commit 68ceea8

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

peer/conn_test.go

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +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)
67+
exchange(t, client, server)
6868
_, err := client.Ping()
6969
require.NoError(t, err)
7070
_, err = server.Ping()
@@ -74,7 +74,7 @@ func TestConn(t *testing.T) {
7474
t.Run("PingNetworkOffline", func(t *testing.T) {
7575
t.Parallel()
7676
client, server, wan := createPair(t)
77-
exchange(client, server)
77+
exchange(t, client, server)
7878
_, err := server.Ping()
7979
require.NoError(t, err)
8080
err = wan.Stop()
@@ -86,7 +86,7 @@ func TestConn(t *testing.T) {
8686
t.Run("PingReconnect", func(t *testing.T) {
8787
t.Parallel()
8888
client, server, wan := createPair(t)
89-
exchange(client, server)
89+
exchange(t, client, server)
9090
_, err := server.Ping()
9191
require.NoError(t, err)
9292
// Create a channel that closes on disconnect.
@@ -107,7 +107,7 @@ func TestConn(t *testing.T) {
107107
t.Run("Accept", func(t *testing.T) {
108108
t.Parallel()
109109
client, server, _ := createPair(t)
110-
exchange(client, server)
110+
exchange(t, client, server)
111111
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
112112
require.NoError(t, err)
113113

@@ -123,7 +123,7 @@ func TestConn(t *testing.T) {
123123
t.Run("AcceptNetworkOffline", func(t *testing.T) {
124124
t.Parallel()
125125
client, server, wan := createPair(t)
126-
exchange(client, server)
126+
exchange(t, client, server)
127127
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
128128
require.NoError(t, err)
129129
sch, err := server.Accept(context.Background())
@@ -140,7 +140,7 @@ func TestConn(t *testing.T) {
140140
t.Run("Buffering", func(t *testing.T) {
141141
t.Parallel()
142142
client, server, _ := createPair(t)
143-
exchange(client, server)
143+
exchange(t, client, server)
144144
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
145145
require.NoError(t, err)
146146
sch, err := server.Accept(context.Background())
@@ -167,7 +167,7 @@ func TestConn(t *testing.T) {
167167
t.Run("NetConn", func(t *testing.T) {
168168
t.Parallel()
169169
client, server, _ := createPair(t)
170-
exchange(client, server)
170+
exchange(t, client, server)
171171
srv, err := net.Listen("tcp", "127.0.0.1:0")
172172
require.NoError(t, err)
173173
defer srv.Close()
@@ -220,7 +220,7 @@ func TestConn(t *testing.T) {
220220
t.Run("CloseBeforeNegotiate", func(t *testing.T) {
221221
t.Parallel()
222222
client, server, _ := createPair(t)
223-
exchange(client, server)
223+
exchange(t, client, server)
224224
err := client.Close()
225225
require.NoError(t, err)
226226
err = server.Close()
@@ -240,7 +240,7 @@ func TestConn(t *testing.T) {
240240
t.Run("PingConcurrent", func(t *testing.T) {
241241
t.Parallel()
242242
client, server, _ := createPair(t)
243-
exchange(client, server)
243+
exchange(t, client, server)
244244
var wg sync.WaitGroup
245245
wg.Add(2)
246246
go func() {
@@ -271,7 +271,7 @@ func TestConn(t *testing.T) {
271271
t.Run("ShortBuffer", func(t *testing.T) {
272272
t.Parallel()
273273
client, server, _ := createPair(t)
274-
exchange(client, server)
274+
exchange(t, client, server)
275275
go func() {
276276
channel, err := client.Dial(context.Background(), "test", nil)
277277
require.NoError(t, err)
@@ -345,8 +345,17 @@ func createPair(t *testing.T) (client *peer.Conn, server *peer.Conn, wan *vnet.R
345345
return channel1, channel2, wan
346346
}
347347

348-
func exchange(client, server *peer.Conn) {
348+
func exchange(t *testing.T, client, server *peer.Conn) {
349+
var wg sync.WaitGroup
350+
wg.Add(2)
351+
t.Cleanup(func() {
352+
_ = client.Close()
353+
_ = server.Close()
354+
355+
wg.Wait()
356+
})
349357
go func() {
358+
defer wg.Done()
350359
for {
351360
select {
352361
case c := <-server.LocalCandidate():
@@ -358,8 +367,8 @@ func exchange(client, server *peer.Conn) {
358367
}
359368
}
360369
}()
361-
362370
go func() {
371+
defer wg.Done()
363372
for {
364373
select {
365374
case c := <-client.LocalCandidate():

0 commit comments

Comments
 (0)