diff --git a/Makefile b/Makefile index 10b8a14a..409487a9 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ all: service ctl clean: rwundo clean_sharness $(MAKE) -C ipfs-cluster-service clean $(MAKE) -C ipfs-cluster-ctl clean + @rm -rf ./test/testingData gx-clean: clean @rm -f $(deptools)/* diff --git a/importer/import_test.go b/importer/import_test.go index 0fc861ff..9a60c541 100644 --- a/importer/import_test.go +++ b/importer/import_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/ipfs/ipfs-cluster/test" + "github.com/ipfs/ipfs-cluster/api" ) // import and receive all blocks @@ -27,34 +28,13 @@ func TestToChannelOutput(t *testing.T) { } }() - go func() { // listen for errors - for { - err, ok := <-errChan - if !ok { - // channel closed, safe to exit - return - } - t.Fatal(err) - } - }() + go listenErrCh(t, errChan) - check := make(map[string]struct{}) + objs := make([]interface{}, 0) for obj := range outChan { - cid := obj.Cid - if _, ok := check[cid]; ok { - t.Fatalf("Duplicate cid %s", cid) - } - check[cid] = struct{}{} - } - if len(check) != len(test.TestDirCids) { - t.Fatalf("Witnessed cids: %v\nExpected cids: %v", check, test.TestDirCids) - } - cidsS := test.TestDirCids[:] - for cid := range check { - if !contains(cidsS, cid) { - t.Fatalf("Unexpected cid: %s", cid) - } + objs = append(objs, obj) } + testChannelOutput(t, objs, test.TestDirCids[:]) } func TestToChannelPrint(t *testing.T) { @@ -66,6 +46,8 @@ func TestToChannelPrint(t *testing.T) { printChan, outChan, errChan := ToChannel(context.Background(), file, false, false, false, false, "") + go listenErrCh(t, errChan) + go func() { // listen on outChan so progress can be made for { _, ok := <-outChan @@ -75,32 +57,50 @@ func TestToChannelPrint(t *testing.T) { } } }() - - go func() { // listen for errors - for { - err, ok := <-errChan - if !ok { - // channel closed, safe to exit - return - } - t.Fatal(err) - } - }() - - check := make(map[string]struct{}) + objs := make([]interface{}, 0) for obj := range printChan { - cid := obj.Hash + objs = append(objs, obj) + } + testChannelOutput(t, objs, test.TestDirCids[:15]) +} + +// listenErrCh listens on the error channel until closed and raise any errors +// that show up +func listenErrCh(t *testing.T, errChan <-chan error) { + for { + err, ok := <-errChan + if !ok { + // channel closed, safe to exit + return + } + t.Fatal(err) + } +} + + + +// testChannelOutput is a utility for shared functionality of output and print +// channel testing +func testChannelOutput(t *testing.T, objs []interface{}, expected []string) { + check := make(map[string]struct{}) + for _, obj := range objs { + var cid string + switch obj := obj.(type){ + case *api.AddedOutput: + cid = obj.Hash + case *api.NodeWithMeta: + cid = obj.Cid + } if _, ok := check[cid]; ok { t.Fatalf("Duplicate cid %s", cid) } check[cid] = struct{}{} } - if len(check) != len(test.TestDirCids[:15]) { + if len(check) != len(expected) { t.Fatalf("Witnessed cids: %v\nExpected cids: %v", check, test.TestDirCids[:15]) } - cidsS := test.TestDirCids[:15] for cid := range check { - if !contains(cidsS, cid) { + if !contains(expected, cid) { t.Fatalf("Unexpected cid: %s", cid) } }