From a197b24fb7642971e30065f846ab9a56e9e2efc8 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Fri, 15 May 2015 20:24:41 +0100 Subject: [PATCH] Add a test for status message generation. Fix a bug in reason message handling. --- pkg/kubectl/resource_printer.go | 8 ++- pkg/kubectl/resource_printer_test.go | 102 +++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 2 deletions(-) diff --git a/pkg/kubectl/resource_printer.go b/pkg/kubectl/resource_printer.go index 9b0b0730993..fec5fcf5433 100644 --- a/pkg/kubectl/resource_printer.go +++ b/pkg/kubectl/resource_printer.go @@ -364,7 +364,7 @@ func interpretContainerStatus(status *api.ContainerStatus) (string, string, stri if state != nil { message = fmt.Sprintf("exit code %d", state.ExitCode) if state.Reason != "" { - message = fmt.Sprintf("%s, reason: %s", state.Reason) + message = fmt.Sprintf("%s, reason: %s", message, state.Reason) } } return message @@ -380,7 +380,11 @@ func interpretContainerStatus(status *api.ContainerStatus) (string, string, stri if message != "" { message = "last termination: " + message } - return "Running", translateTimestamp(state.Running.StartedAt), message, nil + stateMsg := "Running" + if !status.Ready { + stateMsg = stateMsg + " *not ready*" + } + return stateMsg, translateTimestamp(state.Running.StartedAt), message, nil } else if state.Termination != nil { return "Terminated", translateTimestamp(state.Termination.StartedAt), getTermMsg(state.Termination), nil } diff --git a/pkg/kubectl/resource_printer_test.go b/pkg/kubectl/resource_printer_test.go index 3cb6039ac02..dd7d56a2740 100644 --- a/pkg/kubectl/resource_printer_test.go +++ b/pkg/kubectl/resource_printer_test.go @@ -756,3 +756,105 @@ func TestPrintHumanReadableService(t *testing.T) { } } } + +func TestInterpretContainerStatus(t *testing.T) { + tests := []struct { + status *api.ContainerStatus + expectedState string + expectedMessage string + expectErr bool + name string + }{ + { + status: &api.ContainerStatus{ + State: api.ContainerState{ + Running: &api.ContainerStateRunning{}, + }, + Ready: true, + }, + expectedState: "Running", + expectedMessage: "", + name: "basic", + }, + { + status: &api.ContainerStatus{ + State: api.ContainerState{ + Running: &api.ContainerStateRunning{}, + }, + Ready: false, + }, + expectedState: "Running *not ready*", + expectedMessage: "", + name: "basic not ready", + }, + { + status: &api.ContainerStatus{ + State: api.ContainerState{ + Waiting: &api.ContainerStateWaiting{}, + }, + Ready: false, + }, + expectedState: "Waiting", + expectedMessage: "", + name: "waiting not ready", + }, + { + status: &api.ContainerStatus{ + State: api.ContainerState{ + Waiting: &api.ContainerStateWaiting{}, + }, + Ready: true, + }, + expectedState: "Waiting", + expectedMessage: "", + name: "waiting", + }, + { + status: &api.ContainerStatus{ + State: api.ContainerState{ + Termination: &api.ContainerStateTerminated{ + ExitCode: 3, + }, + }, + Ready: false, + }, + expectedState: "Terminated", + expectedMessage: "exit code 3", + name: "terminated not ready", + }, + { + status: &api.ContainerStatus{ + State: api.ContainerState{ + Termination: &api.ContainerStateTerminated{ + ExitCode: 5, + Reason: "test reason", + }, + }, + Ready: true, + }, + expectedState: "Terminated", + expectedMessage: "exit code 5, reason: test reason", + name: "terminated", + }, + } + + for _, test := range tests { + // TODO: test timestamp printing. + state, _, msg, err := interpretContainerStatus(test.status) + if test.expectErr && err == nil { + t.Errorf("unexpected non-error (%s)", test.name) + continue + } + if !test.expectErr && err != nil { + t.Errorf("unexpected error: %v (%s)", err, test.name) + continue + } + if state != test.expectedState { + t.Errorf("expected: %s, got: %s", test.expectedState, state) + } + if msg != test.expectedMessage { + t.Errorf("expected: %s, got: %s", test.expectedMessage, msg) + } + + } +}