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:
parent
a8cc7ed2bf
commit
51b1e86ad9
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user