Refactor pkg/kubelet/kubelet.go: probeContainer().

Update the probe_test.go.
This commit is contained in:
Yifan Gu 2015-03-06 15:01:18 -08:00
parent 09af0cd3b5
commit 131e8a0e35

View File

@ -23,7 +23,6 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/probe" "github.com/GoogleCloudPlatform/kubernetes/pkg/probe"
"github.com/GoogleCloudPlatform/kubernetes/pkg/types"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/exec" "github.com/GoogleCloudPlatform/kubernetes/pkg/util/exec"
@ -147,6 +146,7 @@ func (p fakeExecProber) Probe(_ exec.Cmd) (probe.Result, error) {
func makeTestKubelet(result probe.Result, err error) *Kubelet { func makeTestKubelet(result probe.Result, err error) *Kubelet {
return &Kubelet{ return &Kubelet{
readiness: newReadinessStates(),
prober: probeHolder{ prober: probeHolder{
exec: fakeExecProber{ exec: fakeExecProber{
result: result, result: result,
@ -156,68 +156,239 @@ func makeTestKubelet(result probe.Result, err error) *Kubelet {
} }
} }
// TestProbeContainer tests the functionality of probeContainer.
// Test cases are:
//
// No probe.
// Only LivenessProbe.
// Only ReadinessProbe.
// Both probes.
//
// Also, for each probe, there will be several cases covering whether the initial
// delay has passed, whether the probe handler will return Success, Failure,
// Unknown or error.
//
func TestProbeContainer(t *testing.T) { func TestProbeContainer(t *testing.T) {
dc := &docker.APIContainers{Created: time.Now().Unix()} dc := &docker.APIContainers{
ID: "foobar",
Created: time.Now().Unix(),
}
tests := []struct { tests := []struct {
p *api.Probe testContainer api.Container
defaultResult probe.Result
expectError bool expectError bool
expectedResult probe.Result expectedResult probe.Result
expectedReadiness bool
}{ }{
// No probes.
{ {
defaultResult: probe.Success, testContainer: api.Container{},
expectedResult: probe.Success, expectedResult: probe.Success,
expectedReadiness: true,
}, },
// Only LivenessProbe.
{ {
defaultResult: probe.Failure, testContainer: api.Container{
LivenessProbe: &api.Probe{InitialDelaySeconds: 100},
},
expectedResult: probe.Success, expectedResult: probe.Success,
expectedReadiness: true,
}, },
{ {
p: &api.Probe{InitialDelaySeconds: 100}, testContainer: api.Container{
defaultResult: probe.Failure, LivenessProbe: &api.Probe{InitialDelaySeconds: -100},
expectError: false,
expectedResult: probe.Failure,
}, },
{
p: &api.Probe{
InitialDelaySeconds: -100,
},
defaultResult: probe.Failure,
expectError: false,
expectedResult: probe.Unknown, expectedResult: probe.Unknown,
expectedReadiness: false,
}, },
{ {
p: &api.Probe{ testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100, InitialDelaySeconds: -100,
Handler: api.Handler{ Handler: api.Handler{
Exec: &api.ExecAction{}, Exec: &api.ExecAction{},
}, },
}, },
defaultResult: probe.Failure, },
expectError: false, expectedResult: probe.Failure,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
},
expectedResult: probe.Success, expectedResult: probe.Success,
expectedReadiness: true,
}, },
{ {
p: &api.Probe{ testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100, InitialDelaySeconds: -100,
Handler: api.Handler{ Handler: api.Handler{
Exec: &api.ExecAction{}, Exec: &api.ExecAction{},
}, },
}, },
defaultResult: probe.Failure, },
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
},
expectError: true, expectError: true,
expectedResult: probe.Unknown, expectedResult: probe.Unknown,
expectedReadiness: false,
},
// Only ReadinessProbe.
{
testContainer: api.Container{
ReadinessProbe: &api.Probe{InitialDelaySeconds: 100},
},
expectedResult: probe.Failure,
expectedReadiness: false,
}, },
{ {
p: &api.Probe{ testContainer: api.Container{
ReadinessProbe: &api.Probe{InitialDelaySeconds: -100},
},
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
ReadinessProbe: &api.Probe{
InitialDelaySeconds: -100, InitialDelaySeconds: -100,
Handler: api.Handler{ Handler: api.Handler{
Exec: &api.ExecAction{}, Exec: &api.ExecAction{},
}, },
}, },
defaultResult: probe.Success, },
expectError: false,
expectedResult: probe.Failure, expectedResult: probe.Failure,
expectedReadiness: false,
},
{
testContainer: api.Container{
ReadinessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
},
expectedResult: probe.Success,
expectedReadiness: true,
},
{
testContainer: api.Container{
ReadinessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
},
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
ReadinessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
},
expectError: true,
expectedResult: probe.Unknown,
expectedReadiness: false,
},
// Both LivenessProbe and ReadinessProbe.
{
testContainer: api.Container{
LivenessProbe: &api.Probe{InitialDelaySeconds: 100},
ReadinessProbe: &api.Probe{InitialDelaySeconds: 100},
},
expectedResult: probe.Failure,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{InitialDelaySeconds: 100},
ReadinessProbe: &api.Probe{InitialDelaySeconds: -100},
},
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{InitialDelaySeconds: -100},
ReadinessProbe: &api.Probe{InitialDelaySeconds: 100},
},
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{InitialDelaySeconds: -100},
ReadinessProbe: &api.Probe{InitialDelaySeconds: -100},
},
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
ReadinessProbe: &api.Probe{InitialDelaySeconds: -100},
},
expectedResult: probe.Unknown,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
ReadinessProbe: &api.Probe{InitialDelaySeconds: -100},
},
expectedResult: probe.Failure,
expectedReadiness: false,
},
{
testContainer: api.Container{
LivenessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
ReadinessProbe: &api.Probe{
InitialDelaySeconds: -100,
Handler: api.Handler{
Exec: &api.ExecAction{},
},
},
},
expectedResult: probe.Success,
expectedReadiness: true,
}, },
} }
@ -229,8 +400,7 @@ func TestProbeContainer(t *testing.T) {
} else { } else {
kl = makeTestKubelet(test.expectedResult, nil) kl = makeTestKubelet(test.expectedResult, nil)
} }
result, err := kl.probeContainer(&api.BoundPod{}, api.PodStatus{}, test.testContainer, dc)
result, err := kl.probeContainer(test.p, "", types.UID(""), api.PodStatus{}, api.Container{}, dc, test.defaultResult)
if test.expectError && err == nil { if test.expectError && err == nil {
t.Error("Expected error but did no error was returned.") t.Error("Expected error but did no error was returned.")
} }
@ -240,5 +410,8 @@ func TestProbeContainer(t *testing.T) {
if test.expectedResult != result { if test.expectedResult != result {
t.Errorf("Expected result was %v but probeContainer() returned %v", test.expectedResult, result) t.Errorf("Expected result was %v but probeContainer() returned %v", test.expectedResult, result)
} }
if test.expectedReadiness != kl.readiness.get(dc.ID) {
t.Errorf("Expected readiness was %v but probeContainer() set %v", test.expectedReadiness, kl.readiness.get(dc.ID))
}
} }
} }