public MonitorHandlerMustObserveButRethrowTests()
        {
            _controlBusSender = new SpyControlBusSender();
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyMonitoredHandlerThatThrowsAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyMonitoredHandlerThatThrowsAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MonitorHandlerAsync <MyCommand> >();
            container.Register <IAmAControlBusSenderAsync>(_controlBusSender);
            container.Register(new MonitorConfiguration {
                IsMonitoringEnabled = true, InstanceName = "UnitTests"
            });

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());

            _command = new MyCommand();

            _originalRequestAsJson = JsonConvert.SerializeObject(_command);

            _at = DateTime.UtcNow.AddMilliseconds(-500);
        }
예제 #2
0
        public void Establish()
        {
            _controlBusSender = new SpyControlBusSender();
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyMonitoredHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyMonitoredHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MonitorHandlerAsync <MyCommand> >();
            container.Register <IAmAControlBusSenderAsync>(_controlBusSender);
            container.Register <MonitorConfiguration>(new MonitorConfiguration {
                IsMonitoringEnabled = true, InstanceName = "UnitTests"
            });

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());

            _command = new MyCommand();

            _originalRequestAsJson = JsonConvert.SerializeObject(_command);

            _at = DateTime.UtcNow;
            Clock.OverrideTime = _at;
        }
예제 #3
0
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyFailsWithFallbackDivideByZeroHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyFailsWithFallbackDivideByZeroHandlerAsync>().AsSingleton();
            container.Register <IHandleRequestsAsync <MyCommand>, ExceptionPolicyHandlerAsync <MyCommand> >().AsSingleton();

            var policyRegistry = new PolicyRegistry();

            var policy = Policy
                         .Handle <DivideByZeroException>()
                         .WaitAndRetryAsync(new[]
            {
                1.Seconds(),
                2.Seconds(),
                3.Seconds()
            }, (exception, timeSpan) =>
            {
                s_retryCount++;
            });

            policyRegistry.Add("MyDivideByZeroPolicy", policy);

            MyFailsWithFallbackDivideByZeroHandlerAsync.ReceivedCommand = false;

            s_commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry);
        }
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyMixedImplicitHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyMixedImplicitHandlerAsync>();
            container.Register <IHandleRequests <MyCommand>, MyLoggingHandler <MyCommand> >();

            _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory);
        }
        public PipelineBuilderAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyImplicitHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyImplicitHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggingHandlerAsync <MyCommand> >();

            _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory);
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
        public PipelinePreAndPostFiltersAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyPreAndPostDecoratedHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyPreAndPostDecoratedHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MyValidationHandlerAsync <MyCommand> >();
            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggingHandlerAsync <MyCommand> >();

            _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory);
        }
예제 #7
0
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyDoubleDecoratedHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyDoubleDecoratedHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MyValidationHandlerAsync <MyCommand> >();
            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggingHandlerAsync <MyCommand> >();

            _pipeline_Builder = new PipelineBuilder <MyCommand>(registry, handlerFactory);
        }
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyEvent, MyEventHandlerAsync>();
            registry.RegisterAsync <MyEvent, MyOtherEventHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyEvent>, MyEventHandlerAsync>("MyEventHandlerAsync");
            container.Register <IHandleRequestsAsync <MyEvent>, MyOtherEventHandlerAsync>("MyOtherHandlerAsync");

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
        public PipelineForiegnAttributesAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyObsoleteCommandHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyObsoleteCommandHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MyValidationHandlerAsync <MyCommand> >();
            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggingHandlerAsync <MyCommand> >();

            _pipeline_Builder = new PipelineBuilder <MyCommand>(registry, handlerFactory);
        }
        public CommandProcessorPublishMultipleMatchesAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyEvent, MyEventHandlerAsync>();
            registry.RegisterAsync <MyEvent, MyOtherEventHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyEvent>, MyEventHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyEvent>, MyOtherEventHandlerAsync>();
            container.Register(_receivedMessages);

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyDoesNotFailPolicyHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyDoesNotFailPolicyHandlerAsync>("MyDoesNotFailPolicyHandler");
            container.Register <IHandleRequestsAsync <MyCommand>, ExceptionPolicyHandlerAsync <MyCommand> >("MyExceptionPolicyHandler");

            MyDoesNotFailPolicyHandler.ReceivedCommand = false;

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
        public CommandProcessorWithLoggingInPipelineAsyncTests()
        {
            _myCommand = new MyCommand();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyLoggedHandlerAsync>();

            var container = new TinyIoCContainer();

            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggedHandlerAsync>();

            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #13
0
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyCommandHandlerAsync>();
            registry.RegisterAsync <MyCommand, MyImplicitHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyCommandHandlerAsync>("DefaultHandler");
            container.Register <IHandleRequestsAsync <MyCommand>, MyImplicitHandlerAsync>("ImplicitHandler");
            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggingHandlerAsync <MyCommand> >();

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #14
0
        public CommandProcessorSendWithMultipleMatchesAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyCommandHandlerAsync>();
            registry.RegisterAsync <MyCommand, MyImplicitHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyCommandHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MyImplicitHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggingHandlerAsync <MyCommand> >();
            container.Register(_receivedMessages);

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #15
0
        public PublishingToMultipleSubscribersAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyEvent, MyEventHandlerAsync>();
            registry.RegisterAsync <MyEvent, MyOtherEventHandlerAsync>();
            registry.RegisterAsync <MyEvent, MyThrowingEventHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyEvent>, MyEventHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyEvent>, MyOtherEventHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyEvent>, MyThrowingEventHandlerAsync>();
            container.Register(_receivedMessages);

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
            PipelineBuilder <MyEvent> .ClearPipelineCache();
        }
예제 #16
0
        public PipelineGlobalInboxNoInboxAttributeAsyncTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyNoInboxCommandHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyNoInboxCommandHandlerAsync>();
            container.Register <IAmAnInbox>(_inbox);

            _requestContext = new RequestContext();

            _inboxConfiguration = new InboxConfiguration();

            _chainBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory, _inboxConfiguration);
        }
        public void Establish()
        {
            _logger    = new SpyLog();
            _myCommand = new MyCommand();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyLoggedHandlerAsync>();

            var container = new TinyIoCContainer();

            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggedHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, RequestLoggingHandlerAsync <MyCommand> >();

            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());

            LogProvider.SetCurrentLogProvider(new SpyLogProvider(_logger));
        }
예제 #18
0
        public OnceOnlyAttributeWithWarnExceptionAsyncTests()
        {
            _commandStore = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyStoredCommandToWarnHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyStoredCommandToWarnHandlerAsync>();
            container.Register(_commandStore);

            _command = new MyCommand {
                Value = "My Test String"
            };

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
        public CommandProcessorUsingCommandStoreAsyncTests()
        {
            _commandStore = new InMemoryCommandStore();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyStoredCommandHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyStoredCommandHandlerAsync>();
            container.Register(_commandStore);

            _command = new MyCommand {
                Value = "My Test String"
            };

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #20
0
        public CommandProcessorBuildDefaultInboxSendAsyncTests()
        {
            var handler = new MyCommandHandlerAsync(new Dictionary <string, Guid>());

            var subscriberRegistry = new SubscriberRegistry();

            //This handler has no Inbox attribute
            subscriberRegistry.RegisterAsync <MyCommand, MyCommandHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <MyCommandHandlerAsync>(handler);
            container.Register <IAmAnInboxAsync>(_inbox);

            var retryPolicy = Policy
                              .Handle <Exception>()
                              .RetryAsync();

            var circuitBreakerPolicy = Policy
                                       .Handle <Exception>()
                                       .CircuitBreakerAsync(1, TimeSpan.FromMilliseconds(1));

            var inboxConfiguration = new InboxConfiguration(
                InboxScope.All,                      //grab all the events
                onceOnly: true,                      //only allow once
                actionOnExists: OnceOnlyAction.Throw //throw on duplicates (we should  be the only entry after)
                );

            _commandProcessor = new CommandProcessor(
                subscriberRegistry,
                handlerFactory,
                new InMemoryRequestContextFactory(),
                new PolicyRegistry
            {
                { CommandProcessor.RETRYPOLICYASYNC, retryPolicy },
                { CommandProcessor.CIRCUITBREAKERASYNC, circuitBreakerPolicy }
            },
                inboxConfiguration: inboxConfiguration
                );
        }
예제 #21
0
        public CommandProcessorWithLoggingInPipelineAsyncTests()
        {
            _logRecords = new List <SpyLog.LogRecord>();
            SpyLog logger = new SpyLog(_logRecords);

            _myCommand = new MyCommand();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyLoggedHandlerAsync>();

            var container = new TinyIoCContainer();

            container.Register <IHandleRequestsAsync <MyCommand>, MyLoggedHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommand>, RequestLoggingHandlerAsync <MyCommand> >();

            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            LogProvider.SetCurrentLogProvider(new SpyLogProvider(logger));
            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #22
0
        public CommandProcessorUsingInboxAsyncTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyStoredCommandHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyStoredCommandHandlerAsync>();
            container.Register <IHandleRequestsAsync <MyCommandToFail>, MyStoredCommandToFailHandlerAsync>();
            container.Register(_inbox);

            _contextKey = typeof(MyStoredCommandHandlerAsync).FullName;

            _command = new MyCommand {
                Value = "My Test String"
            };

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
        public PipelineGlobalInboxWhenUseInboxAsyncTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyCommandInboxedHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyCommandInboxedHandlerAsync>();
            container.Register <IAmAnInboxAsync>((IAmAnInboxAsync)_inbox);

            _requestContext = new RequestContext();

            _inboxConfiguration = new InboxConfiguration(
                scope: InboxScope.All,
                onceOnly: true,
                actionOnExists: OnceOnlyAction.Throw);

            _chainBuilder = new PipelineBuilder <MyCommand>(registry, handlerFactory, _inboxConfiguration);
        }
        public void Establish()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyFailsWithDivideByZeroHandlerAsync>();

            var container      = new TinyIoCContainer();
            var handlerFactory = new TinyIocHandlerFactoryAsync(container);

            container.Register <IHandleRequestsAsync <MyCommand>, MyFailsWithDivideByZeroHandlerAsync>().AsSingleton();
            container.Register <IHandleRequestsAsync <MyCommand>, ExceptionPolicyHandlerAsync <MyCommand> >().AsSingleton();

            var policyRegistry = new PolicyRegistry();

            var policy = Policy
                         .Handle <DivideByZeroException>()
                         .CircuitBreakerAsync(2, TimeSpan.FromMinutes(1));

            policyRegistry.Add("MyDivideByZeroPolicy", policy);

            MyFailsWithDivideByZeroHandlerAsync.ReceivedCommand = false;

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry);
        }