From 6f3fbbbe49d156288ba095db294382c54e4c59c2 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Tue, 30 Dec 2014 15:13:58 +0100 Subject: [PATCH] Improve error checking in integration tests --- test/sync_test.go | 56 +++++++++++++++++++++++++++++++++++++---------- test/util.go | 25 ++++++++++++++++----- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/test/sync_test.go b/test/sync_test.go index 4e6420658..8672806be 100644 --- a/test/sync_test.go +++ b/test/sync_test.go @@ -138,11 +138,27 @@ func testSyncCluster(t *testing.T) { } // Prepare the expected state of folders after the sync - e1 := mergeDirectoryContents(directoryContents("s1"), - directoryContents("s2"), - directoryContents("s3")) - e2 := directoryContents("s12-1") - e3 := directoryContents("s23-2") + c1, err := directoryContents("s1") + if err != nil { + t.Fatal(err) + } + c2, err := directoryContents("s2") + if err != nil { + t.Fatal(err) + } + c3, err := directoryContents("s3") + if err != nil { + t.Fatal(err) + } + e1 := mergeDirectoryContents(c1, c2, c3) + e2, err := directoryContents("s12-1") + if err != nil { + t.Fatal(err) + } + e3, err := directoryContents("s23-2") + if err != nil { + t.Fatal(err) + } expected := [][]fileInfo{e1, e2, e3} for count := 0; count < 5; count++ { @@ -212,9 +228,18 @@ func testSyncCluster(t *testing.T) { } // Prepare the expected state of folders after the sync - e1 = directoryContents("s1") - e2 = directoryContents("s12-1") - e3 = directoryContents("s23-2") + e1, err = directoryContents("s1") + if err != nil { + t.Fatal(err) + } + e2, err = directoryContents("s12-1") + if err != nil { + t.Fatal(err) + } + e3, err = directoryContents("s23-2") + if err != nil { + t.Fatal(err) + } expected = [][]fileInfo{e1, e2, e3} } @@ -301,21 +326,30 @@ mainLoop: log.Println("Checking...") for _, dir := range []string{"s1", "s2", "s3"} { - actual := directoryContents(dir) + actual, err := directoryContents(dir) + if err != nil { + return err + } if err := compareDirectoryContents(actual, expected[0]); err != nil { return fmt.Errorf("%s: %v", dir, err) } } for _, dir := range []string{"s12-1", "s12-2"} { - actual := directoryContents(dir) + actual, err := directoryContents(dir) + if err != nil { + return err + } if err := compareDirectoryContents(actual, expected[1]); err != nil { return fmt.Errorf("%s: %v", dir, err) } } for _, dir := range []string{"s23-2", "s23-3"} { - actual := directoryContents(dir) + actual, err := directoryContents(dir) + if err != nil { + return err + } if err := compareDirectoryContents(actual, expected[2]); err != nil { return fmt.Errorf("%s: %v", dir, err) } diff --git a/test/util.go b/test/util.go index c82d34eef..441433959 100644 --- a/test/util.go +++ b/test/util.go @@ -227,10 +227,11 @@ func compareDirectories(dirs ...string) error { for i := range chans { chans[i] = make(chan fileInfo) } + errcs := make([]chan error, len(dirs)) abort := make(chan struct{}) for i := range dirs { - startWalker(dirs[i], chans[i], abort) + errcs[i] = startWalker(dirs[i], chans[i], abort) } res := make([]fileInfo, len(dirs)) @@ -239,6 +240,11 @@ func compareDirectories(dirs ...string) error { for i := range chans { fi, ok := <-chans[i] if !ok { + err, hasError := <-errcs[i] + if hasError { + close(abort) + return err + } numDone++ } res[i] = fi @@ -257,16 +263,16 @@ func compareDirectories(dirs ...string) error { } } -func directoryContents(dir string) []fileInfo { +func directoryContents(dir string) ([]fileInfo, error) { res := make(chan fileInfo) - startWalker(dir, res, nil) + errc := startWalker(dir, res, nil) var files []fileInfo for f := range res { files = append(files, f) } - return files + return files, <-errc } func mergeDirectoryContents(c ...[]fileInfo) []fileInfo { @@ -325,7 +331,7 @@ func (l fileInfoList) Swap(a, b int) { l[a], l[b] = l[b], l[a] } -func startWalker(dir string, res chan<- fileInfo, abort <-chan struct{}) { +func startWalker(dir string, res chan<- fileInfo, abort <-chan struct{}) chan error { walker := func(path string, info os.FileInfo, err error) error { if err != nil { return err @@ -381,10 +387,17 @@ func startWalker(dir string, res chan<- fileInfo, abort <-chan struct{}) { return errors.New("abort") } } + + errc := make(chan error) go func() { - filepath.Walk(dir, walker) + err := filepath.Walk(dir, walker) close(res) + if err != nil { + errc <- err + } + close(errc) }() + return errc } func md5file(fname string) (hash [16]byte, err error) {