예제 #1
0
        public void TestCoordinatorEnabledMessageSink_should_receive_TestRunTree_when_EndTestRun_is_received()
        {
            var consoleMessageSink = Sys.ActorOf(Props.Create(() => new ConsoleMessageSinkActor(true)));
            var nodeIndexes        = Enumerable.Range(1, 4).ToArray();
            var nodeTests          = NodeMessageHelpers.BuildNodeTests(nodeIndexes);

            var beginSpec = new BeginNewSpec(nodeTests.First().TypeName, nodeTests.First().MethodName, nodeTests);

            consoleMessageSink.Tell(beginSpec);

            // create some messages for each node, the test runner, and some result messages
            // just like a real MultiNodeSpec
            var allMessages    = NodeMessageHelpers.GenerateMessageSequence(nodeIndexes, 300);
            var runnerMessages = NodeMessageHelpers.GenerateTestRunnerMessageSequence(20);
            var passMessages   = NodeMessageHelpers.GenerateResultMessage(nodeIndexes, true);

            allMessages.UnionWith(runnerMessages);
            allMessages.UnionWith(passMessages);

            foreach (var message in allMessages)
            {
                consoleMessageSink.Tell(message);
            }

            //end the spec
            consoleMessageSink.Tell(new EndSpec());

            //end the test run...
            var sinkReadyToTerminate =
                consoleMessageSink.AskAndWait <MessageSinkActor.SinkCanBeTerminated>(new EndTestRun(),
                                                                                     TimeSpan.FromSeconds(3));

            Assert.NotNull(sinkReadyToTerminate);
        }
        public void Should_save_TestRunTree_as_JSON()
        {
            var testRunStore       = new JsonPersistentTestRunStore();
            var testRunCoordinator = Sys.ActorOf(Props.Create <TestRunCoordinator>());
            var nodeIndexes        = Enumerable.Range(1, 4).ToArray();
            var nodeTests          = NodeMessageHelpers.BuildNodeTests(nodeIndexes);

            var beginSpec = new BeginNewSpec(nodeTests.First().TypeName, nodeTests.First().MethodName, nodeTests);

            //begin a new spec
            testRunCoordinator.Tell(beginSpec);

            // create some messages for each node, the test runner, and some result messages
            // just like a real MultiNodeSpec
            var allMessages    = NodeMessageHelpers.GenerateMessageSequence(nodeIndexes, 300);
            var runnerMessages = NodeMessageHelpers.GenerateTestRunnerMessageSequence(20);

            allMessages.UnionWith(runnerMessages);

            foreach (var message in allMessages)
            {
                testRunCoordinator.Tell(message);
            }

            //end the spec
            testRunCoordinator.Tell(new EndTestRun(), TestActor);
            var testRunData = ExpectMsg <TestRunTree>();

            //save the test run
            var file = Path.GetTempFileName();

            testRunStore.SaveTestRun(file, testRunData).ShouldBeTrue("Should have been able to save test run");
        }
예제 #3
0
        protected override void HandleNewSpec(BeginNewSpec newSpec)
        {
            base.HandleNewSpec(newSpec);

            _session = new SpecSession();
            _session.OnBegin(newSpec);
        }
예제 #4
0
        private void ReceiveBeginSpecRun(BeginNewSpec spec)
        {
            Guard.Assert(_currentSpecRunActor == null, "EndSpec has not been called for previous run yet. Cannot begin next run.");

            //Create the new spec run actor
            _currentSpecRunActor =
                Context.ActorOf(
                    Props.Create(() => new SpecRunCoordinator(spec.ClassName, spec.MethodName, spec.Nodes)));
        }
예제 #5
0
        private void ReceiveBeginSpecRun(BeginNewSpec spec)
        {
            if (_currentSpecRunActor != null)
            {
                throw new InvalidOperationException("EndSpec has not been called for previous run yet. Cannot begin next run.");
            }

            //Create the new spec run actor
            _currentSpecRunActor =
                Context.ActorOf(
                    Props.Create(() => new SpecRunCoordinator(spec.ClassName, spec.MethodName, spec.Nodes)));
        }
        public void TestRunCoordinator_should_start_and_route_messages_to_SpecRunCoordinator()
        {
            var testRunCoordinator = Sys.ActorOf(Props.Create <TestRunCoordinator>());
            var nodeIndexes        = Enumerable.Range(1, 4).ToArray();
            var nodeTests          = NodeMessageHelpers.BuildNodeTests(nodeIndexes);

            var beginSpec = new BeginNewSpec(nodeTests.First().TypeName, nodeTests.First().MethodName, nodeTests);

            //begin a new spec
            testRunCoordinator.Tell(beginSpec);

            // create some messages for each node, the test runner, and some result messages
            // just like a real MultiNodeSpec
            var allMessages    = NodeMessageHelpers.GenerateMessageSequence(nodeIndexes, 300);
            var runnerMessages = NodeMessageHelpers.GenerateTestRunnerMessageSequence(20);

            allMessages.UnionWith(runnerMessages);

            foreach (var message in allMessages)
            {
                testRunCoordinator.Tell(message);
            }

            //end the spec
            testRunCoordinator.Tell(new EndTestRun(), TestActor);
            var testRunData = ExpectMsg <TestRunTree>();

            Assert.Equal(1, testRunData.Specs.Count());

            var specMessages = new SortedSet <MultiNodeMessage>();

            foreach (var spec in testRunData.Specs)
            {
                specMessages.UnionWith(spec.RunnerMessages);
                foreach (var fact in spec.NodeFacts)
                {
                    specMessages.UnionWith(fact.Value.EventStream);
                }
            }

            Assert.True(allMessages.SetEquals(specMessages));
        }
예제 #7
0
        private static void ReportNodes(BeginNewSpec begin, UnitTestResult specResult, DateTime beginTime,
                                        Dictionary <int, UnitTestResult> nodeResults)
        {
            foreach (var node in begin.Nodes)
            {
                var result = specResult.AddChildResult(node.Role);
                if (!string.IsNullOrWhiteSpace(node.SkipReason))
                {
                    result.Outcome   = TestOutcome.NotExecuted;
                    result.StartTime = beginTime;
                    result.EndTime   = beginTime;
                }
                else
                {
                    result.Outcome   = TestOutcome.InProgress;
                    result.StartTime = beginTime;
                }

                nodeResults.Add(node.Node, result);
            }
        }
        public void TestRunCoordinator_should_publish_FactData_to_Subscribers_when_Specs_complete()
        {
            var testRunCoordinator = Sys.ActorOf(Props.Create <TestRunCoordinator>());
            var nodeIndexes        = Enumerable.Range(1, 4).ToArray();
            var nodeTests          = NodeMessageHelpers.BuildNodeTests(nodeIndexes);

            var beginSpec = new BeginNewSpec(nodeTests.First().TypeName, nodeTests.First().MethodName, nodeTests);

            //register the TestActor as a subscriber for FactData announcements
            testRunCoordinator.Tell(new TestRunCoordinator.SubscribeFactCompletionMessages(TestActor));

            //begin a new spec
            testRunCoordinator.Tell(beginSpec);

            // create some messages for each node, the test runner, and some result messages
            // just like a real MultiNodeSpec
            var allMessages    = NodeMessageHelpers.GenerateMessageSequence(nodeIndexes, 300);
            var runnerMessages = NodeMessageHelpers.GenerateTestRunnerMessageSequence(20);
            var passMessages   = NodeMessageHelpers.GenerateResultMessage(nodeIndexes, true);

            allMessages.UnionWith(runnerMessages);
            allMessages.UnionWith(passMessages);

            foreach (var message in allMessages)
            {
                testRunCoordinator.Tell(message);
            }

            //end the spec
            testRunCoordinator.Tell(new EndSpec());

            var factData = ExpectMsg <FactData>();

            Assert.True(factData.Passed.Value, "Spec should have passed");
            Assert.True(factData.NodeFacts.All(x => x.Value.Passed.Value), "All individual nodes should have reported test pass");
        }
예제 #9
0
 public void OnBegin(BeginNewSpec value) => Begin = new SpecEvent <BeginNewSpec>(DateTime.UtcNow, value);