Skip to content

Commit 1a08ea5

Browse files
committed
startupProbe: Test changes
1 parent 323f99e commit 1a08ea5

File tree

8 files changed

+553
-107
lines changed

8 files changed

+553
-107
lines changed

pkg/apis/core/v1/defaults_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ func TestWorkloadDefaults(t *testing.T) {
7171
".Spec.Containers[0].ReadinessProbe.PeriodSeconds": `10`,
7272
".Spec.Containers[0].ReadinessProbe.SuccessThreshold": `1`,
7373
".Spec.Containers[0].ReadinessProbe.TimeoutSeconds": `1`,
74+
".Spec.Containers[0].StartupProbe.FailureThreshold": "3",
75+
".Spec.Containers[0].StartupProbe.Handler.HTTPGet.Path": `"/"`,
76+
".Spec.Containers[0].StartupProbe.Handler.HTTPGet.Scheme": `"HTTP"`,
77+
".Spec.Containers[0].StartupProbe.PeriodSeconds": "10",
78+
".Spec.Containers[0].StartupProbe.SuccessThreshold": "1",
79+
".Spec.Containers[0].StartupProbe.TimeoutSeconds": "1",
7480
".Spec.Containers[0].TerminationMessagePath": `"/dev/termination-log"`,
7581
".Spec.Containers[0].TerminationMessagePolicy": `"File"`,
7682
".Spec.DNSPolicy": `"ClusterFirst"`,
@@ -92,6 +98,12 @@ func TestWorkloadDefaults(t *testing.T) {
9298
".Spec.EphemeralContainers[0].EphemeralContainerCommon.ReadinessProbe.PeriodSeconds": "10",
9399
".Spec.EphemeralContainers[0].EphemeralContainerCommon.ReadinessProbe.SuccessThreshold": "1",
94100
".Spec.EphemeralContainers[0].EphemeralContainerCommon.ReadinessProbe.TimeoutSeconds": "1",
101+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.FailureThreshold": "3",
102+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.Handler.HTTPGet.Path": `"/"`,
103+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.Handler.HTTPGet.Scheme": `"HTTP"`,
104+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.PeriodSeconds": "10",
105+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.SuccessThreshold": "1",
106+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.TimeoutSeconds": "1",
95107
".Spec.InitContainers[0].Env[0].ValueFrom.FieldRef.APIVersion": `"v1"`,
96108
".Spec.InitContainers[0].ImagePullPolicy": `"IfNotPresent"`,
97109
".Spec.InitContainers[0].Lifecycle.PostStart.HTTPGet.Path": `"/"`,
@@ -111,6 +123,12 @@ func TestWorkloadDefaults(t *testing.T) {
111123
".Spec.InitContainers[0].ReadinessProbe.PeriodSeconds": `10`,
112124
".Spec.InitContainers[0].ReadinessProbe.SuccessThreshold": `1`,
113125
".Spec.InitContainers[0].ReadinessProbe.TimeoutSeconds": `1`,
126+
".Spec.InitContainers[0].StartupProbe.FailureThreshold": "3",
127+
".Spec.InitContainers[0].StartupProbe.Handler.HTTPGet.Path": `"/"`,
128+
".Spec.InitContainers[0].StartupProbe.Handler.HTTPGet.Scheme": `"HTTP"`,
129+
".Spec.InitContainers[0].StartupProbe.PeriodSeconds": "10",
130+
".Spec.InitContainers[0].StartupProbe.SuccessThreshold": "1",
131+
".Spec.InitContainers[0].StartupProbe.TimeoutSeconds": "1",
114132
".Spec.InitContainers[0].TerminationMessagePath": `"/dev/termination-log"`,
115133
".Spec.InitContainers[0].TerminationMessagePolicy": `"File"`,
116134
".Spec.RestartPolicy": `"Always"`,
@@ -174,6 +192,12 @@ func TestPodDefaults(t *testing.T) {
174192
".Spec.Containers[0].ReadinessProbe.SuccessThreshold": `1`,
175193
".Spec.Containers[0].ReadinessProbe.TimeoutSeconds": `1`,
176194
".Spec.Containers[0].Resources.Requests": `{"":"0"}`, // this gets defaulted from the limits field
195+
".Spec.Containers[0].StartupProbe.FailureThreshold": "3",
196+
".Spec.Containers[0].StartupProbe.Handler.HTTPGet.Path": `"/"`,
197+
".Spec.Containers[0].StartupProbe.Handler.HTTPGet.Scheme": `"HTTP"`,
198+
".Spec.Containers[0].StartupProbe.PeriodSeconds": "10",
199+
".Spec.Containers[0].StartupProbe.SuccessThreshold": "1",
200+
".Spec.Containers[0].StartupProbe.TimeoutSeconds": "1",
177201
".Spec.Containers[0].TerminationMessagePath": `"/dev/termination-log"`,
178202
".Spec.Containers[0].TerminationMessagePolicy": `"File"`,
179203
".Spec.DNSPolicy": `"ClusterFirst"`,
@@ -196,6 +220,12 @@ func TestPodDefaults(t *testing.T) {
196220
".Spec.EphemeralContainers[0].EphemeralContainerCommon.ReadinessProbe.PeriodSeconds": "10",
197221
".Spec.EphemeralContainers[0].EphemeralContainerCommon.ReadinessProbe.SuccessThreshold": "1",
198222
".Spec.EphemeralContainers[0].EphemeralContainerCommon.ReadinessProbe.TimeoutSeconds": "1",
223+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.FailureThreshold": "3",
224+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.Handler.HTTPGet.Path": `"/"`,
225+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.Handler.HTTPGet.Scheme": `"HTTP"`,
226+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.PeriodSeconds": "10",
227+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.SuccessThreshold": "1",
228+
".Spec.EphemeralContainers[0].EphemeralContainerCommon.StartupProbe.TimeoutSeconds": "1",
199229
".Spec.InitContainers[0].Env[0].ValueFrom.FieldRef.APIVersion": `"v1"`,
200230
".Spec.InitContainers[0].ImagePullPolicy": `"IfNotPresent"`,
201231
".Spec.InitContainers[0].Lifecycle.PostStart.HTTPGet.Path": `"/"`,
@@ -218,6 +248,12 @@ func TestPodDefaults(t *testing.T) {
218248
".Spec.InitContainers[0].Resources.Requests": `{"":"0"}`, // this gets defaulted from the limits field
219249
".Spec.InitContainers[0].TerminationMessagePath": `"/dev/termination-log"`,
220250
".Spec.InitContainers[0].TerminationMessagePolicy": `"File"`,
251+
".Spec.InitContainers[0].StartupProbe.FailureThreshold": "3",
252+
".Spec.InitContainers[0].StartupProbe.Handler.HTTPGet.Path": `"/"`,
253+
".Spec.InitContainers[0].StartupProbe.Handler.HTTPGet.Scheme": `"HTTP"`,
254+
".Spec.InitContainers[0].StartupProbe.PeriodSeconds": "10",
255+
".Spec.InitContainers[0].StartupProbe.SuccessThreshold": "1",
256+
".Spec.InitContainers[0].StartupProbe.TimeoutSeconds": "1",
221257
".Spec.RestartPolicy": `"Always"`,
222258
".Spec.SchedulerName": `"default-scheduler"`,
223259
".Spec.SecurityContext": `{}`,

pkg/kubelet/prober/common_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,16 @@ const (
4141
var testContainerID = kubecontainer.ContainerID{Type: "test", ID: "cOnTaInEr_Id"}
4242

4343
func getTestRunningStatus() v1.PodStatus {
44+
return getTestRunningStatusWithStarted(true)
45+
}
46+
47+
func getTestRunningStatusWithStarted(started bool) v1.PodStatus {
4448
containerStatus := v1.ContainerStatus{
4549
Name: testContainerName,
4650
ContainerID: testContainerID.String(),
4751
}
4852
containerStatus.State.Running = &v1.ContainerStateRunning{StartedAt: metav1.Now()}
53+
containerStatus.Started = &started
4954
podStatus := v1.PodStatus{
5055
Phase: v1.PodRunning,
5156
ContainerStatuses: []v1.ContainerStatus{containerStatus},
@@ -93,6 +98,8 @@ func setTestProbe(pod *v1.Pod, probeType probeType, probeSpec v1.Probe) {
9398
pod.Spec.Containers[0].ReadinessProbe = &probeSpec
9499
case liveness:
95100
pod.Spec.Containers[0].LivenessProbe = &probeSpec
101+
case startup:
102+
pod.Spec.Containers[0].StartupProbe = &probeSpec
96103
}
97104
}
98105

pkg/kubelet/prober/prober_manager_test.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ import (
2828
"k8s.io/apimachinery/pkg/util/runtime"
2929
"k8s.io/apimachinery/pkg/util/sets"
3030
"k8s.io/apimachinery/pkg/util/wait"
31+
utilfeature "k8s.io/apiserver/pkg/util/feature"
32+
featuregatetesting "k8s.io/component-base/featuregate/testing"
3133
"k8s.io/klog"
34+
"k8s.io/kubernetes/pkg/features"
3235
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
3336
"k8s.io/kubernetes/pkg/kubelet/prober/results"
3437
"k8s.io/kubernetes/pkg/probe"
@@ -58,6 +61,8 @@ func TestAddRemovePods(t *testing.T) {
5861
Name: "no_probe1",
5962
}, {
6063
Name: "no_probe2",
64+
}, {
65+
Name: "no_probe3",
6166
}},
6267
},
6368
}
@@ -68,20 +73,26 @@ func TestAddRemovePods(t *testing.T) {
6873
},
6974
Spec: v1.PodSpec{
7075
Containers: []v1.Container{{
71-
Name: "no_probe1",
76+
Name: "probe1",
7277
}, {
7378
Name: "readiness",
7479
ReadinessProbe: defaultProbe,
7580
}, {
76-
Name: "no_probe2",
81+
Name: "probe2",
7782
}, {
7883
Name: "liveness",
7984
LivenessProbe: defaultProbe,
85+
}, {
86+
Name: "probe3",
87+
}, {
88+
Name: "startup",
89+
StartupProbe: defaultProbe,
8090
}},
8191
},
8292
}
8393

8494
m := newTestManager()
95+
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StartupProbe, true)()
8596
defer cleanup(t, m)
8697
if err := expectProbes(m, nil); err != nil {
8798
t.Error(err)
@@ -98,6 +109,7 @@ func TestAddRemovePods(t *testing.T) {
98109
probePaths := []probeKey{
99110
{"probe_pod", "readiness", readiness},
100111
{"probe_pod", "liveness", liveness},
112+
{"probe_pod", "startup", startup},
101113
}
102114
if err := expectProbes(m, probePaths); err != nil {
103115
t.Error(err)
@@ -127,6 +139,7 @@ func TestAddRemovePods(t *testing.T) {
127139

128140
func TestCleanupPods(t *testing.T) {
129141
m := newTestManager()
142+
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StartupProbe, true)()
130143
defer cleanup(t, m)
131144
podToCleanup := v1.Pod{
132145
ObjectMeta: metav1.ObjectMeta{
@@ -139,6 +152,9 @@ func TestCleanupPods(t *testing.T) {
139152
}, {
140153
Name: "prober2",
141154
LivenessProbe: defaultProbe,
155+
}, {
156+
Name: "prober3",
157+
StartupProbe: defaultProbe,
142158
}},
143159
},
144160
}
@@ -153,6 +169,9 @@ func TestCleanupPods(t *testing.T) {
153169
}, {
154170
Name: "prober2",
155171
LivenessProbe: defaultProbe,
172+
}, {
173+
Name: "prober3",
174+
StartupProbe: defaultProbe,
156175
}},
157176
},
158177
}
@@ -166,10 +185,12 @@ func TestCleanupPods(t *testing.T) {
166185
removedProbes := []probeKey{
167186
{"pod_cleanup", "prober1", readiness},
168187
{"pod_cleanup", "prober2", liveness},
188+
{"pod_cleanup", "prober3", startup},
169189
}
170190
expectedProbes := []probeKey{
171191
{"pod_keep", "prober1", readiness},
172192
{"pod_keep", "prober2", liveness},
193+
{"pod_keep", "prober3", startup},
173194
}
174195
if err := waitForWorkerExit(m, removedProbes); err != nil {
175196
t.Fatal(err)
@@ -181,13 +202,15 @@ func TestCleanupPods(t *testing.T) {
181202

182203
func TestCleanupRepeated(t *testing.T) {
183204
m := newTestManager()
205+
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StartupProbe, true)()
184206
defer cleanup(t, m)
185207
podTemplate := v1.Pod{
186208
Spec: v1.PodSpec{
187209
Containers: []v1.Container{{
188210
Name: "prober1",
189211
ReadinessProbe: defaultProbe,
190212
LivenessProbe: defaultProbe,
213+
StartupProbe: defaultProbe,
191214
}},
192215
},
193216
}

pkg/kubelet/prober/prober_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ func TestProbe(t *testing.T) {
280280
}
281281

282282
for i, test := range tests {
283-
for _, probeType := range [...]probeType{liveness, readiness} {
283+
for _, probeType := range [...]probeType{liveness, readiness, startup} {
284284
prober := &prober{
285285
refManager: kubecontainer.NewRefManager(),
286286
recorder: &record.FakeRecorder{},
@@ -292,6 +292,8 @@ func TestProbe(t *testing.T) {
292292
testContainer.LivenessProbe = test.probe
293293
case readiness:
294294
testContainer.ReadinessProbe = test.probe
295+
case startup:
296+
testContainer.StartupProbe = test.probe
295297
}
296298
if test.execError {
297299
prober.exec = fakeExecProber{test.execResult, errors.New("exec error")}

0 commit comments

Comments
 (0)