Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Side by Side Diff: build_scheduler/go/db/task_test.go

Issue 2246933002: Add Task DB implementation using a local BoltDB. (Closed) Base URL: https://skia.googlesource.com/buildbot@taskdb-impl-track
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 package db 1 package db
2 2
3 import ( 3 import (
4 "bytes"
5 "encoding/gob"
4 "fmt" 6 "fmt"
7 "sort"
5 "testing" 8 "testing"
6 "time" 9 "time"
7 10
8 "github.com/luci/luci-go/common/api/swarming/swarming/v1" 11 "github.com/luci/luci-go/common/api/swarming/swarming/v1"
9 assert "github.com/stretchr/testify/require" 12 assert "github.com/stretchr/testify/require"
10 13
11 "go.skia.org/infra/go/testutils" 14 "go.skia.org/infra/go/testutils"
12 ) 15 )
13 16
14 func TestUpdateFromSwarming(t *testing.T) { 17 func TestUpdateFromSwarming(t *testing.T) {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 Id: "C", 156 Id: "C",
154 Name: "C", 157 Name: "C",
155 Repo: "C", 158 Repo: "C",
156 Revision: "C", 159 Revision: "C",
157 Created: now.Add(2 * time.Hour), 160 Created: now.Add(2 * time.Hour),
158 Status: TASK_STATUS_FAILURE, 161 Status: TASK_STATUS_FAILURE,
159 IsolatedOutput: "D", 162 IsolatedOutput: "D",
160 Swarming: s, 163 Swarming: s,
161 }) 164 })
162 } 165 }
166
167 // Test that sort.Sort(TaskSlice(...)) works correctly.
168 func TestSort(t *testing.T) {
169 tasks := []*Task{}
170 addTask := func(ts time.Time) {
171 task := &Task{
172 Created: ts,
173 }
174 tasks = append(tasks, task)
175 }
176
177 // Add tasks with various creation timestamps.
178 addTask(time.Date(2008, time.August, 8, 8, 8, 8, 8, time.UTC)) // 0
179 addTask(time.Date(1776, time.July, 4, 13, 0, 0, 0, time.UTC)) // 1
180 addTask(time.Date(2016, time.December, 31, 23, 59, 59, 999999999, time.U TC)) // 2
181 addTask(time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC)) // 3
182
183 // Manually sort.
184 expected := []*Task{tasks[1], tasks[3], tasks[0], tasks[2]}
185
186 sort.Sort(TaskSlice(tasks))
187
188 testutils.AssertDeepEqual(t, expected, tasks)
189 }
190
191 func TestTaskEncoder(t *testing.T) {
192 // TODO(benjaminwagner): Is there any way to cause an error?
193 e := TaskEncoder{}
194 expectedTasks := map[*Task][]byte{}
195 for i := 0; i < 25; i++ {
196 task := &Task{}
197 task.Id = fmt.Sprintf("Id-%d", i)
198 task.Name = "Bingo-was-his-name-o"
199 task.Commits = []string{fmt.Sprintf("a%d", i), fmt.Sprintf("b%d" , i+1)}
200 var buf bytes.Buffer
201 err := gob.NewEncoder(&buf).Encode(task)
202 assert.NoError(t, err)
203 expectedTasks[task] = buf.Bytes()
204 assert.True(t, e.Process(task))
205 }
206
207 actualTasks := map[*Task][]byte{}
208 for task, serialized, err := e.Next(); task != nil; task, serialized, er r = e.Next() {
209 assert.NoError(t, err)
210 actualTasks[task] = serialized
211 }
212 testutils.AssertDeepEqual(t, expectedTasks, actualTasks)
213 }
214
215 func TestTaskEncoderNoTasks(t *testing.T) {
216 e := TaskEncoder{}
217 task, serialized, err := e.Next()
218 assert.NoError(t, err)
219 assert.Nil(t, task)
220 assert.Nil(t, serialized)
221 }
222
223 func TestTaskDecoder(t *testing.T) {
224 d := TaskDecoder{}
225 expectedTasks := map[string]*Task{}
226 for i := 0; i < 25; i++ {
227 task := &Task{}
228 task.Id = fmt.Sprintf("Id-%d", i)
229 task.Name = "Bingo-was-his-name-o"
230 task.Commits = []string{fmt.Sprintf("a%d", i), fmt.Sprintf("b%d" , i+1)}
231 var buf bytes.Buffer
232 err := gob.NewEncoder(&buf).Encode(task)
233 assert.NoError(t, err)
234 expectedTasks[task.Id] = task
235 assert.True(t, d.Process(buf.Bytes()))
236 }
237
238 actualTasks := map[string]*Task{}
239 result, err := d.Result()
240 assert.NoError(t, err)
241 assert.Equal(t, len(expectedTasks), len(result))
242 for _, task := range result {
243 actualTasks[task.Id] = task
244 }
245 testutils.AssertDeepEqual(t, expectedTasks, actualTasks)
246 }
247
248 func TestTaskDecoderNoTasks(t *testing.T) {
249 d := TaskDecoder{}
250 result, err := d.Result()
251 assert.NoError(t, err)
252 assert.Equal(t, 0, len(result))
253 }
254
255 func TestTaskDecoderError(t *testing.T) {
256 task := &Task{}
257 task.Id = "Id"
258 var buf bytes.Buffer
259 err := gob.NewEncoder(&buf).Encode(task)
260 assert.NoError(t, err)
261 serialized := buf.Bytes()
262 invalid := append([]byte("Hi Mom!"), serialized...)
263
264 d := TaskDecoder{}
265 // Process should return true before it encounters an invalid result.
266 assert.True(t, d.Process(serialized))
267 assert.True(t, d.Process(serialized))
268 // Process may return true or false after encountering an invalid value.
269 _ = d.Process(invalid)
270 _ = d.Process(serialized)
271
272 // Result should return error.
273 result, err := d.Result()
274 assert.Error(t, err)
275 assert.Equal(t, 0, len(result))
276 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698