public void ChooseNextTaskForProcessorSkipProcessorTaskJob()
        {
            FakeTaskProcessorRuntimeInfo taskProcessorInfo = new FakeTaskProcessorRuntimeInfo()
            {
                TaskProcessorId = Guid.NewGuid(),
                Configuration   = new FakeTaskProcessorConfiguration()
            };

            taskProcessorInfo.Configuration.Tasks.Add(typeof(FakeTask)).MaxWorkers = 1;

            this.Repository.TaskProcessorRuntimeInfo.Add(taskProcessorInfo);

            FakeTaskRuntimeInfo pendingTaskToSkip = this.Repository.TaskRuntimeInfo.Create <FakeTaskRuntimeInfo>();

            pendingTaskToSkip.Priority = TaskPriority.Low;

            this.Repository.TaskRuntimeInfo.Add(pendingTaskToSkip);

            FakeTaskRuntimeInfo pendingTask = this.Repository.TaskRuntimeInfo.Create <FakeTaskRuntimeInfo>();

            pendingTask.Priority = TaskPriority.High;

            this.Repository.TaskRuntimeInfo.Add(pendingTask);

            IEnumerable <ITaskRuntimeInfo> result = this.TaskDistributor.ChooseNextTasksForProcessor(taskProcessorInfo.TaskProcessorId);

            Assert.AreEqual(pendingTask, result.Single());
        }
        private void ChooseNextTaskForProcessorOrder(TaskPriority higher, TaskPriority smaller)
        {
            FakeTaskProcessorRuntimeInfo taskProcessorInfo = new FakeTaskProcessorRuntimeInfo()
            {
                TaskProcessorId = Guid.NewGuid(),
                Configuration   = new FakeTaskProcessorConfiguration()
            };

            this.Repository.TaskProcessorRuntimeInfo.Add(taskProcessorInfo);

            FakeTaskRuntimeInfo pendingTaskInfo1 = this.Repository.TaskRuntimeInfo.Create <FakeTaskRuntimeInfo>();

            pendingTaskInfo1.Priority = smaller;

            this.Repository.TaskRuntimeInfo.Add(pendingTaskInfo1);

            FakeTaskRuntimeInfo pendingTaskInfo2 = this.Repository.TaskRuntimeInfo.Create <FakeTaskRuntimeInfo>();

            pendingTaskInfo1.Priority = higher;

            this.Repository.TaskRuntimeInfo.Add(pendingTaskInfo2);

            var result = this.TaskDistributor.ChooseNextTasksForProcessor(taskProcessorInfo.TaskProcessorId);

            Assert.AreEqual(2, result.Count());
            Assert.AreEqual(pendingTaskInfo2, result.First());
            Assert.AreEqual(pendingTaskInfo1, result.Last());
        }
Ejemplo n.º 3
0
        private void AssignTasksToProcessorTest(Guid taskProcessorId, Action callback)
        {
            this.MasterCommandsProcessor.IsActive = false;

            ITaskProcessorRuntimeInfo processorInfo = this.Repository.TaskProcessorRuntimeInfo.Create(taskProcessorId, "Test");

            this.Repository.TaskProcessorRuntimeInfo.Add(processorInfo);

            ITaskRuntimeInfo pendingTaskInfo1 = new FakeTaskRuntimeInfo()
            {
                TaskId       = Guid.NewGuid(),
                SubmittedUtc = DateTime.UtcNow
            };

            ITaskRuntimeInfo pendingTaskInfo2 = new FakeTaskRuntimeInfo()
            {
                TaskId       = Guid.NewGuid(),
                SubmittedUtc = DateTime.UtcNow
            };

            ITaskRuntimeInfo activeTaskInfo1 = new FakeTaskRuntimeInfo()
            {
                TaskId       = Guid.NewGuid(),
                SubmittedUtc = DateTime.UtcNow
            };

            ITaskRuntimeInfo activeTaskInfo2 = new FakeTaskRuntimeInfo()
            {
                TaskId       = Guid.NewGuid(),
                SubmittedUtc = DateTime.UtcNow
            };

            this.Repository.TaskRuntimeInfo.Add(pendingTaskInfo1);
            this.Repository.TaskRuntimeInfo.Add(pendingTaskInfo2);
            this.Repository.TaskRuntimeInfo.Add(activeTaskInfo1);
            this.Repository.TaskRuntimeInfo.Add(activeTaskInfo2);

            this.Repository.TaskRuntimeInfo.Start(activeTaskInfo1.TaskId, Guid.Empty, DateTime.UtcNow);
            this.Repository.TaskRuntimeInfo.Start(activeTaskInfo2.TaskId, Guid.Empty, DateTime.UtcNow);

            this.TaskDistributor.PredefineResult(
                new ITaskRuntimeInfo[] { pendingTaskInfo1, pendingTaskInfo2 },
                d => d.ChooseNextTasksForProcessor(processorInfo.TaskProcessorId));

            this.MasterCommandsProcessor.AssignTaskTimeout = TimeSpan.FromSeconds(0.5);

            this.MasterCommandsProcessor.IsActive = true;

            callback();

            Thread.Sleep(TimeSpan.FromSeconds(1.5));

            this.TaskDistributor.AssertMethodCallOnceWithArguments(d => d.ChooseNextTasksForProcessor(processorInfo.TaskProcessorId));

            foreach (ITaskRuntimeInfo taskInfo in new ITaskRuntimeInfo[] { pendingTaskInfo1, pendingTaskInfo2 })
            {
                this.MessageBus.Tasks.AssertMethodCallWithArguments(mb => mb.NotifyTaskAssigned(taskInfo.TaskId, taskProcessorId));
            }

            this.MessageBus.Tasks.AssertNoMethodCall(mb => mb.NotifyTaskAssigned(Guid.Empty, Guid.Empty));
        }