mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-09 21:17:09 +08:00
vendor: update buildkit to master@b49a8873179b
Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
108
vendor/github.com/moby/buildkit/util/testutil/integration/util.go
generated
vendored
108
vendor/github.com/moby/buildkit/util/testutil/integration/util.go
generated
vendored
@ -3,7 +3,6 @@ package integration
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
@ -21,20 +20,42 @@ import (
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func runCmd(cmd *exec.Cmd, logs map[string]*bytes.Buffer) error {
|
||||
var ErrRequirements = errors.Errorf("missing requirements")
|
||||
|
||||
func Tmpdir(t *testing.T, appliers ...fstest.Applier) string {
|
||||
t.Helper()
|
||||
|
||||
// We cannot use t.TempDir() to create a temporary directory here because
|
||||
// appliers might contain fstest.CreateSocket. If the test name is too long,
|
||||
// t.TempDir() could return a path that is longer than 108 characters. This
|
||||
// would result in "bind: invalid argument" when we listen on the socket.
|
||||
tmpdir, err := os.MkdirTemp("", "buildkit")
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Cleanup(func() {
|
||||
require.NoError(t, os.RemoveAll(tmpdir))
|
||||
})
|
||||
|
||||
err = fstest.Apply(appliers...).Apply(tmpdir)
|
||||
require.NoError(t, err)
|
||||
|
||||
return tmpdir
|
||||
}
|
||||
|
||||
func RunCmd(cmd *exec.Cmd, logs map[string]*bytes.Buffer) error {
|
||||
if logs != nil {
|
||||
setCmdLogs(cmd, logs)
|
||||
}
|
||||
fmt.Fprintf(cmd.Stderr, "> runCmd %v %+v\n", time.Now(), cmd.String())
|
||||
fmt.Fprintf(cmd.Stderr, "> RunCmd %v %+v\n", time.Now(), cmd.String())
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func startCmd(cmd *exec.Cmd, logs map[string]*bytes.Buffer) (func() error, error) {
|
||||
func StartCmd(cmd *exec.Cmd, logs map[string]*bytes.Buffer) (func() error, error) {
|
||||
if logs != nil {
|
||||
setCmdLogs(cmd, logs)
|
||||
}
|
||||
|
||||
fmt.Fprintf(cmd.Stderr, "> startCmd %v %+v\n", time.Now(), cmd.String())
|
||||
fmt.Fprintf(cmd.Stderr, "> StartCmd %v %+v\n", time.Now(), cmd.String())
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
return nil, err
|
||||
@ -79,16 +100,7 @@ func startCmd(cmd *exec.Cmd, logs map[string]*bytes.Buffer) (func() error, error
|
||||
}, nil
|
||||
}
|
||||
|
||||
func setCmdLogs(cmd *exec.Cmd, logs map[string]*bytes.Buffer) {
|
||||
b := new(bytes.Buffer)
|
||||
logs["stdout: "+cmd.String()] = b
|
||||
cmd.Stdout = &lockingWriter{Writer: b}
|
||||
b = new(bytes.Buffer)
|
||||
logs["stderr: "+cmd.String()] = b
|
||||
cmd.Stderr = &lockingWriter{Writer: b}
|
||||
}
|
||||
|
||||
func waitUnix(address string, d time.Duration, cmd *exec.Cmd) error {
|
||||
func WaitUnix(address string, d time.Duration, cmd *exec.Cmd) error {
|
||||
address = strings.TrimPrefix(address, "unix://")
|
||||
addr, err := net.ResolveUnixAddr("unix", address)
|
||||
if err != nil {
|
||||
@ -115,11 +127,19 @@ func waitUnix(address string, d time.Duration, cmd *exec.Cmd) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type multiCloser struct {
|
||||
func LookupBinary(name string) error {
|
||||
_, err := exec.LookPath(name)
|
||||
if err != nil {
|
||||
return errors.Wrapf(ErrRequirements, "failed to lookup %s binary", name)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type MultiCloser struct {
|
||||
fns []func() error
|
||||
}
|
||||
|
||||
func (mc *multiCloser) F() func() error {
|
||||
func (mc *MultiCloser) F() func() error {
|
||||
return func() error {
|
||||
var err error
|
||||
for i := range mc.fns {
|
||||
@ -132,25 +152,17 @@ func (mc *multiCloser) F() func() error {
|
||||
}
|
||||
}
|
||||
|
||||
func (mc *multiCloser) append(f func() error) {
|
||||
func (mc *MultiCloser) Append(f func() error) {
|
||||
mc.fns = append(mc.fns, f)
|
||||
}
|
||||
|
||||
var ErrRequirements = errors.Errorf("missing requirements")
|
||||
|
||||
func lookupBinary(name string) error {
|
||||
_, err := exec.LookPath(name)
|
||||
if err != nil {
|
||||
return errors.Wrapf(ErrRequirements, "failed to lookup %s binary", name)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func requireRoot() error {
|
||||
if os.Getuid() != 0 {
|
||||
return errors.Wrap(ErrRequirements, "requires root")
|
||||
}
|
||||
return nil
|
||||
func setCmdLogs(cmd *exec.Cmd, logs map[string]*bytes.Buffer) {
|
||||
b := new(bytes.Buffer)
|
||||
logs["stdout: "+cmd.String()] = b
|
||||
cmd.Stdout = &lockingWriter{Writer: b}
|
||||
b = new(bytes.Buffer)
|
||||
logs["stderr: "+cmd.String()] = b
|
||||
cmd.Stderr = &lockingWriter{Writer: b}
|
||||
}
|
||||
|
||||
type lockingWriter struct {
|
||||
@ -164,33 +176,3 @@ func (w *lockingWriter) Write(dt []byte) (int, error) {
|
||||
w.mu.Unlock()
|
||||
return n, err
|
||||
}
|
||||
|
||||
func Tmpdir(t *testing.T, appliers ...fstest.Applier) (string, error) {
|
||||
// We cannot use t.TempDir() to create a temporary directory here because
|
||||
// appliers might contain fstest.CreateSocket. If the test name is too long,
|
||||
// t.TempDir() could return a path that is longer than 108 characters. This
|
||||
// would result in "bind: invalid argument" when we listen on the socket.
|
||||
tmpdir, err := os.MkdirTemp("", "buildkit")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
t.Cleanup(func() {
|
||||
require.NoError(t, os.RemoveAll(tmpdir))
|
||||
})
|
||||
|
||||
if err := fstest.Apply(appliers...).Apply(tmpdir); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return tmpdir, nil
|
||||
}
|
||||
|
||||
func randomString(n int) string {
|
||||
chars := "abcdefghijklmnopqrstuvwxyz"
|
||||
var b = make([]byte, n)
|
||||
_, _ = rand.Read(b)
|
||||
for k, v := range b {
|
||||
b[k] = chars[v%byte(len(chars))]
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
Reference in New Issue
Block a user