Skip to content

Commit fa3ed07

Browse files
committed
Support defer: for deferring steps in a runbook
1 parent ea242a3 commit fa3ed07

9 files changed

+241
-44
lines changed

defer.go

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package runn
2+
3+
const deferSectionKey = "defer"

defer_test.go

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package runn
2+
3+
import (
4+
"context"
5+
"testing"
6+
)
7+
8+
func TestDeferRun(t *testing.T) {
9+
book := "testdata/book/defer.yml"
10+
ctx := context.Background()
11+
o, err := New(Book(book))
12+
if err != nil {
13+
t.Fatal(err)
14+
}
15+
if err := o.Run(ctx); err == nil {
16+
t.Fatal("expected error")
17+
}
18+
if want := 8; len(o.store.steps) != want {
19+
t.Errorf("o.store.steps got %v, want %v", len(o.store.steps), want)
20+
}
21+
r := o.Result()
22+
if want := 8; len(r.StepResults) != want {
23+
t.Errorf("r.StepResults got %v, want %v", len(r.StepResults), want)
24+
}
25+
26+
t.Run("main steps", func(t *testing.T) {
27+
wantResults := []struct {
28+
desc string
29+
skipped bool
30+
err bool
31+
}{
32+
{"step 1", false, false},
33+
{"include step", false, false},
34+
{"step 2", false, false},
35+
{"step 3", false, true},
36+
{"step 4", true, false},
37+
{"defererd step c", false, false},
38+
{"defererd step b", false, true},
39+
{"defererd step a", false, false},
40+
}
41+
for i, want := range wantResults {
42+
got := r.StepResults[i]
43+
if got.Desc != want.desc {
44+
t.Errorf("got %v, want %v", got.Desc, want.desc)
45+
}
46+
if got.Skipped != want.skipped {
47+
t.Errorf("got %v, want %v", got.Skipped, want.skipped)
48+
}
49+
if (got.Err == nil) == want.err {
50+
t.Errorf("got %v, want %v", got.Err, want.err)
51+
}
52+
}
53+
})
54+
55+
t.Run("include steps", func(t *testing.T) {
56+
wantResults := []struct {
57+
desc string
58+
skipped bool
59+
err bool
60+
}{
61+
{"included step 1", false, false},
62+
{"included step 2", false, false},
63+
{"included defererd step d", false, false},
64+
}
65+
66+
for i, want := range wantResults {
67+
got := r.StepResults[1].IncludedRunResults[0].StepResults[i]
68+
if got.Desc != want.desc {
69+
t.Errorf("got %v, want %v", got.Desc, want.desc)
70+
}
71+
if got.Skipped != want.skipped {
72+
t.Errorf("got %v, want %v", got.Skipped, want.skipped)
73+
}
74+
if (got.Err == nil) == want.err {
75+
t.Errorf("got %v, want %v", got.Err, want.err)
76+
}
77+
}
78+
})
79+
}

include.go

+1
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ func (o *operator) newNestedOperator(parent *step, opts ...Option) (*operator, e
215215
oo.store.runNIndex = o.store.runNIndex
216216
oo.dbg = o.dbg
217217
oo.nm = o.nm
218+
oo.deferred = o.deferred
218219
return oo, nil
219220
}
220221

0 commit comments

Comments
 (0)