Example #1
0
        public async void Pipeline_Result_Ids_Equal_Node_Ids()
        {
            var pipelineNode = new PipelineNode <TestObjectA> {
                Id = "PipelineNode1", FlowId = "Flow1"
            };

            pipelineNode.AddChild(new SimpleTestNodeA1 {
                FlowId = "Flow1"
            });
            pipelineNode.AddChild(new SimpleTestNodeA2 {
                Id = "Child2", FlowId = "Flow1"
            });

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.FlowId.ShouldEqual("Flow1");
            result.Id.ShouldEqual("PipelineNode1");
            result.ChildResults.First().Id.ShouldEqual("Banzai.Test.SimpleTestNodeA1");
            result.ChildResults.First().FlowId.ShouldEqual("Flow1");

            var secondResult = result.ChildResults.FirstOrDefault(x => x.Id == "Child2");

            secondResult.ShouldNotBeNull();
            secondResult.FlowId.ShouldEqual("Flow1");
        }
Example #2
0
        public async Task Pipeline_Overall_Result_Subject_Equals_Last_Changed_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();
            var node4 = new SubjectChangingNode1();

            pipelineNode.AddChild(node1);
            pipelineNode.AddChild(node2);
            pipelineNode.AddChild(node3);
            pipelineNode.AddChild(node4);

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            result.Subject.Should().NotBeSameAs(testObject);
            result.Subject.Should().NotBeSameAs(childResults[1].Subject);
            result.Subject.Should().NotBeSameAs(childResults[2].Subject);
            result.Subject.Should().BeSameAs(childResults[3].Subject);
        }
Example #3
0
        public async void Parent_Pipeline_Cancels_Execution_When_Child_Pipeline_Node_Cancelled()
        {
            var testNode1 = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeA1(true, false, true);
            var testNode3 = new SimpleTestNodeA2();

            var innerPipelineNode = new PipelineNode <TestObjectA>();

            innerPipelineNode.AddChild(testNode1);
            innerPipelineNode.AddChild(testNode2);

            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(innerPipelineNode);
            pipelineNode.AddChild(testNode3);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);

            innerPipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode1.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode2.Status.ShouldEqual(NodeRunStatus.NotRun);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            testNode3.Status.ShouldEqual(NodeRunStatus.NotRun);
        }
Example #4
0
        public async Task Adding_State_To_A_Node_Is_Available_In_Following_Node()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new FuncNode <TestObjectA>
            {
                ExecutedFunc = ctxt =>
                {
                    ctxt.State.Foo = "Bar";
                    return(Task.FromResult(NodeResultStatus.Succeeded));
                }
            });
            pipelineNode.AddChild(new FuncNode <TestObjectA>
            {
                ExecutedFunc = ctxt =>
                               ctxt.State.Foo == "Bar"
                        ? Task.FromResult(NodeResultStatus.Succeeded)
                        : Task.FromResult(NodeResultStatus.Failed)
            });

            var testObject = new TestObjectA();
            var result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Succeeded);
        }
Example #5
0
        public async void Successful_Pipeline_Run_Status_Is_Succeeded()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
Example #6
0
        public async void Pipeline_Result_Should_Equal_Initial_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.Subject.ShouldBeSameAs(testObject);
        }
Example #7
0
        public async Task Pipeline_Run_With_Initial_Failure_Returns_Failed_Status()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new FailingTestNodeA());
            pipelineNode.AddChild(new SimpleTestNodeA1());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Failed);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);
        }
Example #8
0
        public async void Pipeline_Run_With_Failure_After_Success_Returns_Failed_Status()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new FailingTestNodeA());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.Failed);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
Example #9
0
        public async void Pipeline_Child_Result_Count_Equals_Child_Node_Count()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.ChildResults.Count().ShouldEqual(2);
        }
Example #10
0
        public async void Logging_Set_With_Log4Net_Doesnt_Err()
        {
            LogWriter.SetFactory(new Log4NetWriterFactory());

            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
Example #11
0
        public async void Successful_Pipeline_Result_Matches_Expectations()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
            testObject.TestValueString.ShouldEqual("Completed");
            testObject.TestValueInt.ShouldEqual(100);
        }
Example #12
0
        public async Task Pipeline_Run_With_Initial_Failure_Returns_Failed_Status()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new FaultingTestNodeA());
            pipelineNode.AddChild(new SimpleTestNodeA1());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            IEnumerable <Exception> exceptions = result.GetFailExceptions();

            exceptions.Should().NotBeNull();
            exceptions.Count().Should().Be(1);
        }
Example #13
0
        public async void Nested_Pipeline_Results_Contain_All_Child_Results()
        {
            var pipelineNode  = new PipelineNode <TestObjectA>();
            var pipelineNode2 = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(pipelineNode2);
            pipelineNode2.AddChild(new SimpleTestNodeA2());
            pipelineNode2.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.ChildResults.Count().ShouldEqual(1);
            result.ChildResults.First().ChildResults.Count().ShouldEqual(2);
        }
        public async Task Successful_Transition_Run_Status_Is_Succeeded()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTransitionNode {
                ChildNode = new SimpleTestNodeB1()
            });
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Succeeded);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);
        }
        public async Task Failed_Transition_Node_Child_Results_In_Failed_Parent()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTransitionNode {
                ChildNode = new FailingTestNodeB()
            });
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Failed);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);
        }
        public async void Faulted_Transition_Node_Child_Results_In_Failed_Parent_With_Exception()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new SimpleTransitionNode {
                ChildNode = new FaultingTestNodeB()
            });
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.Failed);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.Exception.ShouldNotBeNull();
        }
Example #17
0
        public async Task Can_Add_Base_Type_Nodes_To_Inherited_Type_Pipeline()
        {
            var testNode  = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeASub1();

            var pipeline = new PipelineNode <TestObjectASub>();

            pipeline.AddChild(testNode);
            pipeline.AddChild(testNode2);

            var testObject = new TestObjectASub();

            var result = await pipeline.ExecuteAsync(testObject);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            result.Status.Should().Be(NodeResultStatus.Succeeded);
        }
Example #18
0
        public async void Pipeline_Run_With_Final_Fault_And_ContinueOnError_Returns_SucceededWithErrors_Status()
        {
            var pipelineNode = new PipelineNode <TestObjectA> {
                LocalOptions = new ExecutionOptions {
                    ContinueOnFailure = true
                }
            };

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new FaultingTestNodeA());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.SucceededWithErrors);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
Example #19
0
        public async void Adding_State_To_A_Node_Is_Available_In_Global_Context()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new FuncNode <TestObjectA> {
                ExecutedFunc = ctxt => { ctxt.State.Foo = "Bar"; return(Task.FromResult(NodeResultStatus.Succeeded)); }
            });

            var        testObject = new TestObjectA();
            var        context    = new ExecutionContext <TestObjectA>(testObject);
            NodeResult result     = await pipelineNode.ExecuteAsync(context);

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);

            Assert.AreEqual("Bar", context.State.Foo);
        }
Example #20
0
        public async Task Nested_Exception_Is_Included_In_Collection()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var pipelineNode2 = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(pipelineNode2);

            pipelineNode2.AddChild(new FaultingTestNodeA());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            IEnumerable <Exception> exceptions = result.GetFailExceptions();

            exceptions.Should().NotBeNull();
            exceptions.Count().Should().Be(1);
        }
Example #21
0
        public async Task Can_Add_Inherited_Func_Node_To_Pipleline()
        {
            var testNode = new FuncNode <TestObjectA>();

            testNode.AddShouldExecute(context => Task.FromResult(context.Subject.TestValueInt == 0));
            testNode.ExecutedFunc = context => { context.Subject.TestValueString = "Completed"; return(Task.FromResult(NodeResultStatus.Succeeded)); };

            var testObject = new TestObjectASub();

            var pipeline = new PipelineNode <TestObjectASub>();

            pipeline.AddChild(testNode);

            var result = await pipeline.ExecuteAsync(testObject);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            result.Status.Should().Be(NodeResultStatus.Succeeded);
        }
Example #22
0
        public async Task Faulting_TransitionSourceFunc_Returns_Fail_Result()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new TransitionFuncNode <TestObjectA, TestObjectB>
            {
                ChildNode = new SimpleTestNodeB1(),
                TransitionSourceFuncAsync = ctxt => { throw new Exception(); }
            });
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Failed);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);
        }
Example #23
0
        public async Task Simple_TransitionSourceAsyncFunc_Succeeds()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            pipelineNode.AddChild(new SimpleTestNodeA1());
            pipelineNode.AddChild(new TransitionFuncNode <TestObjectA, TestObjectB>
            {
                ChildNode = new SimpleTestNodeB1(),
                TransitionSourceFuncAsync = ctxt => Task.FromResult(new TestObjectB())
            });
            pipelineNode.AddChild(new SimpleTestNodeA2());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Succeeded);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);
        }
Example #24
0
        public async Task ShouldExecuteFunc_On_Test_Object_Is_Evaluated()
        {
            var testNode  = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeASub1();

            testNode2.AddShouldExecute(context => Task.FromResult(context.Subject.TestValueDecimal == 1));

            var pipeline = new PipelineNode <TestObjectASub>();

            pipeline.AddChild(testNode);
            pipeline.AddChild(testNode2);

            var testObject = new TestObjectASub();

            var result = await pipeline.ExecuteAsync(testObject);

            testNode.Status.Should().Be(NodeRunStatus.Completed);
            testNode2.Status.Should().Be(NodeRunStatus.NotRun);
        }
Example #25
0
        public async Task Pipeline_With_ContinueOnError_Returns_Exceptions_On_All_Failures()
        {
            var pipelineNode = new PipelineNode <TestObjectA>
            {
                LocalOptions = new ExecutionOptions {
                    ContinueOnFailure = true
                }
            };

            pipelineNode.AddChild(new FaultingTestNodeA());
            pipelineNode.AddChild(new FaultingTestNodeA());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            IEnumerable <Exception> exceptions = result.GetFailExceptions();

            exceptions.Should().NotBeNull();
            exceptions.Count().Should().Be(2);
        }
Example #26
0
        public async void When_Cancelling_Pipeline_At_First_Node_Then_Status_Is_NotRun()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var testNode1 = new SimpleTestNodeA1(true, false, true);
            var testNode2 = new SimpleTestNodeA2();

            pipelineNode.AddChild(testNode1);
            pipelineNode.AddChild(testNode2);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.ShouldEqual(NodeResultStatus.NotRun);
            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);

            testNode1.Status.ShouldEqual(NodeRunStatus.NotRun);
            testNode2.Status.ShouldEqual(NodeRunStatus.NotRun);
        }
        public async void Pipeline_With_ContinueOnError_Excludes_Initial_Exception()
        {
            var pipelineNode = new PipelineNode <TestObjectA>
            {
                LocalOptions = new ExecutionOptions {
                    ContinueOnFailure = true
                }
            };

            pipelineNode.AddChild(new FaultingTestNodeA());
            pipelineNode.AddChild(new SimpleTestNodeA1());

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            IEnumerable <Exception> exceptions = result.GetFailExceptions();

            exceptions.ShouldNotBeNull();
            exceptions.Count().ShouldEqual(0);
        }
Example #28
0
        public async Task When_Cancelling_Pipeline_At_Later_Node_Then_Status_Is_Success()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var testNode1 = new SimpleTestNodeA1();
            var testNode2 = new SimpleTestNodeA1(true, false, true);
            var testNode3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(testNode1);
            pipelineNode.AddChild(testNode2);
            pipelineNode.AddChild(testNode3);

            var testObject = new TestObjectA();

            NodeResult result = await pipelineNode.ExecuteAsync(testObject);

            result.Status.Should().Be(NodeResultStatus.Succeeded);
            pipelineNode.Status.Should().Be(NodeRunStatus.Completed);

            testNode1.Status.Should().Be(NodeRunStatus.Completed);
            testNode2.Status.Should().Be(NodeRunStatus.NotRun);
            testNode3.Status.Should().Be(NodeRunStatus.NotRun);
        }
Example #29
0
        public async void Pipeline_Node_Results_Following_Subject_Change_Node_Return_Changed_Subject()
        {
            var pipelineNode = new PipelineNode <TestObjectA>();

            var node1 = new SimpleTestNodeA1();
            var node2 = new SubjectChangingNode1();
            var node3 = new SimpleTestNodeA2();

            pipelineNode.AddChild(node1);
            pipelineNode.AddChild(node2);
            pipelineNode.AddChild(node3);

            var        testObject = new TestObjectA();
            NodeResult result     = await pipelineNode.ExecuteAsync(testObject);

            pipelineNode.Status.ShouldEqual(NodeRunStatus.Completed);

            var childResults = result.ChildResults.ToList();

            childResults[0].Subject.ShouldBeSameAs(testObject);
            childResults[1].Subject.ShouldNotBeSameAs(testObject);
            childResults[2].Subject.ShouldNotBeSameAs(testObject);
            childResults[1].Subject.ShouldEqual(childResults[2].Subject);
        }