public void TestDatabasePointInTimeRestore()
        {
            // Warning: This test takes around 20 minutes to run in record mode.

            using (SqlManagementTestContext context = new SqlManagementTestContext(this))
            {
                ResourceGroup       resourceGroup = context.CreateResourceGroup();
                Server              server        = context.CreateServer(resourceGroup);
                SqlManagementClient sqlClient     = context.GetClient <SqlManagementClient>();

                Database db1 = CreateDatabaseAndWaitUntilBackupCreated(
                    sqlClient,
                    resourceGroup,
                    server,
                    dbName: SqlManagementTestUtilities.GenerateName());

                // Create a new database that is the first database restored to an earlier point in time
                string   db2Name  = SqlManagementTestUtilities.GenerateName();
                Database db2Input = new Database
                {
                    Location           = server.Location,
                    CreateMode         = CreateMode.PointInTimeRestore,
                    RestorePointInTime = db1.EarliestRestoreDate.Value,
                    SourceDatabaseId   = db1.Id
                };
                Database db2 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, db2Name, db2Input);
                Assert.NotNull(db2);
                SqlManagementTestUtilities.ValidateDatabase(db2Input, db2, db2Name);
            }
        }
Пример #2
0
        public void TestCreateDropDatabase()
        {
            using (SqlManagementTestContext context = new SqlManagementTestContext(this))
            {
                ResourceGroup               resourceGroup = context.CreateResourceGroup();
                Server                      server        = context.CreateServer(resourceGroup);
                SqlManagementClient         sqlClient     = context.GetClient <SqlManagementClient>();
                Dictionary <string, string> tags          = new Dictionary <string, string>()
                {
                    { "tagKey1", "TagValue1" }
                };

                // Create database only required parameters
                //
                string dbName = SqlManagementTestUtilities.GenerateName();
                var    db1    = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, new Database()
                {
                    Location = server.Location,
                });
                Assert.NotNull(db1);

                // Create a database with all parameters specified
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var db2Input = new Database()
                {
                    Location     = server.Location,
                    Collation    = SqlTestConstants.DefaultCollation,
                    Sku          = SqlTestConstants.DefaultDatabaseSku(),
                    MaxSizeBytes = 2 * 1024L * 1024L * 1024L,
                    Tags         = tags,
                    CreateMode   = "Default",
                    SampleName   = SampleName.AdventureWorksLT
                };
                var db2 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db2Input);
                Assert.NotNull(db2);
                SqlManagementTestUtilities.ValidateDatabase(db2Input, db2, dbName);

                // Service Objective Name
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var db4Input = new Database()
                {
                    Location = server.Location,
                    Sku      = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.S0),
                    Tags     = tags,
                };
                var db4 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db4Input);
                Assert.NotNull(db4);
                SqlManagementTestUtilities.ValidateDatabase(db4Input, db4, dbName);

                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db1.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db2.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db4.Name);
            }
        }
Пример #3
0
        public void TestCopyDatabase()
        {
            using (SqlManagementTestContext context = new SqlManagementTestContext(this))
            {
                ResourceGroup       resourceGroup = context.CreateResourceGroup();
                SqlManagementClient sqlClient     = context.GetClient <SqlManagementClient>();

                //Create two servers
                var server  = context.CreateServer(resourceGroup);
                var server2 = context.CreateServer(resourceGroup);

                // Create a database with all parameters specified
                //
                string dbName  = SqlManagementTestUtilities.GenerateName();
                var    dbInput = new Database()
                {
                    Location  = server.Location,
                    Collation = SqlTestConstants.DefaultCollation,
                    Sku       = SqlTestConstants.DefaultDatabaseSku(),

                    // Make max size bytes less than default, to ensure that copy follows this parameter
                    MaxSizeBytes = 500 * 1024L * 1024L,
                    CreateMode   = "Default"
                };
                var db = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, dbInput);
                Assert.NotNull(db);

                // Create a database as copy of the first database
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var dbInputCopy = new Database()
                {
                    Location         = server2.Location,
                    CreateMode       = CreateMode.Copy,
                    SourceDatabaseId = db.Id
                };
                var dbCopy = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server2.Name, dbName, dbInputCopy);
                SqlManagementTestUtilities.ValidateDatabase(db, dbCopy, dbCopy.Name);
            }
        }
        public void TestGetAndListDatabase()
        {
            string testPrefix = "sqlcrudtest-";

            using (SqlManagementTestContext context = new SqlManagementTestContext(this))
            {
                ResourceGroup       resourceGroup = context.CreateResourceGroup();
                Server              server        = context.CreateServer(resourceGroup);
                SqlManagementClient sqlClient     = context.GetClient <SqlManagementClient>();

                // Create some small databases to run the get/List tests on.
                Database[] databases = SqlManagementTestUtilities.CreateDatabasesAsync(
                    sqlClient, resourceGroup.Name, server, testPrefix, 4).Result;

                // Organize into a dictionary for better lookup later
                IDictionary <string, Database> inputs = databases.ToDictionary(
                    keySelector: d => d.Name,
                    elementSelector: d => d);

                // Get each database and compare to the results of create database
                //
                foreach (var db in inputs)
                {
                    var response = sqlClient.Databases.Get(resourceGroup.Name, server.Name, db.Key);
                    SqlManagementTestUtilities.ValidateDatabaseEx(db.Value, response);
                }

                // List all databases
                //
                IEnumerable <Database> listResponse = sqlClient.Databases.ListByServer(resourceGroup.Name, server.Name);

                // Remove master database from the list
                listResponse = listResponse.Where(db => db.Name != "master");
                Assert.Equal(inputs.Count(), listResponse.Count());
                foreach (var db in listResponse)
                {
                    SqlManagementTestUtilities.ValidateDatabase(inputs[db.Name], db, db.Name);
                }
            }
        }
        public void TestCreateDropDatabase()
        {
            using (SqlManagementTestContext context = new SqlManagementTestContext(this))
            {
                ResourceGroup               resourceGroup = context.CreateResourceGroup();
                Server                      server        = context.CreateServer(resourceGroup);
                SqlManagementClient         sqlClient     = context.GetClient <SqlManagementClient>();
                Dictionary <string, string> tags          = new Dictionary <string, string>()
                {
                    { "tagKey1", "TagValue1" }
                };

                // Create database only required parameters
                //
                string dbName = SqlManagementTestUtilities.GenerateName();
                var    db1    = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, new Database()
                {
                    Location = server.Location,
                });
                Assert.NotNull(db1);

                // Create a database with all parameters specified
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var db2Input = new Database()
                {
                    Location     = server.Location,
                    Collation    = SqlTestConstants.DefaultCollation,
                    Sku          = SqlTestConstants.DefaultDatabaseSku(),
                    MaxSizeBytes = 2 * 1024L * 1024L * 1024L,
                    Tags         = tags,
                    CreateMode   = "Default",
                    SampleName   = SampleName.AdventureWorksLT,
                    RequestedBackupStorageRedundancy = "Geo",
                };
                var db2 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db2Input);
                Assert.NotNull(db2);
                SqlManagementTestUtilities.ValidateDatabase(db2Input, db2, dbName);

                // Service Objective Name
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var db4Input = new Database()
                {
                    Location = server.Location,
                    Sku      = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.S0),
                    Tags     = tags,
                };
                var db4 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db4Input);
                Assert.NotNull(db4);
                SqlManagementTestUtilities.ValidateDatabase(db4Input, db4, dbName);

                // Create database with Serverless specific parameters
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var db5Input = new Database()
                {
                    Location       = server.Location,
                    Sku            = new Microsoft.Azure.Management.Sql.Models.Sku("GP_S_Gen5_2"),
                    Tags           = tags,
                    AutoPauseDelay = 360,
                    MinCapacity    = 0.5,
                };
                var db5 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db5Input);
                Assert.NotNull(db5);
                SqlManagementTestUtilities.ValidateDatabase(db5Input, db5, dbName);

                // ReadScale properties
                //
                dbName = SqlManagementTestUtilities.GenerateName();
                var db6Input = new Database()
                {
                    Location  = server.Location,
                    Sku       = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.P1),
                    ReadScale = "Enabled",
                };
                var db6 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db6Input);
                Assert.NotNull(db6);
                SqlManagementTestUtilities.ValidateDatabase(db6Input, db6, dbName);

                dbName = SqlManagementTestUtilities.GenerateName();
                var db7Input = new Database()
                {
                    Location = server.Location,
                    Sku      = new Microsoft.Azure.Management.Sql.Models.Sku("HS_Gen5_4", "Hyperscale"),
                    HighAvailabilityReplicaCount = 4,
                };
                var db7 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db7Input);
                Assert.NotNull(db7);
                SqlManagementTestUtilities.ValidateDatabase(db7Input, db7, dbName);

                dbName = SqlManagementTestUtilities.GenerateName();
                var db8Input = new Database()
                {
                    Location = server.Location,
                    RequestedBackupStorageRedundancy = "Geo",
                };
                var db8 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db8Input);
                Assert.NotNull(db8);
                SqlManagementTestUtilities.ValidateDatabase(db8Input, db8, dbName);

                dbName = SqlManagementTestUtilities.GenerateName();
                var db9Input = new Database()
                {
                    Location = server.Location,
                    Sku      = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.P1),
                    MaintenanceConfigurationId = SqlManagementTestUtilities.GetTestMaintenanceConfigurationId(sqlClient.SubscriptionId),
                };
                var db9 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, db9Input);
                Assert.NotNull(db9);
                SqlManagementTestUtilities.ValidateDatabase(db9Input, db9, dbName);

                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db1.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db2.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db4.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db5.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db6.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db7.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db8.Name);
                sqlClient.Databases.Delete(resourceGroup.Name, server.Name, db9.Name);
            }
        }
        private void TestUpdateDatabase <TUpdateModel>(
            SqlManagementClient sqlClient,
            ResourceGroup resourceGroup,
            Server server,
            Func <TUpdateModel> createModelFunc,
            Func <string, string, string, TUpdateModel, Database> updateFunc)
        {
            Dictionary <string, string> tags = new Dictionary <string, string>()
            {
                { "tagKey1", "TagValue1" }
            };

            string dbName = SqlManagementTestUtilities.GenerateName("sqlcrudtest-");

            // Create initial database
            //
            var dbInput = new Database()
            {
                Location      = server.Location,
                Collation     = SqlTestConstants.DefaultCollation,
                MaxSizeBytes  = 2 * 1024L * 1024L * 1024L,
                Sku           = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.S0),
                ZoneRedundant = false,
                Tags          = tags,
            };
            var db1 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, dbInput);

            Assert.NotNull(db1);
            SqlManagementTestUtilities.ValidateDatabase(dbInput, db1, dbName);

            // Update Zone Redundancy
            //
            var dbInput2 = new Database()
            {
                Location      = server.Location,
                Sku           = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.P1),
                ZoneRedundant = true,
            };
            var db8 = sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, dbInput2);

            Assert.NotNull(db8);
            SqlManagementTestUtilities.ValidateDatabase(dbInput2, db8, dbName);

            // Upgrade Edition + SLO Name
            //
            dynamic updateEditionAndSloInput = createModelFunc();

            updateEditionAndSloInput.Sku           = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.S0, "Standard");
            updateEditionAndSloInput.ZoneRedundant = false;
            var db2 = updateFunc(resourceGroup.Name, server.Name, dbName, updateEditionAndSloInput);

            SqlManagementTestUtilities.ValidateDatabase(updateEditionAndSloInput, db2, dbName);

            // Sometimes we get CloudException "Operation on server '{0}' and database '{1}' is in progress."
            // Mitigate by adding brief sleep while recording
            if (HttpMockServer.Mode == HttpRecorderMode.Record)
            {
                Thread.Sleep(TimeSpan.FromSeconds(10));
            }

            // Update max size
            //
            dynamic updateMaxSize = createModelFunc();

            updateMaxSize.MaxSizeBytes = 250 * 1024L * 1024L * 1024L;
            var db6 = updateFunc(resourceGroup.Name, server.Name, dbName, updateMaxSize);

            SqlManagementTestUtilities.ValidateDatabase(updateMaxSize, db6, dbName);

            // Update tags
            //
            dynamic updateTags = createModelFunc();

            updateTags.Tags = new Dictionary <string, string> {
                { "asdf", "zxcv" }
            };
            var db7 = updateFunc(resourceGroup.Name, server.Name, dbName, updateTags);

            SqlManagementTestUtilities.ValidateDatabase(updateTags, db7, dbName);

            // Update maintenance
            //
            dynamic updateMaintnenace = createModelFunc();

            updateMaintnenace.Sku = new Microsoft.Azure.Management.Sql.Models.Sku(ServiceObjectiveName.S2, "Standard");
            updateMaintnenace.MaintenanceConfigurationId = SqlManagementTestUtilities.GetTestMaintenanceConfigurationId(sqlClient.SubscriptionId);
            var db9 = updateFunc(resourceGroup.Name, server.Name, dbName, updateMaintnenace);

            SqlManagementTestUtilities.ValidateDatabase(updateMaintnenace, db9, dbName);
        }