/// <summary> /// Gets the status of an import/export operation /// </summary> /// <param name="operationStatusLink">The operation status link</param> /// <returns>Operation status response</returns> public AzureSqlDatabaseImportExportStatusModel GetStatus(string operationStatusLink) { ImportExportOperationStatusResponse resposne = Communicator.GetStatus(operationStatusLink, Util.GenerateTracingId()); AzureSqlDatabaseImportExportStatusModel status = new AzureSqlDatabaseImportExportStatusModel() { ErrorMessage = resposne.ErrorMessage, LastModifiedTime = resposne.LastModifiedTime, QueuedTime = resposne.QueuedTime, StatusMessage = resposne.StatusMessage, Status = resposne.Status.ToString(), OperationStatusLink = operationStatusLink }; return(status); }
private void ValidateImportExport(bool createServer = true, bool createDatabase = true, bool createFirewallRule = true, string operationName = "Export", bool missingFields = false, HttpStatusCode expectedStatueCode = HttpStatusCode.Accepted) { var handler = new BasicDelegatingHandler(); // Management Clients var sqlClient = Sql2ScenarioHelper.GetSqlClient(handler); var resClient = Sql2ScenarioHelper.GetResourceClient(handler); // Variables for server create string serverName = TestUtilities.GenerateName("csm-sql-ie"); string resGroupName = TestUtilities.GenerateName("csm-rg-servercrud"); string serverLocation = "North Europe"; string adminLogin = "******"; string adminPass = "******"; string version = "12.0"; // Variables for database create string databaseName = TestUtilities.GenerateName("csm-sql-db_ie"); string databaseEdition = "Standard"; long databaseMaxSize = 5L * 1024L * 1024L * 1024L; // 5 GB Guid dbSloS1 = new Guid("1b1ebd4d-d903-4baa-97f9-4ea675f5e928"); // S1 string serviceObjectiveName = "S1"; // Create firewall test. string firewallRuleName = TestUtilities.GenerateName("sql-fwrule"); string startIp1 = "0.0.0.0"; string endIp1 = "255.255.255.255"; string storageKey = "StorageKey"; string storageKeyType = "StorageAccessKey"; string exportBacpacLink = string.Format(CultureInfo.InvariantCulture, "http://test.blob.core.windows.net/databases/{0}.bacpac", databaseName); string importBacpacLink = "http://test.blob.core.windows.net/databases/test.bacpac"; string testMode = Environment.GetEnvironmentVariable("AZURE_TEST_MODE"); if (testMode == "Record") { string importBacpacBaseUrl = Environment.GetEnvironmentVariable("TEST_EXPORT_BACPAC"); storageKey = Environment.GetEnvironmentVariable("TEST_STORAGE_KEY"); exportBacpacLink = string.Format(CultureInfo.InvariantCulture, "{0}/{1}.bacpac", importBacpacBaseUrl, databaseName); importBacpacLink = Environment.GetEnvironmentVariable("TEST_IMPORT_BACPAC"); Assert.False(string.IsNullOrWhiteSpace(storageKey), "Environment variable TEST_EXPORT_BACPAC has not been set"); Assert.False(string.IsNullOrWhiteSpace(importBacpacBaseUrl), "Environment variable TEST_EXPORT_BACPAC has not been set"); Assert.False(string.IsNullOrWhiteSpace(importBacpacLink), "Environment variable TEST_IMPORT_BACPAC has not been set"); } // Create the resource group. resClient.ResourceGroups.CreateOrUpdate(resGroupName, new ResourceGroup() { Location = serverLocation, }); try { ////////////////////////////////////////////////////////////////////// // Create server if (createServer) { var createResponse = sqlClient.Servers.CreateOrUpdate(resGroupName, serverName, new ServerCreateOrUpdateParameters() { Location = serverLocation, Properties = new ServerCreateOrUpdateProperties() { AdministratorLogin = adminLogin, AdministratorLoginPassword = adminPass, Version = version, } }); TestUtilities.ValidateOperationResponse(createResponse, HttpStatusCode.Created); } ////////////////////////////////////////////////////////////////////// // Create database if (createServer && createDatabase) { var createDbResponse = sqlClient.Databases.CreateOrUpdate(resGroupName, serverName, databaseName, new DatabaseCreateOrUpdateParameters() { Location = serverLocation, Properties = new DatabaseCreateOrUpdateProperties() { Edition = databaseEdition, MaxSizeBytes = databaseMaxSize, RequestedServiceObjectiveId = dbSloS1 }, }); TestUtilities.ValidateOperationResponse(createDbResponse, HttpStatusCode.Created); } ////////////////////////////////////////////////////////////////////// // Create firewall rule if (createServer && createFirewallRule) { var firewallCreate = sqlClient.FirewallRules.CreateOrUpdate(resGroupName, serverName, firewallRuleName, new FirewallRuleCreateOrUpdateParameters() { Properties = new FirewallRuleCreateOrUpdateProperties() { StartIpAddress = startIp1, EndIpAddress = endIp1, } }); TestUtilities.ValidateOperationResponse(firewallCreate, HttpStatusCode.Created); } ////////////////////////////////////////////////////////////////////// //Import Export try { ImportExportResponse importExportResponse = null; if (operationName == ExportOperationName) { ExportRequestParameters parameters = new ExportRequestParameters() { AdministratorLogin = adminLogin, AdministratorLoginPassword = adminPass }; if (!missingFields) { parameters.StorageKey = storageKey; parameters.StorageKeyType = storageKeyType; parameters.StorageUri = new Uri(exportBacpacLink); } importExportResponse = sqlClient.ImportExport.Export(resGroupName, serverName, databaseName, parameters); } else if (operationName == ImportOperationName) { ImportRequestParameters parameters = new ImportRequestParameters() { AdministratorLogin = adminLogin, AdministratorLoginPassword = adminPass, StorageKey = storageKey, StorageKeyType = storageKeyType, StorageUri = new Uri(importBacpacLink), DatabaseName = databaseName }; if (!missingFields) { parameters.DatabaseMaxSize = databaseMaxSize; parameters.Edition = databaseEdition; parameters.ServiceObjectiveName = serviceObjectiveName; } importExportResponse = sqlClient.ImportExport.Import(resGroupName, serverName, parameters); } else if (operationName == ImportExistingDbOperationName) { ImportExtensionRequestParameteres parameters = new ImportExtensionRequestParameteres() { Properties = new ImportExtensionProperties { AdministratorLogin = adminLogin, AdministratorLoginPassword = adminPass, StorageKey = storageKey, StorageKeyType = storageKeyType, StorageUri = new Uri(importBacpacLink) } }; importExportResponse = sqlClient.ImportExport.ImportToExistingDatabase(resGroupName, serverName, databaseName, parameters); } if (expectedStatueCode == HttpStatusCode.Accepted) { Assert.Equal(importExportResponse.Status, OperationStatus.InProgress); ImportExportOperationStatusResponse statusResponse = sqlClient.ImportExport.GetImportExportOperationStatus(importExportResponse.OperationStatusLink); while (statusResponse.Status == Microsoft.Azure.OperationStatus.InProgress) { statusResponse = sqlClient.ImportExport.GetImportExportOperationStatus(importExportResponse.OperationStatusLink); if (statusResponse.Status == Microsoft.Azure.OperationStatus.InProgress) { ValidateImportExportOperationStatusResponseProperties(statusResponse); } } Assert.Equal(statusResponse.Status, OperationStatus.Succeeded); ValidateImportExportOperationStatusResponseProperties(statusResponse.Properties); } TestUtilities.ValidateOperationResponse(importExportResponse, expectedStatueCode); } catch (CloudException exception) { Assert.Equal(exception.Response.StatusCode, expectedStatueCode); } if (operationName == ImportOperationName && !createDatabase && !missingFields) { DatabaseGetResponse databaseGetResponse = sqlClient.Databases.Get(resGroupName, serverName, databaseName); TestUtilities.ValidateOperationResponse(databaseGetResponse); } } finally { // Clean up the resource group. resClient.ResourceGroups.Delete(resGroupName); } }