airshipctl/cmd/root_test.go
Drew Walters e34edc0ce2 Move bootstrap cmd functionality to baremetal cmd
Early airshipctl usage has identified the need to control the power of
remote hosts directly from airshipctl. This functionality is typically
required during the bootstrapping phase of airshipctl; however, the
functionality could be used anytime. A logical home for this
functionality would be in a baremetal command, not a bootstrap command.
Since all functionality performed by the bootstrap command is performed on
baremetal hosts, a natural need has developed to group this
functionality together under one baremetal command.

This change moves all functionality from the bootstrap command to a new
baremetal command.

airshipctl baremetal isogen         generate ephemeral node ISO
airshipctl baremetal remotedirect   bootstrap ephemeral node

Change-Id: Ia615224686d97c95d78c3773c2b9f41df9d06ed6
Signed-off-by: Drew Walters <andrew.walters@att.com>
2020-04-28 16:29:19 +00:00

113 lines
2.8 KiB
Go

/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
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/baremetal"
"opendev.org/airship/airshipctl/pkg/environment"
"opendev.org/airship/airshipctl/testutil"
)
func TestRoot(t *testing.T) {
tests := []*testutil.CmdTest{
{
Name: "rootCmd-with-no-subcommands",
CmdLine: "--help",
Cmd: getVanillaRootCommand(t),
},
{
Name: "rootCmd-with-default-subcommands",
CmdLine: "--help",
Cmd: getDefaultRootCommand(t),
},
{
Name: "specialized-rootCmd-with-bootstrap",
CmdLine: "--help",
Cmd: getSpecializedRootCommand(t),
},
}
for _, tt := range tests {
testutil.RunTest(t, tt)
}
}
func TestFlagLoading(t *testing.T) {
tests := []struct {
name string
args []string
expected string
Error error
}{
{
name: "default, no flags",
args: []string{},
expected: "",
Error: cobra.ErrSubCommandRequired,
},
{
name: "alternate airshipconfig",
args: []string{"--airshipconf", "/custom/path/to/airshipconfig"},
expected: "/custom/path/to/airshipconfig",
Error: cobra.ErrSubCommandRequired,
},
}
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 throwaway &bytes.buffer{}
rootCmd, settings, err := cmd.NewRootCommand(&bytes.Buffer{})
require.NoError(t, err)
rootCmd.SetArgs(tt.args)
err = rootCmd.Execute()
assert.Equal(t, tt.Error, err)
assert.Equal(t, settings.AirshipConfigPath, tt.expected)
})
}
}
func getVanillaRootCommand(t *testing.T) *cobra.Command {
t.Helper()
rootCmd, _, err := cmd.NewRootCommand(nil)
require.NoError(t, err, "Could not create root commands")
return rootCmd
}
func getDefaultRootCommand(t *testing.T) *cobra.Command {
t.Helper()
rootCmd, _, err := cmd.NewAirshipCTLCommand(nil)
require.NoError(t, err, "Could not create root commands")
return rootCmd
}
func getSpecializedRootCommand(t *testing.T) *cobra.Command {
t.Helper()
rootCmd := getVanillaRootCommand(t)
rootCmd.AddCommand(baremetal.NewBaremetalCommand(&environment.AirshipCTLSettings{}))
return rootCmd
}