OLD | NEW |
1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package mutate | 5 package mutate |
6 | 6 |
7 import ( | 7 import ( |
8 "testing" | 8 "testing" |
9 | 9 |
10 "github.com/luci/gae/impl/memory" | 10 "github.com/luci/gae/impl/memory" |
(...skipping 23 matching lines...) Expand all Loading... |
34 | 34 |
35 Convey("Root", func() { | 35 Convey("Root", func() { |
36 So(afd.Root(c), ShouldResemble, ds.MakeKey("Attempt", "q
uest|fffffffe")) | 36 So(afd.Root(c), ShouldResemble, ds.MakeKey("Attempt", "q
uest|fffffffe")) |
37 }) | 37 }) |
38 | 38 |
39 Convey("RollForward", func() { | 39 Convey("RollForward", func() { |
40 a, fwd := afd.Dep.Fwd(c) | 40 a, fwd := afd.Dep.Fwd(c) |
41 | 41 |
42 Convey("AddingDeps", func() { | 42 Convey("AddingDeps", func() { |
43 Convey("good", func() { | 43 Convey("good", func() { |
44 » » » » » a.State = dm.Attempt_ADDING_DEPS | 44 » » » » » a.State = dm.Attempt_WAITING |
45 » » » » » a.AddingDepsBitmap = bf.Make(2) | 45 » » » » » a.DepMap = bf.Make(2) |
46 » » » » » a.WaitingDepBitmap = bf.Make(2) | |
47 So(ds.Put(a, fwd), ShouldBeNil) | 46 So(ds.Put(a, fwd), ShouldBeNil) |
48 | 47 |
49 » » » » » Convey("non-finished, not-last-adding",
func() { | 48 » » » » » Convey("not-last", func() { |
50 muts, err := afd.RollForward(c) | 49 muts, err := afd.RollForward(c) |
51 So(err, ShouldBeNil) | 50 So(err, ShouldBeNil) |
52 So(muts, ShouldBeNil) | 51 So(muts, ShouldBeNil) |
53 | 52 |
54 So(ds.Get(a, fwd), ShouldBeNil) | 53 So(ds.Get(a, fwd), ShouldBeNil) |
55 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_ADDING_DEPS) | 54 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_WAITING) |
56 » » » » » » So(a.AddingDepsBitmap.CountSet()
, ShouldEqual, 1) | 55 » » » » » » So(a.DepMap.CountSet(), ShouldEq
ual, 1) |
57 » » » » » » So(a.WaitingDepBitmap.CountSet()
, ShouldEqual, 0) | |
58 » » » » » }) | |
59 | |
60 » » » » » Convey("non-finished, last-adding", func
() { | |
61 » » » » » » a.AddingDepsBitmap.Set(1) | |
62 » » » » » » So(ds.Put(a), ShouldBeNil) | |
63 | |
64 » » » » » » muts, err := afd.RollForward(c) | |
65 » » » » » » So(err, ShouldBeNil) | |
66 » » » » » » So(muts, ShouldBeNil) | |
67 | |
68 » » » » » » So(ds.Get(a, fwd), ShouldBeNil) | |
69 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_BLOCKED) | |
70 » » » » » » So(a.AddingDepsBitmap.CountSet()
, ShouldEqual, 2) | |
71 » » » » » » So(a.WaitingDepBitmap.CountSet()
, ShouldEqual, 0) | |
72 | |
73 » » » » » » Convey("and then finished later"
, func() { | |
74 » » » » » » » // happens when we depen
d on an Attempt while it's not Finished, | |
75 » » » » » » » // but then it finishes
later. | |
76 | |
77 » » » » » » » afd.DepIsFinished = true | |
78 | |
79 » » » » » » » muts, err := afd.RollFor
ward(c) | |
80 » » » » » » » So(err, ShouldBeNil) | |
81 » » » » » » » So(muts, ShouldBeNil) | |
82 | |
83 » » » » » » » So(ds.Get(a, fwd), Shoul
dBeNil) | |
84 » » » » » » » So(a.State, ShouldEqual,
dm.Attempt_BLOCKED) | |
85 » » » » » » » So(a.AddingDepsBitmap.Co
untSet(), ShouldEqual, 2) | |
86 » » » » » » » So(a.WaitingDepBitmap.Co
untSet(), ShouldEqual, 1) | |
87 » » » » » » }) | |
88 » » » » » }) | |
89 | |
90 » » » » » Convey("finished, not-last-finished", fu
nc() { | |
91 » » » » » » a.AddingDepsBitmap.Set(1) | |
92 » » » » » » So(ds.Put(a), ShouldBeNil) | |
93 | |
94 » » » » » » afd.DepIsFinished = true | |
95 | |
96 » » » » » » muts, err := afd.RollForward(c) | |
97 » » » » » » So(err, ShouldBeNil) | |
98 » » » » » » So(muts, ShouldBeNil) | |
99 | |
100 » » » » » » So(ds.Get(a, fwd), ShouldBeNil) | |
101 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_BLOCKED) | |
102 » » » » » » So(a.AddingDepsBitmap.CountSet()
, ShouldEqual, 2) | |
103 » » » » » » So(a.WaitingDepBitmap.CountSet()
, ShouldEqual, 1) | |
104 }) | 56 }) |
105 | 57 |
106 Convey("last-finished", func() { | 58 Convey("last-finished", func() { |
107 » » » » » » a.AddingDepsBitmap.Set(1) | 59 » » » » » » a.DepMap.Set(1) |
108 » » » » » » a.WaitingDepBitmap.Set(1) | |
109 So(ds.Put(a), ShouldBeNil) | 60 So(ds.Put(a), ShouldBeNil) |
110 | 61 |
111 afd.DepIsFinished = true | |
112 | |
113 muts, err := afd.RollForward(c) | 62 muts, err := afd.RollForward(c) |
114 So(err, ShouldBeNil) | 63 So(err, ShouldBeNil) |
115 So(muts, ShouldResemble, []tumbl
e.Mutation{ | 64 So(muts, ShouldResemble, []tumbl
e.Mutation{ |
116 &ScheduleExecution{&a.ID
}}) | 65 &ScheduleExecution{&a.ID
}}) |
117 | 66 |
118 So(ds.Get(a, fwd), ShouldBeNil) | 67 So(ds.Get(a, fwd), ShouldBeNil) |
119 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_NEEDS_EXECUTION) | 68 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_SCHEDULING) |
120 » » » » » » So(a.AddingDepsBitmap.CountSet()
, ShouldEqual, 2) | 69 » » » » » » So(a.DepMap.CountSet(), ShouldEq
ual, 0) // was reset |
121 » » » » » » So(a.WaitingDepBitmap.CountSet()
, ShouldEqual, 2) | |
122 }) | 70 }) |
123 }) | 71 }) |
124 | 72 |
125 Convey("bad", func() { | 73 Convey("bad", func() { |
126 » » » » » a.State = dm.Attempt_ADDING_DEPS | 74 » » » » » a.State = dm.Attempt_WAITING |
127 » » » » » a.AddingDepsBitmap = bf.Make(2) | 75 » » » » » a.DepMap = bf.Make(2) |
128 » » » » » a.WaitingDepBitmap = bf.Make(2) | |
129 a.CurExecution = 1 | 76 a.CurExecution = 1 |
130 So(ds.Put(a, fwd), ShouldBeNil) | 77 So(ds.Put(a, fwd), ShouldBeNil) |
131 | 78 |
132 Convey("CurExecution mismatch -> NOP", f
unc() { | 79 Convey("CurExecution mismatch -> NOP", f
unc() { |
133 muts, err := afd.RollForward(c) | 80 muts, err := afd.RollForward(c) |
134 So(err, ShouldBeNil) | 81 So(err, ShouldBeNil) |
135 So(muts, ShouldBeNil) | 82 So(muts, ShouldBeNil) |
136 | 83 |
137 So(ds.Get(a, fwd), ShouldBeNil) | 84 So(ds.Get(a, fwd), ShouldBeNil) |
138 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_ADDING_DEPS) | 85 » » » » » » So(a.State, ShouldEqual, dm.Atte
mpt_WAITING) |
139 » » » » » » So(a.AddingDepsBitmap.CountSet()
, ShouldEqual, 0) | 86 » » » » » » So(a.DepMap.CountSet(), ShouldEq
ual, 0) |
140 » » » » » » So(a.WaitingDepBitmap.CountSet()
, ShouldEqual, 0) | |
141 }) | 87 }) |
142 | 88 |
143 Convey("Missing data", func() { | 89 Convey("Missing data", func() { |
144 So(ds.Delete(ds.KeyForObj(a)), S
houldBeNil) | 90 So(ds.Delete(ds.KeyForObj(a)), S
houldBeNil) |
145 | 91 |
146 _, err := afd.RollForward(c) | 92 _, err := afd.RollForward(c) |
147 So(err, ShouldErrLike, datastore
.ErrNoSuchEntity) | 93 So(err, ShouldErrLike, datastore
.ErrNoSuchEntity) |
148 }) | 94 }) |
149 }) | 95 }) |
150 | 96 |
151 }) | 97 }) |
152 }) | 98 }) |
153 }) | 99 }) |
154 } | 100 } |
OLD | NEW |