public void AddRabbitMQConnection_MultipleRabbitMQServices_DoesntThrow_IfNameUsed()
        {
            // Arrange
            var env2 = @"
{
      'p-rabbitmq': [
        {
            'credentials': {
                'uri': 'amqp://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355'
            },
          'syslog_drain_url': null,
          'label': 'p-rabbitmq',
          'provider': null,
          'plan': 'standard',
          'name': 'myRabbitMQService1',
          'tags': [
            'rabbitmq',
            'amqp'
          ]
        }, 
        {
            'credentials': {
                'uri': 'amqp://*****:*****@192.168.0.91:3306/asdf'
            },
          'syslog_drain_url': null,
          'label': 'p-Rabbit',
          'provider': null,
          'plan': 'standard',
          'name': 'myRabbitMQService2',
          'tags': [
            'rabbitmq',
            'amqp'
          ]
        } 
      ]
}
";

            // Arrange
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", env2);

            ConfigurationBuilder builder = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            // Act
            RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config, "myRabbitMQService2");
            var service = services.BuildServiceProvider().GetService <IConnectionFactory>() as ConnectionFactory;

            Assert.NotNull(service);
            Assert.Equal("asdf", service.VirtualHost);
            Assert.Equal(3306, service.Port);
            Assert.Equal("192.168.0.91", service.HostName);
            Assert.Equal("a", service.UserName);
            Assert.Equal("b", service.Password);
        }
        public void AddRabbitMQConnection_MultipleRabbitMQServices_DoesntThrow_IfNameUsed()
        {
            // Arrange
            var env2 = @"
                {
                    ""p-rabbitmq"": [{
                        ""credentials"": {
                            ""uri"": ""amqp://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355""
                        },
                        ""syslog_drain_url"": null,
                        ""label"": ""p-rabbitmq"",
                        ""provider"": null,
                        ""plan"": ""standard"",
                        ""name"": ""myRabbitMQService1"",
                        ""tags"": [
                            ""rabbitmq"",
                            ""amqp""
                        ]
                    }, 
                    {
                        ""credentials"": {
                            ""uri"": ""amqp://*****:*****@192.168.0.91:3306/asdf""
                        },
                        ""syslog_drain_url"": null,
                        ""label"": ""p-Rabbit"",
                        ""provider"": null,
                        ""plan"": ""standard"",
                        ""name"": ""myRabbitMQService2"",
                        ""tags"": [
                            ""rabbitmq"",
                            ""amqp""
                        ]
                    }]
                }";

            // Arrange
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", env2);

            var builder = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            // Act
            RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config, "myRabbitMQService2");
            var service = services.BuildServiceProvider().GetService <IConnectionFactory>() as ConnectionFactory;

            Assert.NotNull(service);
            Assert.Equal("asdf", service.VirtualHost);
            Assert.Equal(3306, service.Port);
            Assert.Equal("192.168.0.91", service.HostName);
            Assert.Equal("a", service.UserName);
            Assert.Equal("b", service.Password);
        }
        public void AddRabbitMQConnection_MultipleRabbitMQServices_ThrowsConnectorException()
        {
            // Arrange
            var env2 = @"
{
      'p-rabbitmq': [
        {
            'credentials': {
                'uri': 'amqp://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355'
            },
          'syslog_drain_url': null,
          'label': 'p-rabbitmq',
          'provider': null,
          'plan': 'standard',
          'name': 'myRabbitMQService1',
          'tags': [
            'rabbitmq',
            'amqp'
          ]
        }, 
        {
            'credentials': {
                'uri': 'amqp://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355'
            },
          'syslog_drain_url': null,
          'label': 'p-Rabbit',
          'provider': null,
          'plan': 'standard',
          'name': 'myRabbitMQService2',
          'tags': [
            'rabbitmq',
            'amqp'
          ]
        } 
      ]
}
";

            // Arrange
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", env2);

            ConfigurationBuilder builder = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            // Act and Assert
            var ex =
                Assert.Throws <ConnectorException>(
                    () => RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config));

            Assert.Contains("Multiple", ex.Message);
        }
        public void AddRabbitMQConnection_WithServiceName_NoVCAPs_ThrowsConnectorException()
        {
            IServiceCollection services = new ServiceCollection();
            var config = new ConfigurationBuilder().Build();

            var ex =
                Assert.Throws <ConnectorException>(
                    () => RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config, "foobar"));

            Assert.Contains("foobar", ex.Message);
        }
        public void AddRabbitMQConnection_NoVCAPs_AddsConfiguredConnection()
        {
            IServiceCollection services = new ServiceCollection();
            var config = new ConfigurationBuilder().Build();

            RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config);

            var service = services.BuildServiceProvider().GetService <IConnectionFactory>();

            Assert.NotNull(service);
        }
        public void AddRabbitMQConnection_MultipleRabbitMQServices_ThrowsConnectorException()
        {
            // Arrange
            var env2 = @"
                {
                    ""p-rabbitmq"": [{
                        ""credentials"": {
                            ""uri"": ""amqp://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355""
                        },
                        ""syslog_drain_url"": null,
                        ""label"": ""p-rabbitmq"",
                        ""provider"": null,
                        ""plan"": ""standard"",
                        ""name"": ""myRabbitMQService1"",
                        ""tags"": [
                            ""rabbitmq"",
                            ""amqp""
                        ]
                    }, 
                    {
                        ""credentials"": {
                            ""uri"": ""amqp://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355""
                        },
                        ""syslog_drain_url"": null,
                        ""label"": ""p-Rabbit"",
                        ""provider"": null,
                        ""plan"": ""standard"",
                        ""name"": ""myRabbitMQService2"",
                        ""tags"": [
                            ""rabbitmq"",
                            ""amqp""
                        ]
                    }]
                }";

            // Arrange
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", env2);

            var builder = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            // Act and Assert
            var ex =
                Assert.Throws <ConnectorException>(
                    () => RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config));

            Assert.Contains("Multiple", ex.Message);
        }
        public void AddRabbitMQConnection_ThrowsIfServiceNameNull()
        {
            IServiceCollection services    = new ServiceCollection();
            IConfigurationRoot config      = null;
            string             serviceName = null;

            var ex =
                Assert.Throws <ArgumentNullException>(
                    () => RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config, serviceName));

            Assert.Contains(nameof(serviceName), ex.Message);
        }
        public void AddRabbitMQConnection_AddsRabbitMQHealthContributor()
        {
            IServiceCollection services = new ServiceCollection();
            var builder = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config);
            var healthContributor = services.BuildServiceProvider().GetService <IHealthContributor>() as RabbitMQHealthContributor;

            Assert.NotNull(healthContributor);
        }
        public void AddRabbitMQConnection_ThrowsIfConfigurationNull()
        {
            IServiceCollection services = new ServiceCollection();
            IConfigurationRoot config   = null;

            var ex =
                Assert.Throws <ArgumentNullException>(
                    () => RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config));

            Assert.Contains(nameof(config), ex.Message);

            var ex2 =
                Assert.Throws <ArgumentNullException>(
                    () => RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config, "foobar"));

            Assert.Contains(nameof(config), ex2.Message);
        }
        public void AddRabbitMQConnection_AddsRabbitMQHealthContributor_WhenCommunityHealthCheckExistsAndForced()
        {
            IServiceCollection services = new ServiceCollection();
            var builder = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            var cm = new ConnectionStringManager(config);
            var ci = cm.Get <RabbitMQConnectionInfo>();

            services.AddHealthChecks().AddRabbitMQ(ci.ConnectionString, name: ci.Name);

            RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config, addSteeltoeHealthChecks: true);
            var healthContributor = services.BuildServiceProvider().GetService <IHealthContributor>() as RabbitMQHealthContributor;

            Assert.NotNull(healthContributor);
        }
        public void AddRabbitMQConnection_DoesntAddsRabbitMQHealthContributor_WhenCommunityHealthCheckExists()
        {
            // Arrange
            IServiceCollection   services = new ServiceCollection();
            ConfigurationBuilder builder  = new ConfigurationBuilder();

            builder.AddCloudFoundry();
            var config = builder.Build();

            var cm = new ConnectionStringManager(config);
            var ci = cm.Get <RabbitMQConnectionInfo>();

            services.AddHealthChecks().AddRabbitMQ(ci.ConnectionString, name: ci.Name);

            // Act
            RabbitMQProviderServiceCollectionExtensions.AddRabbitMQConnection(services, config);
            var healthContributor = services.BuildServiceProvider().GetService <IHealthContributor>() as RabbitMQHealthContributor;

            // Assert
            Assert.Null(healthContributor);
        }