From 6ae14a26250f51759ea70863c8f7f16024bb9bef Mon Sep 17 00:00:00 2001 From: Yestin Sun Date: Sat, 11 Apr 2015 22:12:40 -0700 Subject: [PATCH] Improve test accuracy for pkg/chrootarchive (part 2) Check test correctness of untar by comparing destination with source. For part 2, it checkes hashes of source and destination files or the target files of symbolic links. This is a supplement to the #11601 fix. Signed-off-by: Yestin Sun --- chrootarchive/archive_test.go | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/chrootarchive/archive_test.go b/chrootarchive/archive_test.go index b381d43..f9b5b09 100644 --- a/chrootarchive/archive_test.go +++ b/chrootarchive/archive_test.go @@ -3,6 +3,7 @@ package chrootarchive import ( "bytes" "fmt" + "hash/crc32" "io" "io/ioutil" "os" @@ -113,6 +114,16 @@ func prepareSourceDirectory(numberOfFiles int, targetPath string, makeSymLinks b return totalSize, nil } +func getHash(filename string) (uint32, error) { + stream, err := ioutil.ReadFile(filename) + if err != nil { + return 0, err + } + hash := crc32.NewIEEE() + hash.Write(stream) + return hash.Sum32(), nil +} + func compareDirectories(src string, dest string) error { changes, err := archive.ChangesDirs(dest, src) if err != nil { @@ -124,6 +135,21 @@ func compareDirectories(src string, dest string) error { return nil } +func compareFiles(src string, dest string) error { + srcHash, err := getHash(src) + if err != nil { + return err + } + destHash, err := getHash(dest) + if err != nil { + return err + } + if srcHash != destHash { + return fmt.Errorf("%s is different from %s", src, dest) + } + return nil +} + func TestChrootTarUntarWithSymlink(t *testing.T) { tmpdir, err := ioutil.TempDir("", "docker-TestChrootTarUntarWithSymlink") if err != nil { @@ -176,6 +202,9 @@ func TestChrootCopyWithTar(t *testing.T) { if err := CopyWithTar(srcfile, destfile); err != nil { t.Fatal(err) } + if err := compareFiles(srcfile, destfile); err != nil { + t.Fatal(err) + } // Copy symbolic link srcLinkfile := filepath.Join(src, "file-1-link") @@ -184,6 +213,9 @@ func TestChrootCopyWithTar(t *testing.T) { if err := CopyWithTar(srcLinkfile, destLinkfile); err != nil { t.Fatal(err) } + if err := compareFiles(srcLinkfile, destLinkfile); err != nil { + t.Fatal(err) + } } func TestChrootCopyFileWithTar(t *testing.T) { @@ -213,6 +245,9 @@ func TestChrootCopyFileWithTar(t *testing.T) { if err := CopyFileWithTar(srcfile, destfile); err != nil { t.Fatal(err) } + if err := compareFiles(srcfile, destfile); err != nil { + t.Fatal(err) + } // Copy symbolic link srcLinkfile := filepath.Join(src, "file-1-link") @@ -221,6 +256,9 @@ func TestChrootCopyFileWithTar(t *testing.T) { if err := CopyFileWithTar(srcLinkfile, destLinkfile); err != nil { t.Fatal(err) } + if err := compareFiles(srcLinkfile, destLinkfile); err != nil { + t.Fatal(err) + } } func TestChrootUntarPath(t *testing.T) {