mirror of
https://github.com/moby/buildkit.git
synced 2025-04-18 18:04:03 +03:00
Merge pull request #5853 from tonistiigi/mirror-worker-tests
tests: integrate mirror into worker tests
This commit is contained in:
commit
22dc720ae0
@ -360,37 +360,80 @@ func lazyMirrorRunnerFunc(t *testing.T, images map[string]string) func() string
|
||||
var mirror string
|
||||
return func() string {
|
||||
once.Do(func() {
|
||||
host, cleanup, err := runMirror(t, images)
|
||||
m, err := RunMirror()
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() { _ = cleanup() })
|
||||
mirror = host
|
||||
require.NoError(t, m.AddImages(t, images))
|
||||
t.Cleanup(func() { _ = m.Close() })
|
||||
mirror = m.Host
|
||||
})
|
||||
return mirror
|
||||
}
|
||||
}
|
||||
|
||||
func runMirror(t *testing.T, mirroredImages map[string]string) (host string, _ func() error, err error) {
|
||||
type Mirror struct {
|
||||
Host string
|
||||
dir string
|
||||
cleanup func() error
|
||||
}
|
||||
|
||||
func (m *Mirror) lock() (*flock.Flock, error) {
|
||||
if m.dir == "" {
|
||||
return nil, nil
|
||||
}
|
||||
if err := os.MkdirAll(m.dir, 0700); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
lock := flock.New(filepath.Join(m.dir, "lock"))
|
||||
if err := lock.Lock(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return lock, nil
|
||||
}
|
||||
|
||||
func (m *Mirror) Close() error {
|
||||
if m.cleanup != nil {
|
||||
return m.cleanup()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Mirror) AddImages(t *testing.T, images map[string]string) (err error) {
|
||||
lock, err := m.lock()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if lock != nil {
|
||||
lock.Unlock()
|
||||
}
|
||||
}()
|
||||
|
||||
if err := copyImagesLocal(t, m.Host, images); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func RunMirror() (_ *Mirror, err error) {
|
||||
mirrorDir := os.Getenv("BUILDKIT_REGISTRY_MIRROR_DIR")
|
||||
|
||||
var lock *flock.Flock
|
||||
if mirrorDir != "" {
|
||||
if err := os.MkdirAll(mirrorDir, 0700); err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
lock = flock.New(filepath.Join(mirrorDir, "lock"))
|
||||
if err := lock.Lock(); err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
lock.Unlock()
|
||||
}
|
||||
}()
|
||||
m := &Mirror{
|
||||
dir: mirrorDir,
|
||||
}
|
||||
|
||||
mirror, cleanup, err := NewRegistry(mirrorDir)
|
||||
lock, err := m.lock()
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
lock.Unlock()
|
||||
}
|
||||
}()
|
||||
|
||||
host, cleanup, err := NewRegistry(mirrorDir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
@ -398,17 +441,16 @@ func runMirror(t *testing.T, mirroredImages map[string]string) (host string, _ f
|
||||
}
|
||||
}()
|
||||
|
||||
if err := copyImagesLocal(t, mirror, mirroredImages); err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
m.Host = host
|
||||
m.cleanup = cleanup
|
||||
|
||||
if mirrorDir != "" {
|
||||
if lock != nil {
|
||||
if err := lock.Unlock(); err != nil {
|
||||
return "", nil, err
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return mirror, cleanup, err
|
||||
return m, err
|
||||
}
|
||||
|
||||
type matrixValue struct {
|
||||
|
@ -14,6 +14,11 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
defer tests.RunMirror()()
|
||||
m.Run()
|
||||
}
|
||||
|
||||
func init() {
|
||||
workers.InitContainerdWorker()
|
||||
}
|
||||
|
@ -27,6 +27,11 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
defer tests.RunMirror()()
|
||||
m.Run()
|
||||
}
|
||||
|
||||
func newWorkerOpt(t *testing.T, processMode oci.ProcessMode) base.WorkerOpt {
|
||||
tmpdir := t.TempDir()
|
||||
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"io"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -14,14 +15,38 @@ import (
|
||||
"github.com/moby/buildkit/session"
|
||||
"github.com/moby/buildkit/snapshot"
|
||||
"github.com/moby/buildkit/source/containerimage"
|
||||
"github.com/moby/buildkit/util/testutil/integration"
|
||||
"github.com/moby/buildkit/worker/base"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
var mirrorOnce sync.Once
|
||||
var mirror *integration.Mirror
|
||||
var mirrorMu sync.Mutex
|
||||
|
||||
func RunMirror() func() error {
|
||||
mirrorOnce.Do(func() {
|
||||
m, err := integration.RunMirror()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
mirror = m
|
||||
})
|
||||
return func() error { return mirror.Close() }
|
||||
}
|
||||
|
||||
func mirrorBusybox(t *testing.T) string {
|
||||
mirrorMu.Lock()
|
||||
defer mirrorMu.Unlock()
|
||||
require.NotNil(t, mirror, "mirror must be initialized")
|
||||
require.NoError(t, mirror.AddImages(t, integration.OfficialImages("busybox:latest")))
|
||||
return mirror.Host + "/library/busybox:latest"
|
||||
}
|
||||
|
||||
func NewBusyboxSourceSnapshot(ctx context.Context, t *testing.T, w *base.Worker, sm *session.Manager) cache.ImmutableRef {
|
||||
img, err := containerimage.NewImageIdentifier("docker.io/library/busybox:latest")
|
||||
img, err := containerimage.NewImageIdentifier(mirrorBusybox(t))
|
||||
require.NoError(t, err)
|
||||
src, err := w.SourceManager.Resolve(ctx, img, sm, nil)
|
||||
require.NoError(t, err)
|
||||
|
Loading…
x
Reference in New Issue
Block a user