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

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: Address more comments 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
« no previous file with comments | « build_scheduler/go/db/db.go ('k') | build_scheduler/go/db/memory.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 "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 Builder: "Test-Builder",
21 Commits: commits,
22 }
23 }
24
25 func testDB(t *testing.T, db DB) {
26 defer testutils.AssertCloses(t, db)
27
28 _, err := db.GetModifiedBuilds("dummy-id")
29 assert.True(t, IsUnknownId(err))
30
31 id, err := db.StartTrackingModifiedBuilds()
32 assert.NoError(t, err)
33
34 builds, err := db.GetModifiedBuilds(id)
35 assert.NoError(t, err)
36 assert.Equal(t, 0, len(builds))
37
38 // Insert a build.
39 b1 := makeBuild("build1", time.Unix(0, 1470674132000000), []string{"a", "b", "c", "d"})
40 assert.NoError(t, db.PutBuild(b1))
41
42 // Ensure that the build shows up in the modified list.
43 builds, err = db.GetModifiedBuilds(id)
44 assert.NoError(t, err)
45 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
46
47 // Ensure that the build shows up in the correct date ranges.
48 timeStart := time.Time{}
49 b1Before, err := b1.Created()
50 assert.NoError(t, err)
51 b1After := b1Before.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 b2Before, err := b2.Created()
75 assert.NoError(t, err)
76 b2After := b2Before.Add(1 * time.Millisecond)
77
78 b3Before, err := b3.Created()
79 assert.NoError(t, err)
80 b3After := b3Before.Add(1 * time.Millisecond)
81
82 builds, err = db.GetBuildsFromDateRange(timeStart, b1Before)
83 assert.NoError(t, err)
84 assert.Equal(t, 0, len(builds))
85
86 builds, err = db.GetBuildsFromDateRange(timeStart, b1After)
87 assert.NoError(t, err)
88 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
89
90 builds, err = db.GetBuildsFromDateRange(timeStart, b2Before)
91 assert.NoError(t, err)
92 testutils.AssertDeepEqual(t, []*Build{b1}, builds)
93
94 builds, err = db.GetBuildsFromDateRange(timeStart, b2After)
95 assert.NoError(t, err)
96 testutils.AssertDeepEqual(t, []*Build{b1, b2}, builds)
97
98 builds, err = db.GetBuildsFromDateRange(timeStart, b3Before)
99 assert.NoError(t, err)
100 testutils.AssertDeepEqual(t, []*Build{b1, b2}, builds)
101
102 builds, err = db.GetBuildsFromDateRange(timeStart, b3After)
103 assert.NoError(t, err)
104 testutils.AssertDeepEqual(t, []*Build{b1, b2, b3}, builds)
105
106 builds, err = db.GetBuildsFromDateRange(timeStart, timeEnd)
107 assert.NoError(t, err)
108 testutils.AssertDeepEqual(t, []*Build{b1, b2, b3}, builds)
109
110 builds, err = db.GetBuildsFromDateRange(b1Before, timeEnd)
111 assert.NoError(t, err)
112 testutils.AssertDeepEqual(t, []*Build{b1, b2, b3}, builds)
113
114 builds, err = db.GetBuildsFromDateRange(b1After, timeEnd)
115 assert.NoError(t, err)
116 testutils.AssertDeepEqual(t, []*Build{b2, b3}, builds)
117
118 builds, err = db.GetBuildsFromDateRange(b2Before, timeEnd)
119 assert.NoError(t, err)
120 testutils.AssertDeepEqual(t, []*Build{b2, b3}, builds)
121
122 builds, err = db.GetBuildsFromDateRange(b2After, timeEnd)
123 assert.NoError(t, err)
124 testutils.AssertDeepEqual(t, []*Build{b3}, builds)
125
126 builds, err = db.GetBuildsFromDateRange(b3Before, timeEnd)
127 assert.NoError(t, err)
128 testutils.AssertDeepEqual(t, []*Build{b3}, builds)
129
130 builds, err = db.GetBuildsFromDateRange(b3After, timeEnd)
131 assert.NoError(t, err)
132 testutils.AssertDeepEqual(t, []*Build{}, builds)
133 }
134
135 func testTooManyUsers(t *testing.T, db DB) {
136 defer testutils.AssertCloses(t, db)
137
138 // Max out the number of modified-builds users; ensure that we error out .
139 for i := 0; i < MAX_MODIFIED_BUILDS_USERS; i++ {
140 _, err := db.StartTrackingModifiedBuilds()
141 assert.NoError(t, err)
142 }
143 _, err := db.StartTrackingModifiedBuilds()
144 assert.True(t, IsTooManyUsers(err))
145 }
146
147 func TestInMemoryDB(t *testing.T) {
148 testDB(t, NewInMemoryDB())
149 }
150
151 func TestInMemoryTooManyUsers(t *testing.T) {
152 testTooManyUsers(t, NewInMemoryDB())
153 }
OLDNEW
« no previous file with comments | « build_scheduler/go/db/db.go ('k') | build_scheduler/go/db/memory.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698