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  }