|
@@ -9,6 +9,8 @@ import (
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/api/types/strslice"
|
|
"github.com/docker/docker/api/types/strslice"
|
|
|
|
+ "github.com/docker/docker/builder"
|
|
|
|
+ "github.com/docker/docker/pkg/testutil/assert"
|
|
"github.com/docker/go-connections/nat"
|
|
"github.com/docker/go-connections/nat"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -189,35 +191,68 @@ func TestLabel(t *testing.T) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-func TestFrom(t *testing.T) {
|
|
|
|
- b := &Builder{flags: &BFlags{}, runConfig: &container.Config{}, disableCommit: true}
|
|
|
|
|
|
+func newBuilderWithMockBackend() *Builder {
|
|
|
|
+ b := &Builder{
|
|
|
|
+ flags: &BFlags{},
|
|
|
|
+ runConfig: &container.Config{},
|
|
|
|
+ options: &types.ImageBuildOptions{},
|
|
|
|
+ docker: &MockBackend{},
|
|
|
|
+ allowedBuildArgs: make(map[string]*string),
|
|
|
|
+ allBuildArgs: make(map[string]struct{}),
|
|
|
|
+ }
|
|
b.imageContexts = &imageContexts{b: b}
|
|
b.imageContexts = &imageContexts{b: b}
|
|
|
|
+ return b
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestFromScratch(t *testing.T) {
|
|
|
|
+ b := newBuilderWithMockBackend()
|
|
|
|
|
|
err := from(b, []string{"scratch"}, nil, "")
|
|
err := from(b, []string{"scratch"}, nil, "")
|
|
|
|
|
|
if runtime.GOOS == "windows" {
|
|
if runtime.GOOS == "windows" {
|
|
- if err == nil {
|
|
|
|
- t.Fatal("Error not set on Windows")
|
|
|
|
- }
|
|
|
|
|
|
+ assert.Error(t, err, "Windows does not support FROM scratch")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
|
|
- expectedError := "Windows does not support FROM scratch"
|
|
|
|
|
|
+ assert.NilError(t, err)
|
|
|
|
+ assert.Equal(t, b.image, "")
|
|
|
|
+ assert.Equal(t, b.noBaseImage, true)
|
|
|
|
+}
|
|
|
|
|
|
- if !strings.Contains(err.Error(), expectedError) {
|
|
|
|
- t.Fatalf("Error message not correct on Windows. Should be: %s, got: %s", expectedError, err.Error())
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatalf("Error when executing from: %s", err.Error())
|
|
|
|
- }
|
|
|
|
|
|
+func TestFromWithArg(t *testing.T) {
|
|
|
|
+ tag, expected := ":sometag", "expectedthisid"
|
|
|
|
|
|
- if b.image != "" {
|
|
|
|
- t.Fatalf("Image should be empty, got: %s", b.image)
|
|
|
|
- }
|
|
|
|
|
|
+ getImage := func(name string) (builder.Image, error) {
|
|
|
|
+ assert.Equal(t, name, "alpine"+tag)
|
|
|
|
+ return &mockImage{id: "expectedthisid"}, nil
|
|
|
|
+ }
|
|
|
|
+ b := newBuilderWithMockBackend()
|
|
|
|
+ b.docker.(*MockBackend).getImageOnBuildFunc = getImage
|
|
|
|
|
|
- if b.noBaseImage != true {
|
|
|
|
- t.Fatalf("Image should not have any base image, got: %v", b.noBaseImage)
|
|
|
|
- }
|
|
|
|
|
|
+ assert.NilError(t, arg(b, []string{"THETAG=" + tag}, nil, ""))
|
|
|
|
+ err := from(b, []string{"alpine${THETAG}"}, nil, "")
|
|
|
|
+
|
|
|
|
+ assert.NilError(t, err)
|
|
|
|
+ assert.Equal(t, b.image, expected)
|
|
|
|
+ assert.Equal(t, b.from.ImageID(), expected)
|
|
|
|
+ assert.NotNil(t, b.allowedBuildArgs)
|
|
|
|
+ assert.Equal(t, len(b.allowedBuildArgs), 0)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestFromWithUndefinedArg(t *testing.T) {
|
|
|
|
+ tag, expected := "sometag", "expectedthisid"
|
|
|
|
+
|
|
|
|
+ getImage := func(name string) (builder.Image, error) {
|
|
|
|
+ assert.Equal(t, name, "alpine")
|
|
|
|
+ return &mockImage{id: "expectedthisid"}, nil
|
|
}
|
|
}
|
|
|
|
+ b := newBuilderWithMockBackend()
|
|
|
|
+ b.docker.(*MockBackend).getImageOnBuildFunc = getImage
|
|
|
|
+ b.options.BuildArgs = map[string]*string{"THETAG": &tag}
|
|
|
|
+
|
|
|
|
+ err := from(b, []string{"alpine${THETAG}"}, nil, "")
|
|
|
|
+ assert.NilError(t, err)
|
|
|
|
+ assert.Equal(t, b.image, expected)
|
|
}
|
|
}
|
|
|
|
|
|
func TestOnbuildIllegalTriggers(t *testing.T) {
|
|
func TestOnbuildIllegalTriggers(t *testing.T) {
|