51b1e86ad9
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
95 lines
2.1 KiB
Go
95 lines
2.1 KiB
Go
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"
|
|
"opendev.org/airship/airshipctl/cmd/bootstrap"
|
|
"opendev.org/airship/airshipctl/pkg/environment"
|
|
"opendev.org/airship/airshipctl/testutil"
|
|
)
|
|
|
|
func TestRoot(t *testing.T) {
|
|
tests := []*testutil.CmdTest{
|
|
{
|
|
Name: "rootCmd-with-no-defaults",
|
|
CmdLine: "",
|
|
Cmd: getVanillaRootCmd(t),
|
|
},
|
|
{
|
|
Name: "rootCmd-with-defaults",
|
|
CmdLine: "",
|
|
Cmd: getDefaultRootCmd(t),
|
|
},
|
|
{
|
|
Name: "specialized-rootCmd-with-bootstrap",
|
|
CmdLine: "",
|
|
Cmd: getSpecializedRootCmd(t),
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
testutil.RunTest(t, tt)
|
|
}
|
|
}
|
|
|
|
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)
|
|
require.NoError(t, err, "Could not create root commands")
|
|
return rootCmd
|
|
}
|
|
|
|
func getDefaultRootCmd(t *testing.T) *cobra.Command {
|
|
t.Helper()
|
|
rootCmd, _, err := cmd.NewAirshipCTLCommand(nil)
|
|
require.NoError(t, err, "Could not create root commands")
|
|
return rootCmd
|
|
}
|
|
|
|
func getSpecializedRootCmd(t *testing.T) *cobra.Command {
|
|
rootCmd := getVanillaRootCmd(t)
|
|
rootCmd.AddCommand(bootstrap.NewBootstrapCommand(&environment.AirshipCTLSettings{}))
|
|
return rootCmd
|
|
}
|