Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 } | |
| OLD | NEW |