package analysis
import (
"sort"
"strings"
"testing"
"time"
"k8s.io/kubernetes/pkg/api/unversioned"
osgraph "github.com/openshift/origin/pkg/api/graph"
osgraphtest "github.com/openshift/origin/pkg/api/graph/test"
)
func TestRestartingPodWarning(t *testing.T) {
g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/restarting-pod.yaml")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
defer func() { nowFn = unversioned.Now }()
recent, _ := time.Parse(time.RFC3339, "2015-07-13T19:36:06Z")
nowFn = func() unversioned.Time { return unversioned.NewTime(recent.UTC()) }
markers := FindRestartingPods(g, osgraph.DefaultNamer, "oc logs", "oadm policy")
sort.Sort(osgraph.BySeverity(markers))
if e, a := 4, len(markers); e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := CrashLoopingPodError, markers[0].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := CrashLoopingPodError, markers[1].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := RestartingPodWarning, markers[2].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := RestartingPodWarning, markers[3].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
sort.Sort(osgraph.ByNodeID(markers))
if !strings.HasPrefix(markers[0].Message, "container ") {
t.Fatalf("message %q should state container", markers[0].Message)
}
if !strings.HasPrefix(markers[1].Message, "container ") {
t.Fatalf("message %q should state container", markers[1].Message)
}
if !strings.HasPrefix(markers[2].Message, "container ") {
t.Fatalf("message %q should state container", markers[2].Message)
}
if strings.HasPrefix(markers[3].Message, "container ") {
t.Fatalf("message %q should not state container", markers[3].Message)
}
future, _ := time.Parse(time.RFC3339, "2015-07-13T19:46:06Z")
nowFn = func() unversioned.Time { return unversioned.NewTime(future.UTC()) }
markers = FindRestartingPods(g, osgraph.DefaultNamer, "oc logs", "oadm policy")
sort.Sort(osgraph.BySeverity(markers))
if e, a := 3, len(markers); e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := CrashLoopingPodError, markers[0].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := CrashLoopingPodError, markers[1].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
if e, a := RestartingPodWarning, markers[2].Key; e != a {
t.Fatalf("expected %v, got %v", e, a)
}
sort.Sort(osgraph.ByNodeID(markers))
if !strings.HasPrefix(markers[0].Message, "container ") {
t.Fatalf("message %q should state container", markers[0].Message)
}
if !strings.HasPrefix(markers[1].Message, "container ") {
t.Fatalf("message %q should state container", markers[1].Message)
}
if strings.HasPrefix(markers[2].Message, "container ") {
t.Fatalf("message %q should not state container", markers[2].Message)
}
}