public void CatEventDoesNotTriggerPersonEvent(string name)
        {
            // Arrange
            using var busContext = new RabbitMqContextBuilder()
                                   .WithExchange("TestExchange")
                                   .WithConnectionString("amqp://*****:*****@localhost")
                                   .CreateContext();

            using var host = new MicroserviceHostBuilder()
                             .WithBusContext(busContext)
                             .AddEventListener <PersonEventListener>()
                             .AddEventListener <CatEventListener>()
                             .CreateHost();

            host.Start();

            var publisher = new EventPublisher(busContext);

            var catEvent = new CatAddedEvent {
                Cat = new Cat {
                    Name = name
                }
            };

            // Act
            publisher.Publish(catEvent);
            Thread.Sleep(WaitTime);

            // Assert
            Assert.IsNull(PersonEventListener.ResultEvent);
            Assert.AreEqual(catEvent, CatEventListener.ResultEvent);
        }
        private IBusContext <IConnection> CreateNijnConfig(IServiceCollection serviceCollection)
        {
            //Deprecated method, maar kan even niet anders
            ILoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(
                new ConsoleLoggerProvider(
                    (text, logLevel) => logLevel >= LogLevel.Debug, true));

            var connectionBuilder = new RabbitMQContextBuilder()
                                    .ReadFromEnvironmentVariables();

            _context = connectionBuilder.CreateContext();

            var builder = new MicroserviceHostBuilder()
                          .SetLoggerFactory(loggerFactory)
                          .RegisterDependencies(serviceCollection)
                          .WithContext(_context)
                          .UseConventions();

            var host = builder.CreateHost();

            host.StartListeningInOtherThread();

            return(_context);
        }
Exemplo n.º 3
0
        public static void UseMicroserviceHost(this IServiceCollection services)
        {
            Enum.TryParse(Environment.GetEnvironmentVariable("LOG_LEVEL"), out LogLevel logLevel);

            var contextBuilder = new RabbitMqContextBuilder().ReadFromEnvironmentVariables();

            var context = Policy.Handle <BrokerUnreachableException>()
                          .WaitAndRetryForever(sleepDurationProvider => TimeSpan.FromSeconds(5))
                          .Execute(contextBuilder.CreateContext);

            var loggerFactory = LoggerFactory.Create(configure =>
            {
                configure.AddConsole().SetMinimumLevel(logLevel);
            });

            var microserviceHost = new MicroserviceHostBuilder()
                                   .SetLoggerFactory(loggerFactory)
                                   .RegisterDependencies(services)
                                   .WithQueueName(Environment.GetEnvironmentVariable("BROKER_QUEUE_NAME"))
                                   .WithBusContext(context)
                                   .UseConventions()
                                   .CreateHost();

            services.AddLogging(builder => builder.AddConsole().SetMinimumLevel(logLevel));
            services.AddSingleton(context);
            services.AddSingleton(microserviceHost);
            services.AddHostedService <Miffy>();
        }
        public static async Task ScrapeAuditLog(IBusContext <IConnection> mainContext, ServiceCollection collection,
                                                DateTime startTime)
        {
            var exchangeName      = "Audit_Bestelling " + Guid.NewGuid();
            var connectionBuilder = new RabbitMQContextBuilder()
                                    .ReadFromEnvironmentVariables().WithExchange(exchangeName);

            var builder = new MicroserviceHostBuilder();

            builder
            .RegisterDependencies(collection)
            .WithContext(connectionBuilder.CreateContext())
            .ExitAfterIdleTime(new TimeSpan(0, 0, 2, 0))
            .UseConventions();

            builder.CreateHost().StartListeningInOtherThread();

            var publisher = new CommandPublisher(mainContext);

            var replayEventsCommand = new ReplayEventsCommand
            {
                ToTimestamp  = startTime.Ticks,
                ExchangeName = exchangeName
            };

            var result = await publisher.Publish <bool>(replayEventsCommand, "AuditlogReplayService",
                                                        "Minor.WSA.AuditLog.Commands.ReplayEventsCommand");
        }
Exemplo n.º 5
0
        public void Initialize()
        {
            connection = new SqliteConnection("DataSource=:memory:");
            connection.Open();
            options = new DbContextOptionsBuilder <KlantContext>()
                      .UseSqlite(connection)
                      .Options;

            using (var context = new KlantContext(options))
            {
                context.Database.EnsureCreated();
            }


            _context = new TestBusContext();

            var services = new ServiceCollection();

            services.AddTransient <ICommandPublisher, CommandPublisher>();
            services.AddSingleton <DbContextOptions>(options);
            services.AddSingleton <KlantContext>();
            services.AddTransient <IKlantDatamapper, KlantDatamapper>();
            services.AddSingleton <IBusContext <IConnection> >(_context);
            services.AddTransient <IEventPublisher, EventPublisher>();

            var builder = new MicroserviceHostBuilder()
                          .RegisterDependencies(services)
                          .WithContext(_context)
                          .AddCommandListener <KlantListener>();

            _host = builder.CreateHost();

            _host.StartListening();
            Thread.Sleep(1000);
        }
        public void CommandReturnsProperException(string message)
        {
            // Arrange
            using var busContext = new RabbitMqContextBuilder()
                                   .WithExchange("TestExchange")
                                   .WithConnectionString("amqp://*****:*****@localhost")
                                   .CreateContext();

            using var host = new MicroserviceHostBuilder()
                             .WithBusContext(busContext)
                             .WithQueueName("QueueName2")
                             .AddEventListener <ErrorEventListener>()
                             .CreateHost();

            host.Start();

            var command   = new DummyCommand(message);
            var publisher = new CommandPublisher(busContext);

            // Act
            Task <DummyCommand> Act() => publisher.PublishAsync <DummyCommand>(command);

            // Arrange
            var exception = Assert.ThrowsExceptionAsync <DestinationQueueException>(Act);

            Assert.AreEqual("Received error command from queue Test.Command.Listener", exception.Result.Message);
        }
        public void EventListenerReceivesMessageAsync(string firstName, string lastName, string email, string phone)
        {
            // Arrange
            using var busContext = new RabbitMqContextBuilder()
                                   .WithExchange("TestExchange")
                                   .WithConnectionString("amqp://*****:*****@localhost")
                                   .CreateContext();

            using var host = new MicroserviceHostBuilder()
                             .WithBusContext(busContext)
                             .AddEventListener <PersonEventListener>()
                             .CreateHost();

            host.Start();

            var publisher = new EventPublisher(busContext);

            var personEvent = new PersonAddedEvent {
                Person = new Person
                {
                    FirstName   = firstName,
                    LastName    = lastName,
                    Email       = email,
                    PhoneNumber = phone
                }
            };

            // Act
            publisher.PublishAsync(personEvent);
            Thread.Sleep(WaitTime);

            // Assert
            Assert.AreEqual(personEvent, PersonEventListener.ResultEvent);
        }
        public void StringEventListenerReceivesProperString(string text)
        {
            // Arrange
            var testContext = new TestBusContext();
            var hostBuilder = new MicroserviceHostBuilder().WithBusContext(testContext);

            using var host = hostBuilder
                             .WithQueueName("test.queue")
                             .AddEventListener <StringEventListenerDummy>()
                             .CreateHost();

            host.Start();

            //Act
            var message = new DummyEvent("test.topic")
            {
                DummyText = text
            };

            new EventPublisher(testContext).Publish(message);

            // Assert
            Thread.Sleep(WaitTime);

            var expectedResult = JsonConvert.SerializeObject(message);

            Assert.AreEqual(expectedResult, StringEventListenerDummy.ReceivedData);
        }
        public void EventListenerHandlesMultipleEvents(params string[] names)
        {
            // Arrange
            using var busContext = new RabbitMqContextBuilder()
                                   .WithExchange("TestExchange")
                                   .WithConnectionString("amqp://*****:*****@localhost")
                                   .CreateContext();

            using var host = new MicroserviceHostBuilder()
                             .WithBusContext(busContext)
                             .WithQueueName("QueueName3")
                             .AddEventListener <SpamEventListener>()
                             .CreateHost();

            host.Start();

            var publisher = new EventPublisher(busContext);

            var catEvents = names.Select(e => new CatAddedEvent {
                Cat = new Cat {
                    Name = e
                }
            }).ToList();

            // Act
            foreach (var @event in catEvents)
            {
                publisher.Publish(@event);
            }

            Thread.Sleep(WaitTime);

            CollectionAssert.AreEquivalent(catEvents, SpamEventListener.ResultEvents);
        }
Exemplo n.º 10
0
        public void Initialize()
        {
            connection = new SqliteConnection("DataSource=:memory:");
            connection.Open();
            options = new DbContextOptionsBuilder <WebshopContext>()
                      .UseSqlite(connection)
                      .Options;

            using (var context = new WebshopContext(options))
            {
                context.Database.EnsureCreated();
            }

            var services = new ServiceCollection();

            services.AddSingleton <DbContextOptions>(options);
            services.AddTransient <WebshopContext, WebshopContext>();
            services.AddTransient <IArtikelDatamapper, ArtikelDatamapper>();
            services.AddTransient <IKlantDatamapper, KlantDatamapper>();

            _context = new TestBusContext();

            var builder = new MicroserviceHostBuilder()
                          .RegisterDependencies(services)
                          .WithContext(_context)
                          .AddEventListener <MagazijnListener>();

            _host = builder.CreateHost();

            _host.StartListening();
        }
Exemplo n.º 11
0
        private static void ConfigureNijn(IServiceCollection services)
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(
                new ConsoleLoggerProvider(
                    (text, logLevel) => logLevel >= LogLevel.Debug, true));

            var connectionBuilder = new RabbitMQContextBuilder()
                                    .ReadFromEnvironmentVariables();

            var nijnContext = connectionBuilder.CreateContext();

            services.AddTransient <ICommandPublisher, CommandPublisher>();
            services.AddTransient <IEventPublisher, EventPublisher>();

            var builder = new MicroserviceHostBuilder()
                          .SetLoggerFactory(loggerFactory)
                          .RegisterDependencies(services)
                          .WithContext(nijnContext)
                          .UseConventions();

            var host = builder.CreateHost();

            host.CreateQueues();

            host.StartListeningInOtherThread();

            var logger = NijnLogger.CreateLogger <Program>();

            logger.LogInformation("Started...");
        }
Exemplo n.º 12
0
        public void UseConventionsRegistersProperTopics(string messageText)
        {
            // Arrange
            var testContext = new TestBusContext();
            var hostBuilder = new MicroserviceHostBuilder().WithBusContext(testContext);

            // Act
            hostBuilder.UseConventions();

            hostBuilder.CreateHost().Start();

            // Assert
            var message = new DummyEvent("IrrelevantTopic")
            {
                DummyText = messageText
            };

            new EventPublisher(testContext).Publish(message);

            Thread.Sleep(WaitTime);

            Assert.IsNull(EventListenerDummy.HandlesResult);
            Assert.IsNull(EventListenerDummy2.HandlesResult);
            Assert.AreEqual(message, EventListenerDummy3.HandlesResult);
        }
Exemplo n.º 13
0
        public static int Main(string[] args)
        {
            var microservice = new MicroserviceHostBuilder("hello")
                               .UseDefaultWebStack(listenPortNumber: 5000)
                               .AutoDiscoverComponents()
                               .Build();

            return(microservice.Run(args));
        }
        public void QueueNameIsAutomaticallySet()
        {
            // Act
            var host = new MicroserviceHostBuilder();

            // Assert
            Assert.IsNotNull(host.QueueName);
            Assert.IsTrue(host.QueueName.StartsWith("unset_queue_name_"));
        }
        private static void Main(string[] args)
        {
            var connectionString = Environment.GetEnvironmentVariable("SPRINTERDB");
            var options          = new DbContextOptionsBuilder <BeheerContext>()
                                   .UseNpgsql(connectionString)
                                   .Options;

            ILoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(
                new ConsoleLoggerProvider(
                    (text, logLevel) => logLevel >= LogLevel.Debug, true));

            var connectionBuilder = new RabbitMQContextBuilder()
                                    .ReadFromEnvironmentVariables();

            var nijnContext = connectionBuilder.CreateContext();

            var services = new ServiceCollection();

            services.AddTransient <ICommandPublisher, CommandPublisher>();
            services.AddTransient <IEventPublisher, EventPublisher>();
            services.AddSingleton <DbContextOptions>(options);
            services.AddTransient <BeheerContext, BeheerContext>();
            services.AddTransient <IArtikelDatamapper, ArtikelDatamapper>();
            services.AddTransient <IBestellingDatamapper, BestellingDatamapper>();
            services.AddSingleton <IBusContext <IConnection> >(nijnContext);
            services.AddTransient <IKlantDatamapper, KlantDatamapper>();

            var builder = new MicroserviceHostBuilder()
                          .SetLoggerFactory(loggerFactory)
                          .RegisterDependencies(services)
                          .WithContext(nijnContext)
                          .UseConventions();

            var host = builder.CreateHost();

            host.CreateQueues();

            using (var context = new BeheerContext(options))
            {
                context.Database.EnsureDeleted();
                context.Database.EnsureCreated();
                if (!context.Artikelen.Any())
                {
                    ScrapeAuditLog(nijnContext, services, DateTime.Now).Wait();
                }
            }

            host.StartListeningInOtherThread();

            var logger = NijnLogger.CreateLogger <Program>();

            logger.LogInformation("Started...");
        }
Exemplo n.º 16
0
        static void Main(string[] args)
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(
                new ConsoleLoggerProvider(
                    (text, logLevel) => logLevel >= LogLevel.Debug, true));

            //192.168.99.100
            var connectionBuilder = new RabbitMQContextBuilder()
                                    .WithExchange("MVM.EventExchange")
                                    .WithAddress("192.168.99.100", 5672)
                                    .WithCredentials(userName: "******", password: "******");


            using (var context = connectionBuilder.CreateContext())
            {
                var builder = new MicroserviceHostBuilder()
                              .SetLoggerFactory(loggerFactory)
                              .RegisterDependencies((services) =>
                {
                    services.AddTransient <IDataMapper, SinaasAppelDataMapper>();
                })
                              .WithContext(context)
                              .UseConventions();

                using (var host = builder.CreateHost())
                {
                    host.StartListening();

                    Console.WriteLine("ServiceHost is listening to incoming events...");
                    Console.WriteLine("Press any key to quit.");

                    var publisher = new EventPublisher(context);
                    publisher.Publish(new PolisToegevoegdEvent("MVM.Polisbeheer.PolisToegevoegd")
                    {
                        Message = "Hey"
                    });
                    publisher.Publish(new HenkToegevoegdEvent("Test")
                    {
                        Test = "Oi"
                    });

                    int i = 0;
                    while (true)
                    {
                        Console.ReadKey();
                        Test(context, i);
                        Test(context, i * 100);
                        i++;
                    }
                }
            }
        }
        public void WithQueueNameSetsQueueProperly(string queueName)
        {
            // Arrange
            var host = new MicroserviceHostBuilder();

            // Act
            host.WithQueueName(queueName);

            // Assert
            Assert.AreEqual(queueName, host.QueueName);
        }
        public void RegisterDependenciesInvokesConfigMethod()
        {
            // Arrange
            var  host          = new MicroserviceHostBuilder();
            bool hasBeenCalled = false;

            // Act
            host.RegisterDependencies(e => hasBeenCalled = true);

            // Assert
            Assert.IsTrue(hasBeenCalled);
        }
Exemplo n.º 19
0
        static void Main(string[] args)
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            //Deprecated method, maar kan even niet anders
            ConsoleLoggerOptions options = new ConsoleLoggerOptions();

            loggerFactory.AddProvider(
                new ConsoleLoggerProvider(
                    (text, logLevel) => logLevel >= LogLevel.Debug, true));

            //192.168.99.100
            var connectionBuilder = new RabbitMQContextBuilder()
                                    .WithExchange("MVM.EventExchange")
                                    .WithAddress("localhost", 5672)
                                    .WithCredentials(userName: "******", password: "******");



            var context = new TestBusContext();

            var builder = new MicroserviceHostBuilder()
                          .SetLoggerFactory(loggerFactory)
                          .RegisterDependencies((services) =>
            {
                services.AddTransient <IDataMapper, SinaasAppelDataMapper>();
                services.AddTransient <ICommandPublisher, CommandPublisher>();
                services.AddTransient <IEventPublisher, EventPublisher>();
                services.AddSingleton <IBusContext <IConnection> >(context);
            })
                          .WithContext(context)
                          .UseConventions();


            var host = builder.CreateHost();

            host.StartListeningInOtherThread();

            Console.WriteLine("ServiceHost is listening to incoming events...");
            Console.WriteLine("Press any key to quit.");

            var publisher        = new EventPublisher(context);
            var commandpublisher = new CommandPublisher(context);

            publisher.Publish(new PolisToegevoegdEvent("MVM.Polisbeheer.PolisToegevoegd")
            {
                Message = "Hey"
            });
            publisher.Publish(new HenkToegevoegdEvent("Test")
            {
                Test = "Oi"
            });
        }
        public void EventListenerWithReturnTypeThrowsException()
        {
            // Arrange
            var testContext = new TestBusContext();
            var hostBuilder = new MicroserviceHostBuilder().WithBusContext(testContext);

            // Act
            void Act() => hostBuilder.AddEventListener <EventWithReturnTypeEventListener>();

            // Assert
            var exception = Assert.ThrowsException <BusConfigurationException>(Act);

            Assert.AreEqual("Method Handle does not have a proper " +
                            "eventlistener signature in type EventWithReturnTypeEventListener", exception.Message);
        }
        public void CreateHostReturnsHostWithContext()
        {
            // Arrange
            var contextMock = new Mock <IBusContext <IConnection> >();
            var context     = contextMock.Object;

            var builder = new MicroserviceHostBuilder();

            builder.WithBusContext(context);

            // Act
            var host = builder.CreateHost();

            // Arrange
            Assert.AreSame(context, host.Context);
        }
        public void RegisterDependenciesRegistersOneExtraDependency()
        {
            // Arrange
            var builder = new MicroserviceHostBuilder();

            // Act
            builder.RegisterDependencies(e =>
            {
                e.AddTransient <TestType1>();
            });

            // Assert
            Assert.AreEqual(2, builder.ServiceCollection.Count);

            IServiceProvider serviceProvider = builder.ServiceCollection.BuildServiceProvider();

            Assert.IsNotNull(serviceProvider.GetService <TestType1>());
        }
Exemplo n.º 23
0
        public static int Main(string[] args)
        {
            var microservice = new MicroserviceHostBuilder()
                               .UseInjectionAdapterAutofac()
                               .UsePlatformMessaging()
                               .UsePlatformMessagingAdapterKestrel()
                               .UsePlatformRest()
                               .ContributeComponents((existingComponents, newComponents) => {
                newComponents
                .ContributeTransactionScript <HelloWorldTx>();
                newComponents
                .ContributeHttpEndpoint(name: "rest-api")
                .RouteRequestsToRestApiService(protocolName: MessageProtocolInfo.Select.HttpRestNWheelsV1().ProtocolName);
            })
                               .Build();

            return(microservice.Run(args));
        }
        public void EventIsProperlyReceived(string data)
        {
            // Arrange
            AuditLogContext dbContext      = new AuditLogContext(_options);
            TestBusContext  testBusContext = new TestBusContext();

            using var hostBuilder = new MicroserviceHostBuilder()
                                    .WithBusContext(testBusContext)
                                    .RegisterDependencies(services =>
            {
                services.AddSingleton(dbContext);
                services.AddTransient <IAuditLogItemRepository, AuditLogItemRepository>();
            })
                                    .AddEventListener <IAuditLogItemRepository>()
                                    .AddEventListener <AuditEventLoggingListener>();

            using var host = hostBuilder.CreateHost();

            host.Start();

            DummyEvent evt = new DummyEvent("test.queue")
            {
                Text = data
            };

            IEventPublisher eventPublisher = new EventPublisher(testBusContext);

            // Act
            eventPublisher.Publish(evt);

            Thread.Sleep(1500);

            // Assert
            AuditLogItem[] resultData = dbContext.AuditLogItems.ToArray();
            Assert.AreEqual(1, resultData.Length);

            string expectedData = JsonConvert.SerializeObject(evt);

            var firstItem = resultData.First();

            Assert.AreEqual(expectedData, firstItem.Data);
            Assert.AreEqual(evt.Id.ToString(), firstItem.Id);
            Assert.AreEqual(new DateTime(evt.Timestamp).ToFileTimeUtc(), firstItem.TimeStamp);
        }
        public void RegisterDependenciesAddsToExistingServiceCollection()
        {
            // Arrange
            var builder = new MicroserviceHostBuilder();

            ServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddTransient <TestType1>();

            // Act
            builder.RegisterDependencies(services => { services.AddTransient <TestType2>(); });
            builder.RegisterDependencies(serviceCollection);

            // Assert
            IServiceProvider serviceProvider = builder.ServiceCollection.BuildServiceProvider();

            Assert.IsNotNull(serviceProvider.GetService <TestType1>());
            Assert.IsNotNull(serviceProvider.GetService <TestType2>());
        }
        public void AddingListenerOnlyAddsRelevantMethod()
        {
            // Arrange
            var testContext = new TestBusContext();
            var builder     = new MicroserviceHostBuilder().WithBusContext(testContext)
                              .WithQueueName("test.queue")
                              .AddEventListener <MethodEventListener>();

            // Act
            using var host = builder.CreateHost();
            var result = host.Listeners.ToList();

            // Assert
            Assert.AreEqual(1, result.Count);

            var firstItem = result.FirstOrDefault();

            Assert.AreEqual("testPattern", firstItem?.TopicExpressions.FirstOrDefault());
        }
        public void UseApplicationFeature_DefaultFeature_ModuleMissing_OnlyModuleAdded()
        {
            //-- arrange

            var microservice = new MicroserviceHostBuilder("test");

            //-- act

            microservice.UseApplicationFeature <DefaultFeatureLoader>();

            //-- assert

            microservice.BootConfig.MicroserviceConfig.ApplicationModules.Length.Should().Be(1);

            var module = microservice.BootConfig.MicroserviceConfig.ApplicationModules[0];

            module.Assembly.Should().Be(this.GetType().GetTypeInfo().Assembly.GetName().Name);
            module.Features.Length.Should().Be(0);
        }
Exemplo n.º 28
0
        static void Main(string[] args)
        {
            using ILoggerFactory loggerFactory = LoggerFactory.Create(configure =>
            {
                string logLevelString = Environment.GetEnvironmentVariable(EnvVarNames.LogLevel) ?? "Information";
                LogLevel logLevel     = Enum.Parse <LogLevel>(logLevelString);
                configure.AddConsole().SetMinimumLevel(logLevel);
            });

            MiffyLoggerFactory.LoggerFactory    = loggerFactory;
            RabbitMqLoggerFactory.LoggerFactory = loggerFactory;

            using IBusContext <IConnection> context = new RabbitMqContextBuilder()
                                                      .ReadFromEnvironmentVariables()
                                                      .CreateContext();

            using IMicroserviceHost host = new MicroserviceHostBuilder()
                                           .SetLoggerFactory(loggerFactory)
                                           .WithBusContext(context)
                                           .RegisterDependencies(services =>
            {
                services.AddDbContext <AuditLogContext>(config =>
                {
                    config.UseMySql(Environment.GetEnvironmentVariable(EnvVarNames.DatabaseConnectionString));
                    config.UseLoggerFactory(loggerFactory);
                }, ServiceLifetime.Singleton);

                services.AddTransient <IAuditLogItemRepository, AuditLogItemRepository>();
                services.AddTransient <IEventPublisher, EventPublisher>();

                using var serviceScope = services.BuildServiceProvider().GetRequiredService <IServiceScopeFactory>().CreateScope();
                var auditLogContext    = serviceScope.ServiceProvider.GetService <AuditLogContext>();
                auditLogContext.Database.Migrate();
            })
                                           .UseConventions()
                                           .CreateHost();

            host.Start();

            // Keep app running
            new ManualResetEvent(false).WaitOne();
        }
Exemplo n.º 29
0
        public void UseConventionsRegistersProperCommandListeners()
        {
            // Arrange
            var testContext = new TestBusContext();
            var hostBuilder = new MicroserviceHostBuilder()
                              .WithBusContext(testContext);

            // Act
            hostBuilder.UseConventions();

            hostBuilder.CreateHost().Start();

            // Assert
            var message = new GetAnimalsCommand();

            ICommandPublisher publisher = new CommandPublisher(testContext);

            Animal[] animals = publisher.PublishAsync <IEnumerable <Animal> >(message).Result.ToArray();
            Assert.AreEqual(2, animals.Length);
        }
        public void AddingListenerRegistersProperCommandReceiver()
        {
            // Arrange
            TestBusContext          testContext = new TestBusContext();
            MicroserviceHostBuilder hostBuilder = new MicroserviceHostBuilder()
                                                  .WithQueueName("test.queue")
                                                  .WithBusContext(testContext);

            // Act
            hostBuilder.AddEventListener <CommandListenerDummy>();

            List <MicroserviceCommandListener> result = hostBuilder.CreateHost().CommandListeners.ToList();

            // Assert
            Assert.AreEqual(1, result.Count);

            var firstItem = result.FirstOrDefault();

            Assert.AreEqual("command.queue", firstItem?.Queue);
        }