github.com/kobeld/docker@v1.12.0-rc1/builder/dockerfile/internals_test.go (about) 1 package dockerfile 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/docker/docker/builder" 8 "github.com/docker/docker/pkg/archive" 9 "github.com/docker/engine-api/types" 10 ) 11 12 func TestEmptyDockerfile(t *testing.T) { 13 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerfile-test") 14 defer cleanup() 15 16 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, "", 0777) 17 18 tarStream, err := archive.Tar(contextDir, archive.Uncompressed) 19 20 if err != nil { 21 t.Fatalf("Error when creating tar stream: %s", err) 22 } 23 24 defer func() { 25 if err = tarStream.Close(); err != nil { 26 t.Fatalf("Error when closing tar stream: %s", err) 27 } 28 }() 29 30 context, err := builder.MakeTarSumContext(tarStream) 31 32 if err != nil { 33 t.Fatalf("Error when creating tar context: %s", err) 34 } 35 36 defer func() { 37 if err = context.Close(); err != nil { 38 t.Fatalf("Error when closing tar context: %s", err) 39 } 40 }() 41 42 options := &types.ImageBuildOptions{} 43 44 b := &Builder{options: options, context: context} 45 46 err = b.readDockerfile() 47 48 if err == nil { 49 t.Fatalf("No error when executing test for empty Dockerfile") 50 } 51 52 if !strings.Contains(err.Error(), "The Dockerfile (Dockerfile) cannot be empty") { 53 t.Fatalf("Wrong error message. Should be \"%s\". Got \"%s\"", "The Dockerfile (Dockerfile) cannot be empty", err.Error()) 54 } 55 } 56 57 func TestDockerfileOutsideTheBuildContext(t *testing.T) { 58 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerfile-test") 59 defer cleanup() 60 61 tarStream, err := archive.Tar(contextDir, archive.Uncompressed) 62 63 if err != nil { 64 t.Fatalf("Error when creating tar stream: %s", err) 65 } 66 67 defer func() { 68 if err = tarStream.Close(); err != nil { 69 t.Fatalf("Error when closing tar stream: %s", err) 70 } 71 }() 72 73 context, err := builder.MakeTarSumContext(tarStream) 74 75 if err != nil { 76 t.Fatalf("Error when creating tar context: %s", err) 77 } 78 79 defer func() { 80 if err = context.Close(); err != nil { 81 t.Fatalf("Error when closing tar context: %s", err) 82 } 83 }() 84 85 options := &types.ImageBuildOptions{ 86 Dockerfile: "../../Dockerfile", 87 } 88 89 b := &Builder{options: options, context: context} 90 91 err = b.readDockerfile() 92 93 if err == nil { 94 t.Fatalf("No error when executing test for Dockerfile outside the build context") 95 } 96 97 expectedError := "Forbidden path outside the build context" 98 99 if !strings.Contains(err.Error(), expectedError) { 100 t.Fatalf("Wrong error message. Should be \"%s\". Got \"%s\"", expectedError, err.Error()) 101 } 102 }