예제 #1
0
        public PublishingToMultipleSubscribersAsyncTests()
        {
            var registry = new SubscriberRegistry();

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

            var container = new ServiceCollection();

            container.AddTransient <MyEventHandlerAsync>();
            container.AddTransient <MyOtherEventHandlerAsync>();
            container.AddTransient <MyThrowingEventHandlerAsync>();
            container.AddSingleton(_receivedMessages);
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());


            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
            PipelineBuilder <MyEvent> .ClearPipelineCache();
        }
        public CommandProcessorWithCircuitBreakerTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyFailsWithDivideByZeroHandler>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFailsWithDivideByZeroHandler>();
            container.AddSingleton <ExceptionPolicyHandler <MyCommand> >();
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });


            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            var policyRegistry = new PolicyRegistry();

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

            policyRegistry.Add("MyDivideByZeroPolicy", policy);

            MyFailsWithDivideByZeroHandler.ReceivedCommand = false;

            _commandProcessor = new CommandProcessor(registry, handlerFactory, new InMemoryRequestContextFactory(), policyRegistry);
        }
예제 #3
0
        public MonitorHandlerMustObserveButRethrowTests()
        {
            _controlBusSender = new SpyControlBusSender();
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyMonitoredHandlerThatThrowsAsync>();

            var container = new ServiceCollection();

            container.AddTransient <MyMonitoredHandlerThatThrowsAsync>();
            container.AddTransient <MonitorHandlerAsync <MyCommand> >();
            container.AddSingleton <IAmAControlBusSenderAsync>(_controlBusSender);
            container.AddSingleton(new MonitorConfiguration {
                IsMonitoringEnabled = true, InstanceName = "UnitTests"
            });
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

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

            _command = new MyCommand();

            _originalRequestAsJson = JsonSerializer.Serialize(_command, JsonSerialisationOptions.Options);

            _at = DateTime.UtcNow.AddMilliseconds(-500);
        }
        public PipelineGlobalInboxTests()
        {
            IAmAnInboxSync inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyCommandHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyCommandHandler>();
            container.AddSingleton <IAmAnInboxSync>(inbox);
            container.AddTransient <UseInboxHandler <MyCommand> >();
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _requestContext = new RequestContext();

            InboxConfiguration inboxConfiguration = new InboxConfiguration();

            _chainBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactorySync)handlerFactory, inboxConfiguration);
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
예제 #5
0
        public OnceOnlyAttributeAsyncTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyStoredCommandHandlerAsync>();

            var container = new ServiceCollection();

            container.AddTransient <MyStoredCommandHandlerAsync>();
            container.AddSingleton(_inbox);
            container.AddTransient <UseInboxHandlerAsync <MyCommand> >();
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });


            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

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

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

            registry.RegisterAsync <MyCommand, MyMonitoredHandlerAsync>();

            var container = new ServiceCollection();

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

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

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

            _command = new MyCommand();

            _originalRequestAsJson = JsonConvert.SerializeObject(_command);

            _at = DateTime.UtcNow.AddMilliseconds(-500);
        }
예제 #7
0
        public CommandProcessorWithCircuitBreakerAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyFailsWithDivideByZeroHandlerAsync>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFailsWithDivideByZeroHandlerAsync>();
            container.AddSingleton <ExceptionPolicyHandlerAsync <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());


            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, (IAmAHandlerFactoryAsync)handlerFactory, new InMemoryRequestContextFactory(), policyRegistry);
        }
예제 #8
0
        public PipelineGlobalInboxNoInboxAttributeAsyncTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyNoInboxCommandHandlerAsync>();

            var container = new ServiceCollection();

            container.AddTransient <MyNoInboxCommandHandlerAsync>();
            container.AddSingleton <IAmAnInboxSync>(_inbox);
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _requestContext = new RequestContext();

            _inboxConfiguration = new InboxConfiguration();

            _chainBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactoryAsync)handlerFactory, _inboxConfiguration);
        }
예제 #9
0
        public CommandProcessorWithRetryPolicyTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyFailsWithDivideByZeroHandler>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFailsWithDivideByZeroHandler>();
            container.AddSingleton <ExceptionPolicyHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());


            var policyRegistry = new PolicyRegistry();

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

            policyRegistry.Add("MyDivideByZeroPolicy", policy);

            MyFailsWithDivideByZeroHandler.ReceivedCommand = false;

            _commandProcessor = new CommandProcessor(registry, (IAmAHandlerFactory)handlerFactory, new InMemoryRequestContextFactory(), policyRegistry);
        }
예제 #10
0
        public PipelineGlobalInboxWhenUseInboxAsyncTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyCommandInboxedHandlerAsync>();

            var container = new ServiceCollection();

            container.AddTransient <MyCommandInboxedHandlerAsync>();
            container.AddSingleton <IAmAnInboxAsync>((IAmAnInboxAsync)_inbox);
            container.AddTransient <UseInboxHandlerAsync <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());



            _requestContext = new RequestContext();

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

            _chainBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactoryAsync)handlerFactory, _inboxConfiguration);
        }
예제 #11
0
        public PipelineGlobalInboxContextTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyGlobalInboxCommandHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyGlobalInboxCommandHandler>();
            container.AddSingleton <IAmAnInbox>(_inbox);
            container.AddTransient <UseInboxHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _requestContext = new RequestContext();

            _inboxConfiguration = new InboxConfiguration(
                scope: InboxScope.All,
                context: (handlerType) => CONTEXT_KEY);

            _chainBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactory)handlerFactory, _inboxConfiguration);
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
        //TODO: Because we use a global logger with Serilog, this won't run in parallel
        //[Fact]
        public async Task When_A_Request_Logger_Is_In_The_Pipeline_Async()
        {
            Log.Logger = new LoggerConfiguration().MinimumLevel.Information().WriteTo.TestCorrelator().CreateLogger();
            using (var context = TestCorrelator.CreateContext())
            {
                var myCommand = new MyCommand();

                var registry = new SubscriberRegistry();
                registry.RegisterAsync <MyCommand, MyLoggedHandlerAsync>();

                var container = new ServiceCollection();
                container.AddTransient <MyLoggedHandlerAsync, MyLoggedHandlerAsync>();
                container.AddTransient(typeof(RequestLoggingHandlerAsync <>), typeof(RequestLoggingHandlerAsync <>));

                var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

                var commandProcessor = new CommandProcessor(registry, handlerFactory, handlerFactory,
                                                            new InMemoryRequestContextFactory(), new PolicyRegistry());


                await commandProcessor.SendAsync(myCommand);

                //_should_log_the_request_handler_call
                //_should_log_the_type_of_handler_in_the_call
                TestCorrelator.GetLogEventsFromContextGuid(context.Guid)
                .Should().Contain(x => x.MessageTemplate.Text.StartsWith("Logging handler pipeline call"))
                .Which.Properties["1"].ToString().Should().Be($"\"{typeof(MyCommand)}\"");

                commandProcessor?.Dispose();
            }
        }
예제 #13
0
        public CommandProcessorUsingInboxTests()
        {
            _inbox = new InMemoryInbox();

            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyStoredCommandHandler>();
            registry.Register <MyCommandToFail, MyStoredCommandToFailHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyStoredCommandHandler>();
            container.AddTransient <MyStoredCommandToFailHandler>();
            container.AddSingleton(_inbox);
            container.AddTransient <UseInboxHandler <MyCommand> >();
            container.AddTransient <UseInboxHandler <MyCommandToFail> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

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

            _contextKey       = typeof(MyStoredCommandHandler).FullName;
            _commandProcessor = new CommandProcessor(registry, (IAmAHandlerFactory)handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #14
0
        private static CommandProcessor BuildCommandProcessor(IServiceProvider provider)
        {
            var options            = provider.GetService <ServiceActivatorOptions>();
            var subscriberRegistry = provider.GetService <ServiceCollectionSubscriberRegistry>();

            var handlerFactory       = new ServiceProviderHandlerFactory(provider);
            var handlerConfiguration = new HandlerConfiguration(subscriberRegistry, handlerFactory, handlerFactory);

            var policyBuilder = CommandProcessorBuilder.With()
                                .Handlers(handlerConfiguration);

            var messagingBuilder = options.PolicyRegistry == null
                ? policyBuilder.DefaultPolicy()
                : policyBuilder.Policies(options.PolicyRegistry);

            var builder = options.MessagingConfiguration == null
                ? messagingBuilder.NoTaskQueues()
                : messagingBuilder.TaskQueues(options.MessagingConfiguration);

            var commandProcessor = builder
                                   .RequestContextFactory(options.RequestContextFactory)
                                   .Build();

            return(commandProcessor);
        }
        public CommandProcessorWithRetryPolicyAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyFailsWithFallbackDivideByZeroHandlerAsync>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFailsWithFallbackDivideByZeroHandlerAsync>();
            container.AddSingleton <ExceptionPolicyHandlerAsync <MyCommand> >();
            container.AddSingleton <FallbackPolicyHandlerRequestHandlerAsync <MyCommand> >();

            _provider = container.BuildServiceProvider();
            var handlerFactory = new ServiceProviderHandlerFactory(_provider);

            var policyRegistry = new PolicyRegistry();

            var policy = Policy
                         .Handle <DivideByZeroException>()
                         .WaitAndRetryAsync(new[]
            {
                10.Milliseconds(),
                20.Milliseconds(),
                30.Milliseconds()
            }, (exception, timeSpan) =>
            {
                _retryCount++;
            });

            policyRegistry.Add("MyDivideByZeroPolicy", policy);

            _provider.GetService <MyFailsWithFallbackDivideByZeroHandlerAsync>().ReceivedCommand = false;

            _commandProcessor = new CommandProcessor(registry, (IAmAHandlerFactoryAsync)handlerFactory, new InMemoryRequestContextFactory(), policyRegistry);
        }
        public CommandProcessorWithFeatureSwitchOffInPipelineTests()
        {
            _registry = new SubscriberRegistry();
            _registry.Register <MyCommand, MyFeatureSwitchedOffHandler>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFeatureSwitchedOffHandler>();
            container.AddTransient <FeatureSwitchHandler <MyCommand> >();

            _handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());
        }
예제 #17
0
        public CommandProcessorWithNullFeatureSwitchConfig()
        {
            _registry = new SubscriberRegistry();
            _registry.Register <MyCommand, MyFeatureSwitchedConfigHandler>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFeatureSwitchedConfigHandler>();
            container.AddTransient <FeatureSwitchHandler <MyCommand> >();

            _provider       = container.BuildServiceProvider();
            _handlerFactory = new ServiceProviderHandlerFactory(_provider);
        }
예제 #18
0
        public TimeoutHandlerFailsCheckTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyFailsDueToTimeoutHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyFailsDueToTimeoutHandler>();
            container.AddTransient <TimeoutPolicyHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _commandProcessor = new CommandProcessor(registry, (IAmAHandlerFactory)handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
        }
예제 #19
0
        public FeatureSwitchByConfigMissingConfigStrategyExceptionTests()
        {
            _registry = new SubscriberRegistry();
            _registry.Register <MyCommand, MyFeatureSwitchedConfigHandler>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFeatureSwitchedConfigHandler>();
            container.AddTransient <FeatureSwitchHandler <MyCommand> >();

            _provider       = container.BuildServiceProvider();
            _handlerFactory = new ServiceProviderHandlerFactory(_provider);

            _featureSwitchRegistry = new FakeConfigRegistry();
        }
        public CommandProcessorBuildDefaultInboxPublishAsyncTests()
        {
            var handler = new MyEventHandlerAsync(new Dictionary <string, Guid>());

            var subscriberRegistry = new SubscriberRegistry();

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

            var container = new ServiceCollection();

            container.AddSingleton <MyEventHandlerAsync>(handler);
            container.AddSingleton <IAmAnInboxAsync>(_inbox);
            container.AddTransient <UseInboxHandlerAsync <MyEvent> >();
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());


            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
                );
        }
        public CommandProcessorWithFeatureSwitchOnInPipelineTests()
        {
            _registry = new SubscriberRegistry();
            _registry.Register <MyCommand, MyFeatureSwitchedOnHandler>();

            var container = new ServiceCollection();

            container.AddSingleton <MyFeatureSwitchedOnHandler>();
            container.AddTransient <FeatureSwitchHandler <MyCommand> >();
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });

            _handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());
        }
        public PipelineOrderingTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyDoubleDecoratedHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyDoubleDecoratedHandler>();
            container.AddTransient <MyValidationHandler <MyCommand> >();
            container.AddTransient <MyLoggingHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactory)handlerFactory);
        }
예제 #23
0
        public PipelineMixedHandlersTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyMixedImplicitHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyMixedImplicitHandler>();
            container.AddTransient <MyLoggingHandlerAsync <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

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

            registry.Register <MyCommand, MyUnusedCommandHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyUnusedCommandHandler>();
            container.AddTransient <MyAbortingHandler <MyCommand> >();
            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());


            _commandProcessor = new CommandProcessor(registry, (IAmAHandlerFactory)handlerFactory, (IAmAHandlerFactoryAsync)handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
        public MyPassesTimeoutHandlerTests()
        {
            var registry = new SubscriberRegistry();

            //Handler is decorated with UsePolicy
            registry.Register <MyCommand, MyPassesTimeoutHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyPassesTimeoutHandler>();
            container.AddTransient <TimeoutPolicyHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

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

            //This handler has no Inbox attribute
            subscriberRegistry.Add(typeof(MyCommand), typeof(MyCommandHandler));

            var container = new ServiceCollection();

            container.AddTransient <MyCommandHandler>();
            container.AddSingleton <IAmAnInboxSync, InMemoryInbox>();
            container.AddTransient <UseInboxHandler <MyCommand> >();
            container.AddSingleton <IBrighterOptions>(new BrighterOptions()
            {
                HandlerLifetime = ServiceLifetime.Transient
            });


            _provider = container.BuildServiceProvider();
            var handlerFactory = new ServiceProviderHandlerFactory(_provider);

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

            var circuitBreakerPolicy = Policy
                                       .Handle <Exception>()
                                       .CircuitBreaker(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.RETRYPOLICY, retryPolicy }, { CommandProcessor.CIRCUITBREAKER, circuitBreakerPolicy }
            },
                inboxConfiguration: inboxConfiguration
                );

            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
예제 #27
0
        public PipelineForeignAttributesTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyObsoleteCommandHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyObsoleteCommandHandler>();
            container.AddTransient <MyValidationHandler <MyCommand> >();
            container.AddTransient <MyLoggingHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactory)handlerFactory);
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
예제 #28
0
        public CommandProcessorMissingPolicyFromRegistryAsyncTests()
        {
            var registry = new SubscriberRegistry();

            registry.RegisterAsync <MyCommand, MyDoesNotFailPolicyHandlerAsync>();

            var container = new ServiceCollection();

            container.AddTransient <MyDoesNotFailPolicyHandlerAsync>();
            container.AddTransient <ExceptionPolicyHandlerAsync <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            MyDoesNotFailPolicyHandler.ReceivedCommand = false;

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

            registry.RegisterAsync <MyCommand, MyPreAndPostDecoratedHandlerAsync>();

            var container = new ServiceCollection();

            container.AddTransient <MyPreAndPostDecoratedHandlerAsync>();
            container.AddTransient <MyValidationHandlerAsync <MyCommand> >();
            container.AddTransient <MyLoggingHandlerAsync <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _pipelineBuilder = new PipelineBuilder <MyCommand>(registry, (IAmAHandlerFactoryAsync)handlerFactory);
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }
예제 #30
0
        public CommandProcessorPipelineStepsTests()
        {
            var registry = new SubscriberRegistry();

            registry.Register <MyCommand, MyStepsPreAndPostDecoratedHandler>();

            var container = new ServiceCollection();

            container.AddTransient <MyStepsPreAndPostDecoratedHandler>();
            container.AddTransient <MyStepsValidationHandler <MyCommand> >();
            container.AddTransient <MyStepsLoggingHandler <MyCommand> >();

            var handlerFactory = new ServiceProviderHandlerFactory(container.BuildServiceProvider());

            _commandProcessor = new CommandProcessor(registry, (IAmAHandlerFactory)handlerFactory, new InMemoryRequestContextFactory(), new PolicyRegistry());
            PipelineBuilder <MyCommand> .ClearPipelineCache();
        }