public void AddMySqlConnection_WithAzureBrokerVCAPs_AddsMySqlConnection()
        {
            // Arrange
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", MySqlTestHelpers.SingleServerAzureVCAP);
            var appsettings = new Dictionary <string, string>()
            {
                ["mysql:client:urlEncodedCredentials"] = "true"
            };
            ConfigurationBuilder builder = new ConfigurationBuilder();

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

            // Act and Assert
            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);

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

            Assert.NotNull(service);
            var connString = service.ConnectionString;

            Assert.Contains("ub6oyk1kkh", connString);                                                    // database
            Assert.Contains("3306", connString);                                                          // port
            Assert.Contains("451200b4-c29d-4346-9a0a-70bc109bb6e9.mysql.database.azure.com", connString); // host
            Assert.Contains("wj7tsxai7i@451200b4-c29d-4346-9a0a-70bc109bb6e9", connString);               // user
            Assert.Contains("10PUO82Uhqk8F2ii", connString);                                              // password
        }
        public void AddMySqlConnection_WithVCAPs_AddsMySqlConnection()
        {
            // Arrange
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", MySqlTestHelpers.SingleServerVCAP);
            ConfigurationBuilder builder = new ConfigurationBuilder();

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

            // Act and Assert
            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);

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

            Assert.NotNull(service);
            var connString = service.ConnectionString;

            Assert.Contains("cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355", connString);
            Assert.Contains("3306", connString);
            Assert.Contains("192.168.0.90", connString);
            Assert.Contains("Dd6O1BPXUHdrmzbP", connString);
            Assert.Contains("7E1LxXnlH2hhlPVt", connString);
        }
        public void AddMySqlConnection_WithServiceName_NoVCAPs_ThrowsConnectorException()
        {
            IServiceCollection services = new ServiceCollection();
            var config = new ConfigurationBuilder().Build();

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

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

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

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

            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);

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

            Assert.NotNull(service);
        }
        public void AddMySqlConnection_NoVCAPs_AddsMySqlConnection()
        {
            // Arrange
            IServiceCollection services = new ServiceCollection();
            IConfigurationRoot config   = new ConfigurationBuilder().Build();

            // Act and Assert
            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);

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

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

            var ex = Assert.Throws <ArgumentNullException>(() => MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config));

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

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

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

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

            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);
            var healthContributor = services.BuildServiceProvider().GetService <IHealthContributor>() as RelationalDbHealthContributor;

            Assert.NotNull(healthContributor);
        }
        public void AddMySqlConnection_MultipleMySqlServices_ThrowsConnectorException()
        {
            IServiceCollection services = new ServiceCollection();

            Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION);
            Environment.SetEnvironmentVariable("VCAP_SERVICES", MySqlTestHelpers.TwoServerVCAP);

            var builder = new ConfigurationBuilder();

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

            var ex = Assert.Throws <ConnectorException>(() => MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config));

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

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

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

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

            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config, addSteeltoeHealthChecks: true);
            var healthContributor = services.BuildServiceProvider().GetService <IHealthContributor>() as RelationalDbHealthContributor;

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

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

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

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

            // Act
            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);
            var healthContributor = services.BuildServiceProvider().GetService <IHealthContributor>() as RelationalHealthContributor;

            // Assert
            Assert.Null(healthContributor);
        }
        public void AddMySqlConnection_WithVCAPs_AddsMySqlConnection()
        {
            // Arrange
            var env1 = @"
{
      'limits': {
        'fds': 16384,
        'mem': 1024,
        'disk': 1024
      },
      'application_name': 'spring-cloud-broker',
      'application_uris': [
        'spring-cloud-broker.apps.testcloud.com'
      ],
      'name': 'spring-cloud-broker',
      'space_name': 'p-spring-cloud-services',
      'space_id': '65b73473-94cc-4640-b462-7ad52838b4ae',
      'uris': [
        'spring-cloud-broker.apps.testcloud.com'
      ],
      'users': null,
      'version': '07e112f7-2f71-4f5a-8a34-db51dbed30a3',
      'application_version': '07e112f7-2f71-4f5a-8a34-db51dbed30a3',
      'application_id': '798c2495-fe75-49b1-88da-b81197f2bf06'
    }
}";
            var env2 = @"
{
      'p-msql': [
        {
          'credentials': {
            'hostname': '192.168.0.90',
            'port': 3306,
            'name': 'cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355',
            'username': '******',
            'password': '******',
            'uri': 'mysql://*****:*****@192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355?reconnect=true',
            'jdbcUrl': 'jdbc:mysql://192.168.0.90:3306/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355?user=Dd6O1BPXUHdrmzbP&password=7E1LxXnlH2hhlPVt'
          },
          'syslog_drain_url': null,
          'label': 'p-mysql',
          'provider': null,
          'plan': '100mb-dev',
          'name': 'spring-cloud-broker-db',
          'tags': [
            'mysql',
            'relational'
          ]
        }
      ]
}
";
            // Arrange
            IServiceCollection services = new ServiceCollection();

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

            ConfigurationBuilder builder = new ConfigurationBuilder();

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

            // Act and Assert
            MySqlProviderServiceCollectionExtensions.AddMySqlConnection(services, config);

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

            Assert.NotNull(service);
            var connString = service.ConnectionString;

            Assert.True(connString.Contains("cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355"));
            Assert.True(connString.Contains("3306"));
            Assert.True(connString.Contains("192.168.0.90"));
            Assert.True(connString.Contains("Dd6O1BPXUHdrmzbP"));
            Assert.True(connString.Contains("7E1LxXnlH2hhlPVt"));
        }