Skip to content

Commit

Permalink
Add tests for updating taskrun state w/ conditionCheck statuses
Browse files Browse the repository at this point in the history
  • Loading branch information
dibyom committed Jul 1, 2019
1 parent fcaa33d commit 00c4ced
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 1 deletion.
1 change: 0 additions & 1 deletion pkg/reconciler/v1alpha1/pipelinerun/pipelinerun.go
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,6 @@ func updateTaskRunsStatus(pr *v1alpha1.PipelineRun, pipelineState []*resources.R
if rprt.ResolvedConditionChecks.IsComplete() && !rprt.ResolvedConditionChecks.IsSuccess() {
if prtrs.Status == nil {
prtrs.Status = &v1alpha1.TaskRunStatus{}
prtrs.Status.InitializeConditions()
}
prtrs.Status.SetCondition(&apis.Condition{
Type: apis.ConditionSucceeded,
Expand Down
170 changes: 170 additions & 0 deletions pkg/reconciler/v1alpha1/pipelinerun/pipelinerun_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,172 @@ func TestUpdateTaskRunsState(t *testing.T) {

}

func TestUpdateTaskRunState_WithPassingConditionChecks(t *testing.T) {
pr := tb.PipelineRun("test-pipeline-run", "foo", tb.PipelineRunSpec("test-pipeline"))

cond := v1alpha1.Condition{
ObjectMeta: metav1.ObjectMeta{
Name: "always-true",
},
Spec: v1alpha1.ConditionSpec{
Check: corev1.Container{},
},
}

taskCondition := v1alpha1.TaskCondition{
ConditionRef: "always-true",
}

pipelineTask := v1alpha1.PipelineTask{
Name: "unit-test-1",
TaskRef: v1alpha1.TaskRef{Name: "unit-test-task"},
Conditions: []v1alpha1.TaskCondition{taskCondition},
}

conditioncheck := tb.TaskRun("test-pipeline-run-success-unit-test-1-always-true", "foo", tb.TaskRunSpec(
tb.TaskRunTaskSpec(tb.TaskContainerTemplate()),
), tb.TaskRunStatus(
tb.Condition(apis.Condition{
Type: apis.ConditionSucceeded,
Status: corev1.ConditionTrue,
}),
tb.StepState(tb.StateTerminated(0)),
))

expectedConditionCheckStatus := make(map[string]*v1alpha1.PipelineRunConditionCheckStatus)
expectedConditionCheckStatus[conditioncheck.Name] = &v1alpha1.PipelineRunConditionCheckStatus{
ConditionName: cond.Name,
Status: &v1alpha1.TaskRunStatus{
Steps: []v1alpha1.StepState{{
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{ExitCode: 0},
},
}},
Status: duckv1beta1.Status{
Conditions: []apis.Condition{{Type: apis.ConditionSucceeded, Status: corev1.ConditionTrue}},
},
},
}

expectedTaskRunsStatus := make(map[string]*v1alpha1.PipelineRunTaskRunStatus)
expectedTaskRunsStatus["test-pipeline-run-success-unit-test-1"] = &v1alpha1.PipelineRunTaskRunStatus{
PipelineTaskName: "unit-test-1",
ConditionChecks: expectedConditionCheckStatus,
}
expectedPipelineRunStatus := v1alpha1.PipelineRunStatus{
TaskRuns: expectedTaskRunsStatus,
}

state := []*resources.ResolvedPipelineRunTask{{
PipelineTask: &pipelineTask,
TaskRunName: "test-pipeline-run-success-unit-test-1",
TaskRun: nil,
ResolvedTaskResources: &taskrunresources.ResolvedTaskResources{
TaskSpec: &v1alpha1.TaskSpec{},
},
ResolvedConditionChecks: resources.TaskConditionCheckState{
{
ConditionCheckName: "test-pipeline-run-success-unit-test-1-always-true",
Condition: &cond,
ConditionCheck: conditioncheck,
},
},
}}
pr.Status.InitializeConditions()
updateTaskRunsStatus(pr, state)
if d := cmp.Diff(pr.Status.TaskRuns, expectedPipelineRunStatus.TaskRuns); d != "" {
t.Fatalf("Expected PipelineRun status to match ConditionCheck(s) status, but got a mismatch: %s", d)
}
}

func TestUpdateTaskRunState_WithFailingConditionChecks(t *testing.T) {
pr := tb.PipelineRun("test-pipeline-run", "foo", tb.PipelineRunSpec("test-pipeline"))

cond := v1alpha1.Condition{
ObjectMeta: metav1.ObjectMeta{
Name: "always-true",
},
Spec: v1alpha1.ConditionSpec{
Check: corev1.Container{},
},
}

taskCondition := v1alpha1.TaskCondition{
ConditionRef: "always-true",
}

pipelineTask := v1alpha1.PipelineTask{
Name: "unit-test-1",
TaskRef: v1alpha1.TaskRef{Name: "unit-test-task"},
Conditions: []v1alpha1.TaskCondition{taskCondition},
}

taskrunName := "test-pipeline-run-success-unit-test-1"
conditioncheck := tb.TaskRun("test-pipeline-run-success-unit-test-1-always-true", "foo", tb.TaskRunSpec(
tb.TaskRunTaskSpec(tb.TaskContainerTemplate()),
), tb.TaskRunStatus(
tb.Condition(apis.Condition{
Type: apis.ConditionSucceeded,
Status: corev1.ConditionFalse,
}),
tb.StepState(tb.StateTerminated(127)),
))

expectedConditionCheckStatus := make(map[string]*v1alpha1.PipelineRunConditionCheckStatus)
expectedConditionCheckStatus[conditioncheck.Name] = &v1alpha1.PipelineRunConditionCheckStatus{
ConditionName: cond.Name,
Status: &v1alpha1.TaskRunStatus{
Steps: []v1alpha1.StepState{{
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{ExitCode: 127},
},
}},
Status: duckv1beta1.Status{
Conditions: []apis.Condition{{Type: apis.ConditionSucceeded, Status: corev1.ConditionFalse}},
},
},
}

expectedTaskRunsStatus := make(map[string]*v1alpha1.PipelineRunTaskRunStatus)
expectedTaskRunsStatus["test-pipeline-run-success-unit-test-1"] = &v1alpha1.PipelineRunTaskRunStatus{
PipelineTaskName: "unit-test-1",
ConditionChecks: expectedConditionCheckStatus,
Status: &v1alpha1.TaskRunStatus{
Status: duckv1beta1.Status{
Conditions: []apis.Condition{{
Type: apis.ConditionSucceeded,
Status: corev1.ConditionFalse,
Reason: resources.ReasonConditionCheckFailed,
Message: fmt.Sprintf("ConditionChecks failed for Task %s in PipelineRun %s", taskrunName, pr.Name),
}},
},
},
}
expectedPipelineRunStatus := v1alpha1.PipelineRunStatus{
TaskRuns: expectedTaskRunsStatus,
}

state := []*resources.ResolvedPipelineRunTask{{
PipelineTask: &pipelineTask,
TaskRunName: taskrunName,
TaskRun: nil,
ResolvedTaskResources: &taskrunresources.ResolvedTaskResources{
TaskSpec: &v1alpha1.TaskSpec{},
},
ResolvedConditionChecks: resources.TaskConditionCheckState{{
ConditionCheckName: "test-pipeline-run-success-unit-test-1-always-true",
Condition: &cond,
ConditionCheck: conditioncheck,
}},
}}
pr.Status.InitializeConditions()
updateTaskRunsStatus(pr, state)
ignoreLastTransitionTime := cmpopts.IgnoreTypes(apis.Condition{}.LastTransitionTime.Inner.Time)
if d := cmp.Diff(pr.Status.TaskRuns, expectedPipelineRunStatus.TaskRuns, ignoreLastTransitionTime); d != "" {
t.Fatalf("Expected PipelineRun status to match ConditionCheck(s) status, but got a mismatch: %s", d)
}
}

func TestReconcileOnCompletedPipelineRun(t *testing.T) {
prtrs := make(map[string]*v1alpha1.PipelineRunTaskRunStatus)
taskRunName := "test-pipeline-run-completed-hello-world"
Expand Down Expand Up @@ -1123,3 +1289,7 @@ func TestReconcilePropagateAnnotations(t *testing.T) {
t.Errorf("expected to see TaskRun %v created. Diff %s", expectedTaskRun, d)
}
}

func TestReconcileWithConditionChecks(t *testing.T) {}

func TestReconcileWithFailedConditionChecks(t *testing.T) {}

0 comments on commit 00c4ced

Please sign in to comment.