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); }
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); }
static bool IsStageConnector(RegisterStep stageStep) { return(typeof(IStageConnector).IsAssignableFrom(stageStep.BehaviorType)); }
public void Register(RegisterStep rego) { additions.Add(rego); }
public void Register(string pipelineStep, Type behavior, string description) { additions.Add(RegisterStep.Create(pipelineStep, behavior, description)); }
public static Type GetInputContext(this RegisterStep step) { return(step.BehaviorType.GetInputContext()); }
RegisterOrReplaceStep(string stepId, RegisterStep registerStep, ReplaceStep replaceStep) { StepId = stepId; RegisterStep = registerStep; ReplaceStep = replaceStep; }