public void Replace_ShouldReplaceBehaviorType()
        {
            var registerStep = RegisterStep.Create("pipelineStep", typeof(BehaviorA), "description");
            var replacement  = new ReplaceStep("pipelineStep", typeof(BehaviorB));

            registerStep.Replace(replacement);

            Assert.AreEqual(typeof(BehaviorB), registerStep.BehaviorType);
        }
Exemplo n.º 2
0
            public Node(RegisterStep registerStep)
            {
                rego    = registerStep;
                Befores = registerStep.Befores;
                Afters  = registerStep.Afters;
                StepId  = registerStep.StepId;

                OutputContext = registerStep.GetOutputContext();
            }
        public void Replace_WhenReplacementContainsEmptyDescription_ShouldKeepOriginalDescription()
        {
            const string originalDescription = "description";
            var          registerStep        = RegisterStep.Create("pipelineStep", typeof(BehaviorA), originalDescription);
            var          replacement         = new ReplaceStep("pipelineStep", typeof(BehaviorB), "    ");

            registerStep.Replace(replacement);

            Assert.AreEqual(originalDescription, registerStep.Description);
        }
        public void Replace_WhenReplacementContainsDescription_ShouldReplaceDescription()
        {
            const string replacementDescription = "new";
            var          registerStep           = RegisterStep.Create("pipelineStep", typeof(BehaviorA), "description");
            var          replacement            = new ReplaceStep("pipelineStep", typeof(BehaviorB), replacementDescription);

            registerStep.Replace(replacement);

            Assert.AreEqual(replacementDescription, registerStep.Description);
        }
        public void ShouldDetectMissingBehaviorForRootContext()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Child", typeof(ChildBehaviorOfChildContext), "desc"))
                          .Build(typeof(IParentContext));

            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("Can't find any behaviors/connectors for the root context (NServiceBus.Core.Tests.Pipeline.PipelineModelBuilderTests+IParentContext)", ex.Message);
        }
        public void ShouldOnlyAllowReplacementOfExistingRegistrations()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Root1", typeof(RootBehavior), "desc"))
                          .Replace(new ReplaceStep("DoesNotExist", typeof(RootBehavior), "desc"))
                          .Build(typeof(IParentContext));

            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("Multiple replacements of the same pipeline behaviour is not supported. Make sure that you only register a single replacement for 'DoesNotExist'.", ex.Message);
        }
        public void ShouldDetectConflictingStepRegistrations()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Root1", typeof(RootBehavior), "desc"))
                          .Register(RegisterStep.Create("Root1", typeof(ChildBehaviorOfChildContextNotInheritedFromParentContext), "desc"))
                          .Build(typeof(IParentContext));

            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("Step registration with id 'Root1' is already registered for 'NServiceBus.Core.Tests.Pipeline.PipelineModelBuilderTests+RootBehavior'.", ex.Message);
        }
        public void ShouldDetectRegistrationsWithContextsNotReachableFromTheRootContext()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Root", typeof(RootBehavior), "desc"))
                          .Register(RegisterStep.Create("ParentContextToChildContextConnector", typeof(ParentContextToChildContextConnector), "desc"))
                          .Register(RegisterStep.Create("Child", typeof(ChildBehaviorOfChildContextNotInheritedFromParentContext), "desc"))
                          .Build(typeof(IParentContext));

            var model = builder.Build();

            Assert.AreEqual(2, model.Count);
        }
        public void ShouldDetectConflictingStageConnectors()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Root1", typeof(RootBehavior), "desc"))
                          .Register(RegisterStep.Create("ParentContextToChildContextConnector", typeof(ParentContextToChildContextConnector), "desc"))
                          .Register(RegisterStep.Create("ParentContextToChildContextNotInheritedFromParentContextConnector", typeof(ParentContextToChildContextNotInheritedFromParentContextConnector), "desc"))
                          .Build(typeof(IParentContext));

            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("Multiple stage connectors found for stage 'NServiceBus.Core.Tests.Pipeline.PipelineModelBuilderTests+IParentContext'. Remove one of: 'NServiceBus.Core.Tests.Pipeline.PipelineModelBuilderTests+ParentContextToChildContextConnector', 'NServiceBus.Core.Tests.Pipeline.PipelineModelBuilderTests+ParentContextToChildContextNotInheritedFromParentContextConnector'", ex.Message);
        }
        public void ShouldHandleTheTerminator()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Root1", typeof(RootBehavior), "desc"))
                          .Register(RegisterStep.Create("ParentContextToChildContextConnector", typeof(ParentContextToChildContextConnector), "desc"))
                          .Register(RegisterStep.Create("Child", typeof(ChildBehaviorOfChildContextNotInheritedFromParentContext), "desc"))
                          .Register(RegisterStep.Create("Terminator", typeof(Terminator), "desc"))
                          .Build(typeof(IParentContext));

            var model = builder.Build();

            Assert.AreEqual(3, model.Count);
        }
        public void ShouldDetectRegistrationsWithContextsNotReachableFromTheRootContext()
        {
            var builder = new PipelineModelBuilder(typeof(IParentContext), new List <RegisterStep>
            {
                RegisterStep.Create("Root", typeof(RootBehavior), "desc"),
                RegisterStep.Create("ParentContextToChildContextConnector", typeof(ParentContextToChildContextConnector), "desc"),
                RegisterStep.Create("Child", typeof(ChildBehaviorOfChildContextNotInheritedFromParentContext), "desc")
            }, new List <RemoveStep>(), new List <ReplaceStep>());


            var model = builder.Build();

            Assert.AreEqual(2, model.Count);
        }
        public void ShouldHandleTheTerminator()
        {
            var builder = new PipelineModelBuilder(typeof(IParentContext), new List <RegisterStep>
            {
                RegisterStep.Create("Root1", typeof(RootBehavior), "desc"),
                RegisterStep.Create("ParentContextToChildContextConnector", typeof(ParentContextToChildContextConnector), "desc"),
                RegisterStep.Create("Child", typeof(ChildBehaviorOfChildContextNotInheritedFromParentContext), "desc"),
                RegisterStep.Create("Terminator", typeof(Terminator), "desc")
            }, new List <RemoveStep>(), new List <ReplaceStep>());


            var model = builder.Build();

            Assert.AreEqual(3, model.Count);
        }
        public void ShouldOnlyAllowRemovalOfExistingRegistrations()
        {
            var builder = new PipelineModelBuilder(typeof(IParentContext), new List <RegisterStep>
            {
                RegisterStep.Create("Root1", typeof(RootBehavior), "desc"),
            }, new List <RemoveStep>
            {
                new RemoveStep("DoesNotExist"),
            }, new List <ReplaceStep>());


            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("You cannot remove step registration with id 'DoesNotExist', registration does not exist.", ex.Message);
        }
        public void ShouldAddWhenAddingOrReplacingABehaviorThatDoesntExist()
        {
            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(RegisterStep.Create("Root1", typeof(RootBehavior), "desc"))
                          .RegisterOrReplace(RegisterOrReplaceStep.Create("SomeBehaviorOfParentContext", typeof(SomeBehaviorOfParentContext), "desc"))
                          .Build(typeof(IParentContext));

            var model = builder.Build();

            Assert.That(model.Count, Is.EqualTo(2));
            var addedBehavior = model.FirstOrDefault(x => x.StepId == "SomeBehaviorOfParentContext");

            Assert.That(addedBehavior, Is.Not.Null);
            Assert.That(addedBehavior.BehaviorType, Is.EqualTo(typeof(SomeBehaviorOfParentContext)));
        }
        public void ShouldDetectNonExistingInsertAfterRegistrations()
        {
            var someBehaviorRegistration    = RegisterStep.Create("SomeBehaviorOfParentContext", typeof(SomeBehaviorOfParentContext), "desc");
            var anotherBehaviorRegistration = RegisterStep.Create("AnotherBehaviorOfParentContext", typeof(AnotherBehaviorOfParentContext), "desc");

            anotherBehaviorRegistration.InsertAfter("DoesNotExist");

            var builder = ConfigurePipelineModelBuilder.Setup()
                          .Register(someBehaviorRegistration)
                          .Register(anotherBehaviorRegistration)
                          .Build(typeof(IParentContext));

            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("Registration 'DoesNotExist' specified in the insertafter of the 'AnotherBehaviorOfParentContext' step does not exist. Current StepIds: 'SomeBehaviorOfParentContext', 'AnotherBehaviorOfParentContext'", ex.Message);
        }
        public void ShouldDetectNonExistingInsertBeforeRegistrations()
        {
            var someBehaviorRegistration    = RegisterStep.Create("SomeBehaviorOfParentContext", typeof(SomeBehaviorOfParentContext), "desc");
            var anotherBehaviorRegistration = RegisterStep.Create("AnotherBehaviorOfParentContext", typeof(AnotherBehaviorOfParentContext), "desc");

            anotherBehaviorRegistration.InsertBefore("DoesNotExist");

            var builder = new PipelineModelBuilder(typeof(IParentContext), new List <RegisterStep>
            {
                someBehaviorRegistration,
                anotherBehaviorRegistration,
            }, new List <RemoveStep>(), new List <ReplaceStep>());


            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("Registration 'DoesNotExist' specified in the insertbefore of the 'AnotherBehaviorOfParentContext' step does not exist. Current StepIds: 'SomeBehaviorOfParentContext', 'AnotherBehaviorOfParentContext'", ex.Message);
        }
        public void Replace_WhenReplacementProvidedFactory_ShouldBuildReplacementFromFactory()
        {
            var replacementBehaviorFactoryCalled = false;
            Func <IBuilder, IBehavior> replacementBehaviorFactory = b =>
            {
                replacementBehaviorFactoryCalled = true;
                return(new BehaviorB());
            };

            var builder      = new FakeBuilder(typeof(BehaviorB));
            var registerStep = RegisterStep.Create("pipelineStep", typeof(BehaviorA), "description", b => { throw new Exception(); });
            var replacement  = new ReplaceStep("pipelineStep", typeof(BehaviorB), factoryMethod: replacementBehaviorFactory);

            registerStep.Replace(replacement);
            var behavior = registerStep.CreateBehavior(builder);

            Assert.IsTrue(replacementBehaviorFactoryCalled);
            Assert.IsInstanceOf <BehaviorB>(behavior);
        }
        public void Replace_WhenReplacementProvidesNoFactory_ShouldBuildReplacementFromBuilder()
        {
            var originalBehaviorFactoryCalled = false;
            Func <IBuilder, IBehavior> originalBehaviorFactory = b =>
            {
                originalBehaviorFactoryCalled = true;
                return(new BehaviorA());
            };

            var builder      = new FakeBuilder(typeof(BehaviorB));
            var registerStep = RegisterStep.Create("pipelineStep", typeof(BehaviorA), "description", originalBehaviorFactory);
            var replacement  = new ReplaceStep("pipelineStep", typeof(BehaviorB));

            registerStep.Replace(replacement);
            var behavior = registerStep.CreateBehavior(builder);

            Assert.IsFalse(originalBehaviorFactoryCalled);
            Assert.IsInstanceOf <BehaviorB>(behavior);
        }
        public void ShouldOnlyAllowRemovalWhenNoOtherDependsOnItsAfterRegistration()
        {
            var someBehaviorRegistration    = RegisterStep.Create("SomeBehaviorOfParentContext", typeof(SomeBehaviorOfParentContext), "desc");
            var anotherBehaviorRegistration = RegisterStep.Create("AnotherBehaviorOfParentContext", typeof(AnotherBehaviorOfParentContext), "desc");

            anotherBehaviorRegistration.InsertAfter("SomeBehaviorOfParentContext");

            var builder = new PipelineModelBuilder(typeof(IParentContext), new List <RegisterStep>
            {
                someBehaviorRegistration,
                anotherBehaviorRegistration,
            }, new List <RemoveStep> {
                new RemoveStep("SomeBehaviorOfParentContext")
            }, new List <ReplaceStep>());


            var ex = Assert.Throws <Exception>(() => builder.Build());

            Assert.AreEqual("You cannot remove step registration with id 'SomeBehaviorOfParentContext', registration with id 'AnotherBehaviorOfParentContext' depends on it.", ex.Message);
        }
 public ConfigurePipelineModelBuilder Register(RegisterStep registration)
 {
     registrations.Add(registration);
     return(this);
 }
Exemplo n.º 21
0
 static bool IsStageConnector(RegisterStep stageStep)
 {
     return(typeof(IStageConnector).IsAssignableFrom(stageStep.BehaviorType));
 }
Exemplo n.º 22
0
 public void Register(RegisterStep rego)
 {
     additions.Add(rego);
 }
Exemplo n.º 23
0
 public void Register(string pipelineStep, Type behavior, string description)
 {
     additions.Add(RegisterStep.Create(pipelineStep, behavior, description));
 }
Exemplo n.º 24
0
 public static Type GetInputContext(this RegisterStep step)
 {
     return(step.BehaviorType.GetInputContext());
 }
Exemplo n.º 25
0
 RegisterOrReplaceStep(string stepId, RegisterStep registerStep, ReplaceStep replaceStep)
 {
     StepId       = stepId;
     RegisterStep = registerStep;
     ReplaceStep  = replaceStep;
 }