mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Builder/tarsum unit tests
Signed-off-by: Tomasz Kopczynski <tomek@kopczynski.net.pl>
This commit is contained in:
parent
d78f8f2796
commit
61ca9cc99e
1 changed files with 351 additions and 0 deletions
351
builder/tarsum_test.go
Normal file
351
builder/tarsum_test.go
Normal file
|
@ -0,0 +1,351 @@
|
|||
package builder
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/pkg/archive"
|
||||
"github.com/docker/docker/pkg/reexec"
|
||||
)
|
||||
|
||||
const (
|
||||
filename = "test"
|
||||
contents = "contents test"
|
||||
)
|
||||
|
||||
func init() {
|
||||
reexec.Init()
|
||||
}
|
||||
|
||||
func TestCloseRootDirectory(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
tarsum := &tarSumContext{root: contextDir}
|
||||
|
||||
err = tarsum.Close()
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error while executing Close: %s", err)
|
||||
}
|
||||
|
||||
_, err = os.Stat(contextDir)
|
||||
|
||||
if !os.IsNotExist(err) {
|
||||
t.Fatalf("Directory should not exist at this point")
|
||||
defer os.RemoveAll(contextDir)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOpenFile(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
testFilename := filepath.Join(contextDir, filename)
|
||||
err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
||||
}
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
file, err := tarSum.Open(filename)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when executing Open: %s", err)
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
buff := bytes.NewBufferString("")
|
||||
|
||||
for scanner.Scan() {
|
||||
buff.WriteString(scanner.Text())
|
||||
}
|
||||
|
||||
if contents != buff.String() {
|
||||
t.Fatalf("Contents are not equal. Expected: %s, got: %s", contents, buff.String())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestOpenNotExisting(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
file, err := tarSum.Open("not-existing")
|
||||
|
||||
if file != nil {
|
||||
t.Fatal("Opened file should be nil")
|
||||
}
|
||||
|
||||
if !os.IsNotExist(err) {
|
||||
t.Fatalf("Error when executing Open: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatFile(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
testFilename := filepath.Join(contextDir, filename)
|
||||
err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
||||
}
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
relPath, fileInfo, err := tarSum.Stat(filename)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when executing Stat: %s", err)
|
||||
}
|
||||
|
||||
if relPath != filename {
|
||||
t.Fatalf("Relative path should be equal to %s, got %s", filename, relPath)
|
||||
}
|
||||
|
||||
if fileInfo.Path() != testFilename {
|
||||
t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatSubdir(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
||||
}
|
||||
|
||||
testFilename := filepath.Join(contextSubdir, filename)
|
||||
err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
||||
}
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
relativePath, err := filepath.Rel(contextDir, testFilename)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when getting relative path: %s", err)
|
||||
}
|
||||
|
||||
relPath, fileInfo, err := tarSum.Stat(relativePath)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when executing Stat: %s", err)
|
||||
}
|
||||
|
||||
if relPath != relativePath {
|
||||
t.Fatalf("Relative path should be equal to %s, got %s", relativePath, relPath)
|
||||
}
|
||||
|
||||
if fileInfo.Path() != testFilename {
|
||||
t.Fatalf("Full path should be equal to %s, got %s", testFilename, fileInfo.Path())
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatNotExisting(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
relPath, fileInfo, err := tarSum.Stat("not-existing")
|
||||
|
||||
if relPath != "" {
|
||||
t.Fatal("Relative path should be nil")
|
||||
}
|
||||
|
||||
if fileInfo != nil {
|
||||
t.Fatalf("File info should be nil")
|
||||
}
|
||||
|
||||
if !os.IsNotExist(err) {
|
||||
t.Fatalf("This file should not exist: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveDirectory(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
||||
}
|
||||
|
||||
relativePath, err := filepath.Rel(contextDir, contextSubdir)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when getting relative path: %s", err)
|
||||
}
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
err = tarSum.Remove(relativePath)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when executing Remove: %s", err)
|
||||
}
|
||||
|
||||
_, err = os.Stat(contextSubdir)
|
||||
|
||||
if !os.IsNotExist(err) {
|
||||
t.Fatalf("Directory should not exist at this point")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMakeSumTarContext(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
testFilename := filepath.Join(contextDir, filename)
|
||||
err = ioutil.WriteFile(testFilename, []byte(contents), 0644)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
||||
}
|
||||
|
||||
tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("error: %s", err)
|
||||
}
|
||||
|
||||
defer tarStream.Close()
|
||||
|
||||
tarSum, err := MakeTarSumContext(tarStream)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when executing MakeSumContext: %s", err)
|
||||
}
|
||||
|
||||
if tarSum == nil {
|
||||
t.Fatalf("Tar sum context should not be nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWalkWithoutError(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
||||
}
|
||||
|
||||
testFilename := filepath.Join(contextSubdir, filename)
|
||||
err = ioutil.WriteFile(testFilename, []byte(contents), 0777)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when writing file (%s) contents: %s", testFilename, err)
|
||||
}
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
walkFun := func(path string, fi FileInfo, err error) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = tarSum.Walk(contextSubdir, walkFun)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error when executing Walk: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
type WalkError struct {
|
||||
}
|
||||
|
||||
func (we WalkError) Error() string {
|
||||
return "Error when executing Walk"
|
||||
}
|
||||
|
||||
func TestWalkWithError(t *testing.T) {
|
||||
contextDir, err := ioutil.TempDir("", "builder-tarsum-test")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary directory: %s", err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(contextDir)
|
||||
|
||||
contextSubdir, err := ioutil.TempDir(contextDir, "builder-tarsum-test-subdir")
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Error with creating temporary subdirectory: %s", err)
|
||||
}
|
||||
|
||||
tarSum := &tarSumContext{root: contextDir}
|
||||
|
||||
walkFun := func(path string, fi FileInfo, err error) error {
|
||||
return WalkError{}
|
||||
}
|
||||
|
||||
err = tarSum.Walk(contextSubdir, walkFun)
|
||||
|
||||
if err == nil {
|
||||
t.Fatalf("Error should not be nil")
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue