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

Side by Side Diff: build_scheduler/go/db/db_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
(Empty)
1 package db
2
3 import (
4 "net/url"
5 "testing"
6 "time"
7
8 assert "github.com/stretchr/testify/require"
9
10 "go.skia.org/infra/go/testutils"
11 )
12
13 func makeTask(ts time.Time, commits []string) *Task {
14 return &Task{
15 Created: ts,
16 Commits: commits,
17 Name: "Test-Task",
18 }
19 }
20
21 func testDB(t *testing.T, db DB) {
22 defer testutils.AssertCloses(t, db)
23
24 _, err := db.GetModifiedTasks("dummy-id")
25 assert.True(t, IsUnknownId(err))
26
27 id, err := db.StartTrackingModifiedTasks()
28 assert.NoError(t, err)
29
30 tasks, err := db.GetModifiedTasks(id)
31 assert.NoError(t, err)
32 assert.Equal(t, 0, len(tasks))
33
34 t1 := makeTask(time.Unix(0, 1470674132000000), []string{"a", "b", "c", " d"})
35
36 // AssignId should fill in t1.Id.
37 assert.Equal(t, "", t1.Id)
38 assert.NoError(t, db.AssignId(t1))
39 assert.NotEqual(t, "", t1.Id)
40 // Ids must be URL-safe.
41 assert.Equal(t, url.QueryEscape(t1.Id), t1.Id)
42
43 // Task doesn't exist in DB yet.
44 noTask, err := db.GetTaskById(t1.Id)
45 assert.NoError(t, err)
46 assert.Nil(t, noTask)
47
48 // Insert the task.
49 assert.NoError(t, db.PutTask(t1))
50
51 // Task can now be retrieved by Id.
52 t1Again, err := db.GetTaskById(t1.Id)
53 assert.NoError(t, err)
54 testutils.AssertDeepEqual(t, t1, t1Again)
55
56 // Ensure that the task shows up in the modified list.
57 tasks, err = db.GetModifiedTasks(id)
58 assert.NoError(t, err)
59 testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
60
61 // Ensure that the task shows up in the correct date ranges.
62 timeStart := time.Time{}
63 t1Before := t1.Created
64 t1After := t1Before.Add(1 * time.Millisecond)
65 timeEnd := time.Now()
66 tasks, err = db.GetTasksFromDateRange(timeStart, t1Before)
67 assert.NoError(t, err)
68 assert.Equal(t, 0, len(tasks))
69 tasks, err = db.GetTasksFromDateRange(t1Before, t1After)
70 assert.NoError(t, err)
71 testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
72 tasks, err = db.GetTasksFromDateRange(t1After, timeEnd)
73 assert.NoError(t, err)
74 assert.Equal(t, 0, len(tasks))
75
76 // Insert two more tasks.
77 t2 := makeTask(time.Unix(0, 1470674376000000), []string{"e", "f"})
78 t3 := makeTask(time.Unix(0, 1470674884000000), []string{"g", "h"})
79 assert.NoError(t, db.PutTasks([]*Task{t2, t3}))
80
81 // Check that PutTasks assigned Ids.
82 assert.NotEqual(t, "", t2.Id)
83 assert.NotEqual(t, "", t3.Id)
84 // Ids must be URL-safe.
85 assert.Equal(t, url.QueryEscape(t2.Id), t2.Id)
86 assert.Equal(t, url.QueryEscape(t3.Id), t3.Id)
87
88 // Ensure that both tasks show up in the modified list.
89 tasks, err = db.GetModifiedTasks(id)
90 assert.NoError(t, err)
91 testutils.AssertDeepEqual(t, []*Task{t2, t3}, tasks)
92
93 // Ensure that all tasks show up in the correct time ranges, in sorted o rder.
94 t2Before := t2.Created
95 t2After := t2Before.Add(1 * time.Millisecond)
96
97 t3Before := t3.Created
98 t3After := t3Before.Add(1 * time.Millisecond)
99
100 tasks, err = db.GetTasksFromDateRange(timeStart, t1Before)
101 assert.NoError(t, err)
102 assert.Equal(t, 0, len(tasks))
103
104 tasks, err = db.GetTasksFromDateRange(timeStart, t1After)
105 assert.NoError(t, err)
106 testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
107
108 tasks, err = db.GetTasksFromDateRange(timeStart, t2Before)
109 assert.NoError(t, err)
110 testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
111
112 tasks, err = db.GetTasksFromDateRange(timeStart, t2After)
113 assert.NoError(t, err)
114 testutils.AssertDeepEqual(t, []*Task{t1, t2}, tasks)
115
116 tasks, err = db.GetTasksFromDateRange(timeStart, t3Before)
117 assert.NoError(t, err)
118 testutils.AssertDeepEqual(t, []*Task{t1, t2}, tasks)
119
120 tasks, err = db.GetTasksFromDateRange(timeStart, t3After)
121 assert.NoError(t, err)
122 testutils.AssertDeepEqual(t, []*Task{t1, t2, t3}, tasks)
123
124 tasks, err = db.GetTasksFromDateRange(timeStart, timeEnd)
125 assert.NoError(t, err)
126 testutils.AssertDeepEqual(t, []*Task{t1, t2, t3}, tasks)
127
128 tasks, err = db.GetTasksFromDateRange(t1Before, timeEnd)
129 assert.NoError(t, err)
130 testutils.AssertDeepEqual(t, []*Task{t1, t2, t3}, tasks)
131
132 tasks, err = db.GetTasksFromDateRange(t1After, timeEnd)
133 assert.NoError(t, err)
134 testutils.AssertDeepEqual(t, []*Task{t2, t3}, tasks)
135
136 tasks, err = db.GetTasksFromDateRange(t2Before, timeEnd)
137 assert.NoError(t, err)
138 testutils.AssertDeepEqual(t, []*Task{t2, t3}, tasks)
139
140 tasks, err = db.GetTasksFromDateRange(t2After, timeEnd)
141 assert.NoError(t, err)
142 testutils.AssertDeepEqual(t, []*Task{t3}, tasks)
143
144 tasks, err = db.GetTasksFromDateRange(t3Before, timeEnd)
145 assert.NoError(t, err)
146 testutils.AssertDeepEqual(t, []*Task{t3}, tasks)
147
148 tasks, err = db.GetTasksFromDateRange(t3After, timeEnd)
149 assert.NoError(t, err)
150 testutils.AssertDeepEqual(t, []*Task{}, tasks)
151 }
152
153 func testTooManyUsers(t *testing.T, db DB) {
154 defer testutils.AssertCloses(t, db)
155
156 // Max out the number of modified-tasks users; ensure that we error out.
157 for i := 0; i < MAX_MODIFIED_BUILDS_USERS; i++ {
158 _, err := db.StartTrackingModifiedTasks()
159 assert.NoError(t, err)
160 }
161 _, err := db.StartTrackingModifiedTasks()
162 assert.True(t, IsTooManyUsers(err))
163 }
164
165 func TestInMemoryDB(t *testing.T) {
166 testDB(t, NewInMemoryDB())
167 }
168
169 func TestInMemoryTooManyUsers(t *testing.T) {
170 testTooManyUsers(t, NewInMemoryDB())
171 }
OLDNEW
« no previous file with comments | « no previous file | build_scheduler/go/db/local_db/local_db.go » ('j') | build_scheduler/go/db/local_db/local_db.go » ('J')

Powered by Google App Engine
This is Rietveld 408576698