From 1ce5457d57d783d6c61557681970bf0977621e78 Mon Sep 17 00:00:00 2001 From: Tibor Vass Date: Thu, 22 May 2014 15:12:41 -0700 Subject: [PATCH] adding test for hanging ADD src . Docker-DCO-1.1-Signed-off-by: Tibor Vass (github: tiborvass) --- .../TestAdd/SingleFileToWorkdir/Dockerfile | 2 + integration-cli/docker_cli_build_test.go | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 integration-cli/build_tests/TestAdd/SingleFileToWorkdir/Dockerfile diff --git a/integration-cli/build_tests/TestAdd/SingleFileToWorkdir/Dockerfile b/integration-cli/build_tests/TestAdd/SingleFileToWorkdir/Dockerfile new file mode 100644 index 0000000000..3f076718f2 --- /dev/null +++ b/integration-cli/build_tests/TestAdd/SingleFileToWorkdir/Dockerfile @@ -0,0 +1,2 @@ +FROM busybox +ADD test_file . diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index 8e4ba05519..4bbe4c6dc3 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -7,6 +7,7 @@ import ( "path/filepath" "strings" "testing" + "time" ) func TestBuildCacheADD(t *testing.T) { @@ -77,6 +78,42 @@ func TestAddSingleFileToRoot(t *testing.T) { logDone("build - add single file to root") } +// Issue #3960: "ADD src ." hangs +func TestAddSingleFileToWorkdir(t *testing.T) { + buildDirectory := filepath.Join(workingDirectory, "build_tests", "TestAdd", "SingleFileToWorkdir") + f, err := os.OpenFile(filepath.Join(buildDirectory, "test_file"), os.O_CREATE, 0644) + if err != nil { + t.Fatal(err) + } + f.Close() + buildCmd := exec.Command(dockerBinary, "build", "-t", "testaddimg", ".") + buildCmd.Dir = buildDirectory + done := make(chan error) + go func() { + out, exitCode, err := runCommandWithOutput(buildCmd) + if err != nil || exitCode != 0 { + done <- fmt.Errorf("build failed to complete: %s %v", out, err) + return + } + done <- nil + }() + select { + case <-time.After(5 * time.Second): + if err := buildCmd.Process.Kill(); err != nil { + fmt.Printf("could not kill build (pid=%d): %v\n", buildCmd.Process.Pid, err) + } + t.Fatal("build timed out") + case err := <-done: + if err != nil { + t.Fatal(err) + } + } + + deleteImages("testaddimg") + + logDone("build - add single file to workdir") +} + func TestAddSingleFileToExistDir(t *testing.T) { buildDirectory := filepath.Join(workingDirectory, "build_tests", "TestAdd") buildCmd := exec.Command(dockerBinary, "build", "-t", "testaddimg", "SingleFileToExistDir")