From f905197fa5ef68e7094cbd3b290068dfb774d495 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 12 Dec 2015 21:04:21 +0100 Subject: [PATCH 1/4] exchange/bitswap/bitswap_test: fix t.Fatal in a goroutine License: MIT Signed-off-by: Christian Couder --- exchange/bitswap/bitswap_test.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/exchange/bitswap/bitswap_test.go b/exchange/bitswap/bitswap_test.go index c6de90d78..3a2dba62f 100644 --- a/exchange/bitswap/bitswap_test.go +++ b/exchange/bitswap/bitswap_test.go @@ -168,19 +168,31 @@ func PerformDistributionTest(t *testing.T, numInstances, numBlocks int) { t.Log("Distribute!") wg := sync.WaitGroup{} + errs := make(chan error) + for _, inst := range instances[1:] { wg.Add(1) go func(inst Instance) { defer wg.Done() outch, err := inst.Exchange.GetBlocks(ctx, blkeys) if err != nil { - t.Fatal(err) + errs <- err } for _ = range outch { } }(inst) } - wg.Wait() + + go func() { + wg.Wait() + close(errs) + }() + + for err := range errs { + if err != nil { + t.Fatal(err) + } + } t.Log("Verify!") From f14482265d87ce340e891fa30c8759387e6dbfb0 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 12 Dec 2015 21:21:25 +0100 Subject: [PATCH 2/4] fuse/readonly/ipfs_test: fix t.Fatal in a goroutine License: MIT Signed-off-by: Christian Couder --- fuse/readonly/ipfs_test.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/fuse/readonly/ipfs_test.go b/fuse/readonly/ipfs_test.go index 7add4deb3..eaccd8ff7 100644 --- a/fuse/readonly/ipfs_test.go +++ b/fuse/readonly/ipfs_test.go @@ -4,6 +4,7 @@ package readonly import ( "bytes" + "errors" "fmt" "io/ioutil" "math/rand" @@ -154,6 +155,7 @@ func TestIpfsStressRead(t *testing.T) { // Now read a bunch, concurrently wg := sync.WaitGroup{} + errs := make(chan error) for s := 0; s < 4; s++ { wg.Add(1) @@ -165,26 +167,36 @@ func TestIpfsStressRead(t *testing.T) { fname := path.Join(mnt.Dir, item) rbuf, err := ioutil.ReadFile(fname) if err != nil { - t.Fatal(err) + errs <- err } read, err := coreunix.Cat(nd.Context(), nd, item) if err != nil { - t.Fatal(err) + errs <- err } data, err := ioutil.ReadAll(read) if err != nil { - t.Fatal(err) + errs <- err } if !bytes.Equal(rbuf, data) { - t.Fatal("Incorrect Read!") + errs <- errors.New("Incorrect Read!") } } }() } - wg.Wait() + + go func() { + wg.Wait() + close(errs) + }() + + for err := range errs { + if err != nil { + t.Fatal(err) + } + } } // Test writing a file and reading it back From f41801cbf43315d5895676420d712e41265ebafb Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 12 Dec 2015 21:28:00 +0100 Subject: [PATCH 3/4] merkledag/merkledag_test: fix t.Fatal in a goroutine License: MIT Signed-off-by: Christian Couder --- merkledag/merkledag_test.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/merkledag/merkledag_test.go b/merkledag/merkledag_test.go index 40bc45740..d81cdc003 100644 --- a/merkledag/merkledag_test.go +++ b/merkledag/merkledag_test.go @@ -2,6 +2,7 @@ package merkledag_test import ( "bytes" + "errors" "fmt" "io" "io/ioutil" @@ -193,32 +194,43 @@ func runBatchFetchTest(t *testing.T, read io.Reader) { } wg := sync.WaitGroup{} + errs := make(chan error) + for i := 1; i < len(dagservs); i++ { wg.Add(1) go func(i int) { defer wg.Done() first, err := dagservs[i].Get(ctx, k) if err != nil { - t.Fatal(err) + errs <- err } fmt.Println("Got first node back.") read, err := uio.NewDagReader(ctx, first, dagservs[i]) if err != nil { - t.Fatal(err) + errs <- err } datagot, err := ioutil.ReadAll(read) if err != nil { - t.Fatal(err) + errs <- err } if !bytes.Equal(datagot, expected) { - t.Fatal("Got bad data back!") + errs <- errors.New("Got bad data back!") } }(i) } - wg.Wait() + go func() { + wg.Wait() + close(errs) + }() + + for err := range errs { + if err != nil { + t.Fatal(err) + } + } } func TestRecursiveAdd(t *testing.T) { From 57c4188a98b471cdffdc9659d5c1c612b861eeca Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 12 Dec 2015 21:44:24 +0100 Subject: [PATCH 4/4] test/supernode_client/main: fix t.Fatal in a goroutine License: MIT Signed-off-by: Christian Couder --- test/supernode_client/main.go | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/test/supernode_client/main.go b/test/supernode_client/main.go index bffe18bd9..86fb1e5d1 100644 --- a/test/supernode_client/main.go +++ b/test/supernode_client/main.go @@ -142,6 +142,7 @@ func sizeOfIthFile(i int64) int64 { } func runFileAddingWorker(n *core.IpfsNode) error { + errs := make(chan error) go func() { var i int64 for i = 1; i < math.MaxInt32; i++ { @@ -149,17 +150,26 @@ func runFileAddingWorker(n *core.IpfsNode) error { go func() { defer pipew.Close() if err := random.WritePseudoRandomBytes(sizeOfIthFile(i), pipew, *seed); err != nil { - log.Fatal(err) + errs <- err } }() k, err := coreunix.Add(n, piper) if err != nil { - log.Fatal(err) + errs <- err } log.Println("added file", "seed", *seed, "#", i, "key", k, "size", unit.Information(sizeOfIthFile(i))) time.Sleep(1 * time.Second) } }() + + var i int64 + for i = 0; i < math.MaxInt32; i++ { + err := <-errs + if err != nil { + log.Fatal(err) + } + } + return nil } @@ -180,18 +190,20 @@ func runFileCattingWorker(ctx context.Context, n *core.IpfsNode) error { return err } + errs := make(chan error) + go func() { defer dummy.Close() var i int64 = 1 for { buf := new(bytes.Buffer) if err := random.WritePseudoRandomBytes(sizeOfIthFile(i), buf, *seed); err != nil { - log.Fatal(err) + errs <- err } // add to a dummy node to discover the key k, err := coreunix.Add(dummy, bytes.NewReader(buf.Bytes())) if err != nil { - log.Fatal(err) + errs <- err } e := elog.EventBegin(ctx, "cat", logging.LoggableF(func() map[string]interface{} { return map[string]interface{}{ @@ -212,6 +224,12 @@ func runFileCattingWorker(ctx context.Context, n *core.IpfsNode) error { time.Sleep(time.Second) } }() + + err = <- errs + if err != nil { + log.Fatal(err) + } + return nil }