github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/docker/client_integration_test.go (about)

     1  //go:build !skipcontainertests
     2  // +build !skipcontainertests
     3  
     4  package docker
     5  
     6  import (
     7  	"bytes"
     8  	"testing"
     9  
    10  	"github.com/distribution/reference"
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/tilt-dev/clusterid"
    14  	wmcontainer "github.com/tilt-dev/tilt/internal/container"
    15  	"github.com/tilt-dev/tilt/internal/k8s"
    16  	"github.com/tilt-dev/tilt/internal/testutils"
    17  )
    18  
    19  func TestCli_Run(t *testing.T) {
    20  	ctx, _, _ := testutils.CtxAndAnalyticsForTest()
    21  	k8sClient := k8s.NewFakeK8sClient(t)
    22  	k8sClient.Runtime = wmcontainer.RuntimeDocker
    23  
    24  	dEnv := ProvideClusterEnv(ctx, RealClientCreator{}, "gke", clusterid.ProductGKE, k8sClient, k8s.FakeMinikube{})
    25  	cli := NewDockerClient(ctx, Env(dEnv))
    26  	defer func() {
    27  		// release any idle connections to avoid out of file errors if running test many times
    28  		_ = cli.(*Cli).Close()
    29  	}()
    30  
    31  	ref, err := reference.ParseNamed("docker.io/library/hello-world")
    32  	require.NoError(t, err)
    33  
    34  	var stdout bytes.Buffer
    35  	r, err := cli.Run(ctx, RunConfig{
    36  		Pull:   true,
    37  		Image:  ref,
    38  		Stdout: &stdout,
    39  	})
    40  	require.NoError(t, err, "Error during run")
    41  	exitCode, err := r.Wait()
    42  	require.NoError(t, err, "Error waiting for exit")
    43  	require.NoError(t, r.Close(), "Error cleaning up container")
    44  	require.Equal(t, int64(0), exitCode, "Non-zero exit code from container")
    45  	require.Contains(t, stdout.String(), "Hello from Docker", "Bad stdout")
    46  }