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

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: Fix bad merge. 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 Id: "C", 167 Id: "C",
165 Name: "C", 168 Name: "C",
166 Repo: "C", 169 Repo: "C",
167 Revision: "C", 170 Revision: "C",
168 Created: now.Add(2 * time.Hour), 171 Created: now.Add(2 * time.Hour),
169 Status: TASK_STATUS_FAILURE, 172 Status: TASK_STATUS_FAILURE,
170 IsolatedOutput: "D", 173 IsolatedOutput: "D",
171 Swarming: s, 174 Swarming: s,
172 }) 175 })
173 } 176 }
177
178 // Test that sort.Sort(TaskSlice(...)) works correctly.
179 func TestSort(t *testing.T) {
180 tasks := []*Task{}
181 addTask := func(ts time.Time) {
182 task := &Task{
183 Created: ts,
184 }
185 tasks = append(tasks, task)
186 }
187
188 // Add tasks with various creation timestamps.
189 addTask(time.Date(2008, time.August, 8, 8, 8, 8, 8, time.UTC)) // 0
190 addTask(time.Date(1776, time.July, 4, 13, 0, 0, 0, time.UTC)) // 1
191 addTask(time.Date(2016, time.December, 31, 23, 59, 59, 999999999, time.U TC)) // 2
192 addTask(time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC)) // 3
193
194 // Manually sort.
195 expected := []*Task{tasks[1], tasks[3], tasks[0], tasks[2]}
196
197 sort.Sort(TaskSlice(tasks))
198
199 testutils.AssertDeepEqual(t, expected, tasks)
200 }
201
202 func TestTaskEncoder(t *testing.T) {
203 // TODO(benjaminwagner): Is there any way to cause an error?
204 e := TaskEncoder{}
205 expectedTasks := map[*Task][]byte{}
206 for i := 0; i < 25; i++ {
207 task := &Task{}
208 task.Id = fmt.Sprintf("Id-%d", i)
209 task.Name = "Bingo-was-his-name-o"
210 task.Commits = []string{fmt.Sprintf("a%d", i), fmt.Sprintf("b%d" , i+1)}
211 var buf bytes.Buffer
212 err := gob.NewEncoder(&buf).Encode(task)
213 assert.NoError(t, err)
214 expectedTasks[task] = buf.Bytes()
215 assert.True(t, e.Process(task))
216 }
217
218 actualTasks := map[*Task][]byte{}
219 for task, serialized, err := e.Next(); task != nil; task, serialized, er r = e.Next() {
220 assert.NoError(t, err)
221 actualTasks[task] = serialized
222 }
223 testutils.AssertDeepEqual(t, expectedTasks, actualTasks)
224 }
225
226 func TestTaskEncoderNoTasks(t *testing.T) {
227 e := TaskEncoder{}
228 task, serialized, err := e.Next()
229 assert.NoError(t, err)
230 assert.Nil(t, task)
231 assert.Nil(t, serialized)
232 }
233
234 func TestTaskDecoder(t *testing.T) {
235 d := TaskDecoder{}
236 expectedTasks := map[string]*Task{}
237 for i := 0; i < 25; i++ {
238 task := &Task{}
239 task.Id = fmt.Sprintf("Id-%d", i)
240 task.Name = "Bingo-was-his-name-o"
241 task.Commits = []string{fmt.Sprintf("a%d", i), fmt.Sprintf("b%d" , i+1)}
242 var buf bytes.Buffer
243 err := gob.NewEncoder(&buf).Encode(task)
244 assert.NoError(t, err)
245 expectedTasks[task.Id] = task
246 assert.True(t, d.Process(buf.Bytes()))
247 }
248
249 actualTasks := map[string]*Task{}
250 result, err := d.Result()
251 assert.NoError(t, err)
252 assert.Equal(t, len(expectedTasks), len(result))
253 for _, task := range result {
254 actualTasks[task.Id] = task
255 }
256 testutils.AssertDeepEqual(t, expectedTasks, actualTasks)
257 }
258
259 func TestTaskDecoderNoTasks(t *testing.T) {
260 d := TaskDecoder{}
261 result, err := d.Result()
262 assert.NoError(t, err)
263 assert.Equal(t, 0, len(result))
264 }
265
266 func TestTaskDecoderError(t *testing.T) {
267 task := &Task{}
268 task.Id = "Id"
269 var buf bytes.Buffer
270 err := gob.NewEncoder(&buf).Encode(task)
271 assert.NoError(t, err)
272 serialized := buf.Bytes()
273 invalid := append([]byte("Hi Mom!"), serialized...)
274
275 d := TaskDecoder{}
276 // Process should return true before it encounters an invalid result.
277 assert.True(t, d.Process(serialized))
278 assert.True(t, d.Process(serialized))
279 // Process may return true or false after encountering an invalid value.
280 _ = d.Process(invalid)
281 _ = d.Process(serialized)
282
283 // Result should return error.
284 result, err := d.Result()
285 assert.Error(t, err)
286 assert.Equal(t, 0, len(result))
287 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698