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

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

Issue 2296763008: [task scheduler] Move files from build_scheduler/ to task_scheduler/ (Closed) Base URL: https://skia.googlesource.com/buildbot@master
Patch Set: Created 4 years, 3 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
« no previous file with comments | « build_scheduler/go/db/cache.go ('k') | build_scheduler/go/db/comments.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 package db
2
3 import (
4 "testing"
5 "time"
6
7 assert "github.com/stretchr/testify/require"
8 "go.skia.org/infra/go/testutils"
9 )
10
11 func testGetTasksForCommits(t *testing.T, c TaskCache, b *Task) {
12 for _, commit := range b.Commits {
13 found, err := c.GetTaskForCommit(DEFAULT_TEST_REPO, commit, b.Na me)
14 assert.NoError(t, err)
15 testutils.AssertDeepEqual(t, b, found)
16
17 tasks, err := c.GetTasksForCommits(DEFAULT_TEST_REPO, []string{c ommit})
18 assert.NoError(t, err)
19 testutils.AssertDeepEqual(t, map[string]map[string]*Task{
20 commit: map[string]*Task{
21 b.Name: b,
22 },
23 }, tasks)
24 }
25 }
26
27 func TestDBCache(t *testing.T) {
28 db := NewInMemoryDB()
29 defer testutils.AssertCloses(t, db)
30
31 // Pre-load a task into the DB.
32 startTime := time.Now().Add(-30 * time.Minute) // Arbitrary starting poi nt.
33 t1 := makeTask(startTime, []string{"a", "b", "c", "d"})
34 assert.NoError(t, db.PutTask(t1))
35
36 // Create the cache. Ensure that the existing task is present.
37 c, err := NewTaskCache(db, time.Hour)
38 assert.NoError(t, err)
39 testGetTasksForCommits(t, c, t1)
40
41 // Bisect the first task.
42 t2 := makeTask(startTime.Add(time.Minute), []string{"c", "d"})
43 t1.Commits = []string{"a", "b"}
44 assert.NoError(t, db.PutTasks([]*Task{t2, t1}))
45 assert.NoError(t, c.Update())
46
47 // Ensure that t2 (and not t1) shows up for commits "c" and "d".
48 testGetTasksForCommits(t, c, t1)
49 testGetTasksForCommits(t, c, t2)
50
51 // Insert a task on a second bot.
52 t3 := makeTask(startTime.Add(2*time.Minute), []string{"a", "b"})
53 t3.Name = "Another-Task"
54 assert.NoError(t, db.PutTask(t3))
55 assert.NoError(t, c.Update())
56 tasks, err := c.GetTasksForCommits(DEFAULT_TEST_REPO, []string{"b"})
57 assert.NoError(t, err)
58 testutils.AssertDeepEqual(t, map[string]map[string]*Task{
59 "b": map[string]*Task{
60 t1.Name: t1,
61 t3.Name: t3,
62 },
63 }, tasks)
64 }
65
66 func TestDBCacheMultiRepo(t *testing.T) {
67 db := NewInMemoryDB()
68 defer testutils.AssertCloses(t, db)
69
70 // Insert several tasks with different repos.
71 startTime := time.Now().Add(-30 * time.Minute) // Arbitrary starting poi nt.
72 t1 := makeTask(startTime, []string{"a", "b"}) // Default Repo.
73 t2 := makeTask(startTime, []string{"a", "b"})
74 t2.Repo = "thats-what-you.git"
75 t3 := makeTask(startTime, []string{"b", "c"})
76 t3.Repo = "never-for.git"
77 assert.NoError(t, db.PutTasks([]*Task{t1, t2, t3}))
78
79 // Create the cache.
80 c, err := NewTaskCache(db, time.Hour)
81 assert.NoError(t, err)
82
83 // Check that there's no conflict among the tasks in different repos.
84 {
85 tasks, err := c.GetTasksForCommits(t1.Repo, []string{"a", "b", " c"})
86 assert.NoError(t, err)
87 testutils.AssertDeepEqual(t, map[string]map[string]*Task{
88 "a": map[string]*Task{
89 t1.Name: t1,
90 },
91 "b": map[string]*Task{
92 t1.Name: t1,
93 },
94 "c": map[string]*Task{},
95 }, tasks)
96 }
97
98 {
99 tasks, err := c.GetTasksForCommits(t2.Repo, []string{"a", "b", " c"})
100 assert.NoError(t, err)
101 testutils.AssertDeepEqual(t, map[string]map[string]*Task{
102 "a": map[string]*Task{
103 t1.Name: t2,
104 },
105 "b": map[string]*Task{
106 t1.Name: t2,
107 },
108 "c": map[string]*Task{},
109 }, tasks)
110 }
111
112 {
113 tasks, err := c.GetTasksForCommits(t3.Repo, []string{"a", "b", " c"})
114 assert.NoError(t, err)
115 testutils.AssertDeepEqual(t, map[string]map[string]*Task{
116 "a": map[string]*Task{},
117 "b": map[string]*Task{
118 t1.Name: t3,
119 },
120 "c": map[string]*Task{
121 t1.Name: t3,
122 },
123 }, tasks)
124 }
125 }
126
127 func TestDBCacheReset(t *testing.T) {
128 db := NewInMemoryDB()
129 defer testutils.AssertCloses(t, db)
130
131 // Pre-load a task into the DB.
132 startTime := time.Now().Add(-30 * time.Minute) // Arbitrary starting poi nt.
133 t1 := makeTask(startTime, []string{"a", "b", "c", "d"})
134 assert.NoError(t, db.PutTask(t1))
135
136 // Create the cache. Ensure that the existing task is present.
137 c, err := NewTaskCache(db, time.Hour)
138 assert.NoError(t, err)
139 testGetTasksForCommits(t, c, t1)
140
141 // Pretend the DB connection is lost.
142 db.StopTrackingModifiedTasks(c.(*taskCache).queryId)
143
144 // Make an update.
145 t2 := makeTask(startTime.Add(time.Minute), []string{"c", "d"})
146 t1.Commits = []string{"a", "b"}
147 assert.NoError(t, db.PutTasks([]*Task{t2, t1}))
148
149 // Ensure cache gets reset.
150 assert.NoError(t, c.Update())
151 testGetTasksForCommits(t, c, t1)
152 testGetTasksForCommits(t, c, t2)
153 }
154
155 func TestCacheUnfinished(t *testing.T) {
156 db := NewInMemoryDB()
157 defer testutils.AssertCloses(t, db)
158
159 // Insert a task.
160 startTime := time.Now().Add(-30 * time.Minute)
161 t1 := makeTask(startTime, []string{"a"})
162 assert.False(t, t1.Done())
163 assert.NoError(t, db.PutTask(t1))
164
165 // Create the cache. Ensure that the existing task is present.
166 c, err := NewTaskCache(db, time.Hour)
167 assert.NoError(t, err)
168 tasks, err := c.UnfinishedTasks()
169 assert.NoError(t, err)
170 testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
171
172 // Finish the task. Insert it, ensure that it's not unfinished.
173 t1.Status = TASK_STATUS_SUCCESS
174 assert.True(t, t1.Done())
175 assert.NoError(t, db.PutTask(t1))
176 assert.NoError(t, c.Update())
177 tasks, err = c.UnfinishedTasks()
178 assert.NoError(t, err)
179 testutils.AssertDeepEqual(t, []*Task{}, tasks)
180
181 // Already-finished task.
182 t2 := makeTask(time.Now(), []string{"a"})
183 t2.Status = TASK_STATUS_MISHAP
184 assert.True(t, t2.Done())
185 assert.NoError(t, db.PutTask(t2))
186 assert.NoError(t, c.Update())
187 tasks, err = c.UnfinishedTasks()
188 assert.NoError(t, err)
189 testutils.AssertDeepEqual(t, []*Task{}, tasks)
190
191 // An unfinished task, created after the cache was created.
192 t3 := makeTask(time.Now(), []string{"b"})
193 assert.False(t, t3.Done())
194 assert.NoError(t, db.PutTask(t3))
195 assert.NoError(t, c.Update())
196 tasks, err = c.UnfinishedTasks()
197 assert.NoError(t, err)
198 testutils.AssertDeepEqual(t, []*Task{t3}, tasks)
199
200 // Update the task.
201 t3.Commits = []string{"c", "d", "f"}
202 assert.False(t, t3.Done())
203 assert.NoError(t, db.PutTask(t3))
204 assert.NoError(t, c.Update())
205 tasks, err = c.UnfinishedTasks()
206 assert.NoError(t, err)
207 testutils.AssertDeepEqual(t, []*Task{t3}, tasks)
208 }
OLDNEW
« no previous file with comments | « build_scheduler/go/db/cache.go ('k') | build_scheduler/go/db/comments.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698