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