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  }