From 21e45ff8524c08052226b9d1bd19cbab35bbaf64 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 5 Dec 2022 21:35:05 +0100 Subject: [PATCH 1/2] cli/command: add WithAPIClient This allows the cli to be initialized with a (custom) API client. Currently to be used for unit tests, but could be used for other scenarios. Signed-off-by: Sebastiaan van Stijn --- cli/command/cli_options.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cli/command/cli_options.go b/cli/command/cli_options.go index 535a6d5338..d714947cb9 100644 --- a/cli/command/cli_options.go +++ b/cli/command/cli_options.go @@ -6,6 +6,7 @@ import ( "strconv" "github.com/docker/cli/cli/streams" + "github.com/docker/docker/client" "github.com/moby/term" ) @@ -86,3 +87,11 @@ func WithDefaultContextStoreConfig() DockerCliOption { return nil } } + +// WithAPIClient configures the cli to use the given API client. +func WithAPIClient(c client.APIClient) DockerCliOption { + return func(cli *DockerCli) error { + cli.client = c + return nil + } +} From 121c6138770195af5aa869e60def8bf30df9190d Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 5 Dec 2022 18:56:09 +0100 Subject: [PATCH 2/2] cil/command: use dummy client for build-tests These tests were using the default client, which would try to make a connection with the daemon (which isn't running). Some of these test subsequently had tests that depended on the result of that connection (i.e., "ping" result). This patch updates the test to use a dummy client, so that the ping result is predictable. Signed-off-by: Sebastiaan van Stijn --- cmd/docker/builder_test.go | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/cmd/docker/builder_test.go b/cmd/docker/builder_test.go index 24745136b9..9e7d82ee86 100644 --- a/cmd/docker/builder_test.go +++ b/cmd/docker/builder_test.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "context" "os" "path/filepath" "testing" @@ -10,6 +11,8 @@ import ( "github.com/docker/cli/cli/context/store" "github.com/docker/cli/cli/flags" "github.com/docker/cli/internal/test/output" + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" "gotest.tools/v3/assert" "gotest.tools/v3/fs" ) @@ -63,7 +66,11 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD } var b bytes.Buffer - dockerCli, err := command.NewDockerCli(command.WithInputStream(discard), command.WithCombinedStreams(&b)) + dockerCli, err := command.NewDockerCli( + command.WithAPIClient(&fakeClient{}), + command.WithInputStream(discard), + command.WithCombinedStreams(&b), + ) assert.NilError(t, err) assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions())) @@ -107,6 +114,14 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD } } +type fakeClient struct { + client.Client +} + +func (c *fakeClient) Ping(_ context.Context) (types.Ping, error) { + return types.Ping{OSType: "linux"}, nil +} + func TestBuildkitDisabled(t *testing.T) { t.Setenv("DOCKER_BUILDKIT", "0") @@ -117,7 +132,11 @@ func TestBuildkitDisabled(t *testing.T) { b := bytes.NewBuffer(nil) - dockerCli, err := command.NewDockerCli(command.WithInputStream(discard), command.WithCombinedStreams(b)) + dockerCli, err := command.NewDockerCli( + command.WithAPIClient(&fakeClient{}), + command.WithInputStream(discard), + command.WithCombinedStreams(b), + ) assert.NilError(t, err) assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions())) dockerCli.ConfigFile().CLIPluginsExtraDirs = []string{dir.Path()} @@ -147,7 +166,11 @@ func TestBuilderBroken(t *testing.T) { b := bytes.NewBuffer(nil) - dockerCli, err := command.NewDockerCli(command.WithInputStream(discard), command.WithCombinedStreams(b)) + dockerCli, err := command.NewDockerCli( + command.WithAPIClient(&fakeClient{}), + command.WithInputStream(discard), + command.WithCombinedStreams(b), + ) assert.NilError(t, err) assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions())) dockerCli.ConfigFile().CLIPluginsExtraDirs = []string{dir.Path()} @@ -180,7 +203,11 @@ func TestBuilderBrokenEnforced(t *testing.T) { b := bytes.NewBuffer(nil) - dockerCli, err := command.NewDockerCli(command.WithInputStream(discard), command.WithCombinedStreams(b)) + dockerCli, err := command.NewDockerCli( + command.WithAPIClient(&fakeClient{}), + command.WithInputStream(discard), + command.WithCombinedStreams(b), + ) assert.NilError(t, err) assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions())) dockerCli.ConfigFile().CLIPluginsExtraDirs = []string{dir.Path()}