From 501594f8c736b011d5fe7f1e3d862c9de34e282d Mon Sep 17 00:00:00 2001 From: hurf Date: Thu, 13 Aug 2015 16:23:10 +0800 Subject: [PATCH] fix AGE error when resource has no creationTimeStamp If the resource doesn't contain creationTimeStamp, report AGE as unknown. This usually happens when the resouces is created locally or is not accually created at server side. --- pkg/kubectl/resource_printer.go | 3 +++ pkg/kubectl/resource_printer_test.go | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/kubectl/resource_printer.go b/pkg/kubectl/resource_printer.go index 0db84a8c339..76e28aebcee 100644 --- a/pkg/kubectl/resource_printer.go +++ b/pkg/kubectl/resource_printer.go @@ -376,6 +376,9 @@ func shortHumanDuration(d time.Duration) string { // translateTimestamp returns the elapsed time since timestamp in // human-readable approximation. func translateTimestamp(timestamp util.Time) string { + if timestamp.IsZero() { + return "" + } return shortHumanDuration(time.Now().Sub(timestamp.Time)) } diff --git a/pkg/kubectl/resource_printer_test.go b/pkg/kubectl/resource_printer_test.go index a4f79e4bf5f..ebc7ab7a437 100644 --- a/pkg/kubectl/resource_printer_test.go +++ b/pkg/kubectl/resource_printer_test.go @@ -1097,3 +1097,26 @@ func TestPrintPodWithLabels(t *testing.T) { buf.Reset() } } + +type stringTestList []struct { + name, got, exp string +} + +func TestTranslateTimestamp(t *testing.T) { + tl := stringTestList{ + {"now", translateTimestamp(util.Time{Time: time.Now()}), "0s"}, + {"unknown", translateTimestamp(util.Time{}), ""}, + {"30 seconds ago", translateTimestamp(util.Time{Time: time.Now().Add(-3e10)}), "30s"}, + {"5 minutes ago", translateTimestamp(util.Time{Time: time.Now().Add(-3e11)}), "5m"}, + {"an hour ago", translateTimestamp(util.Time{Time: time.Now().Add(-6e12)}), "1h"}, + {"2 days ago", translateTimestamp(util.Time{Time: time.Now().AddDate(0, 0, -2)}), "2d"}, + {"months ago", translateTimestamp(util.Time{Time: time.Now().AddDate(0, -3, 0)}), "92d"}, + {"10 years ago", translateTimestamp(util.Time{Time: time.Now().AddDate(-10, 0, 0)}), "10y"}, + } + for _, test := range tl { + if test.got != test.exp { + t.Errorf("On %v, expected '%v', but got '%v'", + test.name, test.exp, test.got) + } + } +}