diff --git a/pkg/api/pod/util.go b/pkg/api/pod/util.go index 621438091b2..e03ca7fc094 100644 --- a/pkg/api/pod/util.go +++ b/pkg/api/pod/util.go @@ -415,7 +415,7 @@ func GetValidationOptionsFromPodSpecAndMeta(podSpec, oldPodSpec *api.PodSpec, po } } - opts.AllowPodLifecycleSleepActionZeroValue = opts.AllowPodLifecycleSleepActionZeroValue || podLifecycleSleepActionZeroValueInUse(podSpec) + opts.AllowPodLifecycleSleepActionZeroValue = opts.AllowPodLifecycleSleepActionZeroValue || podLifecycleSleepActionZeroValueInUse(oldPodSpec) // If oldPod has resize policy set on the restartable init container, we must allow it opts.AllowSidecarResizePolicy = hasRestartableInitContainerResizePolicy(oldPodSpec) } @@ -772,7 +772,7 @@ func podLifecycleSleepActionZeroValueInUse(podSpec *api.PodSpec) bool { inUse = true return false } - if c.Lifecycle.PostStart != nil && c.Lifecycle.PostStart.Sleep != nil && c.Lifecycle.PreStop.Sleep.Seconds == 0 { + if c.Lifecycle.PostStart != nil && c.Lifecycle.PostStart.Sleep != nil && c.Lifecycle.PostStart.Sleep.Seconds == 0 { inUse = true return false } diff --git a/pkg/api/pod/util_test.go b/pkg/api/pod/util_test.go index 2f53c8fdc6e..23ffb061268 100644 --- a/pkg/api/pod/util_test.go +++ b/pkg/api/pod/util_test.go @@ -4204,3 +4204,92 @@ func TestValidateAllowSidecarResizePolicy(t *testing.T) { }) } } + +func TestValidateAllowPodLifecycleSleepActionZeroValue(t *testing.T) { + testCases := []struct { + name string + podSpec *api.PodSpec + expectAllowPodLifecycleSleepActionZeroValue bool + }{ + { + name: "no lifecycle hooks", + podSpec: &api.PodSpec{}, + expectAllowPodLifecycleSleepActionZeroValue: false, + }, + { + name: "Prestop with non-zero second duration", + podSpec: &api.PodSpec{ + Containers: []api.Container{ + { + Lifecycle: &api.Lifecycle{ + PreStop: &api.LifecycleHandler{ + Sleep: &api.SleepAction{ + Seconds: 1, + }, + }, + }, + }, + }, + }, + expectAllowPodLifecycleSleepActionZeroValue: false, + }, + { + name: "PostStart with non-zero second duration", + podSpec: &api.PodSpec{ + Containers: []api.Container{ + { + Lifecycle: &api.Lifecycle{ + PostStart: &api.LifecycleHandler{ + Sleep: &api.SleepAction{ + Seconds: 1, + }, + }, + }, + }, + }, + }, + expectAllowPodLifecycleSleepActionZeroValue: false, + }, + { + name: "PreStop with zero seconds", + podSpec: &api.PodSpec{ + Containers: []api.Container{ + { + Lifecycle: &api.Lifecycle{ + PreStop: &api.LifecycleHandler{ + Sleep: &api.SleepAction{ + Seconds: 0, + }, + }, + }, + }, + }, + }, + expectAllowPodLifecycleSleepActionZeroValue: true, + }, + { + name: "PostStart with zero seconds", + podSpec: &api.PodSpec{ + Containers: []api.Container{ + { + Lifecycle: &api.Lifecycle{ + PostStart: &api.LifecycleHandler{ + Sleep: &api.SleepAction{ + Seconds: 0, + }, + }, + }, + }, + }, + }, + expectAllowPodLifecycleSleepActionZeroValue: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + gotOptions := GetValidationOptionsFromPodSpecAndMeta(&api.PodSpec{}, tc.podSpec, nil, nil) + assert.Equal(t, tc.expectAllowPodLifecycleSleepActionZeroValue, gotOptions.AllowPodLifecycleSleepActionZeroValue, "AllowPodLifecycleSleepActionZeroValue") + }) + } +}