From d96567e28aca8b9dc18c7a3fe3c2bfeb52a0a106 Mon Sep 17 00:00:00 2001 From: myx Date: Fri, 5 Apr 2024 01:31:24 -0700 Subject: [PATCH] validate TaskRun retries in TestRunSpec is greater than or equal to zero --- pkg/apis/pipeline/v1/taskrun_validation.go | 4 +++- .../pipeline/v1/taskrun_validation_test.go | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pkg/apis/pipeline/v1/taskrun_validation.go b/pkg/apis/pipeline/v1/taskrun_validation.go index e9bf1c17f6e..3a75e1e20ef 100644 --- a/pkg/apis/pipeline/v1/taskrun_validation.go +++ b/pkg/apis/pipeline/v1/taskrun_validation.go @@ -96,7 +96,9 @@ func (ts *TaskRunSpec) Validate(ctx context.Context) (errs *apis.FieldError) { errs = errs.Also(apis.ErrInvalidValue(fmt.Sprintf("statusMessage should not be set if status is not set, but it is currently set to %s", ts.StatusMessage), "statusMessage")) } } - + if ts.Retries < 0 { + errs = errs.Also(apis.ErrInvalidValue(fmt.Sprintf("%d should be >= 0", ts.Retries), "retries")) + } if ts.Timeout != nil { // timeout should be a valid duration of at least 0. if ts.Timeout.Duration < 0 { diff --git a/pkg/apis/pipeline/v1/taskrun_validation_test.go b/pkg/apis/pipeline/v1/taskrun_validation_test.go index e418256c042..01fb479a658 100644 --- a/pkg/apis/pipeline/v1/taskrun_validation_test.go +++ b/pkg/apis/pipeline/v1/taskrun_validation_test.go @@ -558,6 +558,15 @@ func TestTaskRunSpec_Invalidate(t *testing.T) { Timeout: &metav1.Duration{Duration: -48 * time.Hour}, }, wantErr: apis.ErrInvalidValue("-48h0m0s should be >= 0", "timeout"), + }, { + name: "negative pipeline retries", + spec: v1.TaskRunSpec{ + TaskRef: &v1.TaskRef{ + Name: "taskrefname", + }, + Retries: -3, + }, + wantErr: apis.ErrInvalidValue("-3 should be >= 0", "retries"), }, { name: "wrong taskrun cancel", spec: v1.TaskRunSpec{ @@ -828,6 +837,18 @@ func TestTaskRunSpec_Validate(t *testing.T) { }}, }, }, + }, { + name: "with positive retries", + spec: v1.TaskRunSpec{ + Timeout: &metav1.Duration{Duration: 0}, + Retries: 3, + TaskSpec: &v1.TaskSpec{ + Steps: []v1.Step{{ + Name: "mystep", + Image: "myimage", + }}, + }, + }, }, { name: "parameters", spec: v1.TaskRunSpec{