浏览代码

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 <sunyi0804@gmail.com>
Yestin Sun 10 年之前
父节点
当前提交
67df8e4257
共有 1 个文件被更改,包括 38 次插入0 次删除
  1. 38 0
      pkg/chrootarchive/archive_test.go

+ 38 - 0
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) {