From f26051c9deef5e6541d047dfdd598542e0b4e6b1 Mon Sep 17 00:00:00 2001 From: Simon Ferquel Date: Tue, 5 Mar 2019 17:25:06 +0100 Subject: [PATCH] Ensure context store initialization for plugins Plugins have their cli initialized with a docker client pre-configured (for dial-stdio). The problem here is that the cli initialization logic skipped initializing the context store on this condition. This commit adds a non-regression test for that alongside a fix (context store and current context name are now resolved unconditionally) Signed-off-by: Simon Ferquel --- cli/command/cli.go | 11 +++++------ cli/command/cli_test.go | 9 +++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/cli/command/cli.go b/cli/command/cli.go index 47e9bdfffab0..eab0c7c2c208 100644 --- a/cli/command/cli.go +++ b/cli/command/cli.go @@ -208,13 +208,12 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions, ops ...Initialize } cli.configFile = cliconfig.LoadDefaultConfigFile(cli.err) - + cli.contextStore = store.New(cliconfig.ContextStoreDir(), cli.contextStoreConfig) + cli.currentContext, err = resolveContextName(opts.Common, cli.configFile, cli.contextStore) + if err != nil { + return err + } if cli.client == nil { - cli.contextStore = store.New(cliconfig.ContextStoreDir(), cli.contextStoreConfig) - cli.currentContext, err = resolveContextName(opts.Common, cli.configFile, cli.contextStore) - if err != nil { - return err - } endpoint, err := resolveDockerEndpoint(cli.contextStore, cli.currentContext, opts.Common) if err != nil { return errors.Wrap(err, "unable to resolve docker endpoint") diff --git a/cli/command/cli_test.go b/cli/command/cli_test.go index 0bbe6df05528..926d43f2ddf7 100644 --- a/cli/command/cli_test.go +++ b/cli/command/cli_test.go @@ -295,3 +295,12 @@ func TestNewDockerCliAndOperators(t *testing.T) { assert.NilError(t, err) assert.Equal(t, string(errStream), "error") } + +func TestInitializeShouldAlwaysCreateTheContextStore(t *testing.T) { + cli, err := NewDockerCli() + assert.NilError(t, err) + assert.NilError(t, cli.Initialize(flags.NewClientOptions(), WithInitializeClient(func(cli *DockerCli) (client.APIClient, error) { + return client.NewClientWithOpts() + }))) + assert.Check(t, cli.ContextStore() != nil) +}