go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/processes/docker_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 //go:build debugtest 5 // +build debugtest 6 7 package processes 8 9 import ( 10 "context" 11 "io" 12 "os" 13 "testing" 14 15 "github.com/docker/docker/api/types" 16 "github.com/docker/docker/api/types/container" 17 "github.com/docker/docker/api/types/network" 18 "github.com/google/uuid" 19 specs "github.com/opencontainers/image-spec/specs-go/v1" 20 "github.com/stretchr/testify/assert" 21 "github.com/stretchr/testify/require" 22 "go.mondoo.com/cnquery/providers/os/connection" 23 ) 24 25 func TestDockerProcsList(t *testing.T) { 26 image := "docker.io/nginx:stable" 27 ctx := context.Background() 28 dClient, err := connection.GetDockerClient() 29 assert.NoError(t, err) 30 31 // If docker is not available, then skip the test. 32 _, err = dClient.ServerVersion(ctx) 33 if err != nil { 34 t.SkipNow() 35 } 36 37 responseBody, err := dClient.ImagePull(ctx, image, types.ImagePullOptions{}) 38 defer responseBody.Close() 39 require.NoError(t, err) 40 41 _, err = io.Copy(os.Stdout, responseBody) 42 require.NoError(t, err) 43 44 // Make sure the docker image is cleaned up 45 defer func() { 46 _, err := dClient.ImageRemove(ctx, image, types.ImageRemoveOptions{}) 47 require.NoError(t, err, "failed to cleanup pre-pulled docker image") 48 }() 49 50 cfg := &container.Config{ 51 AttachStdin: false, 52 AttachStdout: false, 53 AttachStderr: false, 54 StdinOnce: false, 55 Image: image, 56 } 57 58 uuid := uuid.New() 59 created, err := dClient.ContainerCreate(ctx, cfg, &container.HostConfig{}, &network.NetworkingConfig{}, &specs.Platform{}, uuid.String()) 60 require.NoError(t, err) 61 62 require.NoError(t, dClient.ContainerStart(ctx, created.ID, types.ContainerStartOptions{})) 63 64 // Make sure the container is cleaned up 65 defer func() { 66 err := dClient.ContainerRemove(ctx, created.ID, types.ContainerRemoveOptions{Force: true}) 67 require.NoError(t, err) 68 }() 69 70 panic("inject: " + created.ID) 71 provider, err := connection.NewDockerContainerConnection(0, nil, nil) 72 assert.NoError(t, err) 73 74 pMan, err := ResolveManager(conn) 75 assert.NoError(t, err) 76 77 procs, err := pMan.List() 78 assert.NoError(t, err) 79 assert.NotEmpty(t, procs) 80 }