func TestDoProbe(t *testing.T) { m := newTestManager() // Test statuses. runningStatus := getTestRunningStatus() pendingStatus := getTestRunningStatus() pendingStatus.ContainerStatuses[0].State.Running = nil terminatedStatus := getTestRunningStatus() terminatedStatus.ContainerStatuses[0].State.Running = nil terminatedStatus.ContainerStatuses[0].State.Terminated = &api.ContainerStateTerminated{ StartedAt: unversioned.Now(), } otherStatus := getTestRunningStatus() otherStatus.ContainerStatuses[0].Name = "otherContainer" failedStatus := getTestRunningStatus() failedStatus.Phase = api.PodFailed tests := []struct { probe api.Probe podStatus *api.PodStatus expectContinue bool expectSet bool expectedResult results.Result }{ { // No status. expectContinue: true, }, { // Pod failed podStatus: &failedStatus, }, { // No container status podStatus: &otherStatus, expectContinue: true, }, { // Container waiting podStatus: &pendingStatus, expectContinue: true, expectSet: true, }, { // Container terminated podStatus: &terminatedStatus, expectSet: true, }, { // Probe successful. podStatus: &runningStatus, expectContinue: true, expectSet: true, expectedResult: results.Success, }, { // Initial delay passed podStatus: &runningStatus, probe: api.Probe{ InitialDelaySeconds: -100, }, expectContinue: true, expectSet: true, expectedResult: results.Success, }, } for _, probeType := range [...]probeType{liveness, readiness} { for i, test := range tests { w := newTestWorker(m, probeType, test.probe) if test.podStatus != nil { m.statusManager.SetPodStatus(w.pod, *test.podStatus) } if c := w.doProbe(); c != test.expectContinue { t.Errorf("[%s-%d] Expected continue to be %v but got %v", probeType, i, test.expectContinue, c) } result, ok := resultsManager(m, probeType).Get(testContainerID) if ok != test.expectSet { t.Errorf("[%s-%d] Expected to have result: %v but got %v", probeType, i, test.expectSet, ok) } if result != test.expectedResult { t.Errorf("[%s-%d] Expected result: %v but got %v", probeType, i, test.expectedResult, result) } // Clean up. m.statusManager = status.NewManager(&fake.Clientset{}, kubepod.NewBasicPodManager(nil)) resultsManager(m, probeType).Remove(testContainerID) } } }
func newTestManager(kubeClient clientset.Interface) *manager { podManager := kubepod.NewBasicPodManager(podtest.NewFakeMirrorClient()) podManager.AddPod(getTestPod()) return NewManager(kubeClient, podManager).(*manager) }