blob: f6d6792d9aa61b144edf5365ebaefa10f40a3782 [file] [log] [blame]
package db
import (
"testing"
"time"
assert "github.com/stretchr/testify/require"
"go.skia.org/infra/go/testutils"
)
func TestModifiedTasks(t *testing.T) {
testutils.SmallTest(t)
m := ModifiedTasks{}
_, err := m.GetModifiedTasks("dummy-id")
assert.True(t, IsUnknownId(err))
id, err := m.StartTrackingModifiedTasks()
assert.NoError(t, err)
tasks, err := m.GetModifiedTasks(id)
assert.NoError(t, err)
assert.Equal(t, 0, len(tasks))
t1 := makeTask(time.Unix(0, 1470674132000000), []string{"a", "b", "c", "d"})
t1.Id = "1"
// Insert the task.
m.TrackModifiedTask(t1)
// Ensure that the task shows up in the modified list.
tasks, err = m.GetModifiedTasks(id)
assert.NoError(t, err)
testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
// Insert two more tasks.
t2 := makeTask(time.Unix(0, 1470674376000000), []string{"e", "f"})
t2.Id = "2"
m.TrackModifiedTask(t2)
t3 := makeTask(time.Unix(0, 1470674884000000), []string{"g", "h"})
t3.Id = "3"
m.TrackModifiedTask(t3)
// Ensure that both tasks show up in the modified list.
tasks, err = m.GetModifiedTasks(id)
assert.NoError(t, err)
testutils.AssertDeepEqual(t, []*Task{t2, t3}, tasks)
// Check StopTrackingModifiedTasks.
m.StopTrackingModifiedTasks(id)
_, err = m.GetModifiedTasks(id)
assert.True(t, IsUnknownId(err))
}
// Test that if a Task is modified multiple times, it only appears once in the
// result of GetModifiedTasks.
func TestMultipleTaskModifications(t *testing.T) {
testutils.SmallTest(t)
m := ModifiedTasks{}
id, err := m.StartTrackingModifiedTasks()
assert.NoError(t, err)
t1 := makeTask(time.Unix(0, 1470674132000000), []string{"a", "b", "c", "d"})
t1.Id = "1"
// Insert the task.
m.TrackModifiedTask(t1)
// Make several more modifications.
t1.Status = TASK_STATUS_RUNNING
m.TrackModifiedTask(t1)
t1.Status = TASK_STATUS_SUCCESS
m.TrackModifiedTask(t1)
// Ensure that the task shows up only once in the modified list.
tasks, err := m.GetModifiedTasks(id)
assert.NoError(t, err)
testutils.AssertDeepEqual(t, []*Task{t1}, tasks)
}
func TestModifiedTasksTooManyUsers(t *testing.T) {
testutils.SmallTest(t)
m := ModifiedTasks{}
var oneId string
// Max out the number of modified-tasks users; ensure that we error out.
for i := 0; i < MAX_MODIFIED_DATA_USERS; i++ {
id, err := m.StartTrackingModifiedTasks()
assert.NoError(t, err)
oneId = id
}
_, err := m.StartTrackingModifiedTasks()
assert.True(t, IsTooManyUsers(err))
m.StopTrackingModifiedTasks(oneId)
_, err = m.StartTrackingModifiedTasks()
assert.NoError(t, err)
}
func TestModifiedJobs(t *testing.T) {
testutils.SmallTest(t)
m := ModifiedJobs{}
_, err := m.GetModifiedJobs("dummy-id")
assert.True(t, IsUnknownId(err))
id, err := m.StartTrackingModifiedJobs()
assert.NoError(t, err)
jobs, err := m.GetModifiedJobs(id)
assert.NoError(t, err)
assert.Equal(t, 0, len(jobs))
j1 := makeJob(time.Unix(0, 1470674132000000))
j1.Id = "1"
// Insert the job.
m.TrackModifiedJob(j1)
// Ensure that the job shows up in the modified list.
jobs, err = m.GetModifiedJobs(id)
assert.NoError(t, err)
testutils.AssertDeepEqual(t, []*Job{j1}, jobs)
// Insert two more jobs.
j2 := makeJob(time.Unix(0, 1470674376000000))
j2.Id = "2"
m.TrackModifiedJob(j2)
j3 := makeJob(time.Unix(0, 1470674884000000))
j3.Id = "3"
m.TrackModifiedJob(j3)
// Ensure that both jobs show up in the modified list.
jobs, err = m.GetModifiedJobs(id)
assert.NoError(t, err)
testutils.AssertDeepEqual(t, []*Job{j2, j3}, jobs)
// Check StopTrackingModifiedJobs.
m.StopTrackingModifiedJobs(id)
_, err = m.GetModifiedJobs(id)
assert.True(t, IsUnknownId(err))
}
func TestMultipleJobModifications(t *testing.T) {
testutils.SmallTest(t)
m := ModifiedJobs{}
id, err := m.StartTrackingModifiedJobs()
assert.NoError(t, err)
j1 := makeJob(time.Unix(0, 1470674132000000))
j1.Id = "1"
// Insert the job.
m.TrackModifiedJob(j1)
// Make several more modifications.
j1.Status = JOB_STATUS_IN_PROGRESS
m.TrackModifiedJob(j1)
j1.Status = JOB_STATUS_SUCCESS
m.TrackModifiedJob(j1)
// Ensure that the task shows up only once in the modified list.
jobs, err := m.GetModifiedJobs(id)
assert.NoError(t, err)
testutils.AssertDeepEqual(t, []*Job{j1}, jobs)
}
func TestModifiedJobsTooManyUsers(t *testing.T) {
testutils.SmallTest(t)
m := ModifiedJobs{}
var oneId string
// Max out the number of modified-tasks users; ensure that we error out.
for i := 0; i < MAX_MODIFIED_DATA_USERS; i++ {
id, err := m.StartTrackingModifiedJobs()
assert.NoError(t, err)
oneId = id
}
_, err := m.StartTrackingModifiedJobs()
assert.True(t, IsTooManyUsers(err))
m.StopTrackingModifiedJobs(oneId)
_, err = m.StartTrackingModifiedJobs()
assert.NoError(t, err)
}