diff --git a/cmd/kubeadm/app/preflight/checks.go b/cmd/kubeadm/app/preflight/checks.go index b7802af3072..9658b965425 100644 --- a/cmd/kubeadm/app/preflight/checks.go +++ b/cmd/kubeadm/app/preflight/checks.go @@ -200,7 +200,7 @@ func RunInitMasterChecks(cfg *kubeadmapi.MasterConfiguration) error { InPathCheck{executable: "touch", mandatory: false}, } - return runChecks(checks) + return runChecks(checks, os.Stderr) } func RunJoinNodeChecks() error { @@ -223,7 +223,7 @@ func RunJoinNodeChecks() error { InPathCheck{executable: "touch", mandatory: false}, } - return runChecks(checks) + return runChecks(checks, os.Stderr) } func RunResetCheck() error { @@ -231,17 +231,17 @@ func RunResetCheck() error { IsRootCheck{root: true}, } - return runChecks(checks) + return runChecks(checks, os.Stderr) } // runChecks runs each check, displays it's warnings/errors, and once all // are processed will exit if any errors occurred. -func runChecks(checks []PreFlightCheck) error { +func runChecks(checks []PreFlightCheck, ww io.Writer) error { found := []error{} for _, c := range checks { warnings, errs := c.Check() for _, w := range warnings { - fmt.Printf("WARNING: %s\n", w) + io.WriteString(ww, fmt.Sprintf("WARNING: %s\n", w)) } for _, e := range errs { found = append(found, e) diff --git a/cmd/kubeadm/app/preflight/checks_test.go b/cmd/kubeadm/app/preflight/checks_test.go new file mode 100644 index 00000000000..fb8b1f381aa --- /dev/null +++ b/cmd/kubeadm/app/preflight/checks_test.go @@ -0,0 +1,68 @@ +/* +Copyright 2016 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 preflight + +import ( + "bytes" + "fmt" + "testing" +) + +type preflightCheckTest struct { + msg string +} + +func (pfct preflightCheckTest) Check() (warning, errors []error) { + if pfct.msg == "warning" { + return []error{fmt.Errorf("warning")}, nil + } + if pfct.msg != "" { + return nil, []error{fmt.Errorf("fake error")} + } + return +} + +func TestRunChecks(t *testing.T) { + var tokenTest = []struct { + p []PreFlightCheck + expected bool + output string + }{ + {[]PreFlightCheck{}, true, ""}, + {[]PreFlightCheck{preflightCheckTest{"warning"}}, true, "WARNING: warning\n"}, // should just print warning + {[]PreFlightCheck{preflightCheckTest{"error"}}, false, ""}, + {[]PreFlightCheck{preflightCheckTest{"test"}}, false, ""}, + } + for _, rt := range tokenTest { + buf := new(bytes.Buffer) + actual := runChecks(rt.p, buf) + if (actual == nil) != rt.expected { + t.Errorf( + "failed runChecks:\n\texpected: %t\n\t actual: %t", + rt.expected, + (actual == nil), + ) + } + if buf.String() != rt.output { + t.Errorf( + "failed runChecks:\n\texpected: %s\n\t actual: %s", + rt.output, + buf.String(), + ) + } + } +}