Beispiel #1
0
        public async Task Should_properly_fail_on_exclusive_launch()
        {
            var harness1 = new RabbitMqTestHarness();

            harness1.OnConfigureRabbitMqBus += configurator =>
            {
                configurator.OverrideDefaultBusEndpointQueueName("exclusively-yours");
                configurator.Exclusive = true;
            };

            var harness2 = new RabbitMqTestHarness();

            harness2.OnConfigureRabbitMqBus += configurator =>
            {
                configurator.OverrideDefaultBusEndpointQueueName("exclusively-yours");
                configurator.Exclusive = true;
            };

            await harness1.Start();

            try
            {
                Assert.That(async() => await harness2.Start(), Throws.TypeOf <RabbitMqConnectionException>());

                await harness2.Stop();
            }
            finally
            {
                await Task.Delay(1000);

                await harness1.Stop();
            }
        }
        public async Task Should_not_be_allowed_twice()
        {
            var loggerFactory = new TestOutputLoggerFactory(true);

            LogContext.ConfigureCurrentLogContext(loggerFactory);

            DiagnosticListener.AllListeners.Subscribe(new DiagnosticListenerObserver());

            var secondHarness = new RabbitMqTestHarness();

            try
            {
                Assert.That(async() =>
                {
                    using (var token = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
                    {
                        await secondHarness.Start(token.Token).OrCanceled(TestCancellationToken);

                        await secondHarness.Stop();
                    }
                }, Throws.TypeOf <RabbitMqConnectionException>());
            }
            finally
            {
                secondHarness.Dispose();
            }
        }
        public async Task <BusTestHarness> CreateTestHarness()
        {
            var harness = new RabbitMqTestHarness();

            await EnsureVirtualHostExists(harness);

            return(harness);
        }
        public async Task Should_fan_out_published_messages()
        {
            var endpointSettings = new EndpointSettings <IEndpointDefinition <EventConsumer> > {
                InstanceId = "27"
            };
            var endpointDefinition = new ConsumerEndpointDefinition <EventConsumer>(endpointSettings);

            var firstHarness  = new RabbitMqTestHarness();
            var firstConsumer = new EventConsumer(firstHarness.GetTask <ConsumeContext <SomeEvent> >());

            firstHarness.OnConfigureRabbitMqBus += configurator =>
            {
                configurator.ReceiveEndpoint(endpointDefinition, KebabCaseEndpointNameFormatter.Instance, e =>
                {
                    e.Consumer(() => firstConsumer);
                });
            };

            await firstHarness.Start();

            try
            {
                endpointSettings = new EndpointSettings <IEndpointDefinition <EventConsumer> > {
                    InstanceId = "42"
                };
                endpointDefinition = new ConsumerEndpointDefinition <EventConsumer>(endpointSettings);

                var secondHarness  = new RabbitMqTestHarness();
                var secondConsumer = new EventConsumer(secondHarness.GetTask <ConsumeContext <SomeEvent> >());
                secondHarness.OnConfigureRabbitMqBus += configurator =>
                {
                    configurator.ReceiveEndpoint(endpointDefinition, KebabCaseEndpointNameFormatter.Instance, e =>
                    {
                        e.Consumer(() => secondConsumer);
                    });
                };

                await secondHarness.Start();

                try
                {
                    await firstHarness.Bus.Publish(new SomeEvent());

                    await firstConsumer.Completed;

                    await secondConsumer.Completed;
                }
                finally
                {
                    await secondHarness.Stop();
                }
            }
            finally
            {
                await firstHarness.Stop();
            }
        }
Beispiel #5
0
        public async Task Setup()
        {
            _harness = new RabbitMqTestHarness();
            _handler = _harness.Handler <A>();

            await _harness.Start();

            await _harness.InputQueueSendEndpoint.Send(new A());

            await _harness.InputQueueSendEndpoint.Send(new B());
        }
        public RabbitMqTestFixture(RabbitMqTestHarness harness, Uri logicalHostAddress = null)
            : base(harness)
        {
            RabbitMqTestHarness = harness;

            if (logicalHostAddress != null)
            {
                RabbitMqTestHarness.NodeHostName = RabbitMqTestHarness.HostAddress.Host;
                RabbitMqTestHarness.HostAddress  = logicalHostAddress;
            }

            RabbitMqTestHarness.OnConfigureRabbitMqHost            += ConfigureRabbitMqHost;
            RabbitMqTestHarness.OnConfigureRabbitMqBus             += ConfigureRabbitMqBus;
            RabbitMqTestHarness.OnConfigureRabbitMqReceiveEndpoint += ConfigureRabbitMqReceiveEndpoint;
            RabbitMqTestHarness.OnCleanupVirtualHost += OnCleanupVirtualHost;
        }
        static async Task EnsureVirtualHostExists(RabbitMqTestHarness harness)
        {
            var name = harness.GetHostSettings().VirtualHost;

            if (string.IsNullOrWhiteSpace(name) || name == "/")
            {
                return;
            }

            using var client = new HttpClient();
            var byteArray = Encoding.ASCII.GetBytes($"{harness.Username}:{harness.Password}");

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

            var requestUri = new UriBuilder("http", harness.HostAddress.Host, 15672, $"api/vhosts/{name}").Uri;
            await client.PutAsync(requestUri, new StringContent("{}", Encoding.UTF8, "application/json"));
        }
Beispiel #8
0
        public void CreateHarness()
        {
            if (HarnessType == typeof(InMemoryTestHarness))
            {
                Harness = new InMemoryTestHarness();
            }
            else if (HarnessType == typeof(RabbitMqTestHarness))
            {
                var harness = new RabbitMqTestHarness();

                Harness = harness;

                harness.OnConfigureRabbitMqReceiveEndoint += x => x.BindMessageExchanges = Subscribe;
            }
            else if (HarnessType == typeof(ActiveMqTestHarness))
            {
                var harness = new ActiveMqTestHarness();

                Harness = harness;

                harness.OnConfigureActiveMqReceiveEndoint += x => x.BindMessageTopics = Subscribe;
            }
            else if (HarnessType == typeof(AzureServiceBusTestHarness))
            {
                var serviceUri = Credentials.AzureServiceUri;

                var harness = new AzureServiceBusTestHarness(serviceUri, Credentials.AzureKeyName, Credentials.AzureKeyValue);

                Harness = harness;

                harness.OnConfigureServiceBusReceiveEndpoint += x => x.SubscribeMessageTopics = Subscribe;
            }
            else if (HarnessType == typeof(AmazonSqsTestHarness))
            {
                var harness = new AmazonSqsTestHarness(Credentials.AmazonRegion, Credentials.AmazonAccessKey, Credentials.AmazonSecretKey);

                Harness = harness;

                harness.OnConfigureAmazonSqsReceiveEndpoint += x => x.SubscribeMessageTopics = Subscribe;
            }
            else
            {
                throw new ArgumentException($"Unknown test harness type: {TypeCache.GetShortName(HarnessType)}");
            }
        }
        public async Task Setup()
        {
            _harness = new RabbitMqTestHarness();
            _handler = _harness.Handler <A>(async context =>
            {
                var endpoint = await context.GetSendEndpoint(context.SourceAddress);

                await endpoint.Send(new C());

                await context.Publish(new D());
            });

            await _harness.Start();

            await _harness.InputQueueSendEndpoint.Send(new A());

            await _harness.Bus.Publish(new B());
        }
Beispiel #10
0
        public async Task Should_not_be_allowed_twice()
        {
            var secondHarness = new RabbitMqTestHarness();

            try
            {
                Assert.That(async() =>
                {
                    await secondHarness.Start();

                    await secondHarness.Stop();
                }, Throws.TypeOf <RabbitMqConnectionException>());
            }
            finally
            {
                secondHarness.Dispose();
            }
        }
        async Task CreateVirtualHost(string name)
        {
            try
            {
                var harness = new RabbitMqTestHarness();

                using var client = new HttpClient();
                var byteArray = Encoding.ASCII.GetBytes($"{harness.Username}:{harness.Password}");
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

                var requestUri = new UriBuilder("http", harness.HostAddress.Host, 15672, $"api/vhosts/{name}").Uri;
                await client.PutAsync(requestUri, new StringContent("{}", Encoding.UTF8, "application/json"));
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
        public async Task Should_not_be_allowed_twice()
        {
            var secondHarness = new RabbitMqTestHarness();

            try
            {
                Assert.That(async() =>
                {
                    using (var token = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
                    {
                        await secondHarness.Start(token.Token);

                        await secondHarness.Stop();
                    }
                }, Throws.TypeOf <RabbitMqConnectionException>());
            }
            finally
            {
                secondHarness.Dispose();
            }
        }
        public async Task Should_not_be_allowed_twice()
        {
            var secondHarness = new RabbitMqTestHarness {
                CleanVirtualHost = false
            };

            try
            {
                Assert.That(async() =>
                {
                    using var token = new CancellationTokenSource(TimeSpan.FromSeconds(5));

                    await secondHarness.Start(token.Token).OrCanceled(TestCancellationToken);

                    await secondHarness.Stop();
                }, Throws.TypeOf <RabbitMqConnectionException>());
            }
            finally
            {
                secondHarness.Dispose();
            }
        }
Beispiel #14
0
 protected override void ConfigureRabbitMqBusHost(IRabbitMqBusFactoryConfigurator configurator, IRabbitMqHost host)
 {
     _management = configurator.ManagementEndpoint(host);
     _consumerA  = RabbitMqTestHarness.Consumer <TestConsumer>();
 }
Beispiel #15
0
 protected override void ConfigureRabbitMqBus(IRabbitMqBusFactoryConfigurator configurator)
 {
     _configurator = configurator;
     _consumerA    = RabbitMqTestHarness.Consumer <TestConsumer>();
 }
Beispiel #16
0
        public async Task Show_timeline()
        {
            var completed = (await _completed).Message;

            await RabbitMqTestHarness.OutputTimeline(TestContext.Out, x => x.Now().IncludeAddress());
        }