public void record_data() { var spec = new Specification { name = "Some Name" }; var timings = new Timings(); timings.Start(spec); using (timings.Subject("Fixture.Setup", "Math")) { using (timings.Subject("Grammar", "Adding")) { using (timings.Subject("Fixture.Teardown", "Math")) { Thread.Sleep(100); } } } var records = timings.Finish(); records.Select(x => x.Subject).ShouldHaveTheSameElementsAs("Some Name", "Math", "Adding", "Math"); records.Each(x => x.Duration.ShouldBeGreaterThan(0)); }
public Timings StartNewTimings() { var timings = new Timings(); timings.Start(Specification); return(timings); }
public ExecutionRun(ISystem system, Timings timings, SpecExecutionRequest request, StopConditions stopConditions, IExecutionMode mode) { _system = system; _timings = timings; _request = request; _stopConditions = stopConditions; _mode = mode; }
private StepResult timeoutMessage(Timings timings) { return(new StepResult { id = Request.Plan.Specification.id, status = ResultStatus.error, error = "Timed out in " + timings.Duration + " milliseconds", position = Stage.timedout }); }
// If this fails, it's a catastrophic exception public SpecResults Execute(ISystem system, Timings timings) { _timeout = setupTimeout(); using (var execution = createExecutionContext(system, timings)) { if (Request.IsCancelled) { return(null); } using (var context = new SpecContext( Request.Specification, timings, Request.Observer, StopConditions, execution)) { if (Request.Specification.HasNoSteps()) { context.LogException(Request.Specification.id, new NotImplementedException("Empty specification with no implementation"), null, Stage.context); } beforeExecution(execution, context); var lines = determineLineSteps(context); startDebugListening(context); Logger.Starting(lines); if (lines.Any()) { var stepRunning = executeSteps(context, lines, Request.Cancellation); Task.WaitAny(stepRunning, _timeout); } execution.AfterExecution(context); return(buildResults(context, timings)); } } }
private SpecResults buildResults(SpecContext context, Timings timings) { if (Request.IsCancelled) { return(null); } var catastrophic = context?.CatastrophicException; if (catastrophic != null) { throw new StorytellerExecutionException(catastrophic); } Finished = !_timeout.IsCompleted && !Request.IsCancelled; if (_timeout.IsCompleted && !Request.IsCancelled) { var result = timeoutMessage(timings); if (context == null) { var perf = timings.Finish(); return(new SpecResults { Counts = new Counts(0, 0, 1, 0), Duration = timings.Duration, Performance = perf.ToArray(), Attempts = Request.Plan.Attempts, Results = new IResultMessage[] { result }, WasAborted = false }); } context.LogResult(result, null); context.Cancel(); } return(context.FinalizeResults(Request.Plan.Attempts)); }
private IExecutionContext createExecutionContext(ISystem system, Timings timings) { var record = timings.Subject("Context", "Creation", 0); try { return(system.CreateContext()); } catch (Exception e) { Request.Cancel(); throw new StorytellerExecutionException(e); } finally { timings.End(record); } }
private static SpecResults buildResultsForContextCreationFailure(SpecExecutionRequest request, Exception ex, Timings timings) { var result = new StepResult(request.Specification.id, ex) { position = Stage.context }; var perf = timings.Finish(); return(new SpecResults { Attempts = request.Plan.Attempts, Duration = timings.Duration, Performance = perf.ToArray(), Counts = new Counts(0, 0, 1, 0), Results = new IResultMessage[] { result } }); }
// If this fails, it's a catastrophic exception public SpecResults Execute(ISystem system, Timings timings) { _timeout = setupTimeout(); using (var execution = createExecutionContext(system, timings)) { if (Request.IsCancelled) { return null; } using (var context = new SpecContext( Request.Specification, timings, Request.Observer, StopConditions, execution)) { beforeExecution(execution, context); var lines = determineLineSteps(context); startDebugListening(context); Logger.Starting(lines); if (lines.Any()) { var stepRunning = executeSteps(context, lines, Request.Cancellation); Task.WaitAny(stepRunning, _timeout); } execution.AfterExecution(context); return buildResults(context, timings); } } }
private static SpecResults buildResultsForContextCreationFailure(SpecExecutionRequest request, Exception ex, Timings timings) { var result = new StepResult(request.Specification.id, ex) {position = Stage.context}; var perf = timings.Finish(); return new SpecResults { Attempts = request.Plan.Attempts, Duration = timings.Duration, Performance = perf.ToArray(), Counts = new Counts(0, 0, 1, 0), Results = new IResultMessage[] { result } }; }
public Timings StartNewTimings() { var timings = new Timings(); timings.Start(Specification); return timings; }
public PerfRecordTracking(Timings parent, PerfRecord record) { _parent = parent; _record = record; }
private IExecutionContext createExecutionContext(ISystem system, Timings timings) { try { using (timings.Subject("Context", "Creation")) { return system.CreateContext(); } } catch (Exception e) { Request.Cancel(); throw new StorytellerExecutionException(e); } }
private StepResult timeoutMessage(Timings timings) { return new StepResult { id = Request.Plan.Specification.id, status = ResultStatus.error, error = "Timed out in " + timings.Duration + " milliseconds", position = Stage.timedout }; }
private SpecResults buildResults(SpecContext context, Timings timings ) { if (Request.IsCancelled) return null; var catastrophic = context?.CatastrophicException; if (catastrophic != null) { throw new StorytellerExecutionException(catastrophic); } Finished = !_timeout.IsCompleted && !Request.IsCancelled; if (_timeout.IsCompleted && !Request.IsCancelled) { var result = timeoutMessage(timings); if (context == null) { var perf = timings.Finish(); return new SpecResults { Counts = new Counts(0, 0, 1, 0), Duration = timings.Duration, Performance = perf.ToArray(), Attempts = Request.Plan.Attempts, Results = new IResultMessage[] { result }, WasAborted = false }; } context.LogResult(result); context.Cancel(); } return context.FinalizeResults(Request.Plan.Attempts); }