Beispiel #1
0
        public void reporter_creates_and_fills_execution_reports()
        {
            // Arrange
            var task = new TaskDefinition(
                BasicTaskStep.Empty("Basic"),
                new PipelineTaskStep <int>(
                    "Pipeline1",
                    new[] { 1 },
                    new List <PipelineBlock <int> >()),
                new PipelineTaskStep <int>(
                    "Pipeline2",
                    new[] { 1 },
                    new List <PipelineBlock <int> >()));

            var loggerEvents   = TaskExecutionLogger.CreateEvents();
            var reporterEvents = TaskExecutionReporter.CreateEvents();

            // Act
            task.Execute(events: loggerEvents.Concat(reporterEvents).ToArray());

            // Assert
            var reports = task.GetExecutionReports();

            reports.Should().NotBeNull().And.NotBeEmpty();
            reports.Should().Contain(x => x.Name == "charts.html");
            reports.Should().Contain(x => x.Name == "Pipeline1_charts.html");
            reports.Should().Contain(x => x.Name == "Pipeline2_charts.html");
            reports.Should().OnlyContain(x => x.Content.StartsWith("<html>"));
        }
Beispiel #2
0
        public async Task Task_01_Void_04_Success()
        {
            var logger = Substitute.For <ILoggerFacade>();

            var tel = new TaskExecutionLogger();
            await tel.ExecuteAsync(TaskName, Helpers.ServerReturnsFastAsync, logger, 1000);

            logger.DidNotReceiveWithAnyArgs().Log("", Category.Exception);
        }
Beispiel #3
0
        public async Task Task_02_Generic_01_Timeout()
        {
            var logger = Substitute.For <ILoggerFacade>();

            var tel = new TaskExecutionLogger();

            try
            {
                await tel.ExecuteAsync(TaskName, Helpers.ServerTimeoutEarlierAsync_Generic, logger, 1000);
            }
            catch
            {
                logger.Received().Log(TaskName + " is time out", Category.Exception);
            }
        }
Beispiel #4
0
        public async Task Task_01_Void_02_CallerTimeout()
        {
            var logger = Substitute.For <ILoggerFacade>();

            var tel = new TaskExecutionLogger();

            try
            {
                await tel.ExecuteAsync(TaskName, Helpers.ServerTimeoutLaterAsync, logger, 1000);
            }
            catch
            {
                logger.Received().Log(TaskName + " is not returned in 1000ms", Category.Exception);
            }
        }
Beispiel #5
0
        public void task_fails___does_not_break()
        {
            // Arrange
            var task = new TaskDefinition(
                new BasicTaskStep(
                    "Failing step",
                    () => throw new Exception()));

            var events = TaskExecutionLogger.CreateEvents();

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

            // Assert
            var log = task.GetExecutionLog();

            log.Should().NotBeNull();
        }
Beispiel #6
0
        public void Task_01_Void_03_CallerCancel()
        {
            var logger = Substitute.For <ILoggerFacade>();

            var evt = new ManualResetEvent(false);

            var tel = new TaskExecutionLogger();
            CancellationTokenSource cts;

            tel.ExecuteAsync(TaskName, Helpers.ServerNeverReturnsAsync, logger, 3000, out cts).ContinueWith(t =>
            {
                logger.Received().Log(TaskName + " is canceled", Category.Exception);
                evt.Set();
            });

            Task.Delay(2000).ContinueWith(t => cts.Cancel());

            evt.WaitOne();
        }
Beispiel #7
0
        public void logger_creates_and_fills_execution_log()
        {
            // Arrange
            var task = new TaskDefinition(
                BasicTaskStep.Empty("Step"));

            var events = TaskExecutionLogger.CreateEvents();

            // Act
            var startTs = DateTime.UtcNow;

            task.Execute(events: events);
            var endTs = DateTime.UtcNow;

            // Assert
            var log = task.GetExecutionLog();

            log.Should().NotBeNull();
            log.TaskDuration.StartTs.Should().BeOnOrAfter(startTs).And.BeOnOrBefore(endTs);
            log.DiagnosticsLog.Diagnostics.Should().NotBeEmpty();
        }
Beispiel #8
0
        public void task_fails___no_report()
        {
            // Arrange
            var task = new TaskDefinition(
                TaskStepBuilder.Build.Pipeline <int>(
                    "Pipeline")
                .WithInput(new[] { 1 })
                .WithBlock("Failing block", x => throw new Exception())
                .Build());

            var loggerEvents   = TaskExecutionLogger.CreateEvents();
            var reporterEvents = TaskExecutionReporter.CreateEvents();

            // Act
            task.Execute(events: loggerEvents.Concat(reporterEvents).ToArray());

            // Assert
            var reports = task.Extras.TryGet <IReadOnlyCollection <TaskExecutionReport> >(TaskExecutionReportingUtils.TaskExecutionReportsExtraKey);

            reports.Should().BeNull();
        }
Beispiel #9
0
        public void step_ignored___report_still_generated()
        {
            // Arrange
            var task = new TaskDefinition(
                BasicTaskStep.Empty("Basic"),
                new BasicTaskStep(
                    "Ignored",
                    () => { },
                    x => false));

            var loggerEvents   = TaskExecutionLogger.CreateEvents();
            var reporterEvents = TaskExecutionReporter.CreateEvents();

            // Act
            task.Execute(events: loggerEvents.Concat(reporterEvents).ToArray());

            // Assert
            var reports = task.GetExecutionReports();

            reports.Should().NotBeNull().And.NotBeEmpty();
        }
Beispiel #10
0
 public static ITaskExecutorBuilder UseTaskExecutionLogger(
     this ITaskExecutorBuilder builder)
 => builder.RegisterEvents(TaskExecutionLogger.CreateEvents());