예제 #1
0
        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);
        }
예제 #2
0
        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)));
        }