Skip to content

Commit

Permalink
frontend: add some dockerfile integration tests
Browse files Browse the repository at this point in the history
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
  • Loading branch information
tonistiigi committed Nov 30, 2017
1 parent 151a75c commit bcc98bf
Show file tree
Hide file tree
Showing 35 changed files with 3,342 additions and 0 deletions.
129 changes: 129 additions & 0 deletions frontend/dockerfile/dockerfile_test.go
@@ -0,0 +1,129 @@
package dockerfile

import (
"bytes"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"testing"

"github.com/containerd/containerd/fs/fstest"
"github.com/moby/buildkit/identity"
"github.com/moby/buildkit/util/testutil/integration"
"github.com/stretchr/testify/require"
)

func TestIntegration(t *testing.T) {
integration.Run(t, []integration.Test{
testDockerfileDirs,
testDockerfileInvalidCommand,
})
}

func testDockerfileDirs(t *testing.T, sb integration.Sandbox) {
t.Parallel()
dockerfile := []byte(`
FROM busybox
COPY foo /foo2
COPY foo /
RUN echo -n bar > foo3
RUN test -f foo
RUN cmp -s foo foo2
RUN cmp -s foo foo3
`)

dir, err := tmpdir(
fstest.CreateFile("Dockerfile", dockerfile, 0600),
fstest.CreateFile("foo", []byte("bar"), 0600),
)
require.NoError(t, err)
defer os.RemoveAll(dir)

args, trace := dfCmdArgs(dir, dir)
defer os.RemoveAll(trace)

cmd := sb.Cmd(args)
require.NoError(t, cmd.Run())

_, err = os.Stat(trace)
require.NoError(t, err)

// relative urls
args, trace = dfCmdArgs(".", ".")
defer os.RemoveAll(trace)

cmd = sb.Cmd(args)
cmd.Dir = dir
require.NoError(t, cmd.Run())

_, err = os.Stat(trace)
require.NoError(t, err)

// different context and dockerfile directories
dir1, err := tmpdir(
fstest.CreateFile("Dockerfile", dockerfile, 0600),
)
require.NoError(t, err)
defer os.RemoveAll(dir1)

dir2, err := tmpdir(
fstest.CreateFile("foo", []byte("bar"), 0600),
)
require.NoError(t, err)
defer os.RemoveAll(dir2)

args, trace = dfCmdArgs(dir2, dir1)
defer os.RemoveAll(trace)

cmd = sb.Cmd(args)
cmd.Dir = dir
require.NoError(t, cmd.Run())

_, err = os.Stat(trace)
require.NoError(t, err)

// TODO: test trace file output, cache hits, logs etc.
// TODO: output metadata about original dockerfile command in trace
}

func testDockerfileInvalidCommand(t *testing.T, sb integration.Sandbox) {
t.Parallel()
dockerfile := []byte(`
FROM busybox
RUN invalidcmd
`)

dir, err := tmpdir(
fstest.CreateFile("Dockerfile", dockerfile, 0600),
)
require.NoError(t, err)
defer os.RemoveAll(dir)

args, trace := dfCmdArgs(dir, dir)
defer os.RemoveAll(trace)

cmd := sb.Cmd(args)
stdout := new(bytes.Buffer)
cmd.Stderr = stdout
err = cmd.Run()
require.Error(t, err)
require.Contains(t, stdout.String(), "/bin/sh -c invalidcmd")
require.Contains(t, stdout.String(), "worker failed running")
}

func tmpdir(appliers ...fstest.Applier) (string, error) {
tmpdir, err := ioutil.TempDir("", "buildkit-dockerfile")
if err != nil {
return "", err
}
if err := fstest.Apply(appliers...).Apply(tmpdir); err != nil {
return "", err
}
return tmpdir, nil
}

func dfCmdArgs(ctx, dockerfile string) (string, string) {
traceFile := filepath.Join(os.TempDir(), "trace"+identity.NewID())
return fmt.Sprintf("build --no-progress --frontend dockerfile.v0 --local context=%s --local dockerfile=%s --trace=%s", ctx, dockerfile, traceFile), traceFile
}
7 changes: 7 additions & 0 deletions util/testutil/integration/standalone.go
Expand Up @@ -10,6 +10,8 @@ import (
"runtime"
"testing"
"time"

"github.com/google/shlex"
)

func init() {
Expand Down Expand Up @@ -59,6 +61,11 @@ func (sb *sandbox) PrintLogs(t *testing.T) {
}

func (sb *sandbox) Cmd(args ...string) *exec.Cmd {
if len(args) == 1 {
if split, err := shlex.Split(args[0]); err == nil {
args = split
}
}
cmd := exec.Command("buildctl", args...)
cmd.Env = append(cmd.Env, os.Environ()...)
cmd.Env = append(cmd.Env, "BUILDKIT_HOST="+sb.Address())
Expand Down
53 changes: 53 additions & 0 deletions vendor/github.com/containerd/containerd/fs/fstest/compare.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

189 changes: 189 additions & 0 deletions vendor/github.com/containerd/containerd/fs/fstest/continuity_util.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit bcc98bf

Please sign in to comment.