diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 555132d30e3..4ef8efa956b 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -83,6 +83,7 @@ go_test( srcs = [ "reset_test.go", "token_test.go", + "version_test.go", ], embed = [":go_default_library"], deps = [ @@ -90,6 +91,7 @@ go_test( "//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/preflight:go_default_library", + "//vendor/github.com/ghodss/yaml:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/cmd/kubeadm/app/cmd/version_test.go b/cmd/kubeadm/app/cmd/version_test.go new file mode 100644 index 00000000000..1f661913acd --- /dev/null +++ b/cmd/kubeadm/app/cmd/version_test.go @@ -0,0 +1,96 @@ +/* +Copyright 2018 The Kubernetes Authors. + +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 + + http://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 + +import ( + "bytes" + "encoding/json" + "fmt" + "github.com/ghodss/yaml" + "testing" +) + +func TestNewCmdVersion(t *testing.T) { + var buf bytes.Buffer + cmd := NewCmdVersion(&buf) + if err := cmd.Execute(); err != nil { + t.Errorf("Cannot execute version command: %v", err) + } +} + +func TestRunVersion(t *testing.T) { + var buf bytes.Buffer + iface := make(map[string]interface{}) + flagNameOutput := "output" + cmd := NewCmdVersion(&buf) + + testCases := []struct { + name string + flag string + expectedError bool + shouldBeValidYAML bool + shouldBeValidJSON bool + }{ + { + name: "valid: run without flags", + }, + { + name: "valid: run with flag 'short'", + flag: "short", + }, + { + name: "valid: run with flag 'yaml'", + flag: "yaml", + shouldBeValidYAML: true, + }, + { + name: "valid: run with flag 'json'", + flag: "json", + shouldBeValidJSON: true, + }, + { + name: "invalid: run with unsupported flag", + flag: "unsupported-flag", + expectedError: true, + }, + } + for _, tc := range testCases { + var err error + if len(tc.flag) > 0 { + if err = cmd.Flags().Set(flagNameOutput, tc.flag); err != nil { + goto error + } + } + buf.Reset() + if err = RunVersion(&buf, cmd); err != nil { + goto error + } + if buf.String() == "" { + err = fmt.Errorf("empty output") + goto error + } + if tc.shouldBeValidYAML { + err = yaml.Unmarshal(buf.Bytes(), &iface) + } else if tc.shouldBeValidJSON { + err = json.Unmarshal(buf.Bytes(), &iface) + } + error: + if (err != nil) != tc.expectedError { + t.Errorf("Test case %q: RunVersion expected error: %v, saw: %v; %v", tc.name, tc.expectedError, err != nil, err) + } + } +}