Skip to content

Commit 601056f

Browse files
committed
tests: share single docker between docker-container backends
This means that we can run our docker-container tests in parallel again, which can help speed up our test runs by a *significant* amount. Signed-off-by: Justin Chadwell <[email protected]>
1 parent 0a7f96c commit 601056f

2 files changed

Lines changed: 25 additions & 14 deletions

File tree

tests/workers/docker-container.go

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"os"
66
"os/exec"
7+
"sync"
78

89
"github.com/moby/buildkit/identity"
910
"github.com/moby/buildkit/util/testutil/integration"
@@ -18,6 +19,11 @@ func InitDockerContainerWorker() {
1819

1920
type containerWorker struct {
2021
id string
22+
23+
docker integration.Backend
24+
dockerClose func() error
25+
dockerErr error
26+
dockerOnce sync.Once
2127
}
2228

2329
func (w *containerWorker) Name() string {
@@ -29,9 +35,11 @@ func (w *containerWorker) Rootless() bool {
2935
}
3036

3137
func (w *containerWorker) New(ctx context.Context, cfg *integration.BackendConfig) (integration.Backend, func() error, error) {
32-
bk, bkclose, err := dockerWorker{id: w.id}.New(ctx, cfg)
33-
if err != nil {
34-
return bk, bkclose, err
38+
w.dockerOnce.Do(func() {
39+
w.docker, w.dockerClose, w.dockerErr = dockerWorker{id: w.id}.New(ctx, cfg)
40+
})
41+
if w.dockerErr != nil {
42+
return w.docker, w.dockerClose, w.dockerErr
3543
}
3644

3745
name := "integration-container-" + identity.NewID()
@@ -42,29 +50,32 @@ func (w *containerWorker) New(ctx context.Context, cfg *integration.BackendConfi
4250
"--driver=docker-container",
4351
"--driver-opt=network=host",
4452
)
45-
cmd.Env = append(os.Environ(), "DOCKER_CONTEXT="+bk.DockerAddress())
53+
cmd.Env = append(os.Environ(), "DOCKER_CONTEXT="+w.docker.DockerAddress())
4654
if err := cmd.Run(); err != nil {
4755
return nil, nil, errors.Wrapf(err, "failed to create buildx instance %s", name)
4856
}
4957

5058
cl := func() error {
51-
var err error
52-
if err1 := bkclose(); err == nil {
53-
err = err1
54-
}
5559
cmd := exec.Command("buildx", "rm", "-f", name)
56-
if err1 := cmd.Run(); err == nil {
57-
err = err1
58-
}
59-
return err
60+
return cmd.Run()
6061
}
6162

6263
return &backend{
63-
context: bk.DockerAddress(),
64+
context: w.docker.DockerAddress(),
6465
builder: name,
6566
}, cl, nil
6667
}
6768

6869
func (w *containerWorker) Close() error {
70+
if close := w.dockerClose; close != nil {
71+
return close()
72+
}
73+
74+
// reset the worker to be ready to go again
75+
w.docker = nil
76+
w.dockerClose = nil
77+
w.dockerErr = nil
78+
w.dockerOnce = sync.Once{}
79+
6980
return nil
7081
}

tests/workers/docker.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func (c dockerWorker) New(ctx context.Context, cfg *integration.BackendConfig) (
4242
"--docker", "host="+bk.DockerAddress(),
4343
)
4444
if err := cmd.Run(); err != nil {
45-
return nil, cl, errors.Wrapf(err, "failed to create buildx instance %s", name)
45+
return bk, cl, errors.Wrapf(err, "failed to create buildx instance %s", name)
4646
}
4747

4848
cl = func() error {

0 commit comments

Comments
 (0)