Fix flag loading order

Prior to this change, flags associated with the Config object were being
read too early (that is, before cobra had parsed them). They are now
read just in time for command execution.

Change-Id: I0affca9429867eb25db40f8323403e0f6976b47b
This commit is contained in:
Ian Howell 2020-01-15 12:28:29 -06:00
parent a8cc7ed2bf
commit 51b1e86ad9
2 changed files with 40 additions and 2 deletions

View File

@ -38,14 +38,15 @@ func NewRootCmd(out io.Writer) (*cobra.Command, *environment.AirshipCTLSettings,
SilenceUsage: true,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
log.Init(settings.Debug, cmd.OutOrStderr())
// Load or Initialize airship Config
settings.InitConfig()
},
}
rootCmd.SetOutput(out)
rootCmd.AddCommand(NewVersionCommand())
settings.InitFlags(rootCmd)
// Load or Initialize airship Config
settings.InitConfig()
return rootCmd, settings, nil
}

View File

@ -1,9 +1,11 @@
package cmd_test
import (
"bytes"
"testing"
"github.com/spf13/cobra"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"opendev.org/airship/airshipctl/cmd"
@ -36,6 +38,41 @@ func TestRoot(t *testing.T) {
}
}
func TestFlagLoading(t *testing.T) {
tests := []struct {
name string
args []string
expected string
}{
{
name: "default, no flags",
args: []string{},
expected: "$HOME/.airship/config",
},
{
name: "alternate airshipconfig",
args: []string{"--airshipconf", "/custom/path/to/airshipconfig"},
expected: "/custom/path/to/airshipconfig",
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(subTest *testing.T) {
// We don't care about the output of this test, so toss
// it into a thowaway &bytes.buffer{}
rootCmd, settings, err := cmd.NewRootCmd(&bytes.Buffer{})
require.NoError(t, err)
rootCmd.SetArgs(tt.args)
err = rootCmd.Execute()
require.NoError(t, err)
assert.Equal(t, settings.AirshipConfigPath(), tt.expected)
})
}
}
func getVanillaRootCmd(t *testing.T) *cobra.Command {
t.Helper()
rootCmd, _, err := cmd.NewRootCmd(nil)