Skip to content

Commit 969f5d3

Browse files
ralphbeantekton-robot
authored andcommitted
Handle error conditions in CheckMissingResultReferences
Before this change, it was possible for a PipelineRun to exist which would cause the controller to crashloop.
1 parent c2dc17a commit 969f5d3

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

pkg/reconciler/pipelinerun/resources/pipelinerunresolution.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,14 +797,23 @@ func isCustomRunCancelledByPipelineRunTimeout(cr *v1beta1.CustomRun) bool {
797797
func CheckMissingResultReferences(pipelineRunState PipelineRunState, targets PipelineRunState) error {
798798
for _, target := range targets {
799799
for _, resultRef := range v1.PipelineTaskResultRefs(target.PipelineTask) {
800-
referencedPipelineTask := pipelineRunState.ToMap()[resultRef.PipelineTask]
800+
referencedPipelineTask, ok := pipelineRunState.ToMap()[resultRef.PipelineTask]
801+
if !ok {
802+
return fmt.Errorf("Result reference error: Could not find ref \"%s\" in internal pipelineRunState", resultRef.PipelineTask)
803+
}
801804
if referencedPipelineTask.IsCustomTask() {
805+
if len(referencedPipelineTask.CustomRuns) == 0 {
806+
return fmt.Errorf("Result reference error: Internal result ref \"%s\" has zero-length CustomRuns", resultRef.PipelineTask)
807+
}
802808
customRun := referencedPipelineTask.CustomRuns[0]
803809
_, err := findRunResultForParam(customRun, resultRef)
804810
if err != nil {
805811
return err
806812
}
807813
} else {
814+
if len(referencedPipelineTask.TaskRuns) == 0 {
815+
return fmt.Errorf("Result reference error: Internal result ref \"%s\" has zero-length TaskRuns", resultRef.PipelineTask)
816+
}
808817
taskRun := referencedPipelineTask.TaskRuns[0]
809818
_, err := findTaskResultForParam(taskRun, resultRef)
810819
if err != nil {

pkg/reconciler/pipelinerun/resources/resultrefresolution_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,28 @@ var pipelineRunState = PipelineRunState{{
341341
Value: *v1.NewStructuredValues("$(tasks.kTask.results.I-DO-NOT-EXIST)[*]"),
342342
}},
343343
},
344+
}, {
345+
TaskRunNames: []string{"lTaskRun"},
346+
TaskRuns: []*v1.TaskRun{},
347+
PipelineTask: &v1.PipelineTask{
348+
Name: "lTask",
349+
TaskRef: &v1.TaskRef{Name: "lTask"},
350+
Params: []v1.Param{{
351+
Name: "jParam",
352+
Value: *v1.NewStructuredValues("$(tasks.does-not-exist.results.some-result)"),
353+
}},
354+
},
355+
}, {
356+
TaskRunNames: []string{"mTaskRun"},
357+
TaskRuns: []*v1.TaskRun{},
358+
PipelineTask: &v1.PipelineTask{
359+
Name: "mTask",
360+
TaskRef: &v1.TaskRef{Name: "mTask"},
361+
Params: []v1.Param{{
362+
Name: "mParam",
363+
Value: *v1.NewStructuredValues("$(tasks.lTask.results.aResult)"),
364+
}},
365+
},
344366
}}
345367

346368
func TestResolveResultRefs(t *testing.T) {
@@ -724,6 +746,20 @@ func TestCheckMissingResultReferences(t *testing.T) {
724746
pipelineRunState[14],
725747
},
726748
wantErr: "Invalid task result reference: Could not find result with name iDoNotExist for task aCustomPipelineTask",
749+
}, {
750+
name: "Invalid: Test result references where ref does not exist in pipelineRunState map",
751+
pipelineRunState: pipelineRunState,
752+
targets: PipelineRunState{
753+
pipelineRunState[18],
754+
},
755+
wantErr: "Result reference error: Could not find ref \"does-not-exist\" in internal pipelineRunState",
756+
}, {
757+
name: "Invalid: Test result references where referencedPipelineTask has no TaskRuns",
758+
pipelineRunState: pipelineRunState,
759+
targets: PipelineRunState{
760+
pipelineRunState[19],
761+
},
762+
wantErr: "Result reference error: Internal result ref \"lTask\" has zero-length TaskRuns",
727763
}} {
728764
t.Run(tt.name, func(t *testing.T) {
729765
err := CheckMissingResultReferences(tt.pipelineRunState, tt.targets)

0 commit comments

Comments
 (0)