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>")); }
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); }
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); } }
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); } }
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(); }
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(); }
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(); }
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(); }
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(); }
public static ITaskExecutorBuilder UseTaskExecutionLogger( this ITaskExecutorBuilder builder) => builder.RegisterEvents(TaskExecutionLogger.CreateEvents());