github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/integration/container/pidmode_linux_test.go (about) 1 package container // import "github.com/Prakhar-Agarwal-byte/moby/integration/container" 2 3 import ( 4 "os" 5 "testing" 6 7 containertypes "github.com/Prakhar-Agarwal-byte/moby/api/types/container" 8 "github.com/Prakhar-Agarwal-byte/moby/errdefs" 9 "github.com/Prakhar-Agarwal-byte/moby/integration/internal/container" 10 "gotest.tools/v3/assert" 11 is "gotest.tools/v3/assert/cmp" 12 "gotest.tools/v3/skip" 13 ) 14 15 func TestPIDModeHost(t *testing.T) { 16 skip.If(t, testEnv.DaemonInfo.OSType != "linux") 17 skip.If(t, testEnv.IsRemoteDaemon()) 18 19 hostPid, err := os.Readlink("/proc/1/ns/pid") 20 assert.NilError(t, err) 21 22 ctx := setupTest(t) 23 apiClient := testEnv.APIClient() 24 25 cID := container.Run(ctx, t, apiClient, container.WithPIDMode("host")) 26 cPid := container.GetContainerNS(ctx, t, apiClient, cID, "pid") 27 assert.Assert(t, hostPid == cPid) 28 29 cID = container.Run(ctx, t, apiClient) 30 cPid = container.GetContainerNS(ctx, t, apiClient, cID, "pid") 31 assert.Assert(t, hostPid != cPid) 32 } 33 34 func TestPIDModeContainer(t *testing.T) { 35 skip.If(t, testEnv.DaemonInfo.OSType != "linux") 36 37 ctx := setupTest(t) 38 apiClient := testEnv.APIClient() 39 40 t.Run("non-existing container", func(t *testing.T) { 41 _, err := container.CreateFromConfig(ctx, apiClient, container.NewTestConfig(container.WithPIDMode("container:nosuchcontainer"))) 42 assert.Check(t, is.ErrorType(err, errdefs.IsInvalidParameter)) 43 assert.Check(t, is.ErrorContains(err, "No such container: nosuchcontainer")) 44 }) 45 46 t.Run("non-running container", func(t *testing.T) { 47 const pidCtrName = "stopped-pid-namespace-container" 48 cPIDContainerID := container.Create(ctx, t, apiClient, container.WithName(pidCtrName)) 49 50 ctr, err := container.CreateFromConfig(ctx, apiClient, container.NewTestConfig(container.WithPIDMode("container:"+pidCtrName))) 51 assert.NilError(t, err, "should not produce an error when creating, only when starting") 52 53 err = apiClient.ContainerStart(ctx, ctr.ID, containertypes.StartOptions{}) 54 assert.Check(t, is.ErrorType(err, errdefs.IsSystem), "should produce a System error when starting an existing container from an invalid state") 55 assert.Check(t, is.ErrorContains(err, "failed to join PID namespace")) 56 assert.Check(t, is.ErrorContains(err, cPIDContainerID+" is not running")) 57 }) 58 59 t.Run("running container", func(t *testing.T) { 60 const pidCtrName = "running-pid-namespace-container" 61 container.Run(ctx, t, apiClient, container.WithName(pidCtrName)) 62 63 ctr, err := container.CreateFromConfig(ctx, apiClient, container.NewTestConfig(container.WithPIDMode("container:"+pidCtrName))) 64 assert.NilError(t, err) 65 66 err = apiClient.ContainerStart(ctx, ctr.ID, containertypes.StartOptions{}) 67 assert.Check(t, err) 68 }) 69 }