@@ -55,6 +55,7 @@ type TokenAuthServer struct {
55
55
func EnsureImages (base * testutil.Base ) {
56
56
base .Cmd ("pull" , testutil .RegistryImage ).AssertOK ()
57
57
base .Cmd ("pull" , testutil .DockerAuthImage ).AssertOK ()
58
+ base .Cmd ("pull" , testutil .KuboImage ).AssertOK ()
58
59
}
59
60
60
61
func NewAuthServer (base * testutil.Base , ca * testca.CA , port int , user , pass string , tls bool ) * TokenAuthServer {
112
113
port , err = portlock .Acquire (port )
113
114
assert .NilError (base .T , err , fmt .Errorf ("failed acquiring port: %w" , err ))
114
115
containerName := fmt .Sprintf ("auth-%s-%d" , name , port )
116
+ // Cleanup possible leftovers first
117
+ base .Cmd ("rm" , "-f" , containerName ).Run ()
115
118
116
119
cleanup := func (err error ) {
117
120
result := base .Cmd ("rm" , "-f" , containerName ).Run ()
@@ -232,7 +235,78 @@ func (ba *BasicAuth) Params(base *testutil.Base) []string {
232
235
return ret
233
236
}
234
237
238
+ func NewIPFSRegistry (base * testutil.Base , ca * testca.CA , port int , auth Auth , boundCleanup func (error )) * RegistryServer {
239
+ EnsureImages (base )
240
+
241
+ name := testutil .Identifier (base .T )
242
+ // listen on 0.0.0.0 to enable 127.0.0.1
243
+ listenIP := net .ParseIP ("0.0.0.0" )
244
+ hostIP , err := nettestutil .NonLoopbackIPv4 ()
245
+ assert .NilError (base .T , err , fmt .Errorf ("failed finding ipv4 non loopback interface: %w" , err ))
246
+ port , err = portlock .Acquire (port )
247
+ assert .NilError (base .T , err , fmt .Errorf ("failed acquiring port: %w" , err ))
248
+
249
+ containerName := fmt .Sprintf ("ipfs-registry-%s-%d" , name , port )
250
+ // Cleanup possible leftovers first
251
+ base .Cmd ("rm" , "-f" , containerName ).Run ()
252
+
253
+ args := []string {
254
+ "run" ,
255
+ "--pull=never" ,
256
+ "-d" ,
257
+ "-p" , fmt .Sprintf ("%s:%d:%d" , listenIP , port , port ),
258
+ "--name" , containerName ,
259
+ "--entrypoint=/bin/sh" ,
260
+ testutil .KuboImage ,
261
+ "-c" , "--" ,
262
+ fmt .Sprintf ("ipfs init && ipfs config Addresses.API /ip4/0.0.0.0/tcp/%d && ipfs daemon --offline" , port ),
263
+ }
264
+
265
+ cleanup := func (err error ) {
266
+ result := base .Cmd ("rm" , "-f" , containerName ).Run ()
267
+ errPortRelease := portlock .Release (port )
268
+ if boundCleanup != nil {
269
+ boundCleanup (err )
270
+ }
271
+ if err == nil {
272
+ assert .NilError (base .T , result .Error , fmt .Errorf ("failed removing container: %w" , err ))
273
+ assert .NilError (base .T , errPortRelease , fmt .Errorf ("failed releasing port: %w" , err ))
274
+ }
275
+ }
276
+
277
+ scheme := "http"
278
+
279
+ err = func () error {
280
+ cmd := base .Cmd (args ... ).Run ()
281
+ if cmd .Error != nil {
282
+ base .T .Logf ("%s:\n %s\n %s\n -------\n %s" , containerName , cmd .Cmd , cmd .Stdout (), cmd .Stderr ())
283
+ return cmd .Error
284
+ }
285
+
286
+ if _ , err = nettestutil .HTTPGet (fmt .Sprintf ("%s://%s:%s/api/v0" , scheme , hostIP .String (), strconv .Itoa (port )), 30 , true ); err != nil {
287
+ return err
288
+ }
289
+
290
+ return nil
291
+ }()
292
+
293
+ assert .NilError (base .T , err , fmt .Errorf ("failed starting IPFS registry container in a timely manner: %w" , err ))
294
+
295
+ return & RegistryServer {
296
+ IP : hostIP ,
297
+ Port : port ,
298
+ Scheme : scheme ,
299
+ ListenIP : listenIP ,
300
+ Cleanup : cleanup ,
301
+ Logs : func () {
302
+ base .T .Logf ("%s: %q" , containerName , base .Cmd ("logs" , containerName ).Run ().String ())
303
+ },
304
+ }
305
+ }
306
+
235
307
func NewRegistry (base * testutil.Base , ca * testca.CA , port int , auth Auth , boundCleanup func (error )) * RegistryServer {
308
+ EnsureImages (base )
309
+
236
310
name := testutil .Identifier (base .T )
237
311
// listen on 0.0.0.0 to enable 127.0.0.1
238
312
listenIP := net .ParseIP ("0.0.0.0" )
@@ -242,6 +316,9 @@ func NewRegistry(base *testutil.Base, ca *testca.CA, port int, auth Auth, boundC
242
316
assert .NilError (base .T , err , fmt .Errorf ("failed acquiring port: %w" , err ))
243
317
244
318
containerName := fmt .Sprintf ("registry-%s-%d" , name , port )
319
+ // Cleanup possible leftovers first
320
+ base .Cmd ("rm" , "-f" , containerName ).Run ()
321
+
245
322
args := []string {
246
323
"run" ,
247
324
"--pull=never" ,
@@ -325,8 +402,6 @@ func NewRegistry(base *testutil.Base, ca *testca.CA, port int, auth Auth, boundC
325
402
}()
326
403
327
404
if err != nil {
328
- // cs := base.Cmd("inspect", containerName).Run()
329
- // base.T.Logf("%s:\n%s\n%s\n=========================\n%s", containerName, cs.Cmd, cs.Stdout(), cs.Stderr())
330
405
cl := base .Cmd ("logs" , containerName ).Run ()
331
406
base .T .Logf ("%s:\n %s\n %s\n =========================\n %s" , containerName , cl .Cmd , cl .Stdout (), cl .Stderr ())
332
407
cleanup (err )
@@ -357,8 +432,6 @@ func NewWithTokenAuth(base *testutil.Base, user, pass string, port int, tls bool
357
432
}
358
433
359
434
func NewWithNoAuth (base * testutil.Base , port int , tls bool ) * RegistryServer {
360
- EnsureImages (base )
361
-
362
435
var ca * testca.CA
363
436
if tls {
364
437
ca = testca .New (base .T )
0 commit comments