Improve error checking in integration tests

This commit is contained in:
Jakob Borg 2014-12-30 15:13:58 +01:00
parent d346ec7bfe
commit 6f3fbbbe49
2 changed files with 64 additions and 17 deletions

View File

@ -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)
}

View File

@ -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) {