From 84f949ff17ffc2f59d0fcf42d1179627260fdc8e Mon Sep 17 00:00:00 2001 From: pasha-codefresh Date: Thu, 16 Dec 2021 20:17:16 +0200 Subject: [PATCH] fix: issue with headless installation (#7958) fix: issue with headless installation (#7958) Signed-off-by: pashavictorovich --- cmd/argocd/commands/headless/headless.go | 14 +++- cmd/argocd/commands/headless/headless_test.go | 80 +++++++++++++++++++ 2 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 cmd/argocd/commands/headless/headless_test.go diff --git a/cmd/argocd/commands/headless/headless.go b/cmd/argocd/commands/headless/headless.go index c6e3446aab07..0b70ac81889b 100644 --- a/cmd/argocd/commands/headless/headless.go +++ b/cmd/argocd/commands/headless/headless.go @@ -27,6 +27,8 @@ import ( "github.com/argoproj/argo-cd/v2/util/cli" "github.com/argoproj/argo-cd/v2/util/io" "github.com/argoproj/argo-cd/v2/util/localconfig" + + flag "github.com/spf13/pflag" ) func testAPI(clientOpts *argoapi.ClientOptions) error { @@ -43,6 +45,13 @@ func testAPI(clientOpts *argoapi.ClientOptions) error { return err } +func retrieveContextIfChanged(contextFlag *flag.Flag) string { + if contextFlag != nil && contextFlag.Changed { + return contextFlag.Value.String() + } + return "" +} + // InitCommand allows executing command in a headless mode: on the fly starts Argo CD API server and // changes provided client options to use started API server port func InitCommand(cmd *cobra.Command, clientOpts *argoapi.ClientOptions, port *int) *cobra.Command { @@ -108,10 +117,7 @@ func InitCommand(cmd *cobra.Command, clientOpts *argoapi.ClientOptions, port *in return err } - var context string - if cmd.Flag("context").Changed { - context = cmd.Flag("context").Value.String() - } + context := retrieveContextIfChanged(cmd.Flag("context")) mr, err := miniredis.Run() if err != nil { diff --git a/cmd/argocd/commands/headless/headless_test.go b/cmd/argocd/commands/headless/headless_test.go new file mode 100644 index 000000000000..15550714eee8 --- /dev/null +++ b/cmd/argocd/commands/headless/headless_test.go @@ -0,0 +1,80 @@ +package headless + +import ( + "testing" + + flag "github.com/spf13/pflag" + "github.com/stretchr/testify/assert" +) + +type StringFlag struct { + // The exact value provided on the flag + value string +} + +func (f StringFlag) String() string { + return f.value +} + +func (f *StringFlag) Set(value string) error { + f.value = value + return nil +} + +func (f *StringFlag) Type() string { + return "string" +} + +func Test_FlagContextNotChanged(t *testing.T) { + res := retrieveContextIfChanged(&flag.Flag{ + Name: "", + Shorthand: "", + Usage: "", + Value: &StringFlag{value: "test"}, + DefValue: "", + Changed: false, + NoOptDefVal: "", + Deprecated: "", + Hidden: false, + ShorthandDeprecated: "", + Annotations: nil, + }) + + assert.Equal(t, "", res) +} + +func Test_FlagContextChanged(t *testing.T) { + res := retrieveContextIfChanged(&flag.Flag{ + Name: "", + Shorthand: "", + Usage: "", + Value: &StringFlag{value: "test"}, + DefValue: "", + Changed: true, + NoOptDefVal: "", + Deprecated: "", + Hidden: false, + ShorthandDeprecated: "", + Annotations: nil, + }) + + assert.Equal(t, "test", res) +} + +func Test_FlagContextNil(t *testing.T) { + res := retrieveContextIfChanged(&flag.Flag{ + Name: "", + Shorthand: "", + Usage: "", + Value: nil, + DefValue: "", + Changed: false, + NoOptDefVal: "", + Deprecated: "", + Hidden: false, + ShorthandDeprecated: "", + Annotations: nil, + }) + + assert.Equal(t, "", res) +}