diff --git a/pkg/reconciler/pipelinerun/pipelinerun_test.go b/pkg/reconciler/pipelinerun/pipelinerun_test.go index 41a6cf03d86..4bb17316c66 100644 --- a/pkg/reconciler/pipelinerun/pipelinerun_test.go +++ b/pkg/reconciler/pipelinerun/pipelinerun_test.go @@ -444,6 +444,9 @@ func TestReconcile_InvalidPipelineRuns(t *testing.T) { tb.PipelineParamSpec("some-param", v1beta1.ParamTypeString), tb.PipelineTask("some-task", "a-task-that-needs-params")), )), + tb.PipelineRun("pipeline-invalid-dag-graph", tb.PipelineRunNamespace("foo"), tb.PipelineRunSpec("", tb.PipelineRunPipelineSpec( + tb.PipelineTask("dag-task-1", "dag-task-1", tb.RunAfter("dag-task-1")), + ))), } d := test.Data{ Tasks: ts, @@ -505,6 +508,10 @@ func TestReconcile_InvalidPipelineRuns(t *testing.T) { name: "invalid-pipeline-run-missing-params-shd-stop-reconciling", pipelineRun: prs[11], reason: ReasonParameterMissing, + }, { + name: "invalid-pipeline-with-invalid-dag-graph", + pipelineRun: prs[12], + reason: ReasonInvalidGraph, }, } diff --git a/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go b/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go index 686b9dd2437..f93c3b668e7 100644 --- a/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go +++ b/pkg/reconciler/pipelinerun/resources/pipelinerunresolution_test.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "testing" + "time" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" @@ -1450,6 +1451,29 @@ func TestGetPipelineConditionStatus(t *testing.T) { } } +// pipeline should result in timeout if its runtime exceeds its spec.Timeout based on its status.Timeout +func TestGetPipelineConditionStatus_PipelineTimeouts(t *testing.T) { + d, err := DagFromState(oneFinishedState) + if err != nil { + t.Fatalf("Unexpected error while buildig DAG for state %v: %v", oneFinishedState, err) + } + pr := &v1beta1.PipelineRun{ + ObjectMeta: metav1.ObjectMeta{Name: "pipelinerun-no-tasks-started"}, + Spec: v1beta1.PipelineRunSpec{ + Timeout: &metav1.Duration{Duration: 1 * time.Minute}, + }, + Status: v1beta1.PipelineRunStatus{ + PipelineRunStatusFields: v1beta1.PipelineRunStatusFields{ + StartTime: &metav1.Time{Time: time.Now().Add(-2 * time.Minute)}, + }, + }, + } + c := GetPipelineConditionStatus(pr, oneFinishedState, zap.NewNop().Sugar(), d) + if c.Status != corev1.ConditionFalse && c.Reason != v1beta1.PipelineRunReasonTimedOut.String() { + t.Fatalf("Expected to get status %s but got %s for state %v", corev1.ConditionFalse, c.Status, oneFinishedState) + } +} + func TestGetResourcesFromBindings(t *testing.T) { pr := tb.PipelineRun("pipelinerun", tb.PipelineRunSpec("pipeline", tb.PipelineRunResourceBinding("git-resource", tb.PipelineResourceBindingRef("sweet-resource")),