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) }
// Test that an error executing check_workers_health does not bubble up. func TestDoWorkerHealthCheckError(t *testing.T) { commandCollector := exec.CommandCollector{} mockRun := exec.MockRun{} commandCollector.SetDelegateRun(mockRun.Run) exec.SetRunForTesting(commandCollector.Run) defer exec.SetRunForTesting(exec.DefaultRun) mockRun.AddRule("check_workers_health", fmt.Errorf("I'm not a doctor.")) // Expect error to be logged and ignored. doWorkerHealthCheck() // Expect three commands: git pull; make all; check_workers_health --log_dir=/b/storage/glog 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, "check_workers_health --log_dir=/b/storage/glog --local=false", exec.DebugString(commands[2])) }