diff --git a/cmd/bootstrap/bootstrap_test.go b/cmd/bootstrap/bootstrap_test.go index f9e3179a1..395b458e2 100644 --- a/cmd/bootstrap/bootstrap_test.go +++ b/cmd/bootstrap/bootstrap_test.go @@ -23,11 +23,6 @@ import ( func TestBootstrap(t *testing.T) { tests := []*testutil.CmdTest{ - { - Name: "bootstrap-cmd-with-defaults", - CmdLine: "", - Cmd: bootstrap.NewBootstrapCommand(nil), - }, { Name: "bootstrap-isogen-cmd-with-help", CmdLine: "isogen --help", diff --git a/cmd/bootstrap/testdata/TestBootstrapGoldenOutput/bootstrap-cmd-with-defaults.golden b/cmd/bootstrap/testdata/TestBootstrapGoldenOutput/bootstrap-cmd-with-defaults.golden deleted file mode 100644 index 7b5f7349d..000000000 --- a/cmd/bootstrap/testdata/TestBootstrapGoldenOutput/bootstrap-cmd-with-defaults.golden +++ /dev/null @@ -1,14 +0,0 @@ -Bootstrap ephemeral Kubernetes cluster - -Usage: - bootstrap [command] - -Available Commands: - help Help about any command - isogen Generate bootstrap ISO image - remotedirect Bootstrap ephemeral node - -Flags: - -h, --help help for bootstrap - -Use "bootstrap [command] --help" for more information about a command. diff --git a/cmd/cluster/cluster_test.go b/cmd/cluster/cluster_test.go index c7ec13c4e..f0e479aea 100644 --- a/cmd/cluster/cluster_test.go +++ b/cmd/cluster/cluster_test.go @@ -30,11 +30,6 @@ func TestNewClusterCommandReturn(t *testing.T) { fakeRootSettings.InitConfig() tests := []*testutil.CmdTest{ - { - Name: "cluster-cmd-with-defaults", - CmdLine: "", - Cmd: cluster.NewClusterCommand(fakeRootSettings), - }, { Name: "cluster-initinfra-cmd-with-defaults", CmdLine: "--help", diff --git a/cmd/cluster/testdata/TestNewClusterCommandReturnGoldenOutput/cluster-cmd-with-defaults.golden b/cmd/cluster/testdata/TestNewClusterCommandReturnGoldenOutput/cluster-cmd-with-defaults.golden deleted file mode 100644 index 7de0aeb8d..000000000 --- a/cmd/cluster/testdata/TestNewClusterCommandReturnGoldenOutput/cluster-cmd-with-defaults.golden +++ /dev/null @@ -1,13 +0,0 @@ -Interactions with Kubernetes cluster, such as get status, deploy initial infrastructure - -Usage: - cluster [command] - -Available Commands: - help Help about any command - initinfra deploy initinfra components to cluster - -Flags: - -h, --help help for cluster - -Use "cluster [command] --help" for more information about a command. diff --git a/cmd/completion/testdata/TestCompletionGoldenOutput/completion-bash.golden b/cmd/completion/testdata/TestCompletionGoldenOutput/completion-bash.golden index dc180cb19..07d7ebf46 100644 --- a/cmd/completion/testdata/TestCompletionGoldenOutput/completion-bash.golden +++ b/cmd/completion/testdata/TestCompletionGoldenOutput/completion-bash.golden @@ -39,6 +39,7 @@ __completion_contains_word() __completion_handle_reply() { __completion_debug "${FUNCNAME[0]}" + local comp case $cur in -*) if [[ $(type -t compopt) = "builtin" ]]; then @@ -50,7 +51,9 @@ __completion_handle_reply() else allflags=("${flags[*]} ${two_word_flags[*]}") fi - COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") ) + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${allflags[*]}" -- "$cur") if [[ $(type -t compopt) = "builtin" ]]; then [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace fi @@ -100,10 +103,14 @@ __completion_handle_reply() if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then completions+=("${must_have_one_flag[@]}") fi - COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") ) + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${completions[*]}" -- "$cur") if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then - COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") ) + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${noun_aliases[*]}" -- "$cur") fi if [[ ${#COMPREPLY[@]} -eq 0 ]]; then @@ -138,7 +145,7 @@ __completion_handle_filename_extension_flag() __completion_handle_subdirs_in_dir_flag() { local dir="$1" - pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 + pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return } __completion_handle_flag() diff --git a/cmd/completion/testdata/TestCompletionGoldenOutput/completion-zsh.golden b/cmd/completion/testdata/TestCompletionGoldenOutput/completion-zsh.golden index bb5633565..a54566ef7 100644 --- a/cmd/completion/testdata/TestCompletionGoldenOutput/completion-zsh.golden +++ b/cmd/completion/testdata/TestCompletionGoldenOutput/completion-zsh.golden @@ -173,6 +173,7 @@ __completion_contains_word() __completion_handle_reply() { __completion_debug "${FUNCNAME[0]}" + local comp case $cur in -*) if [[ $(type -t compopt) = "builtin" ]]; then @@ -184,7 +185,9 @@ __completion_handle_reply() else allflags=("${flags[*]} ${two_word_flags[*]}") fi - COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") ) + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${allflags[*]}" -- "$cur") if [[ $(type -t compopt) = "builtin" ]]; then [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace fi @@ -234,10 +237,14 @@ __completion_handle_reply() if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then completions+=("${must_have_one_flag[@]}") fi - COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") ) + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${completions[*]}" -- "$cur") if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then - COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") ) + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${noun_aliases[*]}" -- "$cur") fi if [[ ${#COMPREPLY[@]} -eq 0 ]]; then @@ -272,7 +279,7 @@ __completion_handle_filename_extension_flag() __completion_handle_subdirs_in_dir_flag() { local dir="$1" - pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 + pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return } __completion_handle_flag() diff --git a/cmd/config/config_test.go b/cmd/config/config_test.go index 12429b125..3980b1819 100644 --- a/cmd/config/config_test.go +++ b/cmd/config/config_test.go @@ -25,11 +25,6 @@ import ( func TestConfig(t *testing.T) { cmdTests := []*testutil.CmdTest{ - { - Name: "config-cmd-with-defaults", - CmdLine: "", - Cmd: cmd.NewConfigCommand(nil), - }, { Name: "config-cmd-with-help", CmdLine: "--help", diff --git a/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-defaults.golden b/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-defaults.golden deleted file mode 100644 index 4d8e91389..000000000 --- a/cmd/config/testdata/TestConfigGoldenOutput/config-cmd-with-defaults.golden +++ /dev/null @@ -1,21 +0,0 @@ -Modify airshipctl config files using subcommands -like "airshipctl config set-context my-context" - -Usage: - config [command] - -Available Commands: - get-cluster Display a specific cluster or all defined clusters if no name is provided - get-context Display a specific context, the current-context or all defined contexts if no name is provided - get-credentials Gets a user entry from the airshipctl config - help Help about any command - init Generate initial configuration files for airshipctl - set-cluster Sets a cluster entry in the airshipctl config - set-context Switch to a new context or update context values in the airshipctl config - set-credentials Sets a user entry in the airshipctl config - use-context Switch to a different airshipctl context. - -Flags: - -h, --help help for config - -Use "config [command] --help" for more information about a command. diff --git a/cmd/document/document_test.go b/cmd/document/document_test.go index ff87f5b0a..572ac5ed0 100644 --- a/cmd/document/document_test.go +++ b/cmd/document/document_test.go @@ -23,11 +23,6 @@ import ( func TestDocument(t *testing.T) { tests := []*testutil.CmdTest{ - { - Name: "document-with-defaults", - CmdLine: "", - Cmd: document.NewDocumentCommand(nil), - }, { Name: "document-render-with-help", CmdLine: "-h", diff --git a/cmd/document/testdata/TestDocumentGoldenOutput/document-with-defaults.golden b/cmd/document/testdata/TestDocumentGoldenOutput/document-with-defaults.golden deleted file mode 100644 index 53da27d7a..000000000 --- a/cmd/document/testdata/TestDocumentGoldenOutput/document-with-defaults.golden +++ /dev/null @@ -1,15 +0,0 @@ -manages deployment documents - -Usage: - document [command] - -Available Commands: - help Help about any command - plugin used as kustomize exec plugin - pull pulls documents from remote git repository - render Render documents from model - -Flags: - -h, --help help for document - -Use "document [command] --help" for more information about a command. diff --git a/cmd/root_test.go b/cmd/root_test.go index d6dec0437..a2a3fd48f 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -32,17 +32,17 @@ func TestRoot(t *testing.T) { tests := []*testutil.CmdTest{ { Name: "rootCmd-with-no-defaults", - CmdLine: "", + CmdLine: "-h", Cmd: getVanillaRootCmd(t), }, { Name: "rootCmd-with-defaults", - CmdLine: "", + CmdLine: "-h", Cmd: getDefaultRootCmd(t), }, { Name: "specialized-rootCmd-with-bootstrap", - CmdLine: "", + CmdLine: "-h", Cmd: getSpecializedRootCmd(t), }, } @@ -57,16 +57,19 @@ func TestFlagLoading(t *testing.T) { 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, }, } @@ -80,7 +83,7 @@ func TestFlagLoading(t *testing.T) { rootCmd.SetArgs(tt.args) err = rootCmd.Execute() - require.NoError(t, err) + assert.Equal(t, tt.Error, err) assert.Equal(t, settings.AirshipConfigPath, tt.expected) }) diff --git a/go.mod b/go.mod index 91511755c..e98a00c68 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/imdario/mergo v0.3.7 // indirect github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c // indirect github.com/opencontainers/image-spec v1.0.1 // indirect - github.com/spf13/cobra v0.0.5 + github.com/spf13/cobra v0.0.6 github.com/stretchr/testify v1.4.0 k8s.io/api v0.17.3 k8s.io/apiextensions-apiserver v0.17.3 diff --git a/go.sum b/go.sum index 0c23376fe..caf23ef80 100644 --- a/go.sum +++ b/go.sum @@ -68,11 +68,11 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -173,7 +173,6 @@ github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nA github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.19.4 h1:ixzUSnHTd6hCemgtAJgluaTSGYpLNpJY4mA2DIkdOAo= github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= @@ -328,10 +327,7 @@ github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= -github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -409,6 +405,7 @@ github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYe github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= @@ -417,6 +414,7 @@ github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lz github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -427,8 +425,9 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=