| 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) |
| } |