示例#1
0
        public void step_start_and_end_is_reported()
        {
            // Arrange
            StepStartedEvent?startedEvent = null;
            StepEndedEvent?  endedEvent   = null;

            var events = new TaskExecutionEvents();

            events.StepStarted += x => startedEvent = x;
            events.StepEnded   += x => endedEvent = x;

            var task = new TaskDefinition(
                BasicTaskStep.Empty("Step"));

            // Act
            task.Execute(events: events);

            // Assert
            startedEvent.Should().NotBeNull();
            startedEvent.Value.Step.Should().BeSameAs(task.Steps[0]);

            endedEvent.Should().NotBeNull();
            endedEvent.Value.Step.Should().BeSameAs(task.Steps[0]);
            endedEvent.Value.Duration.Should().BePositive();
        }
示例#2
0
 public override void HandleTaskExecEvent(TaskExecutionEvents.TaskExecEvent ev)
 {
     if (Status != TaskStatus.Enabled && Status != TaskStatus.Selected &&
         Status != TaskStatus.Enabling) return;
     if (ev is TaskTimerEvent)
     {
         if (DoFail)
         {
             ForceFail("FAIL");
         }
         else
         {
             Complete();
         }
     }
 }
示例#3
0
        public void test(ResolverType resolverType)
        {
            // Arrange
            var initialized = false;
            var sum         = 0;
            var completed   = false;

            var task = new TaskDefinition(
                new BasicTaskStep(
                    "Initialize",
                    () => { initialized = true; }),
                PipelineTaskStep
                .Builder <int>("Pipeline")
                .WithInput(new[] { 1, 2, 3, 4, 5, 6 })
                .WithBlock("Sum", x => sum += x)
                .WithBlock("Log", x => _output.WriteLine(x.ToString()))
                .Build(),
                new BasicTaskStep(
                    "Complete",
                    () => { completed = true; }));

            var progress           = new SynchronousProgress <TaskProgress>(x => _output.WriteLine($"{x.StepName}: {x.ProgressPercentage}%"));
            var cancellationSource = new CancellationTokenSource();

            var taskEvents = new TaskExecutionEvents(
                taskStarted: x => _output.WriteLine("Task started."),
                taskEnded: x => _output.WriteLine($"Task ended after {x.Duration.Ticks} ticks."),
                stepStarted: x => _output.WriteLine($"Step '{x.Step.Name}' started."),
                stepEnded: x => _output.WriteLine($"Step '{x.Step.Name}' ended after {x.Duration.Ticks} ticks."));

            var pipelineEvents = new PipelineExecutionEvents(
                itemStarted: x => _output.WriteLine($"Item {x.ItemNumber} of step '{x.Step.Name}' started."),
                itemEnded: x => _output.WriteLine($"Item {x.ItemNumber} of step '{x.Step.Name}' ended after {x.Duration.Ticks} ticks."),
                blockStarted: x => _output.WriteLine($"Block '{x.Block.Name}' of step '{x.Step.Name}' started processing item {x.ItemNumber}."),
                blockEnded: x => _output.WriteLine($"Block '{x.Block.Name}' of step '{x.Step.Name}' ended processing item {x.ItemNumber} after {x.Duration.Ticks} ticks."));

            // Act
            var result = task.Execute(resolverType, progress, cancellationSource, taskEvents, pipelineEvents);

            // Assert
            result.Outcome.Should().Be(TaskOutcome.Successful);
            initialized.Should().Be(true);
            sum.Should().Be(21);
            completed.Should().Be(true);
        }
示例#4
0
        private void test(
            ResolverType resolverType,
            ITaskStep taskStep,
            ICollection <float> expectedProgressReports)
        {
            // Arrange
            var progressReports = new List <StepProgressedEvent>();

            var task   = new TaskDefinition(taskStep);
            var events = new TaskExecutionEvents(stepProgressed: progressReports.Add);

            // Act
            task.Execute(resolverType, events: events);

            // Assert
            progressReports.Should().HaveCount(expectedProgressReports.Count);
            progressReports.Select(x => x.Step.Name).Should().OnlyContain(x => x == taskStep.Name);
            progressReports.Select(x => x.Progress).Should().BeEquivalentTo(expectedProgressReports);
        }
示例#5
0
        public void events_can_be_registered_for_Executor_instance()
        {
            // Arrange
            var eventHandled = false;

            var events = new TaskExecutionEvents(
                taskStarted: _ => eventHandled = true);

            var task = new TaskDefinition(
                BasicTaskStep.Empty("Step"));

            // Act
            var executor = TaskExecutorFactory.Create(ResolverType.Sequential, events);

            executor.Execute(task);

            // Assert
            eventHandled.Should().BeTrue();
        }
示例#6
0
        public void step_skip_is_reported()
        {
            // Arrange
            StepSkippedEvent?skippedEvent = null;

            var events = new TaskExecutionEvents(
                stepSkipped: x => skippedEvent = x);

            var task = new TaskDefinition(
                new BasicTaskStep(
                    "Step",
                    () => { },
                    _ => false));

            // Act
            task.Execute(events: events);

            // Assert
            skippedEvent.Should().NotBeNull();
            skippedEvent.Value.Step.Should().BeSameAs(task.Steps[0]);
        }
示例#7
0
        public void step_cancellation_is_reported()
        {
            // Arrange
            StepCanceledEvent?canceledEvent = null;

            var events = new TaskExecutionEvents(
                stepCanceled: x => canceledEvent = x);

            var cancellationSource = new CancellationTokenSource();

            var task = new TaskDefinition(
                new BasicTaskStep(
                    "Step",
                    () => cancellationSource.Cancel()));

            // Act
            task.Execute(cancellation: cancellationSource, events: events);

            // Assert
            canceledEvent.Should().NotBeNull();
            canceledEvent.Value.Step.Should().BeSameAs(task.Steps[0]);
        }
示例#8
0
        public void global_and_one_time_events_are_merged()
        {
            // Arrange
            var globalEventHandled = false;
            var globalEvents       = new TaskExecutionEvents(
                taskStarted: _ => globalEventHandled = true);

            var oneTimeEventHandled = false;
            var oneTimeEvents       = new TaskExecutionEvents(
                taskStarted: _ => oneTimeEventHandled = true);

            var task = new TaskDefinition(
                BasicTaskStep.Empty("Step"));

            // Act
            var executor = TaskExecutorFactory.Create(ResolverType.Sequential, globalEvents);

            executor.Execute(task, events: oneTimeEvents);

            // Assert
            globalEventHandled.Should().BeTrue();
            oneTimeEventHandled.Should().BeTrue();
        }
示例#9
0
        public void step_failure_is_reported()
        {
            // Arrange
            StepFailedEvent?failedEvent = null;

            var events = new TaskExecutionEvents(
                stepFailed: x => failedEvent = x);

            var exception = new Exception();

            var task = new TaskDefinition(
                new BasicTaskStep(
                    "Step",
                    () => throw exception));

            // Act
            task.Execute(events: events);

            // Assert
            failedEvent.Should().NotBeNull();
            failedEvent.Value.Exception.InnerException.Should().BeSameAs(exception);
            failedEvent.Value.Step.Should().BeSameAs(task.Steps[0]);
        }
示例#10
0
        public void task_start_and_end_is_reported()
        {
            // Arrange
            TaskStartedEvent?startedEvent = null;
            TaskEndedEvent?  endedEvent   = null;

            var events = new TaskExecutionEvents(
                taskStarted: x => startedEvent = x,
                taskEnded: x => endedEvent     = x);

            var task = new TaskDefinition(
                BasicTaskStep.Empty("Step"));

            // Act
            task.Execute(events: events);

            // Assert
            startedEvent.Should().NotBeNull();
            startedEvent.Value.Task.Should().BeSameAs(task);

            endedEvent.Should().NotBeNull();
            endedEvent.Value.Task.Should().BeSameAs(task);
            endedEvent.Value.Duration.Should().BePositive();
        }