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;
 }
Exemple #4
0
 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);
            }
        }
Exemple #9
0
        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;
        }
Exemple #13
0
 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);
        }