|
@@ -1,6 +1,7 @@
|
|
|
package dockerfile
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"strings"
|
|
|
"testing"
|
|
|
|
|
@@ -15,6 +16,25 @@ func TestEmptyDockerfile(t *testing.T) {
|
|
|
|
|
|
createTestTempFile(t, contextDir, builder.DefaultDockerfileName, "", 0777)
|
|
|
|
|
|
+ readAndCheckDockerfile(t, "emptyDockefile", contextDir, "", "The Dockerfile (Dockerfile) cannot be empty")
|
|
|
+}
|
|
|
+
|
|
|
+func TestSymlinkDockerfile(t *testing.T) {
|
|
|
+ contextDir, cleanup := createTestTempDir(t, "", "builder-dockerfile-test")
|
|
|
+ defer cleanup()
|
|
|
+
|
|
|
+ createTestSymlink(t, contextDir, builder.DefaultDockerfileName, "/etc/passwd")
|
|
|
+
|
|
|
+ // The reason the error is "Cannot locate specified Dockerfile" is because
|
|
|
+ // in the builder, the symlink is resolved within the context, therefore
|
|
|
+ // Dockerfile -> /etc/passwd becomes etc/passwd from the context which is
|
|
|
+ // a nonexistent file.
|
|
|
+ expectedError := fmt.Sprintf("Cannot locate specified Dockerfile: %s", builder.DefaultDockerfileName)
|
|
|
+
|
|
|
+ readAndCheckDockerfile(t, "symlinkDockerfile", contextDir, builder.DefaultDockerfileName, expectedError)
|
|
|
+}
|
|
|
+
|
|
|
+func readAndCheckDockerfile(t *testing.T, testName, contextDir, dockerfilePath, expectedError string) {
|
|
|
tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
|
|
|
|
|
|
if err != nil {
|
|
@@ -39,17 +59,19 @@ func TestEmptyDockerfile(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- options := &types.ImageBuildOptions{}
|
|
|
+ options := &types.ImageBuildOptions{
|
|
|
+ Dockerfile: dockerfilePath,
|
|
|
+ }
|
|
|
|
|
|
b := &Builder{options: options, context: context}
|
|
|
|
|
|
err = b.readDockerfile()
|
|
|
|
|
|
if err == nil {
|
|
|
- t.Fatalf("No error when executing test for empty Dockerfile")
|
|
|
+ t.Fatalf("No error when executing test: %s", testName)
|
|
|
}
|
|
|
|
|
|
- if !strings.Contains(err.Error(), "The Dockerfile (Dockerfile) cannot be empty") {
|
|
|
- t.Fatalf("Wrong error message. Should be \"%s\". Got \"%s\"", "The Dockerfile (Dockerfile) cannot be empty", err.Error())
|
|
|
+ if !strings.Contains(err.Error(), expectedError) {
|
|
|
+ t.Fatalf("Wrong error message. Should be \"%s\". Got \"%s\"", expectedError, err.Error())
|
|
|
}
|
|
|
}
|