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 model | 5 package model |
6 | 6 |
7 import ( | 7 import ( |
8 "math" | 8 "math" |
9 "testing" | 9 "testing" |
10 "time" | 10 "time" |
(...skipping 12 matching lines...) Expand all Loading... |
23 | 23 |
24 func TestAttempt(t *testing.T) { | 24 func TestAttempt(t *testing.T) { |
25 t.Parallel() | 25 t.Parallel() |
26 | 26 |
27 Convey("Attempt", t, func() { | 27 Convey("Attempt", t, func() { |
28 c := context.Background() | 28 c := context.Background() |
29 c, clk := testclock.UseTime(c, testclock.TestTimeUTC) | 29 c, clk := testclock.UseTime(c, testclock.TestTimeUTC) |
30 | 30 |
31 Convey("ModifyState", func() { | 31 Convey("ModifyState", func() { |
32 a := MakeAttempt(c, dm.NewAttemptID("quest", 5)) | 32 a := MakeAttempt(c, dm.NewAttemptID("quest", 5)) |
33 » » » So(a.State, ShouldEqual, dm.Attempt_NEEDS_EXECUTION) | 33 » » » So(a.State, ShouldEqual, dm.Attempt_SCHEDULING) |
34 » » » So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), ShouldErrLi
ke, "invalid state transition") | 34 » » » So(a.ModifyState(c, dm.Attempt_FINISHED), ShouldErrLike,
"invalid state transition") |
35 So(a.Modified, ShouldResemble, testclock.TestTimeUTC) | 35 So(a.Modified, ShouldResemble, testclock.TestTimeUTC) |
36 | 36 |
37 clk.Add(time.Second) | 37 clk.Add(time.Second) |
38 | 38 |
39 So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil) | 39 So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil) |
40 So(a.State, ShouldEqual, dm.Attempt_EXECUTING) | 40 So(a.State, ShouldEqual, dm.Attempt_EXECUTING) |
41 So(a.Modified, ShouldResemble, clk.Now()) | 41 So(a.Modified, ShouldResemble, clk.Now()) |
42 | 42 |
43 » » » So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), ShouldBeNil
) | 43 » » » So(a.ModifyState(c, dm.Attempt_WAITING), ShouldBeNil) |
44 » » » So(a.ModifyState(c, dm.Attempt_BLOCKED), ShouldBeNil) | 44 » » » So(a.ModifyState(c, dm.Attempt_WAITING), ShouldBeNil) |
45 » » » So(a.ModifyState(c, dm.Attempt_BLOCKED), ShouldBeNil) | 45 » » » So(a.ModifyState(c, dm.Attempt_SCHEDULING), ShouldBeNil) |
46 » » » So(a.ModifyState(c, dm.Attempt_NEEDS_EXECUTION), ShouldB
eNil) | |
47 So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil) | 46 So(a.ModifyState(c, dm.Attempt_EXECUTING), ShouldBeNil) |
48 So(a.ModifyState(c, dm.Attempt_FINISHED), ShouldBeNil) | 47 So(a.ModifyState(c, dm.Attempt_FINISHED), ShouldBeNil) |
49 | 48 |
50 » » » So(a.ModifyState(c, dm.Attempt_NEEDS_EXECUTION), ShouldE
rrLike, "invalid") | 49 » » » So(a.ModifyState(c, dm.Attempt_SCHEDULING), ShouldErrLik
e, "invalid") |
51 So(a.State, ShouldEqual, dm.Attempt_FINISHED) | 50 So(a.State, ShouldEqual, dm.Attempt_FINISHED) |
52 }) | 51 }) |
53 | 52 |
54 Convey("ToProto", func() { | 53 Convey("ToProto", func() { |
55 Convey("NeedsExecution", func() { | 54 Convey("NeedsExecution", func() { |
56 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) | 55 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) |
57 | 56 |
58 » » » » So(a.ToProto(true), ShouldResemble, &dm.Attempt{ | 57 » » » » atmpt := dm.NewAttemptScheduling() |
59 » » » » » Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, | 58 » » » » atmpt.Id = dm.NewAttemptID("quest", 10) |
60 » » » » » Data: &dm.Attempt_Data{ | 59 » » » » atmpt.Data.Created = google_pb.NewTimestamp(test
clock.TestTimeUTC) |
61 » » » » » » Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), | 60 » » » » atmpt.Data.Modified = google_pb.NewTimestamp(tes
tclock.TestTimeUTC) |
62 » » » » » » Modified: google_pb.NewTime
stamp(testclock.TestTimeUTC), | 61 |
63 » » » » » » NumExecutions: 0, | 62 » » » » So(a.ToProto(true), ShouldResemble, atmpt) |
64 » » » » » » AttemptType: &dm.Attempt_Data_Ne
edsExecution_{NeedsExecution: &dm.Attempt_Data_NeedsExecution{ | |
65 » » » » » » » Pending: google_pb.NewTi
mestamp(testclock.TestTimeUTC)}}, | |
66 » » » » » }, | |
67 » » » » }) | |
68 }) | 63 }) |
69 | 64 |
70 Convey("Executing", func() { | 65 Convey("Executing", func() { |
71 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) | 66 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) |
72 clk.Add(10 * time.Second) | 67 clk.Add(10 * time.Second) |
73 a.CurExecution = 1 | 68 a.CurExecution = 1 |
74 So(a.ModifyState(c, dm.Attempt_EXECUTING), Shoul
dBeNil) | 69 So(a.ModifyState(c, dm.Attempt_EXECUTING), Shoul
dBeNil) |
75 | 70 |
76 So(a.ToProto(true), ShouldResemble, &dm.Attempt{ | 71 So(a.ToProto(true), ShouldResemble, &dm.Attempt{ |
77 Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, | 72 Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, |
78 Data: &dm.Attempt_Data{ | 73 Data: &dm.Attempt_Data{ |
79 Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), | 74 Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), |
80 Modified: google_pb.NewTime
stamp(clk.Now()), | 75 Modified: google_pb.NewTime
stamp(clk.Now()), |
81 NumExecutions: 1, | 76 NumExecutions: 1, |
82 AttemptType: &dm.Attempt_Data_Ex
ecuting_{Executing: &dm.Attempt_Data_Executing{ | 77 AttemptType: &dm.Attempt_Data_Ex
ecuting_{Executing: &dm.Attempt_Data_Executing{ |
83 CurExecutionId: 1}}}, | 78 CurExecutionId: 1}}}, |
84 }) | 79 }) |
85 }) | 80 }) |
86 | 81 |
87 » » » Convey("AddingDeps", func() { | 82 » » » Convey("Waiting", func() { |
88 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) | 83 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) |
89 clk.Add(10 * time.Second) | 84 clk.Add(10 * time.Second) |
90 a.CurExecution = 1 | 85 a.CurExecution = 1 |
91 So(a.ModifyState(c, dm.Attempt_EXECUTING), Shoul
dBeNil) | 86 So(a.ModifyState(c, dm.Attempt_EXECUTING), Shoul
dBeNil) |
92 clk.Add(10 * time.Second) | 87 clk.Add(10 * time.Second) |
93 » » » » So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), Sho
uldBeNil) | 88 » » » » So(a.ModifyState(c, dm.Attempt_WAITING), ShouldB
eNil) |
94 » » » » a.AddingDepsBitmap = bf.Make(4) | 89 » » » » a.DepMap = bf.Make(4) |
95 » » » » a.AddingDepsBitmap.Set(1) | 90 » » » » a.DepMap.Set(2) |
96 » » » » a.AddingDepsBitmap.Set(3) | |
97 » » » » a.WaitingDepBitmap = bf.Make(4) | |
98 | 91 |
99 » » » » So(a.ToProto(true), ShouldResemble, &dm.Attempt{ | 92 » » » » atmpt := dm.NewAttemptWaiting(3) |
100 » » » » » Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, | 93 » » » » atmpt.Id = dm.NewAttemptID("quest", 10) |
101 » » » » » Data: &dm.Attempt_Data{ | 94 » » » » atmpt.Data.Created = google_pb.NewTimestamp(test
clock.TestTimeUTC) |
102 » » » » » » Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), | 95 » » » » atmpt.Data.Modified = google_pb.NewTimestamp(clk
.Now()) |
103 » » » » » » Modified: google_pb.NewTime
stamp(clk.Now()), | 96 » » » » atmpt.Data.NumExecutions = 1 |
104 » » » » » » NumExecutions: 1, | |
105 » » » » » » AttemptType: &dm.Attempt_Data_Ad
dingDeps_{AddingDeps: &dm.Attempt_Data_AddingDeps{ | |
106 » » » » » » » NumAdding: 2, | |
107 » » » » » » » NumWaiting: 4}}}, | |
108 » » » » }) | |
109 » » » }) | |
110 | 97 |
111 » » » Convey("Blocked", func() { | 98 » » » » So(a.ToProto(true), ShouldResemble, atmpt) |
112 » » » » a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) | |
113 » » » » clk.Add(10 * time.Second) | |
114 » » » » a.CurExecution = 1 | |
115 » » » » So(a.ModifyState(c, dm.Attempt_EXECUTING), Shoul
dBeNil) | |
116 » » » » clk.Add(10 * time.Second) | |
117 » » » » So(a.ModifyState(c, dm.Attempt_ADDING_DEPS), Sho
uldBeNil) | |
118 » » » » a.WaitingDepBitmap = bf.Make(4) | |
119 » » » » a.WaitingDepBitmap.Set(2) | |
120 » » » » // don't increment the time: let the automatic m
icrosecond advancement | |
121 » » » » // take effect. | |
122 » » » » So(a.ModifyState(c, dm.Attempt_BLOCKED), ShouldB
eNil) | |
123 | |
124 » » » » So(a.ToProto(true), ShouldResemble, &dm.Attempt{ | |
125 » » » » » Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, | |
126 » » » » » Data: &dm.Attempt_Data{ | |
127 » » » » » » Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), | |
128 » » » » » » Modified: google_pb.NewTime
stamp(clk.Now().Add(time.Microsecond)), | |
129 » » » » » » NumExecutions: 1, | |
130 » » » » » » AttemptType: &dm.Attempt_Data_Bl
ocked_{Blocked: &dm.Attempt_Data_Blocked{ | |
131 » » » » » » » NumWaiting: 3}}}, | |
132 » » » » }) | |
133 }) | 99 }) |
134 | 100 |
135 Convey("Finished", func() { | 101 Convey("Finished", func() { |
136 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) | 102 a := MakeAttempt(c, dm.NewAttemptID("quest", 10)
) |
137 a.State = dm.Attempt_FINISHED | 103 a.State = dm.Attempt_FINISHED |
138 a.CurExecution = math.MaxUint32 | 104 a.CurExecution = math.MaxUint32 |
139 » » » » a.AddingDepsBitmap = bf.Make(20) | 105 » » » » a.DepMap = bf.Make(20) |
140 » » » » a.WaitingDepBitmap = bf.Make(20) | |
141 a.ResultExpiration = testclock.TestTimeUTC.Add(1
0 * time.Second) | 106 a.ResultExpiration = testclock.TestTimeUTC.Add(1
0 * time.Second) |
142 | 107 |
143 » » » » a.WaitingDepBitmap.Set(1) | 108 » » » » a.DepMap.Set(1) |
144 » » » » a.WaitingDepBitmap.Set(5) | 109 » » » » a.DepMap.Set(5) |
145 » » » » a.WaitingDepBitmap.Set(7) | 110 » » » » a.DepMap.Set(7) |
146 | 111 |
147 So(a.ToProto(true), ShouldResemble, &dm.Attempt{ | 112 So(a.ToProto(true), ShouldResemble, &dm.Attempt{ |
148 Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, | 113 Id: &dm.Attempt_ID{Quest: "quest", Id: 1
0}, |
149 Data: &dm.Attempt_Data{ | 114 Data: &dm.Attempt_Data{ |
150 Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), | 115 Created: google_pb.NewTime
stamp(testclock.TestTimeUTC), |
151 Modified: google_pb.NewTime
stamp(testclock.TestTimeUTC), | 116 Modified: google_pb.NewTime
stamp(testclock.TestTimeUTC), |
152 NumExecutions: math.MaxUint32, | 117 NumExecutions: math.MaxUint32, |
153 AttemptType: &dm.Attempt_Data_Fi
nished_{Finished: &dm.Attempt_Data_Finished{ | 118 AttemptType: &dm.Attempt_Data_Fi
nished_{Finished: &dm.Attempt_Data_Finished{ |
154 Expiration: google_pb.Ne
wTimestamp(testclock.TestTimeUTC.Add(10 * time.Second))}}, | 119 Expiration: google_pb.Ne
wTimestamp(testclock.TestTimeUTC.Add(10 * time.Second))}}, |
155 }, | 120 }, |
156 }) | 121 }) |
157 }) | 122 }) |
158 }) | 123 }) |
159 }) | 124 }) |
160 } | 125 } |
OLD | NEW |