From 67df8e4257c165bc6abe77bb8f4ab55c10b2fbff 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 --- pkg/chrootarchive/archive_test.go | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/pkg/chrootarchive/archive_test.go b/pkg/chrootarchive/archive_test.go index b381d4301e..f9b5b09707 100644 --- a/pkg/chrootarchive/archive_test.go +++ b/pkg/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) {