mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Merge pull request #125429 from tenzen-y/gurad-success-policy-by-feature-gate
Job: Fix a bug that the SuccessCriteriaMet could be added to the Job with successPolicy regardless of the featureGate enabling
This commit is contained in:
commit
02013fd127
@ -4531,6 +4531,37 @@ func TestSyncJobWithJobSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"when the JobSuccessPolicy is disabled, the Job never got SuccessCriteriaMet condition even if the Job has the successPolicy field": {
|
||||||
|
job: batch.Job{
|
||||||
|
TypeMeta: validTypeMeta,
|
||||||
|
ObjectMeta: validObjectMeta,
|
||||||
|
Spec: batch.JobSpec{
|
||||||
|
Selector: validSelector,
|
||||||
|
Template: validTemplate,
|
||||||
|
CompletionMode: completionModePtr(batch.IndexedCompletion),
|
||||||
|
Parallelism: ptr.To[int32](3),
|
||||||
|
Completions: ptr.To[int32](3),
|
||||||
|
BackoffLimit: ptr.To[int32](math.MaxInt32),
|
||||||
|
SuccessPolicy: &batch.SuccessPolicy{
|
||||||
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
|
SucceededIndexes: ptr.To("0,1"),
|
||||||
|
SucceededCount: ptr.To[int32](1),
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pods: []v1.Pod{
|
||||||
|
*buildPod().uid("a2").index("0").phase(v1.PodRunning).trackingFinalizer().Pod,
|
||||||
|
*buildPod().uid("b").index("1").phase(v1.PodSucceeded).trackingFinalizer().Pod,
|
||||||
|
*buildPod().uid("c").index("2").phase(v1.PodRunning).trackingFinalizer().Pod,
|
||||||
|
},
|
||||||
|
wantStatus: batch.JobStatus{
|
||||||
|
Active: 2,
|
||||||
|
Succeeded: 1,
|
||||||
|
CompletedIndexes: "1",
|
||||||
|
UncountedTerminatedPods: &batch.UncountedTerminatedPods{},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for name, tc := range testCases {
|
for name, tc := range testCases {
|
||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func matchSuccessPolicy(logger klog.Logger, successPolicy *batch.SuccessPolicy, completions int32, succeededIndexes orderedIntervals) (string, bool) {
|
func matchSuccessPolicy(logger klog.Logger, successPolicy *batch.SuccessPolicy, completions int32, succeededIndexes orderedIntervals) (string, bool) {
|
||||||
if successPolicy == nil || len(succeededIndexes) == 0 {
|
if !feature.DefaultFeatureGate.Enabled(features.JobSuccessPolicy) || successPolicy == nil || len(succeededIndexes) == 0 {
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,30 +21,41 @@ import (
|
|||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
batch "k8s.io/api/batch/v1"
|
batch "k8s.io/api/batch/v1"
|
||||||
|
"k8s.io/apiserver/pkg/util/feature"
|
||||||
|
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||||
"k8s.io/klog/v2/ktesting"
|
"k8s.io/klog/v2/ktesting"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/utils/ptr"
|
"k8s.io/utils/ptr"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMatchSuccessPolicy(t *testing.T) {
|
func TestMatchSuccessPolicy(t *testing.T) {
|
||||||
testCases := map[string]struct {
|
testCases := map[string]struct {
|
||||||
successPolicy *batch.SuccessPolicy
|
successPolicy *batch.SuccessPolicy
|
||||||
completions int32
|
completions int32
|
||||||
succeededIndexes orderedIntervals
|
succeededIndexes orderedIntervals
|
||||||
wantMessage string
|
wantMessage string
|
||||||
wantMetSuccessPolicy bool
|
wantMetSuccessPolicy bool
|
||||||
|
enableJobSuccessPolicy bool
|
||||||
}{
|
}{
|
||||||
"successPolicy is null": {
|
"JobSuccessPolicy is disabled": {
|
||||||
completions: 10,
|
completions: 10,
|
||||||
succeededIndexes: orderedIntervals{{0, 0}},
|
succeededIndexes: orderedIntervals{{0, 0}},
|
||||||
},
|
},
|
||||||
|
"successPolicy is null": {
|
||||||
|
enableJobSuccessPolicy: true,
|
||||||
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 0}},
|
||||||
|
},
|
||||||
"any rules are nothing": {
|
"any rules are nothing": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 0}},
|
completions: 10,
|
||||||
successPolicy: &batch.SuccessPolicy{Rules: []batch.SuccessPolicyRule{}},
|
succeededIndexes: orderedIntervals{{0, 0}},
|
||||||
|
successPolicy: &batch.SuccessPolicy{Rules: []batch.SuccessPolicyRule{}},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is invalid format": {
|
"rules.succeededIndexes is invalid format": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 0}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 0}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("invalid-form"),
|
SucceededIndexes: ptr.To("invalid-form"),
|
||||||
@ -52,8 +63,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes matched rules": {
|
"rules.succeededIndexes is specified; succeededIndexes matched rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-2"),
|
SucceededIndexes: ptr.To("0-2"),
|
||||||
@ -63,8 +75,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMetSuccessPolicy: true,
|
wantMetSuccessPolicy: true,
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("3"),
|
SucceededIndexes: ptr.To("3"),
|
||||||
@ -72,8 +85,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededCount is specified; succeededIndexes matched rules": {
|
"rules.succeededCount is specified; succeededIndexes matched rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededCount: ptr.To[int32](2),
|
SucceededCount: ptr.To[int32](2),
|
||||||
@ -83,8 +97,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMetSuccessPolicy: true,
|
wantMetSuccessPolicy: true,
|
||||||
},
|
},
|
||||||
"rules.succeededCount is specified; succeededIndexes didn't match rules": {
|
"rules.succeededCount is specified; succeededIndexes didn't match rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededCount: ptr.To[int32](4),
|
SucceededCount: ptr.To[int32](4),
|
||||||
@ -92,8 +107,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"multiple rules; rules.succeededIndexes is specified; succeededIndexes met one of rules": {
|
"multiple rules; rules.succeededIndexes is specified; succeededIndexes met one of rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{
|
Rules: []batch.SuccessPolicyRule{
|
||||||
{
|
{
|
||||||
@ -108,8 +124,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMetSuccessPolicy: true,
|
wantMetSuccessPolicy: true,
|
||||||
},
|
},
|
||||||
"multiple rules; rules.succeededIndexes is specified; succeededIndexes met all rules": {
|
"multiple rules; rules.succeededIndexes is specified; succeededIndexes met all rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{
|
Rules: []batch.SuccessPolicyRule{
|
||||||
{
|
{
|
||||||
@ -124,8 +141,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMetSuccessPolicy: true,
|
wantMetSuccessPolicy: true,
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes met all rules": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes met all rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}, {4, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("3-6"),
|
SucceededIndexes: ptr.To("3-6"),
|
||||||
@ -136,8 +154,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes didn't match rules": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes didn't match rules": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{0, 2}, {6, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{0, 2}, {6, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("3-6"),
|
SucceededIndexes: ptr.To("3-6"),
|
||||||
@ -156,8 +175,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
"rules.succeededIndexes is specified; succeededIndexes matched rules; rules is proper subset of succeededIndexes": {
|
"rules.succeededIndexes is specified; succeededIndexes matched rules; rules is proper subset of succeededIndexes": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 5}, {6, 9}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 5}, {6, 9}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("2-4,6-8"),
|
SucceededIndexes: ptr.To("2-4,6-8"),
|
||||||
@ -167,8 +187,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes matched rules; rules equals succeededIndexes": {
|
"rules.succeededIndexes is specified; succeededIndexes matched rules; rules equals succeededIndexes": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{2, 4}, {6, 9}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{2, 4}, {6, 9}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("2-4,6-9"),
|
SucceededIndexes: ptr.To("2-4,6-9"),
|
||||||
@ -178,8 +199,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes matched rules; rules is subset of succeededIndexes": {
|
"rules.succeededIndexes is specified; succeededIndexes matched rules; rules is subset of succeededIndexes": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{2, 5}, {7, 15}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{2, 5}, {7, 15}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("2-4,8-12"),
|
SucceededIndexes: ptr.To("2-4,8-12"),
|
||||||
@ -189,8 +211,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules is an empty set": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules is an empty set": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To(""),
|
SucceededIndexes: ptr.To(""),
|
||||||
@ -198,8 +221,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; succeededIndexes is an empty set": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; succeededIndexes is an empty set": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To(""),
|
SucceededIndexes: ptr.To(""),
|
||||||
@ -207,8 +231,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules and succeededIndexes are empty set": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules and succeededIndexes are empty set": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To(""),
|
SucceededIndexes: ptr.To(""),
|
||||||
@ -216,8 +241,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; all elements of rules.succeededIndexes aren't included in succeededIndexes": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; all elements of rules.succeededIndexes aren't included in succeededIndexes": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {5, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {5, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("10-12,14-16"),
|
SucceededIndexes: ptr.To("10-12,14-16"),
|
||||||
@ -225,8 +251,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps succeededIndexes at first": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps succeededIndexes at first": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{2, 4}, {6, 8}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{2, 4}, {6, 8}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("1-3,5-7"),
|
SucceededIndexes: ptr.To("1-3,5-7"),
|
||||||
@ -234,8 +261,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps succeededIndexes at first": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps succeededIndexes at first": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{2, 4}, {6, 8}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{2, 4}, {6, 8}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("1-3,5-7"),
|
SucceededIndexes: ptr.To("1-3,5-7"),
|
||||||
@ -246,8 +274,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps succeededIndexes at last": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps succeededIndexes at last": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {5, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {5, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("2-4,6-9"),
|
SucceededIndexes: ptr.To("2-4,6-9"),
|
||||||
@ -255,8 +284,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps succeededIndexes at last": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps succeededIndexes at last": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {5, 7}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {5, 7}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("2-4,6-9"),
|
SucceededIndexes: ptr.To("2-4,6-9"),
|
||||||
@ -267,8 +297,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules completely overlaps succeededIndexes": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules completely overlaps succeededIndexes": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {7, 8}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {7, 8}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-4,6-9"),
|
SucceededIndexes: ptr.To("0-4,6-9"),
|
||||||
@ -276,8 +307,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules completely overlaps succeededIndexes": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules completely overlaps succeededIndexes": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {7, 8}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {7, 8}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-4,6-9"),
|
SucceededIndexes: ptr.To("0-4,6-9"),
|
||||||
@ -288,8 +320,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps multiple succeededIndexes at last": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps multiple succeededIndexes at last": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {5, 9}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {5, 9}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-6,8-9"),
|
SucceededIndexes: ptr.To("0-6,8-9"),
|
||||||
@ -297,8 +330,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps multiple succeededIndexes at last": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps multiple succeededIndexes at last": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 3}, {5, 9}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 3}, {5, 9}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-6,8-9"),
|
SucceededIndexes: ptr.To("0-6,8-9"),
|
||||||
@ -309,8 +343,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps succeededIndexes at first, and rules equals succeededIndexes at last": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; rules overlaps succeededIndexes at first, and rules equals succeededIndexes at last": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 5}, {7, 10}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 5}, {7, 10}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-5,7-9"),
|
SucceededIndexes: ptr.To("0-5,7-9"),
|
||||||
@ -318,8 +353,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps succeededIndexes at first, and rules equals succeededIndexes at last": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; rules overlaps succeededIndexes at first, and rules equals succeededIndexes at last": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 5}, {7, 10}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 5}, {7, 10}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-5,7-9"),
|
SucceededIndexes: ptr.To("0-5,7-9"),
|
||||||
@ -330,8 +366,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
wantMessage: "Matched rules at index 0",
|
wantMessage: "Matched rules at index 0",
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; the first rules overlaps succeededIndexes at first": {
|
"rules.succeededIndexes is specified; succeededIndexes didn't match rules; the first rules overlaps succeededIndexes at first": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 10}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 10}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-3,6-9"),
|
SucceededIndexes: ptr.To("0-3,6-9"),
|
||||||
@ -339,8 +376,9 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; the first rules overlaps succeededIndexes at first": {
|
"rules.succeededIndexes and rules.succeededCount are specified; succeededIndexes matched rules; the first rules overlaps succeededIndexes at first": {
|
||||||
completions: 10,
|
enableJobSuccessPolicy: true,
|
||||||
succeededIndexes: orderedIntervals{{1, 10}},
|
completions: 10,
|
||||||
|
succeededIndexes: orderedIntervals{{1, 10}},
|
||||||
successPolicy: &batch.SuccessPolicy{
|
successPolicy: &batch.SuccessPolicy{
|
||||||
Rules: []batch.SuccessPolicyRule{{
|
Rules: []batch.SuccessPolicyRule{{
|
||||||
SucceededIndexes: ptr.To("0-3,6-9"),
|
SucceededIndexes: ptr.To("0-3,6-9"),
|
||||||
@ -353,6 +391,7 @@ func TestMatchSuccessPolicy(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for name, tc := range testCases {
|
for name, tc := range testCases {
|
||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
|
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobSuccessPolicy, tc.enableJobSuccessPolicy)
|
||||||
logger := ktesting.NewLogger(t,
|
logger := ktesting.NewLogger(t,
|
||||||
ktesting.NewConfig(
|
ktesting.NewConfig(
|
||||||
ktesting.BufferLogs(true),
|
ktesting.BufferLogs(true),
|
||||||
|
Loading…
Reference in New Issue
Block a user