Skip to content

Commit c4d947b

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 c1bbe00 commit c4d947b

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
@@ -780,14 +780,23 @@ func isCustomRunCancelledByPipelineRunTimeout(cr *v1beta1.CustomRun) bool {
780780
func CheckMissingResultReferences(pipelineRunState PipelineRunState, targets PipelineRunState) error {
781781
for _, target := range targets {
782782
for _, resultRef := range v1.PipelineTaskResultRefs(target.PipelineTask) {
783-
referencedPipelineTask := pipelineRunState.ToMap()[resultRef.PipelineTask]
783+
referencedPipelineTask, ok := pipelineRunState.ToMap()[resultRef.PipelineTask]
784+
if !ok {
785+
return fmt.Errorf("Result reference error: Could not find ref \"%s\" in internal pipelineRunState", resultRef.PipelineTask)
786+
}
784787
if referencedPipelineTask.IsCustomTask() {
788+
if len(referencedPipelineTask.CustomRuns) == 0 {
789+
return fmt.Errorf("Result reference error: Internal result ref \"%s\" has zero-length CustomRuns", resultRef.PipelineTask)
790+
}
785791
customRun := referencedPipelineTask.CustomRuns[0]
786792
_, err := findRunResultForParam(customRun, resultRef)
787793
if err != nil {
788794
return err
789795
}
790796
} else {
797+
if len(referencedPipelineTask.TaskRuns) == 0 {
798+
return fmt.Errorf("Result reference error: Internal result ref \"%s\" has zero-length TaskRuns", resultRef.PipelineTask)
799+
}
791800
taskRun := referencedPipelineTask.TaskRuns[0]
792801
_, err := findTaskResultForParam(taskRun, resultRef)
793802
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)