public void SetUp()
        {
            Builder = new FuncBuilder();
            InMemoryFaultManager = new Faults.InMemory.FaultManager();
            FakeReceiver         = new FakeReceiver();

            var configurationBuilder = new BusConfiguration();

            configurationBuilder.EndpointName("xyz");
            configurationBuilder.AssembliesToScan(new Assembly[0]);

            Transport = new TransportReceiver(new TransactionSettings(true, TimeSpan.FromSeconds(30), IsolationLevel.ReadCommitted, 5, false, false), 1, 0, FakeReceiver, InMemoryFaultManager, new SettingsHolder(), configurationBuilder.BuildConfiguration());

            RegisterTypes();
            Builder.Register <IManageMessageFailures>(() => InMemoryFaultManager);
            Builder.Register <TransportReceiver>(() => Transport);

            //var configurer = new SatelliteConfigurer();
            //configurer.Customize(configure);

            var launcher = new SatelliteLauncher(Builder);

            BeforeRun();
            launcher.Start();
        }
Пример #2
0
        public void Verify_order()
        {
            var builder = new FuncBuilder();

            var unitOfWork1 = new CountingUnitOfWork();
            var unitOfWork2 = new CountingUnitOfWork();
            var unitOfWork3 = new CountingUnitOfWork();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork1);
            builder.Register <IManageUnitsOfWork>(() => unitOfWork2);
            builder.Register <IManageUnitsOfWork>(() => unitOfWork3);
            var runner = new UnitOfWorkRunner
            {
                Builder = builder
            };

            runner.Begin();
            runner.End();

            Assert.AreEqual(1, unitOfWork1.BeginCallIndex);
            Assert.AreEqual(2, unitOfWork2.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork3.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork1.EndCallIndex);
            Assert.AreEqual(2, unitOfWork2.EndCallIndex);
            Assert.AreEqual(1, unitOfWork3.EndCallIndex);
        }
        public void SetUp()
        {
            Builder = new FuncBuilder();
            InMemoryFaultManager = new NServiceBus.Faults.InMemory.FaultManager();
            FakeReceiver = new FakeReceiver();

            var configurationBuilder = new BusConfiguration();

            configurationBuilder.EndpointName("xyz");
            configurationBuilder.AssembliesToScan(new Assembly[0]);

            Transport = new TransportReceiver(new TransactionSettings(true, TimeSpan.FromSeconds(30), IsolationLevel.ReadCommitted, 5, false, false), 1, 0, FakeReceiver, InMemoryFaultManager, new SettingsHolder(), configurationBuilder.BuildConfiguration());

            RegisterTypes();
            Builder.Register<IManageMessageFailures>(() => InMemoryFaultManager);
            Builder.Register<TransportReceiver>(() => Transport);

            //var configurer = new SatelliteConfigurer();
            //configurer.Customize(configure);

            var launcher = new SatelliteLauncher(Builder);

            BeforeRun();
            launcher.Start();
        }
        public void Verify_order()
        {
            var builder = new FuncBuilder();

            var unitOfWork1 = new CountingUnitOfWork();
            var unitOfWork2 = new CountingUnitOfWork();
            var unitOfWork3 = new CountingUnitOfWork();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork1);
            builder.Register<IManageUnitsOfWork>(() => unitOfWork2);
            builder.Register<IManageUnitsOfWork>(() => unitOfWork3);
            var runner = new UnitOfWorkRunner
                         {
                             Builder = builder
                         };
            runner.Begin();
            runner.End();

            Assert.AreEqual(1, unitOfWork1.BeginCallIndex);
            Assert.AreEqual(2, unitOfWork2.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork3.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork1.EndCallIndex);
            Assert.AreEqual(2, unitOfWork2.EndCallIndex);
            Assert.AreEqual(1, unitOfWork3.EndCallIndex);
        }
        public void SetUp()
        {
            Builder = new FuncBuilder();
            InMemoryFaultManager = new Faults.InMemory.FaultManager();
            FakeReceiver         = new FakeReceiver();

            Transport = new TransportReceiver
            {
                Receiver            = FakeReceiver,
                TransactionSettings = TransactionSettings.Default
            };

            Configure.With(new Assembly[0])
            .DefineEndpointName("Test")
            .DefaultBuilder();
            Configure.Instance.Builder = Builder;

            RegisterTypes();
            Builder.Register <IManageMessageFailures>(() => InMemoryFaultManager);
            Builder.Register <TransportReceiver>(() => Transport);

            var configurer = new SatelliteConfigurer();

            configurer.Init();

            var launcher = new SatelliteLauncher
            {
                Builder = Builder,
            };

            BeforeRun();
            launcher.Start();
        }
        public void SetUp()
        {
            Builder = new FuncBuilder();
            InMemoryFaultManager = new Faults.InMemory.FaultManager();
            FakeReceiver = new FakeReceiver();

            Transport = new TransportReceiver
                {
                    Receiver = FakeReceiver,
                    TransactionSettings = TransactionSettings.Default
                };

            Configure.With(new Assembly[0])
                .DefineEndpointName("Test")
                .DefaultBuilder();
            Configure.Instance.Builder = Builder;

            RegisterTypes();
            Builder.Register<IManageMessageFailures>(() => InMemoryFaultManager);
            Builder.Register<TransportReceiver>(() => Transport);

            var configurer = new SatelliteConfigurer();
            configurer.Init();

            var launcher = new SatelliteLauncher();

            BeforeRun();
            launcher.Start();
        }
Пример #7
0
        public void Should_pass_exception_to_cleanup()
        {
            var builder = new FuncBuilder();

            var unitOfWork  = new CaptureExceptionPassedToEndUnitOfWork();
            var throwingUoW = new UnitOfWorkThatThrowsFromEnd();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork);
            builder.Register <IManageUnitsOfWork>(() => throwingUoW);

            var aggregateException = Assert.Throws <AggregateException>(() => InvokeBehavior(builder));

            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, unitOfWork.Exception);
            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, aggregateException.InnerExceptions.Single());
        }
Пример #8
0
        public void Should_pass_exception_to_cleanup()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new CaptureExceptionPassedToEndUnitOfWork();
            var throwingUoW = new UnitOfWorkThatThrowsFromEnd();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork);
            builder.Register<IManageUnitsOfWork>(() => throwingUoW);

            var aggregateException = Assert.Throws<AggregateException>(() => InvokeBehavior(builder));

            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, unitOfWork.Exception);
            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, aggregateException.InnerExceptions.Single());
        }
Пример #9
0
        public void Should_pass_exception_to_cleanup()
        {
            var builder = new FuncBuilder();

            var unitOfWork  = new CaptureExceptionPassedToEndUnitOfWork();
            var throwingUoW = new UnitOfWorkThatThrowsFromEnd();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork);
            builder.Register <IManageUnitsOfWork>(() => throwingUoW);

            //since it is a single exception then it will not be an AggregateException
            var exception = Assert.Throws <InvalidOperationException>(() => InvokeBehavior(builder));

            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, unitOfWork.Exception);
            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, exception);
        }
Пример #10
0
        public void When_first_throw_second_is_cleaned_up()
        {
            var builder = new FuncBuilder();

            var unitOfWorkThatThrowsFromEnd = new UnitOfWorkThatThrowsFromEnd();
            var unitOfWork = new UnitOfWork();

            builder.Register <IManageUnitsOfWork>(() => unitOfWorkThatThrowsFromEnd);
            builder.Register <IManageUnitsOfWork>(() => unitOfWork);

            Assert.Throws <AggregateException>(() => InvokeBehavior(builder));
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.BeginCalled);
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.EndCalled);
            Assert.IsTrue(unitOfWork.BeginCalled);
            Assert.IsTrue(unitOfWork.EndCalled);
        }
Пример #11
0
        public new void SetUp()
        {
            persister = new InMemorySagaPersister();
            FuncBuilder.Register <ISagaPersister>(() => persister);

            Features.Sagas.Clear();
        }
Пример #12
0
        public void Should_invoke_begin_and_end_message()
        {
            var endCalled = false;

            var  messageModule = new StubMessageModule();
            bool beginCalled   = false;

            messageModule.OnBegin = () =>
            {
                Assert.False(endCalled);
                beginCalled = true;
            };

            messageModule.OnEnd = () =>
            {
                Assert.True(beginCalled);
                endCalled = true;
            };
            FuncBuilder.Register <IMessageModule>(() => messageModule);


            SimulateMessageBeeingAbortedDueToRetryCountExceeded(Helpers.Helpers.EmptyTransportMessage());

            Assert.True(beginCalled);
            Assert.True(endCalled);
        }
Пример #13
0
        public void SetUp()
        {
            Builder = new FuncBuilder();
            InMemoryFaultManager = new NServiceBus.Faults.InMemory.FaultManager();
            TransportBuilder = new FakeTransportBuilder();

            Configure.With(new Assembly[0]);
            Configure.Instance.Builder = Builder;

            RegisterTypes();
            Builder.Register<IManageMessageFailures>(() => InMemoryFaultManager);

            var configurer = new SatelliteConfigurer();
            configurer.Init();
            //configurer.Run();

            var launcher = new NonThreadingSatelliteLauncher
                               {
                                   Builder = Builder,
                                   TransportBuilder = TransportBuilder
                               };

            BeforeRun();
            launcher.Run();
        }
Пример #14
0
        public void Should_invoke_the_begin_and_end_on_the_message_module()
        {
            var endCalled = false;

            var  messageModule = new StubMessageModule();
            bool beginCalled   = false;

            var receivedMessage = Helpers.Helpers.EmptyTransportMessage();

            messageModule.OnBegin = () =>
            {
                Assert.False(endCalled);
                beginCalled = true;
                Assert.AreEqual(bus.CurrentMessageContext.Id, receivedMessage.Id);
            };

            messageModule.OnEnd = () =>
            {
                Assert.True(beginCalled);
                endCalled = true;
                Assert.AreEqual(bus.CurrentMessageContext.Id, receivedMessage.Id);
            };
            FuncBuilder.Register <IMessageModule>(() => messageModule);


            ReceiveMessage(receivedMessage);

            Assert.True(beginCalled);
            Assert.True(endCalled);
        }
Пример #15
0
        public void When_first_throw_second_is_cleaned_up()
        {
            var builder = new FuncBuilder();

            var unitOfWorkThatThrowsFromEnd = new UnitOfWorkThatThrowsFromEnd();
            var unitOfWork = new UnitOfWork();

            builder.Register<IManageUnitsOfWork>(() => unitOfWorkThatThrowsFromEnd);
            builder.Register<IManageUnitsOfWork>(() => unitOfWork);

            //since it is a single exception then it will not be an AggregateException 
            Assert.Throws<InvalidOperationException>(() => InvokeBehavior(builder));
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.BeginCalled);
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.EndCalled);
            Assert.IsTrue(unitOfWork.BeginCalled);
            Assert.IsTrue(unitOfWork.EndCalled);
        }
Пример #16
0
        public new void SetUp()
        {
            persister = new InMemorySagaPersister();
            FuncBuilder.Register <ISagaPersister>(() => persister);

            sagas = new Sagas();

            FuncBuilder.Register <SagaConfigurationCache>(() => sagas.sagaConfigurationCache);

            conventions = new Conventions();
        }
Пример #17
0
        public void SetUp()
        {
            Configure.GetEndpointNameAction = () => "TestEndpoint";
            const string localAddress = "endpointA";

            MasterNodeAddress = new Address(localAddress, "MasterNode");

            try
            {
                Address.InitializeLocalAddress(localAddress);
            }
            catch // intentional
            {
            }

            MessageSerializer = new XmlMessageSerializer(MessageMapper);
            ExtensionMethods.GetStaticOutgoingHeadersAction = () => MessageHeaderManager.staticHeaders;
            gatewayAddress = MasterNodeAddress.SubScope("gateway");

            messageSender = MockRepository.GenerateStub <ISendMessages>();

            subscriptionStorage = new FakeSubscriptionStorage();
            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => headerManager);
            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => new SentTimeMutator());
            FuncBuilder.Register <DefaultDispatcherFactory>(() => new DefaultDispatcherFactory());
            FuncBuilder.Register <EstimatedTimeToSLABreachCalculator>(() => SLABreachCalculator);



            unicastBus = new UnicastBus
            {
                MasterNodeAddress     = MasterNodeAddress,
                TimeoutManagerAddress = MasterNodeAddress.SubScope("Timeouts"),
                MessageSerializer     = MessageSerializer,
                Builder             = FuncBuilder,
                MessageSender       = messageSender,
                Transport           = Transport,
                SubscriptionStorage = subscriptionStorage,
                AutoSubscribe       = true,
                MessageMapper       = MessageMapper,
                FailureManager      = MockRepository.GenerateStub <IManageMessageFailures>()
            };
            bus = unicastBus;

            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => new RelatedToMessageMutator {
                Bus = bus
            });
            FuncBuilder.Register <IBus>(() => bus);

            ExtensionMethods.SetHeaderAction = headerManager.SetHeader;
        }
Пример #18
0
        public void Should_append_end_exception_to_rethrow()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new UnitOfWorkThatThrowsFromEnd();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork);

            var aggregateException = Assert.Throws<AggregateException>(() => InvokeBehavior(builder));

            Assert.AreSame(unitOfWork.ExceptionThrownFromEnd, aggregateException.InnerExceptions[0]);
        }
Пример #19
0
        public void Should_append_end_exception_to_rethrow()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new UnitOfWorkThatThrowsFromEnd();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork);
            //since it is a single exception then it will not be an AggregateException 
            var exception = Assert.Throws<InvalidOperationException>(() => InvokeBehavior(builder));

            Assert.AreSame(unitOfWork.ExceptionThrownFromEnd, exception);
        }
Пример #20
0
        public void When_first_throw_second_is_cleaned_up()
        {
            var builder = new FuncBuilder();

            var unitOfWorkThatThrowsFromEnd = new UnitOfWorkThatThrowsFromEnd();
            var unitOfWork = new UnitOfWork();

            builder.Register <IManageUnitsOfWork>(() => unitOfWorkThatThrowsFromEnd);
            builder.Register <IManageUnitsOfWork>(() => unitOfWork);
            var runner = new UnitOfWorkRunner
            {
                Builder = builder
            };

            runner.Begin();
            Assert.Throws <InvalidOperationException>(runner.End);
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.BeginCalled);
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.EndCalled);
            Assert.IsTrue(unitOfWork.BeginCalled);
            Assert.IsTrue(unitOfWork.EndCalled);
        }
Пример #21
0
        public void Verify_order()
        {
            var builder = new FuncBuilder();

            var unitOfWork1 = new CountingUnitOfWork();
            var unitOfWork2 = new CountingUnitOfWork();
            var unitOfWork3 = new CountingUnitOfWork();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork1);
            builder.Register<IManageUnitsOfWork>(() => unitOfWork2);
            builder.Register<IManageUnitsOfWork>(() => unitOfWork3);

            InvokeBehavior(builder);

            Assert.AreEqual(1, unitOfWork1.BeginCallIndex);
            Assert.AreEqual(2, unitOfWork2.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork3.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork1.EndCallIndex);
            Assert.AreEqual(2, unitOfWork2.EndCallIndex);
            Assert.AreEqual(1, unitOfWork3.EndCallIndex);
        }
Пример #22
0
        public void Verify_order()
        {
            var builder = new FuncBuilder();

            var unitOfWork1 = new CountingUnitOfWork();
            var unitOfWork2 = new CountingUnitOfWork();
            var unitOfWork3 = new CountingUnitOfWork();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork1);
            builder.Register <IManageUnitsOfWork>(() => unitOfWork2);
            builder.Register <IManageUnitsOfWork>(() => unitOfWork3);

            InvokeBehavior(builder);

            Assert.AreEqual(1, unitOfWork1.BeginCallIndex);
            Assert.AreEqual(2, unitOfWork2.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork3.BeginCallIndex);
            Assert.AreEqual(3, unitOfWork1.EndCallIndex);
            Assert.AreEqual(2, unitOfWork2.EndCallIndex);
            Assert.AreEqual(1, unitOfWork3.EndCallIndex);
        }
Пример #23
0
        public void Should_append_end_exception_to_rethrow()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new UnitOfWorkThatThrowsFromEnd();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork);

            var aggregateException = Assert.Throws <AggregateException>(() => InvokeBehavior(builder));

            Assert.AreSame(unitOfWork.ExceptionThrownFromEnd, aggregateException.InnerExceptions[0]);
        }
Пример #24
0
        public void Should_append_end_exception_to_rethrow()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new UnitOfWorkThatThrowsFromEnd();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork);
            //since it is a single exception then it will not be an AggregateException
            var exception = Assert.Throws <InvalidOperationException>(() => InvokeBehavior(builder));

            Assert.AreSame(unitOfWork.ExceptionThrownFromEnd, exception);
        }
Пример #25
0
        public void Should_set_the_processing_headers()
        {
            FuncBuilder.Register <IManageUnitsOfWork>(() => new ProcessingStatistics {
                Bus = bus
            });

            var receivedMessage = Helpers.Helpers.Serialize(new EventMessage());

            RegisterMessageType <EventMessage>();

            ReceiveMessage(receivedMessage);

            Assert.True(bus.CurrentMessageContext.Headers.ContainsKey("NServiceBus.ProcessingStarted"));
            Assert.True(bus.CurrentMessageContext.Headers.ContainsKey("NServiceBus.ProcessingEnded"));
        }
Пример #26
0
        public void Should_calculate_the_time_to_breach_sla()
        {
            FuncBuilder.Register <IManageUnitsOfWork>(() => new ProcessingStatistics
            {
                Bus = bus,
                EstimatedTimeToSLABreachCalculator = SLABreachCalculator
            });
            var endpointSLA = TimeSpan.FromSeconds(60);

            SLABreachCalculator.Initialize(endpointSLA);
            var now = DateTime.UtcNow;

            RegisterMessageType <EventMessage>();

            double secondsUntilSlaIsBreached = 0;


            SLABreachCalculator.SetCounterAction = d => secondsUntilSlaIsBreached = d;


            var receivedMessage = Helpers.Helpers.Serialize(new EventMessage());

            receivedMessage.Headers[Headers.TimeSent] = now.ToWireFormattedString();


            ReceiveMessage(receivedMessage);

            //need at least 2 messages to enable us to count
            Assert.AreEqual(0, secondsUntilSlaIsBreached);

            receivedMessage.Headers[Headers.TimeSent] = now.AddSeconds(-0.5).ToWireFormattedString();
            ReceiveMessage(receivedMessage);

            //this should be rougly 2.1 since it takes 0.02 second to process both messages and the CT delta is 0.5 (since we fake a 0.5 delay)
            // 0,5/0,02 = 25 => means that the SLA will be busted in aprox 2 seconds
            var secondsUntilSlaIsBreached_2 = secondsUntilSlaIsBreached;

            Assert.Greater(secondsUntilSlaIsBreached_2, 1.5);
            Assert.Less(secondsUntilSlaIsBreached_2, 3.0);


            receivedMessage.Headers[Headers.TimeSent] = now.AddSeconds(-0.5).ToWireFormattedString();
            ReceiveMessage(receivedMessage);
            var secondsUntilSlaIsBreached_3 = secondsUntilSlaIsBreached;

            Assert.Less(secondsUntilSlaIsBreached_2, secondsUntilSlaIsBreached_3);
        }
        public void Should_pass_exception_to_cleanup()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new CaptureExceptionPassedToEndUnitOfWork();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork);
            var runner = new UnitOfWorkRunner
                         {
                             Builder = builder
                         };
            var exception = new Exception();
            runner.Begin();
            var aggregateException = Assert.Throws<AggregateException>(() => runner.AppendEndExceptionsAndRethrow(exception));
            Assert.AreSame(exception, unitOfWork.Exception);
            Assert.AreSame(exception, aggregateException.InnerExceptions.Single());
        }
        public void Should_append_end_exception_to_rethrow()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new UnitOfWorkThatThrowsFromEnd();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork);
            var runner = new UnitOfWorkRunner
            {
                Builder = builder
            };
            var exception = new Exception();
            runner.Begin();
            var aggregateException = Assert.Throws<AggregateException>(() => runner.AppendEndExceptionsAndRethrow(exception));
            var innerExceptions = aggregateException.InnerExceptions;
            Assert.AreSame(exception, innerExceptions[0]);
            Assert.AreSame(unitOfWork.ExceptionThrownFromEnd, innerExceptions[1]);
        }
Пример #29
0
        public void Should_invoke_saga_not_found_handlers_if_no_saga_instance_is_found()
        {
            RegisterSaga <MySaga>();

            var invoked = false;

            FuncBuilder.Register <IHandleSagaNotFound>(() =>
            {
                invoked = true;
                return(new SagaNotFoundHandler());
            });

            ReceiveMessage(new MessageThatMissesSaga());

            Assert.True(invoked, "Not found handler should be invoked");

            Assert.AreEqual(0, persister.CurrentSagaEntities.Count(), "No saga should be stored");
        }
Пример #30
0
        public void Should_pass_exception_to_cleanup()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new CaptureExceptionPassedToEndUnitOfWork();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork);
            var runner = new UnitOfWorkRunner
            {
                Builder = builder
            };
            var exception = new Exception();

            runner.Begin();
            var aggregateException = Assert.Throws <AggregateException>(() => runner.AppendEndExceptionsAndRethrow(exception));

            Assert.AreSame(exception, unitOfWork.Exception);
            Assert.AreSame(exception, aggregateException.InnerExceptions.Single());
        }
Пример #31
0
        public void Should_append_end_exception_to_rethrow()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new UnitOfWorkThatThrowsFromEnd();

            builder.Register <IManageUnitsOfWork>(() => unitOfWork);
            var runner = new UnitOfWorkRunner
            {
                Builder = builder
            };
            var exception = new Exception();

            runner.Begin();
            var aggregateException = Assert.Throws <AggregateException>(() => runner.AppendEndExceptionsAndRethrow(exception));
            var innerExceptions    = aggregateException.InnerExceptions;

            Assert.AreSame(exception, innerExceptions[0]);
            Assert.AreSame(unitOfWork.ExceptionThrownFromEnd, innerExceptions[1]);
        }
Пример #32
0
        protected void RegisterSaga <T>(object sagaEntity = null) where T : new()
        {
            var sagaEntityType = GetSagaEntityType <T>();

            var sagaHeaderIdFinder = typeof(HeaderSagaIdFinder <>).MakeGenericType(sagaEntityType);

            FuncBuilder.Register(sagaHeaderIdFinder);

            Features.Sagas.ConfigureSaga(typeof(T));
            Features.Sagas.ConfigureFinder(sagaHeaderIdFinder);

            if (Features.Sagas.SagaEntityToMessageToPropertyLookup.ContainsKey(sagaEntityType))
            {
                foreach (var entityLookups in Features.Sagas.SagaEntityToMessageToPropertyLookup[sagaEntityType])
                {
                    var propertyFinder = typeof(PropertySagaFinder <,>).MakeGenericType(sagaEntityType, entityLookups.Key);

                    Features.Sagas.ConfigureFinder(propertyFinder);

                    var propertyLookups = entityLookups.Value;

                    var finder = Activator.CreateInstance(propertyFinder);
                    propertyFinder.GetProperty("SagaProperty").SetValue(finder, propertyLookups.Key);
                    propertyFinder.GetProperty("MessageProperty").SetValue(finder, propertyLookups.Value);
                    FuncBuilder.Register(propertyFinder, () => finder);
                }
            }

            if (sagaEntity != null)
            {
                var se = (IContainSagaData)sagaEntity;

                persister.CurrentSagaEntities[se.Id] = new InMemorySagaPersister.VersionedSagaEntity {
                    SagaEntity = se
                };
            }
            RegisterMessageHandlerType <T>();
        }
Пример #33
0
        public void SetUp()
        {
            HandlerInvocationCache.Clear();

            SettingsHolder.Reset();
            SettingsHolder.SetDefault("Endpoint.SendOnly", false);

            Transport   = new FakeTransport();
            FuncBuilder = new FuncBuilder();
            Configure.GetEndpointNameAction = () => "TestEndpoint";
            const string localAddress = "endpointA";

            MasterNodeAddress = new Address(localAddress, "MasterNode");
            subscriptionPredicatesEvaluator = new SubscriptionPredicatesEvaluator();
            router                  = new StaticMessageRouter(KnownMessageTypes());
            handlerRegistry         = new MessageHandlerRegistry();
            MessageMetadataRegistry = new MessageMetadataRegistry
            {
                DefaultToNonPersistentMessages = false
            };

            try
            {
                Address.InitializeLocalAddress(localAddress);
            }
            catch // intentional
            {
            }

            MessageSerializer = new XmlMessageSerializer(MessageMapper);
            ExtensionMethods.GetStaticOutgoingHeadersAction = () => MessageHeaderManager.staticHeaders;
            gatewayAddress = MasterNodeAddress.SubScope("gateway");

            messageSender       = MockRepository.GenerateStub <ISendMessages>();
            subscriptionStorage = new FakeSubscriptionStorage();

            subscriptionManager = new MessageDrivenSubscriptionManager
            {
                Builder             = FuncBuilder,
                MessageSender       = messageSender,
                SubscriptionStorage = subscriptionStorage
            };

            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => headerManager);
            FuncBuilder.Register <IMutateIncomingMessages>(() => new FilteringMutator
            {
                SubscriptionPredicatesEvaluator = subscriptionPredicatesEvaluator
            });
            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => new SentTimeMutator());
            FuncBuilder.Register <IMutateIncomingTransportMessages>(() => subscriptionManager);
            FuncBuilder.Register <DefaultDispatcherFactory>(() => new DefaultDispatcherFactory());
            FuncBuilder.Register <EstimatedTimeToSLABreachCalculator>(() => SLABreachCalculator);
            FuncBuilder.Register <ExtractIncomingPrincipal>(() => new WindowsImpersonator());

            unicastBus = new UnicastBus
            {
                MasterNodeAddress = MasterNodeAddress,
                MessageSerializer = MessageSerializer,
                Builder           = FuncBuilder,
                MessageSender     = messageSender,
                Transport         = Transport,
                MessageMapper     = MessageMapper,
                MessagePublisher  = new StorageDrivenPublisher
                {
                    MessageSender       = messageSender,
                    SubscriptionStorage = subscriptionStorage
                },
                MessageDeferrer = new TimeoutManagerDeferrer
                {
                    MessageSender         = messageSender,
                    TimeoutManagerAddress = MasterNodeAddress.SubScope("Timeouts")
                },
                SubscriptionManager             = subscriptionManager,
                MessageMetadataRegistry         = MessageMetadataRegistry,
                SubscriptionPredicatesEvaluator = subscriptionPredicatesEvaluator,
                HandlerRegistry = handlerRegistry,
                MessageRouter   = router
            };
            bus = unicastBus;

            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => new CausationMutator {
                Bus = bus
            });
            FuncBuilder.Register <IBus>(() => bus);

            ExtensionMethods.SetHeaderAction = headerManager.SetHeader;
        }
Пример #34
0
 protected void RegisterUow(IManageUnitsOfWork uow)
 {
     FuncBuilder.Register <IManageUnitsOfWork>(() => uow);
 }
Пример #35
0
        public void SetUp()
        {
            transportDefinition = new Msmq();
            HandlerInvocationCache.Clear();

            SettingsHolder.Reset();
            SettingsHolder.SetDefault("Endpoint.SendOnly", false);

            Transport   = new FakeTransport();
            FuncBuilder = new FuncBuilder();
            Configure.GetEndpointNameAction = () => "TestEndpoint";
            subscriptionPredicatesEvaluator = new SubscriptionPredicatesEvaluator();
            router                  = new StaticMessageRouter(KnownMessageTypes());
            handlerRegistry         = new MessageHandlerRegistry();
            MessageMetadataRegistry = new MessageMetadataRegistry
            {
                DefaultToNonPersistentMessages = false
            };


            MessageSerializer = new XmlMessageSerializer(MessageMapper);
            //ExtensionMethods.GetStaticOutgoingHeadersAction = () => MessageHeaderManager.staticHeaders;
            gatewayAddress = MasterNodeAddress.SubScope("gateway");

            messageSender       = MockRepository.GenerateStub <ISendMessages>();
            subscriptionStorage = new FakeSubscriptionStorage();
            subscriptionManager = new MessageDrivenSubscriptionManager
            {
                Builder             = FuncBuilder,
                MessageSender       = messageSender,
                SubscriptionStorage = subscriptionStorage
            };

            var pipelineBuilder = new PipelineBuilder(FuncBuilder);

            pipelineFactory = new PipelineExecutor(FuncBuilder, pipelineBuilder);

            FuncBuilder.Register <IMessageSerializer>(() => MessageSerializer);
            FuncBuilder.Register <ISendMessages>(() => messageSender);

            FuncBuilder.Register <MessageAuditer>(() => new MessageAuditer());

            FuncBuilder.Register <LogicalMessageFactory>(() => new LogicalMessageFactory());

            FuncBuilder.Register <IMutateIncomingMessages>(() => new FilteringMutator
            {
                SubscriptionPredicatesEvaluator = subscriptionPredicatesEvaluator
            });
            FuncBuilder.Register <IMutateIncomingTransportMessages>(() => subscriptionManager);
            FuncBuilder.Register <EstimatedTimeToSLABreachCalculator>(() => SLABreachCalculator);
            FuncBuilder.Register <MessageMetadataRegistry>(() => MessageMetadataRegistry);

            FuncBuilder.Register <IMessageHandlerRegistry>(() => handlerRegistry);
            FuncBuilder.Register <ExtractIncomingPrincipal>(() => new WindowsImpersonator());
            FuncBuilder.Register <IMessageMapper>(() => MessageMapper);

            FuncBuilder.Register <ExtractLogicalMessagesBehavior>(() => new ExtractLogicalMessagesBehavior
            {
                MessageSerializer       = MessageSerializer,
                MessageMetadataRegistry = MessageMetadataRegistry,
            });
            FuncBuilder.Register <ImpersonateSenderBehavior>(() => new ImpersonateSenderBehavior
            {
                ExtractIncomingPrincipal = MockRepository.GenerateStub <ExtractIncomingPrincipal>()
            });

            FuncBuilder.Register <CreatePhysicalMessageBehavior>(() => new CreatePhysicalMessageBehavior());
            FuncBuilder.Register <PipelineBuilder>(() => pipelineBuilder);
            FuncBuilder.Register <PipelineExecutor>(() => pipelineFactory);
            FuncBuilder.Register <TransportDefinition>(() => transportDefinition);


            var messagePublisher = new StorageDrivenPublisher
            {
                MessageSender       = messageSender,
                SubscriptionStorage = subscriptionStorage
            };

            var deferrer = new TimeoutManagerDeferrer
            {
                MessageSender         = messageSender,
                TimeoutManagerAddress = MasterNodeAddress.SubScope("Timeouts")
            };

            FuncBuilder.Register <IDeferMessages>(() => deferrer);
            FuncBuilder.Register <IPublishMessages>(() => messagePublisher);

            unicastBus = new UnicastBus
            {
                MasterNodeAddress               = MasterNodeAddress,
                Builder                         = FuncBuilder,
                MessageSender                   = messageSender,
                Transport                       = Transport,
                MessageMapper                   = MessageMapper,
                SubscriptionManager             = subscriptionManager,
                SubscriptionPredicatesEvaluator = subscriptionPredicatesEvaluator,
                MessageRouter                   = router
            };
            bus = unicastBus;

            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => new CausationMutator {
                Bus = bus
            });
            FuncBuilder.Register <IBus>(() => bus);
            FuncBuilder.Register <UnicastBus>(() => unicastBus);
            new HeaderBootstrapper
            {
                Builder = FuncBuilder
            }.SetupHeaderActions();
        }
        public void When_first_throw_second_is_cleaned_up()
        {
            var builder = new FuncBuilder();

            var unitOfWorkThatThrowsFromEnd = new UnitOfWorkThatThrowsFromEnd();
            var unitOfWork = new UnitOfWork();

            builder.Register<IManageUnitsOfWork>(() => unitOfWorkThatThrowsFromEnd);
            builder.Register<IManageUnitsOfWork>(() => unitOfWork);
            var runner = new UnitOfWorkRunner
                         {
                             Builder = builder
                         };
            runner.Begin();
            Assert.Throws<InvalidOperationException>(runner.End);
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.BeginCalled);
            Assert.IsTrue(unitOfWorkThatThrowsFromEnd.EndCalled);
            Assert.IsTrue(unitOfWork.BeginCalled);
            Assert.IsTrue(unitOfWork.EndCalled);
        }
Пример #37
0
        public void Should_pass_exception_to_cleanup()
        {
            var builder = new FuncBuilder();

            var unitOfWork = new CaptureExceptionPassedToEndUnitOfWork();
            var throwingUoW = new UnitOfWorkThatThrowsFromEnd();

            builder.Register<IManageUnitsOfWork>(() => unitOfWork);
            builder.Register<IManageUnitsOfWork>(() => throwingUoW);

            //since it is a single exception then it will not be an AggregateException 
            var exception = Assert.Throws<InvalidOperationException>(() => InvokeBehavior(builder));

            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, unitOfWork.Exception);
            Assert.AreSame(throwingUoW.ExceptionThrownFromEnd, exception);
        }
Пример #38
0
        public void SetUp()
        {
            LicenseManager.InitializeLicense();
            transportDefinition = new MsmqTransport();

            settings = new SettingsHolder();

            settings.SetDefault("EndpointName", "TestEndpoint");
            settings.SetDefault("Endpoint.SendOnly", false);
            settings.SetDefault("MasterNode.Address", MasterNodeAddress);
            pipelineModifications = new PipelineModifications();
            settings.Set <PipelineModifications>(pipelineModifications);

            ApplyPipelineModifications();

            Transport   = new FakeTransport();
            FuncBuilder = new FuncBuilder();

            FuncBuilder.Register <ReadOnlySettings>(() => settings);

            router = new StaticMessageRouter(KnownMessageTypes());
            var conventions = new Conventions();

            handlerRegistry         = new MessageHandlerRegistry(conventions);
            MessageMetadataRegistry = new MessageMetadataRegistry(false, conventions);
            MessageSerializer       = new XmlMessageSerializer(MessageMapper, conventions);

            messageSender       = MockRepository.GenerateStub <ISendMessages>();
            subscriptionStorage = new FakeSubscriptionStorage();
            configure           = new Configure(settings, FuncBuilder, new List <Action <IConfigureComponents> >(), new PipelineSettings(null))
            {
                localAddress = Address.Parse("TestEndpoint")
            };

            subscriptionManager = new SubscriptionManager
            {
                MessageSender       = messageSender,
                SubscriptionStorage = subscriptionStorage,
                Configure           = configure
            };

            pipelineFactory = new PipelineExecutor(settings, FuncBuilder);

            FuncBuilder.Register <IMessageSerializer>(() => MessageSerializer);
            FuncBuilder.Register <ISendMessages>(() => messageSender);

            FuncBuilder.Register <LogicalMessageFactory>(() => new LogicalMessageFactory(MessageMetadataRegistry, MessageMapper, pipelineFactory));

            FuncBuilder.Register <IManageSubscriptions>(() => subscriptionManager);
            FuncBuilder.Register <EstimatedTimeToSLABreachCalculator>(() => SLABreachCalculator);
            FuncBuilder.Register <MessageMetadataRegistry>(() => MessageMetadataRegistry);

            FuncBuilder.Register <IMessageHandlerRegistry>(() => handlerRegistry);
            FuncBuilder.Register <IMessageMapper>(() => MessageMapper);

            FuncBuilder.Register <DeserializeLogicalMessagesBehavior>(() => new DeserializeLogicalMessagesBehavior
            {
                MessageSerializer       = MessageSerializer,
                MessageMetadataRegistry = MessageMetadataRegistry,
            });

            FuncBuilder.Register <CreatePhysicalMessageBehavior>(() => new CreatePhysicalMessageBehavior());
            FuncBuilder.Register <PipelineExecutor>(() => pipelineFactory);
            FuncBuilder.Register <TransportDefinition>(() => transportDefinition);

            var messagePublisher = new StorageDrivenPublisher
            {
                MessageSender       = messageSender,
                SubscriptionStorage = subscriptionStorage
            };

            var deferrer = new TimeoutManagerDeferrer
            {
                MessageSender         = messageSender,
                TimeoutManagerAddress = MasterNodeAddress.SubScope("Timeouts"),
                Configure             = configure,
            };

            FuncBuilder.Register <IDeferMessages>(() => deferrer);
            FuncBuilder.Register <IPublishMessages>(() => messagePublisher);

            bus = new UnicastBus
            {
                Builder             = FuncBuilder,
                MessageSender       = messageSender,
                Transport           = Transport,
                MessageMapper       = MessageMapper,
                SubscriptionManager = subscriptionManager,
                MessageRouter       = router,
                Settings            = settings,
                Configure           = configure,
                HostInformation     = new HostInformation(Guid.NewGuid(), "HelloWorld")
            };

            FuncBuilder.Register <IMutateOutgoingTransportMessages>(() => new CausationMutator {
                Bus = bus
            });
            FuncBuilder.Register <IBus>(() => bus);
            FuncBuilder.Register <UnicastBus>(() => bus);
            FuncBuilder.Register <Conventions>(() => conventions);
            FuncBuilder.Register <Configure>(() => configure);
        }