1
0
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:
Tõnis Tiigi 2025-04-07 11:27:19 -07:00 committed by GitHub
commit 22dc720ae0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 104 additions and 27 deletions

View File

@ -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 {

View File

@ -14,6 +14,11 @@ import (
"github.com/stretchr/testify/require"
)
func TestMain(m *testing.M) {
defer tests.RunMirror()()
m.Run()
}
func init() {
workers.InitContainerdWorker()
}

View File

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

View File

@ -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)