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

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

Issue 2226583003: Add build scheduler DB interface, dumb in-memory impl, cache (Closed) Base URL: https://skia.googlesource.com/buildbot@master
Patch Set: Fix import 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 "fmt"
5 "testing"
6 "time"
7
8 "github.com/stretchr/testify/assert"
9
10 "go.skia.org/infra/go/buildbucket"
11 "go.skia.org/infra/go/testutils"
12 )
13
14 func makeBuild(id string, ts time.Time, commits []string) *Build {
15 return &Build{
16 Build: &buildbucket.Build{
17 CreatedTimestamp: fmt.Sprintf("%d", ts.UnixNano()),
18 Id: id,
19 },
20 Commits: commits,
21 }
22 }
23
24 func testDB(t *testing.T, db DB) {
25 defer testutils.AssertCloses(t, db)
26
27 _, err := db.GetModifiedBuilds("dummy-id")
28 assert.True(t, IsUnknownId(err))
29
30 id, err := db.StartTrackingModifiedBuilds()
31 assert.NoError(t, err)
32
33 builds, err := db.GetModifiedBuilds(id)
34 assert.NoError(t, err)
35 assert.Equal(t, 0, len(builds))
36
37 // Insert a build.
38 b1 := makeBuild("build1", time.Unix(0, 1470674132000000), []string{"a", "b", "c", "d"})
39 assert.NoError(t, db.PutBuild(b1))
40
41 // Ensure that the build shows up in the modified list.
42 builds, err = db.GetModifiedBuilds(id)
43 assert.NoError(t, err)
44 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
45
46 // Ensure that the build shows up in the correct date ranges.
47 timeStart := time.Time{}
48 b1Created, err := b1.Created()
49 assert.NoError(t, err)
50 b1Before := b1Created.Add(-1 * time.Millisecond)
dogben 2016/08/08 19:22:38 nit: Can we make b1Before := b1Created, to test th
borenet 2016/08/08 19:51:18 Done, and fixed inMemoryDB to behave that way.
51 b1After := b1Created.Add(1 * time.Millisecond)
52 timeEnd := time.Now()
53 builds, err = db.GetBuildsFromDateRange(timeStart, b1Before)
54 assert.NoError(t, err)
55 assert.Equal(t, 0, len(builds))
56 builds, err = db.GetBuildsFromDateRange(b1Before, b1After)
57 assert.NoError(t, err)
58 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
59 builds, err = db.GetBuildsFromDateRange(b1After, timeEnd)
60 assert.NoError(t, err)
61 assert.Equal(t, 0, len(builds))
62
63 // Insert two more builds.
64 b2 := makeBuild("build2", time.Unix(0, 1470674376000000), []string{"e", "f"})
65 b3 := makeBuild("build3", time.Unix(0, 1470674884000000), []string{"g", "h"})
66 assert.NoError(t, db.PutBuilds([]*Build{b2, b3}))
67
68 // Ensure that both builds show up in the modified list.
69 builds, err = db.GetModifiedBuilds(id)
70 assert.NoError(t, err)
71 testutils.AssertDeepEqual(t, []*Build{b2, b3}, builds)
72
73 // Ensure that all builds show up in the correct time ranges, in sorted order.
74 b2Created, err := b2.Created()
75 assert.NoError(t, err)
76 b2Before := b2Created.Add(-1 * time.Millisecond)
77 b2After := b2Created.Add(1 * time.Millisecond)
78
79 b3Created, err := b3.Created()
80 assert.NoError(t, err)
81 b3Before := b3Created.Add(-1 * time.Millisecond)
82 b3After := b3Created.Add(1 * time.Millisecond)
83
84 builds, err = db.GetBuildsFromDateRange(timeStart, b1Before)
85 assert.NoError(t, err)
86 assert.Equal(t, 0, len(builds))
87
88 builds, err = db.GetBuildsFromDateRange(timeStart, b1After)
89 assert.NoError(t, err)
90 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
91
92 builds, err = db.GetBuildsFromDateRange(timeStart, b2Before)
93 assert.NoError(t, err)
94 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
95
96 builds, err = db.GetBuildsFromDateRange(timeStart, b2After)
97 assert.NoError(t, err)
98 testutils.AssertDeepEqual(t, []*Build{b1, b2}, builds)
99
100 builds, err = db.GetBuildsFromDateRange(timeStart, b3Before)
101 assert.NoError(t, err)
102 testutils.AssertDeepEqual(t, []*Build{b1, b2}, builds)
103
104 builds, err = db.GetBuildsFromDateRange(timeStart, b3After)
105 assert.NoError(t, err)
106 testutils.AssertDeepEqual(t, []*Build{b1, b2, b3}, builds)
107
108 builds, err = db.GetBuildsFromDateRange(timeStart, timeEnd)
109 assert.NoError(t, err)
110 testutils.AssertDeepEqual(t, []*Build{b1, b2, b3}, builds)
111
112 builds, err = db.GetBuildsFromDateRange(b1Before, timeEnd)
113 assert.NoError(t, err)
114 testutils.AssertDeepEqual(t, []*Build{b1, b2, b3}, builds)
115
116 builds, err = db.GetBuildsFromDateRange(b1After, timeEnd)
117 assert.NoError(t, err)
118 testutils.AssertDeepEqual(t, []*Build{b2, b3}, builds)
119
120 builds, err = db.GetBuildsFromDateRange(b2Before, timeEnd)
121 assert.NoError(t, err)
122 testutils.AssertDeepEqual(t, []*Build{b2, b3}, builds)
123
124 builds, err = db.GetBuildsFromDateRange(b2After, timeEnd)
125 assert.NoError(t, err)
126 testutils.AssertDeepEqual(t, []*Build{b3}, builds)
127
128 builds, err = db.GetBuildsFromDateRange(b3Before, timeEnd)
129 assert.NoError(t, err)
130 testutils.AssertDeepEqual(t, []*Build{b3}, builds)
131
132 builds, err = db.GetBuildsFromDateRange(b3After, timeEnd)
133 assert.NoError(t, err)
134 testutils.AssertDeepEqual(t, []*Build{}, builds)
135 }
136
137 func testTooManyUsers(t *testing.T, db DB) {
138 defer testutils.AssertCloses(t, db)
139
140 // Max out the number of modified-builds users; ensure that we error out .
141 for i := 0; i < MAX_MODIFIED_BUILDS_USERS; i++ {
142 _, err := db.StartTrackingModifiedBuilds()
143 assert.NoError(t, err)
144 }
145 _, err := db.StartTrackingModifiedBuilds()
146 assert.True(t, IsTooManyUsers(err))
147 }
148
149 func TestInMemoryDB(t *testing.T) {
150 testDB(t, NewInMemoryDB())
151 }
152
153 func TestInMemoryTooManyUsers(t *testing.T) {
154 testTooManyUsers(t, NewInMemoryDB())
155 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698