public void CreateRequestShouldReturnCancelStatusWhenJobHasStartedAndBeenCanceled() { WaitForNodeToFinishWorking(); var startedTest = DateTime.UtcNow; var manualResetEventSlim = new ManualResetEventSlim(); var checkTablesInManagerDbTimer = new CheckTablesInManagerDbTimer(ManagerDbConnectionString, 100); bool sentCancel = false; checkTablesInManagerDbTimer.GetJobItems += (sender, items) => { if (items.Any() && items.All(job => job.Ended == null) && sentCancel == false) { sentCancel = true; HttpRequestManager.CancelJob(items.First().JobId); } if (items.Any() && items.All(job => job.Ended != null)) { manualResetEventSlim.Set(); } }; checkTablesInManagerDbTimer.JobTimer.Start(); var jobQueueItem = JobHelper.GenerateTestJobRequests(1, 60).First(); var jobId = HttpRequestManager.AddJob(jobQueueItem); manualResetEventSlim.Wait(TimeSpan.FromSeconds(10)); Assert.IsTrue(!checkTablesInManagerDbTimer.ManagerDbRepository.JobQueueItems.Any(), "Job queue must be empty."); Assert.IsTrue(checkTablesInManagerDbTimer.ManagerDbRepository.Jobs.Any(), "Jobs must have been added."); Assert.IsTrue(checkTablesInManagerDbTimer.ManagerDbRepository.Jobs.Any(job => job.Result.StartsWith("Canceled", StringComparison.InvariantCultureIgnoreCase))); checkTablesInManagerDbTimer.Dispose(); var endedTest = DateTime.UtcNow; var description = string.Format("Creates Cancel Job with {0} manager and {1} nodes.", NumberOfManagers, NumberOfNodes); DatabaseHelper.AddPerformanceData(ManagerDbConnectionString, description, startedTest, endedTest); }
public void NodeShouldNotGetStuckWhenCancellingOrFailingJobs() { WaitForNodeToFinishWorking(); var jobRepository = new ManagerDbRepository(ManagerDbConnectionString); var jobQueueItemCancel = JobHelper.GenerateTestJobRequests(1, 60).First(); var jobQueueItemFail = JobHelper.GenerateFailingJobParamsRequests(1).First(); var jobQueueItemSuccess = JobHelper.GenerateTestJobRequests(1, 2).First(); var cancelId = HttpRequestManager.AddJob(jobQueueItemCancel); WaitForNodeToStartWorking(); HttpRequestManager.CancelJob(cancelId); WaitForNodeToFinishWorking(); Thread.Sleep(TimeSpan.FromSeconds(2)); HttpRequestManager.AddJob(jobQueueItemFail); Thread.Sleep(TimeSpan.FromSeconds(2)); //might be a risc it ends before we see it is working.. WaitForNodeToFinishWorking(); Thread.Sleep(TimeSpan.FromSeconds(2)); HttpRequestManager.AddJob(jobQueueItemSuccess); WaitForNodeToStartWorking(); WaitForNodeToFinishWorking(); Thread.Sleep(TimeSpan.FromSeconds(2)); var queueItems = jobRepository.JobQueueItems; var jobs = jobRepository.Jobs; Assert.IsTrue(!queueItems.Any(), "Job queue must be empty."); Assert.IsTrue(jobs.Any(), "Jobs must have been added."); Assert.IsTrue(jobs.Any(job => job.Result.StartsWith("Canceled", StringComparison.InvariantCultureIgnoreCase))); Assert.IsTrue(jobs.Any(job => job.Result.StartsWith("fail", StringComparison.InvariantCultureIgnoreCase))); Assert.IsTrue(jobs.Any(job => job.Result.StartsWith("success", StringComparison.InvariantCultureIgnoreCase))); }