public async Task Test_CheckCreateDatabase_WithNewDatabase()
        {
            const int    dbSize      = 5;
            const string dbCollation = "SQL_Latin1_General_CP1_CI_AS";
            var          dbEdition   = SqlAzureEdition.Standard.GetEnumDescription();

            using (var client = ManagementClient.CreateSqlClient())
            {
                var dbName = "fct-" + Guid.NewGuid().ToString().Split('-').Last();

                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, SystemLocation.WestEurope.GetEnumDescription());

                Assert.IsFalse(string.IsNullOrWhiteSpace(server));

                try
                {
                    await client.CreateDatabaseIfNotExistsAsync(server, dbName, dbEdition, dbCollation, dbSize, true);

                    var webSite = await client.Databases.GetAsync(server, dbName, new CancellationToken());

                    Assert.IsNotNull(webSite);
                }
                finally
                {
                    client.Databases.Delete(server, dbName);
                }
            }
        }
        public async Task Test_CheckCreateDatabase_WithNewDatabase()
        {
            const int dbSize = 5;
            const string dbCollation = "SQL_Latin1_General_CP1_CI_AS";
            var dbEdition = SqlAzureEdition.Standard.GetEnumDescription();

            using (var client = ManagementClient.CreateSqlClient())
            {
                var dbName = "fct-" + Guid.NewGuid().ToString().Split('-').Last();

                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, SystemLocation.WestEurope.GetEnumDescription());
                Assert.IsFalse(string.IsNullOrWhiteSpace(server));

                try
                {
                    await client.CreateDatabaseIfNotExistsAsync(server, dbName, dbEdition, dbCollation, dbSize, true);

                    var webSite = await client.Databases.GetAsync(server, dbName, new CancellationToken());
                    Assert.IsNotNull(webSite);
                }
                finally
                {
                    client.Databases.Delete(server, dbName);
                }
            }
        }
        public async Task Test_Choose_WithValidServer()
        {
            using (var client = ManagementClient.CreateSqlClient())
            {
                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, _regionWithSqlServers);

                Assert.IsFalse(string.IsNullOrWhiteSpace(server));
            }
        }
        public async Task Test_Choose_WithNoValidServer()
        {
            using (var client = ManagementClient.CreateSqlClient())
            {
                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, _regionWithoutSqlServers);

                Assert.IsNull(server);
            }
        }
        public async Task Test_Choose_WithValidServer()
        {
            using (var client = ManagementClient.CreateSqlClient())
            {
                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, _regionWithSqlServers);

                Assert.IsFalse(string.IsNullOrWhiteSpace(server));
            }
        }
        public async Task Test_Choose_WithNoValidServer()
        {
            using (var client = ManagementClient.CreateSqlClient())
            {
                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, _regionWithoutSqlServers);

                Assert.IsNull(server);
            }
        }
        public async Task Test_CheckCreateFirewallRule_WithExistingFirewallRule()
        {
            const string startIp = "111.111.111.111";
            const string endIp   = "111.111.111.111";

            using (var client = ManagementClient.CreateSqlClient())
            {
                var ruleName = "fct-" + Guid.NewGuid().ToString().Split('-').Last();

                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, SystemLocation.WestEurope.GetEnumDescription());

                Assert.IsFalse(string.IsNullOrWhiteSpace(server));

                try
                {
                    await client.FirewallRules.CreateAsync(
                        server,
                        new FirewallRuleCreateParameters
                    {
                        Name           = ruleName,
                        StartIPAddress = startIp,
                        EndIPAddress   = endIp
                    });

                    await client.CreateFirewallRuleIfNotExistsAsync(
                        server,
                        new FirewallRuleCreateParameters
                    {
                        Name           = ruleName,
                        StartIPAddress = startIp,
                        EndIPAddress   = endIp
                    });
                }
                finally
                {
                    client.FirewallRules.Delete(server, ruleName);
                }
            }
        }
        public async Task Test_CheckCreateFirewallRule_WithExistingFirewallRule()
        {
            const string startIp = "111.111.111.111";
            const string endIp = "111.111.111.111";

            using (var client = ManagementClient.CreateSqlClient())
            {
                var ruleName = "fct-" + Guid.NewGuid().ToString().Split('-').Last();

                var chooser = new DefaultAzureSqlServerChooser();

                var server = await chooser.Choose(client, SystemLocation.WestEurope.GetEnumDescription());
                Assert.IsFalse(string.IsNullOrWhiteSpace(server));

                try
                {
                    await client.FirewallRules.CreateAsync(
                        server,
                        new FirewallRuleCreateParameters
                        {
                            Name = ruleName,
                            StartIPAddress = startIp,
                            EndIPAddress = endIp
                        });

                    await client.CreateFirewallRuleIfNotExistsAsync(
                        server,
                        new FirewallRuleCreateParameters
                        {
                            Name = ruleName,
                            StartIPAddress = startIp,
                            EndIPAddress = endIp
                        });
                }
                finally
                {
                    client.FirewallRules.Delete(server, ruleName);
                }
            }
        }