From 52176ecf2da3f52162d928357b65bff8091f1261 Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Fri, 14 Dec 2018 13:53:39 -0800 Subject: [PATCH 1/5] try to remove race condition in mux test --- packer/rpc/mux_broker_test.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packer/rpc/mux_broker_test.go b/packer/rpc/mux_broker_test.go index 88739a0ff..53f398e53 100644 --- a/packer/rpc/mux_broker_test.go +++ b/packer/rpc/mux_broker_test.go @@ -17,15 +17,20 @@ func TestMuxBroker(t *testing.T) { go bc.Run() go bs.Run() + errChan := make(chan error, 1) go func() { c, err := bc.Dial(5) if err != nil { - t.Fatalf("err: %s", err) + errChan <- fmt.Errorf("err dialing: %s", err) + close(errChan) + return } if _, err := c.Write([]byte{42}); err != nil { - t.Fatalf("err: %s", err) + errChan <- fmt.Errorf("err writing: %s", err) } + + close(errChan) }() client, err := bs.Accept(5) @@ -41,6 +46,15 @@ func TestMuxBroker(t *testing.T) { if data[0] != 42 { t.Fatalf("bad: %d", data[0]) } + + for { + err, open := <-errChan + if !open { + if err != nil { + t.Fatalf(err) + } + } + } } func testYamux(t *testing.T) (client *yamux.Session, server *yamux.Session) { From f6070de070a07b46e066ff8f3d327ea8e004edb5 Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Fri, 14 Dec 2018 13:59:26 -0800 Subject: [PATCH 2/5] fix test --- packer/rpc/mux_broker_test.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packer/rpc/mux_broker_test.go b/packer/rpc/mux_broker_test.go index 53f398e53..8f8a993b9 100644 --- a/packer/rpc/mux_broker_test.go +++ b/packer/rpc/mux_broker_test.go @@ -1,6 +1,7 @@ package rpc import ( + "fmt" "net" "testing" @@ -21,13 +22,13 @@ func TestMuxBroker(t *testing.T) { go func() { c, err := bc.Dial(5) if err != nil { - errChan <- fmt.Errorf("err dialing: %s", err) + errChan <- fmt.Errorf("err dialing: %s", err.Error()) close(errChan) return } if _, err := c.Write([]byte{42}); err != nil { - errChan <- fmt.Errorf("err writing: %s", err) + errChan <- fmt.Errorf("err writing: %s", err.Error()) } close(errChan) @@ -51,8 +52,9 @@ func TestMuxBroker(t *testing.T) { err, open := <-errChan if !open { if err != nil { - t.Fatalf(err) + t.Fatalf(err.Error()) } + break } } } From 9a31d0de5895fd5a9b12e06cbe6f3b4d4b5dd026 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Mon, 17 Dec 2018 10:58:32 +0100 Subject: [PATCH 3/5] mux_broker_test.go: defer close chan --- packer/rpc/mux_broker_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packer/rpc/mux_broker_test.go b/packer/rpc/mux_broker_test.go index 8f8a993b9..9d6aeee75 100644 --- a/packer/rpc/mux_broker_test.go +++ b/packer/rpc/mux_broker_test.go @@ -20,18 +20,16 @@ func TestMuxBroker(t *testing.T) { errChan := make(chan error, 1) go func() { + defer close(errChan) c, err := bc.Dial(5) if err != nil { errChan <- fmt.Errorf("err dialing: %s", err.Error()) - close(errChan) return } if _, err := c.Write([]byte{42}); err != nil { errChan <- fmt.Errorf("err writing: %s", err.Error()) } - - close(errChan) }() client, err := bs.Accept(5) From 2944030daf4d52284ab66d1084b07683aa42d885 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Mon, 17 Dec 2018 11:01:46 +0100 Subject: [PATCH 4/5] mux_broker_test.go: range over chan for simplicity --- packer/rpc/mux_broker_test.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packer/rpc/mux_broker_test.go b/packer/rpc/mux_broker_test.go index 9d6aeee75..fe0a6118a 100644 --- a/packer/rpc/mux_broker_test.go +++ b/packer/rpc/mux_broker_test.go @@ -46,13 +46,9 @@ func TestMuxBroker(t *testing.T) { t.Fatalf("bad: %d", data[0]) } - for { - err, open := <-errChan - if !open { - if err != nil { - t.Fatalf(err.Error()) - } - break + for err := range errChan { + if err != nil { + t.Fatalf(err.Error()) } } } From d9e32d437cfff8764ac0b9682d1fe3796e57be06 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Mon, 17 Dec 2018 11:09:56 +0100 Subject: [PATCH 5/5] mux_broker_test.go: make non blocking errChan * in case of Dial errors to avoid a deadlocks --- packer/rpc/mux_broker_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packer/rpc/mux_broker_test.go b/packer/rpc/mux_broker_test.go index fe0a6118a..ac5d9cbd2 100644 --- a/packer/rpc/mux_broker_test.go +++ b/packer/rpc/mux_broker_test.go @@ -18,7 +18,7 @@ func TestMuxBroker(t *testing.T) { go bc.Run() go bs.Run() - errChan := make(chan error, 1) + errChan := make(chan error, 2) go func() { defer close(errChan) c, err := bc.Dial(5)