- 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())
- }
- }
|