buildkit/client/client_test.go

112 lines
2.3 KiB
Go

package client
import (
"bytes"
"context"
"fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"runtime"
"syscall"
"testing"
"github.com/moby/buildkit/client/llb"
"github.com/stretchr/testify/assert"
)
var clientAddressStandalone string
var clientAddressContainerd string
func TestMain(m *testing.M) {
if testing.Short() {
os.Exit(m.Run())
}
cleanup, err := setupStandalone()
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer cleanup()
cleanup, err = setupContainerd()
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer cleanup()
os.Exit(m.Run())
}
func runBuildd(args []string) (string, func(), error) {
tmpdir, err := ioutil.TempDir("", "buildd")
if err != nil {
return "", nil, err
}
defer os.RemoveAll(tmpdir)
address := filepath.Join(tmpdir, "buildd.sock")
if runtime.GOOS == "windows" {
address = "//./pipe/buildd-" + filepath.Base(tmpdir)
}
args = append(args, "--root", tmpdir, "--socket", address, "--debug")
cmd := exec.Command(args[0], args[1:]...)
// cmd.Stderr = os.Stdout
// cmd.Stdout = os.Stdout
if err := cmd.Start(); err != nil {
return "", nil, err
}
return address, func() {
// tear down the daemon and resources created
if err := cmd.Process.Signal(syscall.SIGTERM); err != nil {
fmt.Fprintln(os.Stderr, err)
}
if _, err := cmd.Process.Wait(); err != nil {
fmt.Fprintln(os.Stderr, err)
}
os.RemoveAll(tmpdir)
}, nil
}
func requiresLinux(t *testing.T) {
if runtime.GOOS != "linux" {
t.Skipf("unsupported GOOS: %s", runtime.GOOS)
}
}
func testCallDiskUsage(t *testing.T, address string) {
c, err := New(address)
assert.Nil(t, err)
_, err = c.DiskUsage(context.TODO())
assert.Nil(t, err)
}
func testBuildMultiMount(t *testing.T, address string) {
requiresLinux(t)
t.Parallel()
c, err := New(address)
assert.Nil(t, err)
alpine := llb.Image("docker.io/library/alpine:latest")
ls := alpine.Run(llb.Shlex("/bin/ls -l"))
busybox := llb.Image("docker.io/library/busybox:latest")
cp := ls.Run(llb.Shlex("/bin/cp -a /busybox/etc/passwd baz"))
cp.AddMount("/busybox", busybox)
dt, err := cp.Marshal()
assert.Nil(t, err)
buf := bytes.NewBuffer(nil)
err = llb.WriteTo(dt, buf)
assert.Nil(t, err)
err = c.Solve(context.TODO(), buf, SolveOpt{}, nil)
assert.Nil(t, err)
}