You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

154 lines
3.5 KiB

package docker_test
import (
"testing"
"github.com/stretchr/testify/assert"
"gerrit.wikimedia.org/r/blubber/build"
"gerrit.wikimedia.org/r/blubber/docker"
)
func TestRun(t *testing.T) {
i := build.Run{"echo", []string{"hello"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "RUN echo \"hello\"\n", di.Compile())
}
}
func TestRunAll(t *testing.T) {
i := build.RunAll{[]build.Run{
{"echo", []string{"hello"}},
{"echo", []string{"yo"}},
}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "RUN echo \"hello\" && echo \"yo\"\n", di.Compile())
}
}
func TestCopy(t *testing.T) {
i := build.Copy{[]string{"foo1", "foo2"}, "bar"}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "COPY [\"foo1\", \"foo2\", \"bar/\"]\n", di.Compile())
}
}
func TestCopyAs(t *testing.T) {
t.Run("with Copy", func(t *testing.T) {
i := build.CopyAs{123, 124, build.Copy{[]string{"foo1", "foo2"}, "bar"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "COPY --chown=123:124 [\"foo1\", \"foo2\", \"bar/\"]\n", di.Compile())
}
})
t.Run("with CopyFrom", func(t *testing.T) {
i := build.CopyAs{123, 124, build.CopyFrom{"foo", build.Copy{[]string{"foo1", "foo2"}, "bar"}}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "COPY --chown=123:124 --from=foo [\"foo1\", \"foo2\", \"bar/\"]\n", di.Compile())
}
})
}
func TestCopyFrom(t *testing.T) {
i := build.CopyFrom{"foo", build.Copy{[]string{"foo1", "foo2"}, "bar"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "COPY --from=foo [\"foo1\", \"foo2\", \"bar/\"]\n", di.Compile())
}
}
func TestEntryPoint(t *testing.T) {
i := build.EntryPoint{[]string{"foo", "bar"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "ENTRYPOINT [\"foo\", \"bar\"]\n", di.Compile())
}
}
func TestEnv(t *testing.T) {
i := build.Env{map[string]string{"foo": "bar", "bar": "foo"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "ENV bar=\"foo\" foo=\"bar\"\n", di.Compile())
}
}
func TestLabel(t *testing.T) {
i := build.Label{map[string]string{"foo": "bar", "bar": "foo"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "LABEL bar=\"foo\" foo=\"bar\"\n", di.Compile())
}
}
func TestUser(t *testing.T) {
i := build.User{"foo"}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "USER \"foo\"\n", di.Compile())
}
}
func TestWorkingDirectory(t *testing.T) {
i := build.WorkingDirectory{"/foo/dir"}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "WORKDIR \"/foo/dir\"\n", di.Compile())
}
}
func TestEscapeRun(t *testing.T) {
i := build.Run{"/bin/true\nRUN echo HACKED!", []string{}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "RUN /bin/true\\nRUN echo HACKED!\n", di.Compile())
}
}
func TestEscapeCopy(t *testing.T) {
i := build.Copy{[]string{"file.a", "file.b"}, "dest"}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "COPY [\"file.a\", \"file.b\", \"dest/\"]\n", di.Compile())
}
}
func TestEscapeEnv(t *testing.T) {
i := build.Env{map[string]string{"a": "b\nRUN echo HACKED!"}}
di, err := docker.NewInstruction(i)
if assert.NoError(t, err) {
assert.Equal(t, "ENV a=\"b\\nRUN echo HACKED!\"\n", di.Compile())
}
}