Skip to content

Commit

Permalink
TEP-0114: Tests Wait Custom Task Retries and TimeOut
Browse files Browse the repository at this point in the history
Prior to this commit, we are not able to test cases where Custom Task
TimesOut or Retries is specified because we don't have a controller
ready. Now that we implemented the two functionalities in Wait Task
Custom Controller, we are able to write e2e tests to ensure the behavior
  • Loading branch information
XinruZhang committed Sep 19, 2022
1 parent 2272ded commit 29f0b5a
Showing 1 changed file with 94 additions and 6 deletions.
100 changes: 94 additions & 6 deletions test/custom_task_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -449,10 +449,13 @@ func TestWaitCustomTask_Run(t *testing.T) {
for _, tc := range []struct {
name string
duration string
timeout string
retries int
conditionAccessorFn func(string) ConditionAccessorFn
wantConditionType apis.ConditionType
wantConditionStatus corev1.ConditionStatus
wantConditionReason string
wantRetriesStatus string
}{{
name: "Wait Task Has Passed",
duration: "1s",
Expand All @@ -467,20 +470,52 @@ func TestWaitCustomTask_Run(t *testing.T) {
wantConditionType: apis.ConditionSucceeded,
wantConditionStatus: corev1.ConditionUnknown,
wantConditionReason: "Running",
}, {
name: "Wait Task Timed Out",
duration: "2s",
timeout: "1s",
conditionAccessorFn: Failed,
wantConditionType: apis.ConditionSucceeded,
wantConditionStatus: corev1.ConditionFalse,
wantConditionReason: "TimedOut",
}, {
name: "Wait Task Retries on Timed Out",
duration: "2s",
timeout: "1s",
retries: 2,
conditionAccessorFn: Failed,
wantConditionType: apis.ConditionSucceeded,
wantConditionStatus: corev1.ConditionFalse,
wantConditionReason: "TimedOut",
wantRetriesStatus: `
retriesStatus:
- observedGeneration: 1
conditions:
- reason: TimedOut
status: "False"
type: Succeeded
- observedGeneration: 1
conditions:
- reason: TimedOut
status: "False"
type: Succeeded
`,
}} {
t.Run(tc.name, func(t *testing.T) {
runName := helpers.ObjectNameForTest(t)
run := parse.MustParseRun(t, fmt.Sprintf(`
metadata:
name: %s
spec:
timeout: %s
retries: %v
ref:
apiVersion: %s
kind: %s
params:
- name: duration
value: %s
`, runName, apiVersion, kind, tc.duration))
`, runName, tc.timeout, tc.retries, apiVersion, kind, tc.duration))
if _, err := c.RunClient.Create(ctx, run, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create TaskRun %q: %v", runName, err)
}
Expand All @@ -507,6 +542,8 @@ metadata:
name: %s
namespace: %s
spec:
timeout: %s
retries: %v
ref:
apiVersion: %s
kind: %s
Expand All @@ -520,7 +557,10 @@ status:
status: %q
type: %s
observedGeneration: 1
`, runName, namespace, apiVersion, kind, tc.duration, tc.wantConditionReason, tc.wantConditionStatus, tc.wantConditionType)
`, runName, namespace, tc.timeout, tc.retries, apiVersion, kind, tc.duration, tc.wantConditionReason, tc.wantConditionStatus, tc.wantConditionType)
if tc.wantRetriesStatus != "" {
runYAML += tc.wantRetriesStatus
}
wantRun := parse.MustParseRun(t, runYAML)
if d := cmp.Diff(wantRun, gotRun,
filterTypeMeta,
Expand Down Expand Up @@ -552,6 +592,8 @@ func TestWaitCustomTask_PipelineRun(t *testing.T) {
for _, tc := range []struct {
name string
runDuration string
runTimeout string
runRetries int
prTimeout string
prConditionAccessorFn func(string) ConditionAccessorFn
wantPrConditionType apis.ConditionType
Expand All @@ -561,6 +603,7 @@ func TestWaitCustomTask_PipelineRun(t *testing.T) {
wantRunConditionStatus corev1.ConditionStatus
wantRunConditionReason string
wantRunObservedGeneration int
wantRetriesStatus string
}{{
name: "Wait Task Has Succeeded",
runDuration: "1s",
Expand Down Expand Up @@ -594,25 +637,62 @@ func TestWaitCustomTask_PipelineRun(t *testing.T) {
wantPrConditionStatus: corev1.ConditionFalse,
wantPrConditionReason: "PipelineRunTimeout",
wantRunConditionType: apis.ConditionSucceeded,
wantRunConditionStatus: corev1.ConditionUnknown,
wantRunConditionReason: "NewObservedGenFailure",
wantRunConditionStatus: corev1.ConditionFalse,
wantRunConditionReason: "Cancelled",
wantRunObservedGeneration: 2,
}} {
}, {
name: "Wait Task Failed on Timeout",
runDuration: "2s",
runTimeout: "1s",
prConditionAccessorFn: Failed,
wantPrConditionType: apis.ConditionSucceeded,
wantPrConditionStatus: corev1.ConditionFalse,
wantPrConditionReason: "Failed",
wantRunConditionType: apis.ConditionSucceeded,
wantRunConditionStatus: corev1.ConditionFalse,
wantRunConditionReason: "TimedOut",
wantRunObservedGeneration: 1,
}, {
name: "Wait Task Retries on Timeout",
runDuration: "2s",
runTimeout: "1s",
runRetries: 1,
prConditionAccessorFn: Failed,
wantPrConditionType: apis.ConditionSucceeded,
wantPrConditionStatus: corev1.ConditionFalse,
wantPrConditionReason: "Failed",
wantRunConditionType: apis.ConditionSucceeded,
wantRunConditionStatus: corev1.ConditionFalse,
wantRunConditionReason: "TimedOut",
wantRunObservedGeneration: 1,
wantRetriesStatus: `
retriesStatus:
- observedGeneration: 1
conditions:
- reason: TimedOut
status: "False"
type: Succeeded
`}} {
t.Run(tc.name, func(t *testing.T) {
if tc.prTimeout == "" {
tc.prTimeout = "1h"
}
pipeline := parse.MustParsePipeline(t, fmt.Sprintf(`
metadata:
name: %s
namespace: %s
spec:
tasks:
- name: wait
timeout: %s
retries: %v
taskRef:
apiVersion: %s
kind: %s
params:
- name: duration
value: %s
`, helpers.ObjectNameForTest(t), namespace, apiVersion, kind, tc.runDuration))
`, helpers.ObjectNameForTest(t), namespace, tc.runTimeout, tc.runRetries, apiVersion, kind, tc.runDuration))
pipelineRun := parse.MustParsePipelineRun(t, fmt.Sprintf(`
metadata:
name: %s
Expand Down Expand Up @@ -661,6 +741,9 @@ spec:
type: %s
observedGeneration: %v
`, runName, tc.wantRunConditionReason, tc.wantRunConditionStatus, tc.wantRunConditionType, tc.wantRunObservedGeneration)
if tc.wantRetriesStatus != "" {
runsStatus += tc.wantRetriesStatus
}
}
}
if embeddedStatusValue != config.FullEmbeddedStatus {
Expand All @@ -676,6 +759,7 @@ spec:
pipelineTaskName: "wait"
`, runName)
}

// Get the Run.
_, err = c.RunClient.Get(ctx, runName, metav1.GetOptions{})
if err != nil {
Expand Down Expand Up @@ -704,6 +788,8 @@ status:
pipelineSpec:
tasks:
- name: wait
timeout: %s
retries: %v
taskRef:
apiVersion: %s
kind: %s
Expand All @@ -720,6 +806,8 @@ status:
tc.wantPrConditionType,
runsStatus,
childStatusReferences,
tc.runTimeout,
tc.runRetries,
apiVersion,
kind,
tc.runDuration,
Expand Down

0 comments on commit 29f0b5a

Please sign in to comment.