Skip to content

Commit

Permalink
test: Fix goroutine leak in peer exchange exit (#370)
Browse files Browse the repository at this point in the history
Closes #361.
  • Loading branch information
kylecarbs committed Feb 28, 2022
1 parent f630fc5 commit 68ceea8
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions peer/conn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func TestConn(t *testing.T) {
t.Run("Ping", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
_, err := client.Ping()
require.NoError(t, err)
_, err = server.Ping()
Expand All @@ -74,7 +74,7 @@ func TestConn(t *testing.T) {
t.Run("PingNetworkOffline", func(t *testing.T) {
t.Parallel()
client, server, wan := createPair(t)
exchange(client, server)
exchange(t, client, server)
_, err := server.Ping()
require.NoError(t, err)
err = wan.Stop()
Expand All @@ -86,7 +86,7 @@ func TestConn(t *testing.T) {
t.Run("PingReconnect", func(t *testing.T) {
t.Parallel()
client, server, wan := createPair(t)
exchange(client, server)
exchange(t, client, server)
_, err := server.Ping()
require.NoError(t, err)
// Create a channel that closes on disconnect.
Expand All @@ -107,7 +107,7 @@ func TestConn(t *testing.T) {
t.Run("Accept", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
require.NoError(t, err)

Expand All @@ -123,7 +123,7 @@ func TestConn(t *testing.T) {
t.Run("AcceptNetworkOffline", func(t *testing.T) {
t.Parallel()
client, server, wan := createPair(t)
exchange(client, server)
exchange(t, client, server)
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
require.NoError(t, err)
sch, err := server.Accept(context.Background())
Expand All @@ -140,7 +140,7 @@ func TestConn(t *testing.T) {
t.Run("Buffering", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
cch, err := client.Dial(context.Background(), "hello", &peer.ChannelOptions{})
require.NoError(t, err)
sch, err := server.Accept(context.Background())
Expand All @@ -167,7 +167,7 @@ func TestConn(t *testing.T) {
t.Run("NetConn", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
srv, err := net.Listen("tcp", "127.0.0.1:0")
require.NoError(t, err)
defer srv.Close()
Expand Down Expand Up @@ -220,7 +220,7 @@ func TestConn(t *testing.T) {
t.Run("CloseBeforeNegotiate", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
err := client.Close()
require.NoError(t, err)
err = server.Close()
Expand All @@ -240,7 +240,7 @@ func TestConn(t *testing.T) {
t.Run("PingConcurrent", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
var wg sync.WaitGroup
wg.Add(2)
go func() {
Expand Down Expand Up @@ -271,7 +271,7 @@ func TestConn(t *testing.T) {
t.Run("ShortBuffer", func(t *testing.T) {
t.Parallel()
client, server, _ := createPair(t)
exchange(client, server)
exchange(t, client, server)
go func() {
channel, err := client.Dial(context.Background(), "test", nil)
require.NoError(t, err)
Expand Down Expand Up @@ -345,8 +345,17 @@ func createPair(t *testing.T) (client *peer.Conn, server *peer.Conn, wan *vnet.R
return channel1, channel2, wan
}

func exchange(client, server *peer.Conn) {
func exchange(t *testing.T, client, server *peer.Conn) {
var wg sync.WaitGroup
wg.Add(2)
t.Cleanup(func() {
_ = client.Close()
_ = server.Close()

wg.Wait()
})
go func() {
defer wg.Done()
for {
select {
case c := <-server.LocalCandidate():
Expand All @@ -358,8 +367,8 @@ func exchange(client, server *peer.Conn) {
}
}
}()

go func() {
defer wg.Done()
for {
select {
case c := <-client.LocalCandidate():
Expand Down

0 comments on commit 68ceea8

Please sign in to comment.