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()); }
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)); }