Skip to content

Commit

Permalink
Add an unsuccessful taskrun testcase in conformance tests
Browse files Browse the repository at this point in the history
  • Loading branch information
yaoxiaoqi committed Oct 26, 2020
1 parent 6dda667 commit f6eb8fb
Showing 1 changed file with 112 additions and 22 deletions.
134 changes: 112 additions & 22 deletions test/conformance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,17 @@ import (
"context"
"testing"

"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"knative.dev/pkg/apis"
knativetest "knative.dev/pkg/test"
)

type conditionFn func(name string) ConditionAccessorFn

func TestTaskRun(t *testing.T) {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
Expand All @@ -38,33 +42,119 @@ func TestTaskRun(t *testing.T) {
knativetest.CleanupOnInterrupt(func() { tearDown(ctx, t, c, namespace) }, t.Logf)
defer tearDown(ctx, t, c, namespace)

trName := "echo-hello-task-run"
tr := &v1beta1.TaskRun{
ObjectMeta: metav1.ObjectMeta{Name: trName, Namespace: namespace},
Spec: v1beta1.TaskRunSpec{
TaskSpec: &v1beta1.TaskSpec{
Steps: []v1beta1.Step{{Container: corev1.Container{
Image: "busybox",
Command: []string{"echo", "\"hello\""},
}}},
for _, tc := range []struct {
name string
trName string
tr *v1beta1.TaskRun
fn conditionFn
expectedConditionStatus corev1.ConditionStatus
expectedStepState []v1beta1.StepState
}{{
name: "successful-task-run",
trName: "echo-hello-task-run",
tr: &v1beta1.TaskRun{
ObjectMeta: metav1.ObjectMeta{Name: "echo-hello-task-run", Namespace: namespace},
Spec: v1beta1.TaskRunSpec{
TaskSpec: &v1beta1.TaskSpec{
Steps: []v1beta1.Step{{Container: corev1.Container{
Image: "busybox",
Command: []string{"echo", "\"hello\""},
}}},
},
},
},
}
fn: TaskRunSucceed,
expectedConditionStatus: corev1.ConditionTrue,
expectedStepState: []v1beta1.StepState{{
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
ExitCode: 0,
Reason: "Completed",
},
},
Name: "unnamed-0",
ContainerName: "step-unnamed-0",
}},
}, {
name: "failed-task-run",
trName: "failed-echo-hello-task-run",
tr: &v1beta1.TaskRun{
ObjectMeta: metav1.ObjectMeta{Name: "failed-echo-hello-task-run", Namespace: namespace},
Spec: v1beta1.TaskRunSpec{
TaskSpec: &v1beta1.TaskSpec{
Steps: []v1beta1.Step{{Container: corev1.Container{
Image: "busybox",
Command: []string{"/bin/sh"},
Args: []string{"-c", "echo hello"},
}}, {Container: corev1.Container{
Image: "busybox",
Command: []string{"/bin/sh"},
Args: []string{"-c", "exit 1"},
}}, {Container: corev1.Container{
Image: "busybox",
Command: []string{"/bin/sh"},
Args: []string{"-c", "sleep 30s"},
}}},
},
},
},
fn: TaskRunFailed,
expectedConditionStatus: corev1.ConditionFalse,
expectedStepState: []v1beta1.StepState{{
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
ExitCode: 0,
Reason: "Completed",
},
},
Name: "unnamed-0",
ContainerName: "step-unnamed-0",
}, {
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
ExitCode: 1,
Reason: "Error",
},
},
Name: "unnamed-1",
ContainerName: "step-unnamed-1",
}, {
ContainerState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
ExitCode: 1,
Reason: "Error",
},
},
Name: "unnamed-2",
ContainerName: "step-unnamed-2",
}},
}} {
t.Run(tc.name, func(t *testing.T) {
t.Logf("Creating TaskRun %s", tc.trName)
if _, err := c.TaskRunClient.Create(ctx, tc.tr, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create TaskRun `%s`: %s", tc.trName, err)
}

t.Logf("Creating TaskRun %s", trName)
if _, err := c.TaskRunClient.Create(ctx, tr, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create TaskRun `%s`: %s", trName, err)
}
if err := WaitForTaskRunState(ctx, c, tc.trName, tc.fn(tc.trName), "WaitTaskRunDone"); err != nil {
t.Errorf("Error waiting for TaskRun to finish: %s", err)
return
}
tr, err := c.TaskRunClient.Get(ctx, tc.trName, metav1.GetOptions{})
if err != nil {
t.Fatalf("Failed to get TaskRun `%s`: %s", tc.trName, err)
}
checkRequiredFieldsInTaskRun(t, tr, tc.expectedConditionStatus)

if err := WaitForTaskRunState(ctx, c, trName, TaskRunSucceed(trName), "WaitTaskRunDone"); err != nil {
t.Errorf("Error waiting for TaskRun to finish: %s", err)
return
}
tr, err := c.TaskRunClient.Get(ctx, trName, metav1.GetOptions{})
if err != nil {
t.Fatalf("Failed to get TaskRun `%s`: %s", trName, err)
ignoreTerminatedFields := cmpopts.IgnoreFields(corev1.ContainerStateTerminated{}, "StartedAt", "FinishedAt", "ContainerID")
ignoreStepFields := cmpopts.IgnoreFields(v1beta1.StepState{}, "ImageID")
if d := cmp.Diff(tr.Status.Steps, tc.expectedStepState, ignoreTerminatedFields, ignoreStepFields); d != "" {
t.Fatalf("-got, +want: %v", d)
}
})
}
}

func checkRequiredFieldsInTaskRun(t *testing.T, tr *v1beta1.TaskRun, cs corev1.ConditionStatus) {
// check required fields in TaskRun ObjectMeta
if tr.ObjectMeta.Name == "" {
t.Errorf("TaskRun ObjectMeta doesn't have the Name.")
Expand Down Expand Up @@ -97,7 +187,7 @@ func TestTaskRun(t *testing.T) {
if condition == nil {
t.Errorf("Expected a succeeded Condition but got nil.")
}
if condition.Status != corev1.ConditionTrue {
if condition.Status != cs {
t.Errorf("TaskRun Status Condition doesn't have the right Status.")
}
if condition.Reason == "" {
Expand Down

0 comments on commit f6eb8fb

Please sign in to comment.