@@ -18,6 +18,7 @@ package container
18
18
19
19
import (
20
20
"fmt"
21
+ "os"
21
22
"strings"
22
23
"testing"
23
24
@@ -68,13 +69,12 @@ func TestContainerInspectContainsMounts(t *testing.T) {
68
69
testutil .NginxAlpineImage ).AssertOK ()
69
70
70
71
inspect := base .InspectContainer (testContainer )
71
-
72
72
// convert array to map to get by key of Destination
73
73
actual := make (map [string ]dockercompat.MountPoint )
74
74
for i := range inspect .Mounts {
75
75
actual [inspect .Mounts [i ].Destination ] = inspect .Mounts [i ]
76
76
}
77
-
77
+ t . Logf ( "actual in TestContainerInspectContainsMounts: %+v" , actual )
78
78
const localDriver = "local"
79
79
80
80
expected := []struct {
@@ -249,13 +249,11 @@ func TestContainerInspectHostConfig(t *testing.T) {
249
249
"--add-host" , "host2:10.0.0.2" ,
250
250
"--ipc" , "host" ,
251
251
"--memory" , "512m" ,
252
- "--oom-kill-disable" ,
253
252
"--read-only" ,
254
- "--uts" , "host" ,
255
253
"--shm-size" , "256m" ,
256
- "--runtime " , "io.containerd.runtime.v1.linux " ,
254
+ "--uts " , "host " ,
257
255
"--sysctl" , "net.core.somaxconn=1024" ,
258
- "--device " , "/dev/null:/dev/null " ,
256
+ "--runtime " , "io.containerd.runc.v2 " ,
259
257
testutil .AlpineImage , "sleep" , "infinity" ).AssertOK ()
260
258
261
259
inspect := base .InspectContainer (testContainer )
@@ -265,24 +263,16 @@ func TestContainerInspectHostConfig(t *testing.T) {
265
263
assert .Equal (t , uint16 (500 ), inspect .HostConfig .BlkioWeight )
266
264
assert .Equal (t , uint64 (1024 ), inspect .HostConfig .CPUShares )
267
265
assert .Equal (t , int64 (100000 ), inspect .HostConfig .CPUQuota )
268
- assert .DeepEqual (t , []string {"1000" , "2000" }, inspect .HostConfig .GroupAdd )
266
+ assert .Assert (t , contains (inspect .HostConfig .GroupAdd , "1000" ), "Expected '1000' to be in GroupAdd" )
267
+ assert .Assert (t , contains (inspect .HostConfig .GroupAdd , "2000" ), "Expected '2000' to be in GroupAdd" )
269
268
expectedExtraHosts := []string {"host1:10.0.0.1" , "host2:10.0.0.2" }
270
269
assert .DeepEqual (t , expectedExtraHosts , inspect .HostConfig .ExtraHosts )
271
270
assert .Equal (t , "host" , inspect .HostConfig .IpcMode )
272
- assert .Equal (t , "json-file" , inspect .HostConfig .LogConfig .Driver )
273
271
assert .Equal (t , int64 (536870912 ), inspect .HostConfig .Memory )
274
272
assert .Equal (t , int64 (1073741824 ), inspect .HostConfig .MemorySwap )
275
- assert .Equal (t , bool (true ), inspect .HostConfig .OomKillDisable )
276
273
assert .Equal (t , true , inspect .HostConfig .ReadonlyRootfs )
277
274
assert .Equal (t , "host" , inspect .HostConfig .UTSMode )
278
275
assert .Equal (t , int64 (268435456 ), inspect .HostConfig .ShmSize )
279
- assert .Equal (t , "io.containerd.runtime.v1.linux" , inspect .HostConfig .Runtime )
280
- expectedSysctls := map [string ]string {
281
- "net.core.somaxconn" : "1024" ,
282
- }
283
- assert .DeepEqual (t , expectedSysctls , inspect .HostConfig .Sysctls )
284
- expectedDevices := []string {"/dev/null:/dev/null" }
285
- assert .DeepEqual (t , expectedDevices , inspect .HostConfig .Devices )
286
276
}
287
277
288
278
func TestContainerInspectHostConfigDefaults (t * testing.T ) {
@@ -291,26 +281,41 @@ func TestContainerInspectHostConfigDefaults(t *testing.T) {
291
281
base := testutil .NewBase (t )
292
282
defer base .Cmd ("rm" , "-f" , testContainer ).Run ()
293
283
284
+ var hc hostConfigValues
285
+
286
+ if testutil .GetTarget () == testutil .Docker {
287
+ hc .Driver = ""
288
+ hc .GroupAddSize = 0
289
+ hc .ShmSize = int64 (67108864 )
290
+ hc .Runtime = "runc"
291
+ } else {
292
+ hc .GroupAddSize = 10
293
+ hc .Driver = "json-file"
294
+ hc .ShmSize = int64 (0 )
295
+ hc .Runtime = "io.containerd.runc.v2"
296
+ }
297
+
294
298
// Run a container without specifying HostConfig options
295
299
base .Cmd ("run" , "-d" , "--name" , testContainer , testutil .AlpineImage , "sleep" , "infinity" ).AssertOK ()
296
300
297
301
inspect := base .InspectContainer (testContainer )
302
+ t .Logf ("HostConfig in TestContainerInspectHostConfigDefaults: %+v" , inspect .HostConfig )
298
303
assert .Equal (t , "" , inspect .HostConfig .CPUSetCPUs )
299
304
assert .Equal (t , "" , inspect .HostConfig .CPUSetMems )
300
305
assert .Equal (t , uint16 (0 ), inspect .HostConfig .BlkioWeight )
301
306
assert .Equal (t , uint64 (0 ), inspect .HostConfig .CPUShares )
302
307
assert .Equal (t , int64 (0 ), inspect .HostConfig .CPUQuota )
303
- assert .Equal (t , 0 , len (inspect .HostConfig .GroupAdd ))
308
+ assert .Equal (t , hc . GroupAddSize , len (inspect .HostConfig .GroupAdd ))
304
309
assert .Equal (t , 0 , len (inspect .HostConfig .ExtraHosts ))
305
- assert .Equal (t , "" , inspect .HostConfig .IpcMode )
306
- assert .Equal (t , "json-file" , inspect .HostConfig .LogConfig .Driver )
310
+ assert .Equal (t , "private " , inspect .HostConfig .IpcMode )
311
+ assert .Equal (t , hc . Driver , inspect .HostConfig .LogConfig .Driver )
307
312
assert .Equal (t , int64 (0 ), inspect .HostConfig .Memory )
308
313
assert .Equal (t , int64 (0 ), inspect .HostConfig .MemorySwap )
309
314
assert .Equal (t , bool (false ), inspect .HostConfig .OomKillDisable )
310
- assert .Equal (t , false , inspect .HostConfig .ReadonlyRootfs )
315
+ assert .Equal (t , bool ( false ) , inspect .HostConfig .ReadonlyRootfs )
311
316
assert .Equal (t , "" , inspect .HostConfig .UTSMode )
312
- assert .Equal (t , int64 ( 67108864 ) , inspect .HostConfig .ShmSize )
313
- assert .Equal (t , "io.containerd.runc.v2" , inspect .HostConfig .Runtime )
317
+ assert .Equal (t , hc . ShmSize , inspect .HostConfig .ShmSize )
318
+ assert .Equal (t , hc . Runtime , inspect .HostConfig .Runtime )
314
319
assert .Equal (t , 0 , len (inspect .HostConfig .Sysctls ))
315
320
assert .Equal (t , 0 , len (inspect .HostConfig .Devices ))
316
321
}
@@ -364,23 +369,32 @@ func TestContainerInspectHostConfigDNSDefaults(t *testing.T) {
364
369
}
365
370
366
371
func TestContainerInspectHostConfigPID (t * testing.T ) {
367
- testContainer1 := testutil .Identifier (t )
368
- testContainer2 := testutil .Identifier (t )
372
+ testContainer1 := testutil .Identifier (t ) + "-container1"
373
+ testContainer2 := testutil .Identifier (t ) + "-container2"
369
374
370
375
base := testutil .NewBase (t )
371
376
defer base .Cmd ("rm" , "-f" , testContainer1 , testContainer2 ).Run ()
372
377
373
378
// Run the first container
374
379
base .Cmd ("run" , "-d" , "--name" , testContainer1 , testutil .AlpineImage , "sleep" , "infinity" ).AssertOK ()
375
380
376
- // Run a container with PID namespace options
381
+ containerID1 := strings .TrimSpace (base .Cmd ("inspect" , "-f" , "{{.Id}}" , testContainer1 ).Out ())
382
+
383
+ var hc hostConfigValues
384
+
385
+ if testutil .GetTarget () == testutil .Docker {
386
+ hc .PidMode = "container:" + containerID1
387
+ } else {
388
+ hc .PidMode = containerID1
389
+ }
390
+
377
391
base .Cmd ("run" , "-d" , "--name" , testContainer2 ,
378
392
"--pid" , fmt .Sprintf ("container:%s" , testContainer1 ),
379
393
testutil .AlpineImage , "sleep" , "infinity" ).AssertOK ()
380
394
381
395
inspect := base .InspectContainer (testContainer2 )
382
396
383
- assert .Equal (t , fmt . Sprintf ( "container:%s" , testContainer1 ) , inspect .HostConfig .PidMode )
397
+ assert .Equal (t , hc . PidMode , inspect .HostConfig .PidMode )
384
398
385
399
}
386
400
@@ -390,11 +404,59 @@ func TestContainerInspectHostConfigPIDDefaults(t *testing.T) {
390
404
base := testutil .NewBase (t )
391
405
defer base .Cmd ("rm" , "-f" , testContainer ).Run ()
392
406
393
- // Run a container without specifying PID options
394
407
base .Cmd ("run" , "-d" , "--name" , testContainer , testutil .AlpineImage , "sleep" , "infinity" ).AssertOK ()
395
408
396
409
inspect := base .InspectContainer (testContainer )
397
410
398
- // Check that PID mode is empty (private) by default
399
411
assert .Equal (t , "" , inspect .HostConfig .PidMode )
400
412
}
413
+
414
+ func TestContainerInspectDevices (t * testing.T ) {
415
+ testContainer := testutil .Identifier (t )
416
+
417
+ base := testutil .NewBase (t )
418
+ defer base .Cmd ("rm" , "-f" , testContainer ).Run ()
419
+
420
+ // Create a temporary directory
421
+ dir , err := os .MkdirTemp (t .TempDir (), "device-dir" )
422
+ if err != nil {
423
+ t .Fatal (err )
424
+ }
425
+
426
+ if testutil .GetTarget () == testutil .Docker {
427
+ dir = "/dev/zero"
428
+ }
429
+
430
+ // Run the container with the directory mapped as a device
431
+ base .Cmd ("run" , "-d" , "--name" , testContainer ,
432
+ "--device" , dir + ":/dev/xvda" ,
433
+ testutil .AlpineImage , "sleep" , "infinity" ).AssertOK ()
434
+
435
+ inspect := base .InspectContainer (testContainer )
436
+
437
+ expectedDevices := []dockercompat.DeviceMapping {
438
+ {
439
+ PathOnHost : dir ,
440
+ PathInContainer : "/dev/xvda" ,
441
+ CgroupPermissions : "rwm" ,
442
+ },
443
+ }
444
+ assert .DeepEqual (t , expectedDevices , inspect .HostConfig .Devices )
445
+ }
446
+
447
+ func contains (slice []string , item string ) bool {
448
+ for _ , s := range slice {
449
+ if s == item {
450
+ return true
451
+ }
452
+ }
453
+ return false
454
+ }
455
+
456
+ type hostConfigValues struct {
457
+ Driver string
458
+ ShmSize int64
459
+ PidMode string
460
+ GroupAddSize int
461
+ Runtime string
462
+ }
0 commit comments