private Task<Bus> BuildMeABus()
        {
            return Task.Run(() =>
                            {
                                // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
                                // deleting queues and topics is slow.
                                var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});
                                var messageBroker = new DefaultMessageHandlerFactory(typeProvider);

                                var logger = new ConsoleLogger();

                                var bus = new BusBuilder().Configure()
                                                          .WithNames("IntegrationTestHarness", Environment.MachineName)
                                                          .WithConnectionString(CommonResources.ConnectionString)
                                                          .WithTypesFrom(typeProvider)
                                                          .WithCommandHandlerFactory(messageBroker)
                                                          .WithRequestHandlerFactory(messageBroker)
                                                          .WithMulticastEventHandlerFactory(messageBroker)
                                                          .WithCompetingEventHandlerFactory(messageBroker)
                                                          .WithMulticastRequestHandlerFactory(messageBroker)
                                                          .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                                          .WithLogger(logger)
                                                          .Build();
                                bus.ShouldNotBe(null);
                                bus.Start();
                                return bus;
                            });
        }
예제 #2
0
        public async Task<Bus> CreateAndStart()
        {
            var logger = new ConsoleLogger();
            //var logger = new NullLogger();

            // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
            // deleting queues and topics is slow.
            var typeProvider = new TestHarnessTypeProvider(new[] {_testFixtureType.Assembly}, new[] {_testFixtureType.Namespace});

            var bus = new BusBuilder().Configure()
                                      .WithNames("MyTestSuite", Environment.MachineName)
                                      .WithConnectionString(CommonResources.ServiceBusConnectionString)
                                      .WithTypesFrom(typeProvider)
                                      .WithGlobalInboundInterceptorTypes(typeProvider.InterceptorTypes.Where(t => typeof(IInboundInterceptor).IsAssignableFrom(t)).ToArray())
                                      .WithGlobalOutboundInterceptorTypes(typeProvider.InterceptorTypes.Where(t => typeof(IOutboundInterceptor).IsAssignableFrom(t)).ToArray())
                                      .WithDependencyResolver(new DependencyResolver(typeProvider))
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .WithLogger(logger)
                                      .WithDebugOptions(
                                          dc =>
                                              dc.RemoveAllExistingNamespaceElementsOnStartup(
                                                  "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                                      .Build();
            await bus.Start(MessagePumpTypes.All);

            return bus;
        }
        private async Task ClearMeABus()
        {
            // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
            // deleting queues and topics is slow.
            var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {"Some.Namespace.That.Does.Not.Exist"});

            var logger = TestHarnessLoggerFactory.Create();

            var busBuilder = new BusBuilder().Configure()
                                             .WithNames("IntegrationTestHarness", Environment.MachineName)
                                             .WithConnectionString(CommonResources.ServiceBusConnectionString)
                                             .WithTypesFrom(typeProvider)
                                             .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                             .WithLogger(logger)
                                             .WithDebugOptions(
                                                 dc =>
                                                 dc.RemoveAllExistingNamespaceElementsOnStartup(
                                                     "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                ;

            using (var bus = busBuilder.Build())
            {
                await bus.Start();
            }
        }
        private void ClearMeABus()
        {
            // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
            // deleting queues and topics is slow.
            var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {"Some.Namespace.That.Does.Not.Exist"});
            var messageBroker = new DefaultMessageBroker(typeProvider);

            var logger = new ConsoleLogger();

            var bus = new BusBuilder().Configure()
                                      .WithNames("MyTestSuite", Environment.MachineName)
                                      .WithConnectionString(CommonResources.ConnectionString)
                                      .WithTypesFrom(typeProvider)
                                      .WithCommandBroker(messageBroker)
                                      .WithRequestBroker(messageBroker)
                                      .WithMulticastEventBroker(messageBroker)
                                      .WithCompetingEventBroker(messageBroker)
                                      .WithMulticastRequestBroker(messageBroker)
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .WithLogger(logger)
                                      .WithDebugOptions(
                                          dc =>
                                              dc.RemoveAllExistingNamespaceElementsOnStartup(
                                                  "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                                      .Build();
        }
 protected async Task<BrokeredMessageFactory> Given()
 {
     var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});
     return new BrokeredMessageFactory(
         new MaxLargeMessageSizeSetting(),
         new MaxSmallMessageSizeSetting {Value = 64*1024},
         new SystemClock(),
         new NullCompressor(),
         new DispatchContextManager(),
         new UnsupportedLargeMessageBodyStore(),
         new DataContractSerializer(typeProvider),
         typeProvider);
 }
        public static IEnumerable<IDependencyResolver> GetAllDependencyResolvers(TestHarnessTypeProvider typeProvider)
        {
            var dependencyResolvers = AssembliesToScan
                .SelectMany(a => a.GetExportedTypes())
                .Where(t => typeof (IDependencyResolverFactory).IsAssignableFrom(t))
                .Where(t => t.IsInstantiable())
                .Select(Activator.CreateInstance)
                .Cast<IDependencyResolverFactory>()
                .Select(factory => factory.Create(typeProvider))
                .ToArray();

            return dependencyResolvers;
        }
 protected async Task<BrokeredMessageFactory> Given()
 {
     var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});
     return new BrokeredMessageFactory(new DefaultMessageTimeToLiveSetting(),
                                       new MaxLargeMessageSizeSetting(),
                                       new MaxSmallMessageSizeSetting {Value = 64*1024},
                                       new ReplyQueueNameSetting(new ApplicationNameSetting {Value = "SomeApp"}, new InstanceNameSetting {Value = "SomeInstance"}),
                                       new SystemClock(),
                                       new NullCompressor(),
                                       new DispatchContextManager(),
                                       new UnsupportedLargeMessageBodyStore(),
                                       new DataContractSerializer(typeProvider),
                                       typeProvider);
 }
        public async Task ItShouldGoBangQuickly()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});

            var logger = TestHarnessLoggerFactory.Create();

            var bus = new BusBuilder().Configure()
                                      .WithNames("IntegrationTestHarness", Environment.MachineName)
                                      .WithConnectionString(@"Endpoint=sb://shouldnotexist.example.com/;SharedAccessKeyName=IntegrationTestHarness;SharedAccessKey=borkborkbork=")
                                      .WithTypesFrom(typeProvider)
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .WithLogger(logger)
                                      .Build();

            await bus.Start();
        }
        protected async Task <BrokeredMessageFactory> Given()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });

            return(new BrokeredMessageFactory(
                       new MaxLargeMessageSizeSetting(),
                       new MaxSmallMessageSizeSetting {
                Value = 64 * 1024
            },
                       new SystemClock(),
                       new NullCompressor(),
                       new DispatchContextManager(),
                       new UnsupportedLargeMessageBodyStore(),
                       new DataContractSerializer(typeProvider),
                       typeProvider));
        }
예제 #10
0
        public async Task ItShouldGoBangQuickly()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });

            var logger = TestHarnessLoggerFactory.Create();

            var bus = new BusBuilder().Configure()
                      .WithNames("IntegrationTestHarness", Environment.MachineName)
                      .WithConnectionString(@"Endpoint=sb://shouldnotexist.example.com/;SharedAccessKeyName=IntegrationTestHarness;SharedAccessKey=borkborkbork=")
                      .WithTypesFrom(typeProvider)
                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                      .WithLogger(logger)
                      .Build();

            await bus.Start();
        }
예제 #11
0
 public BusBuilderScenario(TestHarnessTypeProvider typeProvider,
                           ILogger logger,
                           IConfigurationScenario <TransportConfiguration> transport,
                           IConfigurationScenario <IRouter> router,
                           IConfigurationScenario <ISerializer> serializer,
                           IConfigurationScenario <ICompressor> compressor,
                           IConfigurationScenario <ContainerConfiguration> iocContainer,
                           IConfigurationScenario <SyncContextConfiguration> syncContext) : base(transport, router, serializer, compressor, iocContainer, syncContext)
 {
     _typeProvider = typeProvider;
     _logger       = logger;
     _transport    = transport;
     _router       = router;
     _serializer   = serializer;
     _compressor   = compressor;
     _iocContainer = iocContainer;
     _syncContext  = syncContext;
 }
예제 #12
0
        public IEnumerator <IConfigurationScenario <BusBuilderConfiguration> > GetEnumerator()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] { _testFixtureType.Assembly }, new[] { _testFixtureType.Namespace });
            var logger       = TestHarnessLoggerFactory.Create(Guid.NewGuid(), GetType().FullName);

            foreach (var syncContext in new SynchronizationContextConfigurationSources())
            {
                // in-process transport with all other combinations
                foreach (var transport in new TransportConfigurationSources().Take(1))
                {
                    foreach (var router in new RouterConfigurationSources())
                    {
                        foreach (var serializer in new SerializerConfigurationSources(typeProvider))
                        {
                            foreach (var iocContainer in new IoCContainerConfigurationSources())
                            {
                                foreach (var compressor in new CompressorScenariosSource())
                                {
                                    yield return(new BusBuilderScenario(typeProvider, logger, transport, router, serializer, compressor, iocContainer, syncContext));
                                }
                            }
                        }
                    }
                }

                // all transports with defaults for everything else
                foreach (var transport in new TransportConfigurationSources().Skip(1))
                {
                    foreach (var router in new RouterConfigurationSources().Take(1))
                    {
                        foreach (var serializer in new SerializerConfigurationSources(typeProvider).Take(1))
                        {
                            foreach (var iocContainer in new IoCContainerConfigurationSources().Take(1))
                            {
                                foreach (var compressor in new CompressorScenariosSource().Take(1))
                                {
                                    yield return(new BusBuilderScenario(typeProvider, logger, transport, router, serializer, compressor, iocContainer, syncContext));
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #13
0
        protected override Task <BusCommandSender> Given()
        {
            _nimbusMessageSender = Substitute.For <INimbusMessageSender>();

            var messagingFactory = Substitute.For <INimbusMessagingFactory>();

            messagingFactory.GetQueueSender(Arg.Any <string>()).Returns(ci => _nimbusMessageSender);

            var clock                 = new SystemClock();
            var typeProvider          = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });
            var serializer            = new DataContractSerializer(typeProvider);
            var replyQueueNameSetting = new ReplyQueueNameSetting(
                new ApplicationNameSetting {
                Value = "TestApplication"
            },
                new InstanceNameSetting {
                Value = "TestInstance"
            });
            var brokeredMessageFactory = new BrokeredMessageFactory(new DefaultMessageTimeToLiveSetting(),
                                                                    new MaxLargeMessageSizeSetting(),
                                                                    new MaxSmallMessageSizeSetting(),
                                                                    replyQueueNameSetting,
                                                                    clock,
                                                                    new NullCompressor(),
                                                                    new DispatchContextManager(),
                                                                    new UnsupportedLargeMessageBodyStore(),
                                                                    serializer,
                                                                    typeProvider);
            var logger = Substitute.For <ILogger>();
            var knownMessageTypeVerifier = Substitute.For <IKnownMessageTypeVerifier>();
            var router                     = new DestinationPerMessageTypeRouter();
            var dependencyResolver         = new NullDependencyResolver();
            var outboundInterceptorFactory = new NullOutboundInterceptorFactory();

            var busCommandSender = new BusCommandSender(brokeredMessageFactory,
                                                        dependencyResolver,
                                                        knownMessageTypeVerifier,
                                                        logger,
                                                        messagingFactory,
                                                        outboundInterceptorFactory,
                                                        router);

            return(Task.FromResult(busCommandSender));
        }
            private IEnumerable <TestCaseData> Generate()
            {
                var typeProvider = new TestHarnessTypeProvider(new[] { Assembly.GetExecutingAssembly() }, new[] { GetType().Namespace });

                var dependencyResolvers = TestHarnessDependencyResolversFactory.GetAllDependencyResolvers(typeProvider);

                var typesToResolve = typeProvider.AllResolvableTypes();

                // ReSharper disable LoopCanBeConvertedToQuery
                foreach (var dependencyResolver in dependencyResolvers)
                {
                    foreach (var componentType in typesToResolve)
                    {
                        yield return(new TestCaseData(dependencyResolver, componentType)
                                     .SetName(dependencyResolver.GetType().Name + "." + componentType.Name));
                    }
                }
                // ReSharper restore LoopCanBeConvertedToQuery
            }
예제 #15
0
        private BrokeredMessageFactory BuildBrokeredMessageFactory(ICompressor compressor)
        {
            var typeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });
            var serializer   = new DataContractSerializer(typeProvider);

            return(new BrokeredMessageFactory(new DefaultMessageTimeToLiveSetting(),
                                              new MaxLargeMessageSizeSetting(),
                                              new MaxSmallMessageSizeSetting(),
                                              new ReplyQueueNameSetting(new ApplicationNameSetting {
                Value = "App"
            }, new InstanceNameSetting {
                Value = "Instance"
            }),
                                              Substitute.For <IClock>(),
                                              compressor,
                                              new DispatchContextManager(),
                                              new UnsupportedLargeMessageBodyStore(),
                                              serializer,
                                              typeProvider));
        }
예제 #16
0
        protected MessageDispatcherTestBase()
        {
            var clock = Substitute.For <IClock>();
            var replyQueueNameSetting = new ReplyQueueNameSetting(
                new ApplicationNameSetting {
                Value = "TestApplication"
            },
                new InstanceNameSetting {
                Value = "TestInstance"
            });

            TypeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });
            var serializer = new DataContractSerializer(TypeProvider);

            HandlerMapper        = new HandlerMapper(TypeProvider);
            NimbusMessageFactory = new NimbusMessageFactory(new DefaultMessageTimeToLiveSetting(),
                                                            replyQueueNameSetting,
                                                            clock,
                                                            new DispatchContextManager());
        }
        protected async Task <BrokeredMessageFactory> Given()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });

            return(new BrokeredMessageFactory(new DefaultMessageTimeToLiveSetting(),
                                              new MaxLargeMessageSizeSetting(),
                                              new MaxSmallMessageSizeSetting {
                Value = 64 * 1024
            },
                                              new ReplyQueueNameSetting(new ApplicationNameSetting {
                Value = "SomeApp"
            }, new InstanceNameSetting {
                Value = "SomeInstance"
            }),
                                              new SystemClock(),
                                              new NullCompressor(),
                                              new DispatchContextManager(),
                                              new UnsupportedLargeMessageBodyStore(),
                                              new DataContractSerializer(typeProvider),
                                              typeProvider));
        }
예제 #18
0
        private Task <Bus> BuildMeABus()
        {
            return(Task.Run(async() =>
            {
                // Filter types we care about to only our own test's namespace. It's a performance optimisation because creating and
                // deleting queues and topics is slow.
                var typeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });

                var logger = TestHarnessLoggerFactory.Create();

                var bus = new BusBuilder().Configure()
                          .WithNames("IntegrationTestHarness", Environment.MachineName)
                          .WithConnectionString(CommonResources.ServiceBusConnectionString)
                          .WithTypesFrom(typeProvider)
                          .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                          .WithLogger(logger)
                          .Build();
                bus.ShouldNotBe(null);
                await bus.Start();
                return bus;
            }));
        }
        public async Task ItShouldGoBangQuickly()
        {
            var typeProvider = new TestHarnessTypeProvider(new[] {GetType().Assembly}, new[] {GetType().Namespace});
            var messageBroker = new DefaultMessageHandlerFactory(typeProvider);

            var logger = new ConsoleLogger();

            var bus = new BusBuilder().Configure()
                                      .WithNames("IntegrationTestHarness", Environment.MachineName)
                                      .WithConnectionString(@"Endpoint=sb://shouldnotexist.example.com/;SharedAccessKeyName=IntegrationTestHarness;SharedAccessKey=borkborkbork=")
                                      .WithTypesFrom(typeProvider)
                                      .WithCommandHandlerFactory(messageBroker)
                                      .WithRequestHandlerFactory(messageBroker)
                                      .WithMulticastEventHandlerFactory(messageBroker)
                                      .WithCompetingEventHandlerFactory(messageBroker)
                                      .WithMulticastRequestHandlerFactory(messageBroker)
                                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                                      .WithLogger(logger)
                                      .Build();

            Should.Throw<BusException>(bus.Start);
        }
예제 #20
0
        protected override async Task <CommandMessageDispatcher> Given()
        {
            var clock                 = new SystemClock();
            var logger                = new ConsoleLogger();
            var typeProvider          = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });
            var serializer            = new DataContractSerializer(typeProvider);
            var replyQueueNameSetting = new ReplyQueueNameSetting(
                new ApplicationNameSetting {
                Value = "TestApplication"
            },
                new InstanceNameSetting {
                Value = "TestInstance"
            });

            var handlerMap = new HandlerMapper(typeProvider).GetFullHandlerMap(typeof(IHandleCommand <>));

            _brokeredMessageFactory = new BrokeredMessageFactory(new DefaultMessageTimeToLiveSetting(),
                                                                 new MaxLargeMessageSizeSetting(),
                                                                 new MaxSmallMessageSizeSetting(),
                                                                 replyQueueNameSetting,
                                                                 clock,
                                                                 new NullCompressor(),
                                                                 new DispatchContextManager(),
                                                                 new UnsupportedLargeMessageBodyStore(),
                                                                 serializer,
                                                                 typeProvider);

            return(new CommandMessageDispatcher(_brokeredMessageFactory,
                                                new SystemClock(),
                                                new DependencyResolver(typeProvider),
                                                new NullInboundInterceptorFactory(),
                                                new NullLogger(),
                                                handlerMap,
                                                new DefaultMessageLockDurationSetting(),
                                                new NimbusTaskFactory(new MaximumThreadPoolThreadsSetting(), new MinimumThreadPoolThreadsSetting(), logger),
                                                Substitute.For <IPropertyInjector>()));
        }
예제 #21
0
        protected override async Task <Bus> Given()
        {
            var typeProvider            = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });
            var logger                  = TestHarnessLoggerFactory.Create();
            var largeMessageBodyStorage = new BlobStorageBuilder().Configure()
                                          .UsingStorageAccountConnectionString(CommonResources.BlobStorageConnectionString)
                                          .WithLogger(logger)
                                          .Build();
            var bus = new BusBuilder().Configure()
                      .WithNames("MyTestSuite", Environment.MachineName)
                      .WithConnectionString(CommonResources.ServiceBusConnectionString)
                      .WithTypesFrom(typeProvider)
                      .WithDefaultTimeout(TimeSpan.FromSeconds(10))
                      .WithLogger(logger)
                      .WithLargeMessageStorage(c => c.WithLargeMessageBodyStore(largeMessageBodyStorage)
                                               .WithMaxSmallMessageSize(64 * 1024)
                                               .WithMaxLargeMessageSize(10 * 1048576))
                      .WithDebugOptions(dc => dc.RemoveAllExistingNamespaceElementsOnStartup(
                                            "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                      .Build();
            await bus.Start();

            return(bus);
        }
예제 #22
0
        protected override async Task <Bus> Given()
        {
            _logger = TestHarnessLoggerFactory.Create();

            var typeProvider = new TestHarnessTypeProvider(new[] { GetType().Assembly }, new[] { GetType().Namespace });

            var bus = new BusBuilder().Configure()
                      .WithTransport(new InProcessTransportConfiguration())
                      .WithNames("MyTestSuite", Environment.MachineName)
                      .WithTypesFrom(typeProvider)
                      .WithGlobalInboundInterceptorTypes(typeProvider.InterceptorTypes.Where(t => typeof(IInboundInterceptor).IsAssignableFrom(t)).ToArray())
                      .WithGlobalOutboundInterceptorTypes(typeProvider.InterceptorTypes.Where(t => typeof(IOutboundInterceptor).IsAssignableFrom(t)).ToArray())
                      .WithDependencyResolver(new DependencyResolver(typeProvider))
                      .WithDefaultTimeout(TimeSpan.FromSeconds(TimeoutSeconds))
                      .WithLogger(_logger)
                      .WithDebugOptions(
                dc =>
                dc.RemoveAllExistingNamespaceElementsOnStartup(
                    "I understand this will delete EVERYTHING in my namespace. I promise to only use this for test suites."))
                      .Build();
            await bus.Start();

            return(bus);
        }