func TestPollAndExecOnceError(t *testing.T) { task := pendingRecreateWebpageArchivesTask() mockServer := frontend.MockServer{} mockServer.SetCurrentTask(&task.RecreateWebpageArchivesDBTask) defer frontend.CloseTestServer(frontend.InitTestServer(&mockServer)) commandCollector := exec.CommandCollector{} mockRun := exec.MockRun{} commandCollector.SetDelegateRun(mockRun.Run) exec.SetRunForTesting(commandCollector.Run) defer exec.SetRunForTesting(exec.DefaultRun) mockRun.AddRule("capture_archives_on_workers", fmt.Errorf("workers too lazy")) pollAndExecOnce() // Expect only one poll. expect.Equal(t, 1, mockServer.OldestPendingTaskReqCount()) // Expect three commands: git pull; make all; capture_archives_on_workers ... commands := commandCollector.Commands() assert.Len(t, commands, 3) expect.Equal(t, "git pull", exec.DebugString(commands[0])) expect.Equal(t, "make all", exec.DebugString(commands[1])) expect.Equal(t, "capture_archives_on_workers", commands[2].Name) // Expect an update marking task failed when command fails to execute. assert.Len(t, mockServer.UpdateTaskReqs(), 1) updateReq := mockServer.UpdateTaskReqs()[0] assert.Equal(t, "/"+ctfeutil.UPDATE_RECREATE_WEBPAGE_ARCHIVES_TASK_POST_URI, updateReq.Url) assert.NoError(t, updateReq.Error) assert.False(t, updateReq.Vars.TsStarted.Valid) assert.True(t, updateReq.Vars.TsCompleted.Valid) assert.True(t, updateReq.Vars.Failure.Valid) assert.True(t, updateReq.Vars.Failure.Bool) assert.False(t, updateReq.Vars.RepeatAfterDays.Valid) assert.Equal(t, int64(42), updateReq.Vars.Id) }
func TestPollAndExecOnceMultipleTasks(t *testing.T) { task1 := pendingRecreateWebpageArchivesTask() mockServer := frontend.MockServer{} mockServer.SetCurrentTask(&task1.RecreateWebpageArchivesDBTask) defer frontend.CloseTestServer(frontend.InitTestServer(&mockServer)) mockExec := exec.CommandCollector{} exec.SetRunForTesting(mockExec.Run) defer exec.SetRunForTesting(exec.DefaultRun) // Poll frontend and execute the first task. pollAndExecOnce() // Update current task. task2 := pendingChromiumPerfTask() mockServer.SetCurrentTask(&task2.DBTask) // Poll frontend and execute the second task. pollAndExecOnce() // Expect two pending task requests. expect.Equal(t, 2, mockServer.OldestPendingTaskReqCount()) // Expect six commands: git pull; make all; capture_archives_on_workers ...; git pull; // make all; run_chromium_perf_on_workers ... commands := mockExec.Commands() assert.Len(t, commands, 6) expect.Equal(t, "git pull", exec.DebugString(commands[0])) expect.Equal(t, "make all", exec.DebugString(commands[1])) expect.Equal(t, "capture_archives_on_workers", commands[2].Name) expect.Equal(t, "git pull", exec.DebugString(commands[3])) expect.Equal(t, "make all", exec.DebugString(commands[4])) expect.Equal(t, "run_chromium_perf_on_workers", commands[5].Name) // No updates expected when commands succeed. expect.Empty(t, mockServer.UpdateTaskReqs()) }
// Test that updateWebappTaskSetFailed returns an error when the server response indicates an error. func TestUpdateWebappTaskSetFailedFailure(t *testing.T) { errstr := "You must be at least this tall to ride this ride." task := pendingRecreateWebpageArchivesTask() reqCount := 0 mockServer := func(w http.ResponseWriter, r *http.Request) { reqCount++ assert.Equal(t, "/"+ctfeutil.UPDATE_RECREATE_WEBPAGE_ARCHIVES_TASK_POST_URI, r.URL.Path) defer skutil.Close(r.Body) skutil.ReportError(w, r, fmt.Errorf(errstr), "") } defer frontend.CloseTestServer(frontend.InitTestServer(http.HandlerFunc(mockServer))) err := updateWebappTaskSetFailed(&task) assert.Error(t, err) assert.Contains(t, err.Error(), errstr) assert.Equal(t, 1, reqCount) }
// Test that updateWebappTaskSetFailed works. func TestUpdateWebappTaskSetFailed(t *testing.T) { task := pendingRecreateWebpageArchivesTask() mockServer := frontend.MockServer{} defer frontend.CloseTestServer(frontend.InitTestServer(&mockServer)) err := updateWebappTaskSetFailed(&task) assert.NoError(t, err) assert.Len(t, mockServer.UpdateTaskReqs(), 1) updateReq := mockServer.UpdateTaskReqs()[0] assert.Equal(t, "/"+ctfeutil.UPDATE_RECREATE_WEBPAGE_ARCHIVES_TASK_POST_URI, updateReq.Url) assert.NoError(t, updateReq.Error) assert.False(t, updateReq.Vars.TsStarted.Valid) assert.True(t, updateReq.Vars.TsCompleted.Valid) assert.True(t, updateReq.Vars.Failure.Valid) assert.True(t, updateReq.Vars.Failure.Bool) assert.False(t, updateReq.Vars.RepeatAfterDays.Valid) assert.Equal(t, int64(42), updateReq.Vars.Id) }
func TestPollAndExecOnceNoTasks(t *testing.T) { mockServer := frontend.MockServer{} mockServer.SetCurrentTask(nil) defer frontend.CloseTestServer(frontend.InitTestServer(&mockServer)) mockExec := exec.CommandCollector{} exec.SetRunForTesting(mockExec.Run) defer exec.SetRunForTesting(exec.DefaultRun) // Poll frontend, no tasks. pollAndExecOnce() pollAndExecOnce() pollAndExecOnce() // Expect three polls. expect.Equal(t, 3, mockServer.OldestPendingTaskReqCount()) // Expect no commands. expect.Empty(t, mockExec.Commands()) // No updates expected. expect.Empty(t, mockServer.UpdateTaskReqs()) }
func TestPollAndExecOnce(t *testing.T) { task := pendingRecreateWebpageArchivesTask() mockServer := frontend.MockServer{} mockServer.SetCurrentTask(&task.RecreateWebpageArchivesDBTask) defer frontend.CloseTestServer(frontend.InitTestServer(&mockServer)) mockExec := exec.CommandCollector{} exec.SetRunForTesting(mockExec.Run) defer exec.SetRunForTesting(exec.DefaultRun) pollAndExecOnce() // Expect only one poll. expect.Equal(t, 1, mockServer.OldestPendingTaskReqCount()) // Expect three commands: git pull; make all; capture_archives_on_workers ... commands := mockExec.Commands() assert.Len(t, commands, 3) expect.Equal(t, "git pull", exec.DebugString(commands[0])) expect.Equal(t, "make all", exec.DebugString(commands[1])) expect.Equal(t, "capture_archives_on_workers", commands[2].Name) // No updates expected. (capture_archives_on_workers would send updates if it were // executed.) expect.Empty(t, mockServer.UpdateTaskReqs()) }