@@ -13,6 +13,7 @@ import (
13
13
"runtime"
14
14
"sort"
15
15
"strings"
16
+ "sync"
16
17
"testing"
17
18
"time"
18
19
@@ -161,10 +162,7 @@ func Run(t *testing.T, testCases []Test, opt ...TestOpt) {
161
162
o (& tc )
162
163
}
163
164
164
- mirror , cleanup , err := runMirror (t , tc .mirroredImages )
165
- require .NoError (t , err )
166
-
167
- t .Cleanup (func () { _ = cleanup () })
165
+ getMirror := lazyMirrorRunnerFunc (t , tc .mirroredImages )
168
166
169
167
matrix := prepareValueMatrix (tc )
170
168
@@ -200,7 +198,7 @@ func Run(t *testing.T, testCases []Test, opt ...TestOpt) {
200
198
ctx , cancel := context .WithCancelCause (ctx )
201
199
defer cancel (errors .WithStack (context .Canceled ))
202
200
203
- sb , closer , err := newSandbox (ctx , br , mirror , mv )
201
+ sb , closer , err := newSandbox (ctx , br , getMirror () , mv )
204
202
require .NoError (t , err )
205
203
t .Cleanup (func () { _ = closer () })
206
204
defer func () {
@@ -238,6 +236,11 @@ func copyImagesLocal(t *testing.T, host string, images map[string]string) error
238
236
}
239
237
localImageCache [host ][to ] = struct {}{}
240
238
239
+ // already exists check
240
+ if _ , _ , err := docker .NewResolver (docker.ResolverOptions {}).Resolve (context .TODO (), host + "/" + to ); err == nil {
241
+ continue
242
+ }
243
+
241
244
var desc ocispecs.Descriptor
242
245
var provider content.Provider
243
246
var err error
@@ -257,12 +260,6 @@ func copyImagesLocal(t *testing.T, host string, images map[string]string) error
257
260
}
258
261
}
259
262
260
- // already exists check
261
- _ , _ , err = docker .NewResolver (docker.ResolverOptions {}).Resolve (context .TODO (), host + "/" + to )
262
- if err == nil {
263
- continue
264
- }
265
-
266
263
ingester , err := contentutil .IngesterFromRef (host + "/" + to )
267
264
if err != nil {
268
265
return err
@@ -329,6 +326,20 @@ func WriteConfig(updaters []ConfigUpdater) (string, error) {
329
326
return filepath .Join (tmpdir , buildkitdConfigFile ), nil
330
327
}
331
328
329
+ func lazyMirrorRunnerFunc (t * testing.T , images map [string ]string ) func () string {
330
+ var once sync.Once
331
+ var mirror string
332
+ return func () string {
333
+ once .Do (func () {
334
+ host , cleanup , err := runMirror (t , images )
335
+ require .NoError (t , err )
336
+ t .Cleanup (func () { _ = cleanup () })
337
+ mirror = host
338
+ })
339
+ return mirror
340
+ }
341
+ }
342
+
332
343
func runMirror (t * testing.T , mirroredImages map [string ]string ) (host string , _ func () error , err error ) {
333
344
mirrorDir := os .Getenv ("BUILDKIT_REGISTRY_MIRROR_DIR" )
334
345
0 commit comments