/// <summary> /// Refresh the object by requerying for the object and merge changes. /// </summary> /// <param name="database">The object to refresh.</param> /// <returns>The object with refreshed properties from the server.</returns> protected Database RefreshEntity(Database database) { MergeOption tempOption = this.MergeOption; this.MergeOption = MergeOption.OverwriteChanges; this.Databases.Where(s => s.Id == database.Id).SingleOrDefault(); this.MergeOption = tempOption; return database; }
/// <summary> /// Revert the changes made to the given object, detach it from the context. /// </summary> /// <param name="database">The object that is being operated on.</param> protected void RevertChanges(Database database) { // Revert the object by requerying for the object and clean up tracking if (database != null) { this.RefreshEntity(database); } this.ClearTrackedEntity(database); }
/// <summary> /// Queries the server until the database assignment succeeds or there is an error. /// </summary> /// <param name="context">The context upon which to perform the action</param> /// <param name="response">The database object.</param> /// <returns>Returns the response from the server</returns> internal static Database WaitForDatabaseOperation(PSCmdlet cmdlet, IServerDataServiceContext context, Database response, string databaseName, bool isCreate) { // Duration to sleep: 2 second TimeSpan sleepDuration = TimeSpan.FromSeconds(2.0); // Poll for a maximum of 10 minutes; TimeSpan maximumPollDuration = TimeSpan.FromMinutes(10.0); // Text to display to the user while they wait. string pendingText = "Pending"; string textToDisplay = ""; // Start the timer Stopwatch watch = Stopwatch.StartNew(); while (watch.Elapsed < maximumPollDuration) { if (response == null) { throw new Exception("An unexpected error occured. The response from the server was invalid, please try your request again."); } // Check to see if the database is ready for use. if ((isCreate && (response.Status != (int)DatabaseStatus.Creating)) || // The database is done being created (!isCreate && (response.ServiceObjectiveAssignmentState != 0))) // The database is done with SLO upgrade { break; } // Wait before next poll. Thread.Sleep(sleepDuration); // Display that the status is pending and how long the operation has been waiting textToDisplay = string.Format("{0}: {1}", pendingText, watch.Elapsed.ToString("%s' sec.'")); cmdlet.WriteProgress(new ProgressRecord(0, "Waiting for database creation completion.", textToDisplay)); // Poll the server for the database status. response = context.GetDatabase(databaseName); } return response; }
public void AzureSqlDatabaseCertTests() { // This test uses the https endpoint, setup the certificates. MockHttpServer.SetupCertificates(); using (PowerShell powershell = PowerShell.Create()) { // Setup the subscription used for the test WindowsAzureSubscription subscription = UnitTestHelper.SetupUnitTestSubscription(powershell); powershell.Runspace.SessionStateProxy.SetVariable( "serverName", SqlDatabaseTestSettings.Instance.ServerName); // Create a new server HttpSession testSession = MockServerHelper.DefaultSessionCollection.GetSession( "UnitTest.AzureSqlDatabaseCertTests"); ServerTestHelper.SetDefaultTestSessionSettings(testSession); //testSession.ServiceBaseUri = new Uri("https://management.core.windows.net"); testSession.RequestValidator = new Action<HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.IsTrue( actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue), "Missing proper UserAgent string."); Assert.IsTrue( UnitTestHelper.GetUnitTestClientCertificate().Equals(actual.Certificate), "Expected correct client certificate"); }); Collection<PSObject> newDatabaseResult1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert1"); }); Collection<PSObject> newDatabaseResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert2" + @" -Edition Business" + @" -MaxSizeGB 10" + @" -Collation Japanese_CI_AS"); }); Collection<PSObject> getDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName"); }); Collection<PSObject> getSingleDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName" + @" -DatabaseName testdbcert1"); }); Collection<PSObject> setDatabaseNameResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db", newDatabaseResult1.FirstOrDefault()); return powershell.InvokeBatchScript( @"$db | Set-AzureSqlDatabase" + @" -NewDatabaseName testdbcert3" + @" -PassThru"); }); Collection<PSObject> setDatabaseSizeResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db", newDatabaseResult1.FirstOrDefault()); return powershell.InvokeBatchScript( @"$db | Set-AzureSqlDatabase" + @" -MaxSizeGB 5" + @" -PassThru"); }); Collection<PSObject> removeDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db1", newDatabaseResult1.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db2", newDatabaseResult2.FirstOrDefault()); powershell.InvokeBatchScript( @"$db1 | Remove-AzureSqlDatabase" + @" -Force"); powershell.InvokeBatchScript( @"$db2 | Remove-AzureSqlDatabase" + @" -Force"); return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName"); }); Assert.AreEqual(0, powershell.Streams.Error.Count, "Unexpected Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Unexpected Warnings during run!"); // Validate New-AzureSqlDatabase Database[] databases = new Database[] { newDatabaseResult1.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); // Note: Because the object is piped, this is the final state of the // database object, after all the Set- cmdlet has run. Assert.AreEqual("testdbcert3", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); databases = new Database[] { newDatabaseResult2.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert2", databases[0].Name); Assert.AreEqual("Business", databases[0].Edition); Assert.AreEqual(10, databases[0].MaxSizeGB); Assert.AreEqual("Japanese_CI_AS", databases[0].CollationName); // Validate Get-AzureSqlDatabase databases = getDatabaseResult.Single().BaseObject as Database[]; Assert.AreEqual(3, databases.Length, "Expecting three databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.IsNotNull(databases[1], "Expecting a Database object."); Assert.IsNotNull(databases[2], "Expecting a Database object."); Assert.AreEqual("master", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); Assert.AreEqual(true, databases[0].IsSystemObject); Assert.AreEqual("testdbcert1", databases[1].Name); Assert.AreEqual("Web", databases[1].Edition); Assert.AreEqual(1, databases[1].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[1].CollationName); Assert.AreEqual(false, databases[1].IsSystemObject); Assert.AreEqual("testdbcert2", databases[2].Name); Assert.AreEqual("Business", databases[2].Edition); Assert.AreEqual(10, databases[2].MaxSizeGB); Assert.AreEqual("Japanese_CI_AS", databases[2].CollationName); Assert.AreEqual(false, databases[2].IsSystemObject); databases = new Database[] { getSingleDatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert1", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(1, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); // Validate Set-AzureSqlDatabase databases = new Database[] { setDatabaseNameResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert3", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(1, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); databases = new Database[] { setDatabaseSizeResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert3", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); // Validate Remove-AzureSqlDatabase databases = removeDatabaseResult.Single().BaseObject as Database[]; Assert.AreEqual(1, databases.Length, "Expecting no databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("master", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); } }
/// <summary> /// Creates a new Sql Database. /// </summary> /// <param name="databaseName">The name for the new database.</param> /// <param name="databaseMaxSize">The max size for the database.</param> /// <param name="databaseCollation">The collation for the database.</param> /// <param name="databaseEdition">The edition for the database.</param> /// <returns>The newly created Sql Database.</returns> public Database CreateNewDatabase( string databaseName, int? databaseMaxSizeGb, long? databaseMaxSizeBytes, string databaseCollation, DatabaseEdition databaseEdition, ServiceObjective serviceObjective) { // Create a new request Id for this operation this.clientRequestId = SqlDatabaseCmdletBase.GenerateClientTracingId(); // Create the new entity and set its properties Database database = new Database(); database.Name = databaseName; if (databaseMaxSizeGb != null) { database.MaxSizeGB = (int)databaseMaxSizeGb; } if(databaseMaxSizeBytes != null) { database.MaxSizeBytes = (long)databaseMaxSizeBytes; } if (!string.IsNullOrEmpty(databaseCollation)) { database.CollationName = databaseCollation; } if (databaseEdition != DatabaseEdition.None) { database.Edition = databaseEdition.ToString(); } if (serviceObjective != null) { database.ServiceObjectiveId = serviceObjective.Id; } else { database.ServiceObjectiveId = null; } // Save changes this.AddToDatabases(database); try { this.SaveChanges(SaveChangesOptions.None); // Re-Query the database for server side updated information database = this.RefreshEntity(database); if (database == null) { throw new ApplicationException(Resources.ErrorRefreshingDatabase); } } catch { this.ClearTrackedEntity(database); throw; } // Load the extra properties for this object. this.LoadExtraProperties(database); return database; }
/// <summary> /// Ensures any extra property on the given <paramref name="database"/> is loaded. /// </summary> /// <param name="database">The database that needs the extra properties.</param> private void LoadExtraProperties(Database database) { // Fill in the context property database.Context = this; // Fill in the service objective properties this.LoadProperty(database, "ServiceObjective"); database.ServiceObjectiveName = database.ServiceObjective == null ? null : database.ServiceObjective.Name; }
private static Database[] VerifyCreatePremiumDb(Collection<PSObject> newPremiumP1DatabaseResult, string databaseName, string serviceObjectiveId) { Database[] databases = new Database[] { newPremiumP1DatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual(databases[0].Name, databaseName, string.Format("Expecting Database Name:{0}, actual is:{1}", databaseName, databases[0].Name)); Assert.AreEqual("Premium", databases[0].Edition); Assert.AreEqual(databases[0].AssignedServiceObjectiveId, Guid.Parse(serviceObjectiveId), string.Format("Expecting Database Edition:{0}, actual is:{1}", serviceObjectiveId, databases[0].AssignedServiceObjectiveId)); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); return databases; }
public void AzureSqlDatabaseEditionsTests() { // This test uses the https endpoint, setup the certificates. MockHttpServer.SetupCertificates(); using (PowerShell powershell = PowerShell.Create()) { // Setup the subscription used for the test WindowsAzureSubscription subscription = UnitTestHelper.SetupUnitTestSubscription(powershell); powershell.Runspace.SessionStateProxy.SetVariable( "serverName", SqlDatabaseTestSettings.Instance.ServerV2); // Create a new server HttpSession testSession = MockServerHelper.DefaultSessionCollection.GetSession( "UnitTest.AzureSqlDatabaseEditionsTests"); ServerTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action<HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.IsTrue( actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue), "Missing proper UserAgent string."); Assert.IsTrue( UnitTestHelper.GetUnitTestClientCertificate().Equals(actual.Certificate), "Expected correct client certificate"); }); Collection<PSObject> newDatabaseResult1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"($db = New-AzureSqlDatabase -ServerName $serverName -DatabaseName testdbeditions1)"); }); Collection<PSObject> newDatabaseResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbeditions2" + @" -Edition Standard"); }); Collection<PSObject> newDatabaseResult3 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"($db3 = New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbeditions3" + @" -Edition Basic)"); }); Collection<PSObject> newDatabaseResult4 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbeditions4" + @" -Edition Premium"); }); Collection<PSObject> serviceObjectives = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"($so = Get-AzureSqlDatabaseServiceObjective -Server $serverName)"); }); Collection<PSObject> newDatabaseResult5 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbeditions5" + @" -Edition Standard" + @" -ServiceObjective $so[0]"); }); Collection<PSObject> getSingleDatabaseResult1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase $serverName -DatabaseName testdbeditions1"); }); Collection<PSObject> getSingleDatabaseResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"$db | Get-AzureSqlDatabase"); }); Collection<PSObject> setDatabaseObjective1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Set-AzureSqlDatabase -ServerName $serverName -DatabaseName testdbeditions2 -ServiceObjective $so[0] -Force"); }); Collection<PSObject> setDatabaseObjective2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Set-AzureSqlDatabase -ServerName $serverName -DatabaseName $db3.Name -Edition Standard -MaxSizeGB 1 -ServiceObjective $so[4] -Force"); }); Collection<PSObject> getDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName"); }); Collection<PSObject> removeDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db1", newDatabaseResult1.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db2", newDatabaseResult2.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db3", newDatabaseResult3.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db4", newDatabaseResult4.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db5", newDatabaseResult5.FirstOrDefault()); powershell.InvokeBatchScript(@"$db1 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$db2 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$db3 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$db4 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$db5 | Remove-AzureSqlDatabase -Force"); return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase $serverName"); }); Assert.AreEqual(0, powershell.Streams.Error.Count, "Unexpected Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Unexpected Warnings during run!"); // Validate New-AzureSqlDatabase Database[] databases = new Database[] { newDatabaseResult1.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbeditions1", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { newDatabaseResult2.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbeditions2", "Standard", 0, 524288000, "SQL_Latin1_General_CP1_CI_AS", "S1", false, DatabaseTestHelper.StandardS1SloGuid); databases = new Database[] { newDatabaseResult3.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbeditions3", "Basic", 0, 104857600L, "SQL_Latin1_General_CP1_CI_AS", "Basic", false, DatabaseTestHelper.BasicSloGuid); databases = new Database[] { newDatabaseResult4.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbeditions4", "Premium", 10, 10737418240L, "SQL_Latin1_General_CP1_CI_AS", "P1", false, DatabaseTestHelper.PremiumP1SloGuid); databases = new Database[] { newDatabaseResult5.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbeditions5", "Standard", 2, 2147483648L, "SQL_Latin1_General_CP1_CI_AS", "S2", false, DatabaseTestHelper.StandardS2SloGuid); // Validate Get-AzureSqlDatabase databases = getDatabaseResult.Select(r => r.BaseObject as Database).ToArray(); Assert.AreEqual(6, databases.Length, "Expecting 3 databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.IsNotNull(databases[1], "Expecting a Database object."); Assert.IsNotNull(databases[2], "Expecting a Database object."); Assert.IsNotNull(databases[3], "Expecting a Database object."); Assert.IsNotNull(databases[4], "Expecting a Database object."); Assert.IsNotNull(databases[5], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "master", "System", 5, 5368709120L, "SQL_Latin1_General_CP1_CI_AS", "System", true, DatabaseTestHelper.SystemSloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[1], "testdbeditions1", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[2], "testdbeditions2", "Standard", 0, 524288000L, "SQL_Latin1_General_CP1_CI_AS", "S2", false, DatabaseTestHelper.StandardS2SloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[3], "testdbeditions3", "Basic", 0, 104857600L, "SQL_Latin1_General_CP1_CI_AS", "Basic", false, DatabaseTestHelper.StandardS1SloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[4], "testdbeditions4", "Premium", 10, 10737418240L, "SQL_Latin1_General_CP1_CI_AS", "P1", false, DatabaseTestHelper.PremiumP1SloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[5], "testdbeditions5", "Standard", 2, 2147483648L, "SQL_Latin1_General_CP1_CI_AS", "S2", false, DatabaseTestHelper.StandardS2SloGuid); // Validate Get-AzureSqlDatabaseServiceObjective var sos = serviceObjectives.Select(x => x.BaseObject as ServiceObjective).ToArray(); Assert.AreEqual(10, sos.Count()); ValidateServiceObjectiveProperties(sos[0], "S2", "Standard S2 resource allocation.", 1, "Standard S2 resource allocation."); ValidateServiceObjectiveProperties(sos[1], "P1", "Premium P1 resource allocation.", 1, "Premium P1 resource allocation."); ValidateServiceObjectiveProperties(sos[2], "P2", "Premium P2 resource allocation.", 1, "Premium P2 resource allocation."); ValidateServiceObjectiveProperties(sos[3], "Basic", "Basic resource allocation.", 1, "Basic resource allocation."); ValidateServiceObjectiveProperties(sos[4], "S1", "Standard S1 resource allocation.", 1, "Standard S1 resource allocation."); ValidateServiceObjectiveProperties(sos[5], "P3 deprecated", "Premium P3 deprecated resource allocation.", 1, "Premium P3 deprecated resource allocation."); ValidateServiceObjectiveProperties(sos[6], "P3", "Premium P3 resource allocation.", 1, "Premium P3 resource allocation."); ValidateServiceObjectiveProperties(sos[7], "System", "Used for master database only.", 1, "Used for master database only."); ValidateServiceObjectiveProperties(sos[8], "System Standard", "Used for master database only.", 1, "Shared resource allocation."); ValidateServiceObjectiveProperties(sos[9], "Shared", "Shared resource allocation.", 1, "Shared resource allocation."); // Validate Remove-AzureSqlDatabase databases = new Database[] { removeDatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting no databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "master", "System", 5, 5368709120L, "SQL_Latin1_General_CP1_CI_AS", "System", true, DatabaseTestHelper.SystemSloGuid); } }
public void AzureSqlDatabaseCertTests() { // This test uses the https endpoint, setup the certificates. MockHttpServer.SetupCertificates(); using (PowerShell powershell = PowerShell.Create()) { // Setup the subscription used for the test WindowsAzureSubscription subscription = UnitTestHelper.SetupUnitTestSubscription(powershell); powershell.Runspace.SessionStateProxy.SetVariable( "serverName", SqlDatabaseTestSettings.Instance.ServerName); // Create a new server HttpSession testSession = MockServerHelper.DefaultSessionCollection.GetSession( "UnitTest.AzureSqlDatabaseCertTests"); ServerTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action<HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.IsTrue( actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue), "Missing proper UserAgent string."); Assert.IsTrue( UnitTestHelper.GetUnitTestClientCertificate().Equals(actual.Certificate), "Expected correct client certificate"); }); Collection<PSObject> newDatabaseResult1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert1"); }); Collection<PSObject> newDatabaseResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert2" + @" -Edition Business" + @" -MaxSizeGB 10" + @" -Collation Japanese_CI_AS"); }); // Create a database of size 100MB Default Edition (Web) Collection<PSObject> newDatabaseResult3 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert4" + @" -MaxSizeBytes 104857600"); }); Collection<PSObject> getDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName"); }); Collection<PSObject> getSingleDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName" + @" -DatabaseName testdbcert1"); }); Collection<PSObject> getSingleDatabaseResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName" + @" -DatabaseName testdbcert4"); }); Collection<PSObject> setDatabaseNameResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db", newDatabaseResult1.FirstOrDefault()); return powershell.InvokeBatchScript( @"$db | Set-AzureSqlDatabase" + @" -NewDatabaseName testdbcert3" + @" -PassThru"); }); Collection<PSObject> setDatabaseSizeResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db", newDatabaseResult1.FirstOrDefault()); return powershell.InvokeBatchScript( @"$db | Set-AzureSqlDatabase" + @" -MaxSizeGB 5" + @" -PassThru"); }); Collection<PSObject> setDatabaseSizeResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Set-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert4" + @" -MaxSizeBytes 1073741824" + @" -passthru"); }); Collection<PSObject> P1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"$P1 = Get-AzureSqlDatabaseServiceObjective" + @" -Server $serverName" + @" -ServiceObjectiveName ""P1""", @"$P1"); }); Collection<PSObject> P2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.InvokeBatchScript( @"$SLO = Get-AzureSqlDatabaseServiceObjective" + @" -Server $serverName"); return powershell.InvokeBatchScript( @"$P2 = Get-AzureSqlDatabaseServiceObjective" + @" -Server $serverName" + @" -ServiceObjective $SLO[2]", @"$P2"); }); Collection<PSObject> setDatabaseSlo = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Set-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert4" + @" -Edition Premium" + @" -MaxSizeGb 10" + @" -ServiceObjective $P2" + @" -passthru" + @" -Force"); }); Collection<PSObject> newPremiumP1DatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName ""testdbcertPremiumDBP1""" + @" -Edition Premium" + @" -ServiceObjective $P1"); }); Collection<PSObject> newPremiumP2DatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName ""testdbcertPremiumDBP2""" + @" -Edition Premium" + @" -ServiceObjective $P2"); }); // There is a known issue about the Get-AzureSqlDatabaseOperation that it returns all // operations which has the required database name no matter it's been deleted and recreated. // So when run it against the mock session, please use the hard coded testsDBName. // Run against onebox, please use the one with NewGuid(). // This unit test should be updated once that behavior get changed which was already been // created as a task. string getOperationDbName = null; if (testSession.ServiceBaseUri == null) { getOperationDbName = "testdbcertGetOperationDbName_f1abaa48-a85a-4141-9a40-6acb3ea65771"; } else { getOperationDbName = "testdbcertGetOperationDbName_" + Guid.NewGuid().ToString(); } Collection<PSObject> newOperationDbResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"$getOperationDb = New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName ""{0}""", getOperationDbName), @"$getOperationDb"); }); Collection<PSObject> getDatabaseOperationByDbResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"Get-AzureSqlDatabaseOperation" + @" -ServerName $serverName" + @" -Database $getOperationDb")); }); Collection<PSObject> getDatabaseOperationByNameResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"$getOperation = Get-AzureSqlDatabaseOperation" + @" -ServerName $serverName" + @" -DatabaseName ""{0}""", getOperationDbName), @"$getOperation"); }); Collection<PSObject> getDatabaseOperationByIdResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"Get-AzureSqlDatabaseOperation" + @" -ServerName $serverName" + @" -OperationGuid $getOperation[0].Id")); }); Collection<PSObject> removeDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db1", newDatabaseResult1.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db2", newDatabaseResult2.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db3", newDatabaseResult3.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("premiumP1", newPremiumP1DatabaseResult.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("premiumP2", newPremiumP2DatabaseResult.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("operationDb", newOperationDbResult.FirstOrDefault()); powershell.InvokeBatchScript(@"$db1 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$db2 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$db3 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$premiumP1 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$premiumP2 | Remove-AzureSqlDatabase -Force"); powershell.InvokeBatchScript(@"$operationDb | Remove-AzureSqlDatabase -Force"); return powershell.InvokeBatchScript(@"Get-AzureSqlDatabase $serverName"); }); Assert.AreEqual(0, powershell.Streams.Error.Count, "Unexpected Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Unexpected Warnings during run!"); // Validate New-AzureSqlDatabase Database[] databases = new Database[] { newDatabaseResult1.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); // Note: Because the object is piped, this is the final state of the // database object, after all the Set- cmdlet has run. DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert3", "Web", 5, 5368709120L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { newDatabaseResult2.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert2", "Business", 10, 10737418240L, "Japanese_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { newDatabaseResult3.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert4", "Web", 0, 104857600L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); // Validate Get-AzureSqlDatabase databases = getDatabaseResult.Select(r => r.BaseObject as Database).ToArray(); Assert.AreEqual(4, databases.Length, "Expecting 4 databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.IsNotNull(databases[1], "Expecting a Database object."); Assert.IsNotNull(databases[2], "Expecting a Database object."); Assert.IsNotNull(databases[3], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "master", "System", 5, 5368709120L, "SQL_Latin1_General_CP1_CI_AS", "System", true, DatabaseTestHelper.SystemSloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[1], "testdbcert1", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[2], "testdbcert2", "Business", 10, 10737418240L, "Japanese_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); DatabaseTestHelper.ValidateDatabaseProperties(databases[3], "testdbcert4", "Web", 0, 104857600L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { getSingleDatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert1", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { getSingleDatabaseResult2.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert4", "Web", 0, 104857600L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); // Validate Set-AzureSqlDatabase databases = new Database[] { setDatabaseNameResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert3", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { setDatabaseSizeResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert3", "Web", 5, 5368709120L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { setDatabaseSizeResult2.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert4", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.SharedSloGuid); databases = new Database[] { setDatabaseSlo.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "testdbcert4", "Web", 1, 1073741824L, "SQL_Latin1_General_CP1_CI_AS", "Shared", false, DatabaseTestHelper.PremiumP2SloGuid); // Validate New-AzureSqlDatabase for Premium Edition Database VerifyCreatePremiumDb(newPremiumP1DatabaseResult, "testdbcertPremiumDBP1", (P1.Single().BaseObject as ServiceObjective).Id.ToString()); VerifyCreatePremiumDb(newPremiumP2DatabaseResult, "testdbcertPremiumDBP2", (P2.Single().BaseObject as ServiceObjective).Id.ToString()); // Validate Get-AzureSqlDatabaseServiceObjective var SLOP1 = P1.Single().BaseObject as ServiceObjective; Assert.AreEqual("P1", SLOP1.Name); Assert.AreEqual("Premium P1 resource allocation.", SLOP1.Description); Assert.IsNotNull(SLOP1.DimensionSettings, "Expecting some Dimension Setting objects."); Assert.AreEqual(1, SLOP1.DimensionSettings.Count(), "Expecting 1 Dimension Setting."); Assert.AreEqual("Premium P1 resource allocation.", SLOP1.DimensionSettings[0].Description, "Expecting Dimension Setting description as Resource capacity is reserved."); var SLOP2 = P2.Single().BaseObject as ServiceObjective; Assert.AreEqual("P2", SLOP2.Name); Assert.AreEqual(SLOP2.Description, "Premium P2 resource allocation."); Assert.IsNotNull(SLOP2.DimensionSettings, "Expecting some Dimension Setting objects."); Assert.AreEqual(1, SLOP2.DimensionSettings.Count(), "Expecting 1 Dimension Setting."); Assert.AreEqual("Premium P2 resource allocation.", SLOP2.DimensionSettings[0].Description, "Expecting Dimension Setting description as Resource capacity is reserved."); // Validate Get-AzureSqlDatabaseOperation VerifyGetAzureSqlDatabaseOperation(getOperationDbName, getDatabaseOperationByDbResult); VerifyGetAzureSqlDatabaseOperation(getOperationDbName, getDatabaseOperationByNameResult); VerifyGetAzureSqlDatabaseOperation(getOperationDbName, getDatabaseOperationByIdResult); // Validate Remove-AzureSqlDatabase databases = new Database[] { removeDatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting no databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); DatabaseTestHelper.ValidateDatabaseProperties(databases[0], "master", "System", 5, 5368709120L, "SQL_Latin1_General_CP1_CI_AS", "System", true, DatabaseTestHelper.SystemSloGuid); } }
public void AzureSqlDatabaseCertTests() { // This test uses the https endpoint, setup the certificates. MockHttpServer.SetupCertificates(); using (PowerShell powershell = PowerShell.Create()) { // Setup the subscription used for the test WindowsAzureSubscription subscription = UnitTestHelper.SetupUnitTestSubscription(powershell); powershell.Runspace.SessionStateProxy.SetVariable( "serverName", SqlDatabaseTestSettings.Instance.ServerName); // Create a new server HttpSession testSession = MockServerHelper.DefaultSessionCollection.GetSession( "UnitTest.AzureSqlDatabaseCertTests"); ServerTestHelper.SetDefaultTestSessionSettings(testSession); // Uncomment one of these two when testing against onebox or production // When testing production use RDFE // testSession.ServiceBaseUri = new Uri("https://management.core.windows.net"); // When testing onebox use Mock RDFE // testSession.ServiceBaseUri = new Uri("https://management.dev.mscds.com:12346/MockRDFE/"); testSession.RequestValidator = new Action<HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.IsTrue( actual.UserAgent.Contains(ApiConstants.UserAgentHeaderValue), "Missing proper UserAgent string."); Assert.IsTrue( UnitTestHelper.GetUnitTestClientCertificate().Equals(actual.Certificate), "Expected correct client certificate"); }); Collection<PSObject> newDatabaseResult1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert1"); }); Collection<PSObject> newDatabaseResult2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"New-AzureSqlDatabase" + @" -ServerName $serverName" + @" -DatabaseName testdbcert2" + @" -Edition Business" + @" -MaxSizeGB 10" + @" -Collation Japanese_CI_AS"); }); Collection<PSObject> getDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName"); }); Collection<PSObject> getSingleDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName" + @" -DatabaseName testdbcert1"); }); Collection<PSObject> setDatabaseNameResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db", newDatabaseResult1.FirstOrDefault()); return powershell.InvokeBatchScript( @"$db | Set-AzureSqlDatabase" + @" -NewDatabaseName testdbcert3" + @" -PassThru"); }); Collection<PSObject> setDatabaseSizeResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db", newDatabaseResult1.FirstOrDefault()); return powershell.InvokeBatchScript( @"$db | Set-AzureSqlDatabase" + @" -MaxSizeGB 5" + @" -PassThru"); }); Collection<PSObject> P1 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( @"$P1 = Get-AzureSqlDatabaseServiceObjective" + @" -Server $serverName" + @" -ServiceObjectiveName ""Reserved P1""", @"$P1"); }); Collection<PSObject> P2 = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.InvokeBatchScript( @"$SLO = Get-AzureSqlDatabaseServiceObjective" + @" -Server $serverName"); return powershell.InvokeBatchScript( @"$P2 = Get-AzureSqlDatabaseServiceObjective" + @" -Server $serverName" + @" -ServiceObjective $SLO[1]", @"$P2"); }); Collection<PSObject> newPremiumP1DatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"New-AzureSqlDatabase" + @" -ServerName {0}" + @" -DatabaseName ""testdbcertPremiumDBP1""" + @" -Edition Premium" + @" -ServiceObjective $P1", "testserver")); }); Collection<PSObject> newPremiumP2DatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"New-AzureSqlDatabase" + @" -ServerName {0}" + @" -DatabaseName ""testdbcertPremiumDBP2""" + @" -Edition Premium" + @" -ServiceObjective $P2", "testserver")); }); // There is a known issue about the Get-AzureSqlDatabaseOperation that it returns all // operations which has the required database name no matter it's been deleted and recreated. // So when run it against the mock session, please use the hard coded testsDBName. // Run against onebox, please use the one with NewGuid(). // This unit test should be updated once that behavior get changed which was already been // created as a task. //string getOperationDbName = "testdbcertGetOperationDbName_" + Guid.NewGuid().ToString(); string getOperationDbName = "testdbcertGetOperationDbName_5d8b5785-0490-402c-b42f-6a5f5d6fbed8"; Collection<PSObject> newOperationDbResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"$getOperationDb = New-AzureSqlDatabase" + @" -ServerName testserver" + @" -DatabaseName ""{0}""", getOperationDbName), @"$getOperationDb"); }); Collection<PSObject> getDatabaseOperationByDbResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"Get-AzureSqlDatabaseOperation" + @" -ServerName testserver" + @" -Database $getOperationDb")); }); Collection<PSObject> getDatabaseOperationByNameResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"$getOperation = Get-AzureSqlDatabaseOperation" + @" -ServerName testserver" + @" -DatabaseName ""{0}""", getOperationDbName), @"$getOperation"); }); Collection<PSObject> getDatabaseOperationByIdResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { return powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"Get-AzureSqlDatabaseOperation" + @" -ServerName testserver" + @" -OperationGuid $getOperation[0].Id")); }); Collection<PSObject> removeDatabaseResult = MockServerHelper.ExecuteWithMock( testSession, MockHttpServer.DefaultHttpsServerPrefixUri, () => { powershell.Runspace.SessionStateProxy.SetVariable("db1", newDatabaseResult1.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("db2", newDatabaseResult2.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("premiumP1", newPremiumP1DatabaseResult.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("premiumP2", newPremiumP2DatabaseResult.FirstOrDefault()); powershell.Runspace.SessionStateProxy.SetVariable("operationDb", newOperationDbResult.FirstOrDefault()); powershell.InvokeBatchScript( @"$db1 | Remove-AzureSqlDatabase" + @" -Force"); powershell.InvokeBatchScript( @"$db2 | Remove-AzureSqlDatabase" + @" -Force"); powershell.InvokeBatchScript( @"$premiumP1 | Remove-AzureSqlDatabase" + @" -Force"); powershell.InvokeBatchScript( @"$premiumP2 | Remove-AzureSqlDatabase" + @" -Force"); powershell.InvokeBatchScript( @"$operationDb | Remove-AzureSqlDatabase" + @" -Force"); return powershell.InvokeBatchScript( @"Get-AzureSqlDatabase" + @" $serverName"); }); Assert.AreEqual(0, powershell.Streams.Error.Count, "Unexpected Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Unexpected Warnings during run!"); // Validate New-AzureSqlDatabase Database[] databases = new Database[] { newDatabaseResult1.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); // Note: Because the object is piped, this is the final state of the // database object, after all the Set- cmdlet has run. Assert.AreEqual("testdbcert3", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); databases = new Database[] { newDatabaseResult2.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert2", databases[0].Name); Assert.AreEqual("Business", databases[0].Edition); Assert.AreEqual(10, databases[0].MaxSizeGB); Assert.AreEqual("Japanese_CI_AS", databases[0].CollationName); // Validate Get-AzureSqlDatabase databases = getDatabaseResult.Select(r => r.BaseObject as Database).ToArray(); Assert.AreEqual(3, databases.Length, "Expecting 3 databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.IsNotNull(databases[1], "Expecting a Database object."); Assert.IsNotNull(databases[2], "Expecting a Database object."); Assert.AreEqual("master", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); Assert.AreEqual(true, databases[0].IsSystemObject); Assert.AreEqual("testdbcert1", databases[1].Name); Assert.AreEqual("Web", databases[1].Edition); Assert.AreEqual(1, databases[1].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[1].CollationName); Assert.AreEqual(false, databases[1].IsSystemObject); Assert.AreEqual("testdbcert2", databases[2].Name); Assert.AreEqual("Business", databases[2].Edition); Assert.AreEqual(10, databases[2].MaxSizeGB); Assert.AreEqual("Japanese_CI_AS", databases[2].CollationName); Assert.AreEqual(false, databases[2].IsSystemObject); databases = new Database[] { getSingleDatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert1", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(1, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); // Validate Set-AzureSqlDatabase databases = new Database[] { setDatabaseNameResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert3", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(1, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); databases = new Database[] { setDatabaseSizeResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("testdbcert3", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); // Validate New-AzureSqlDatabase for Premium Edition Database VerifyCreatePremiumDb(newPremiumP1DatabaseResult, "testdbcertPremiumDBP1", (P1.Single().BaseObject as ServiceObjective).Id.ToString()); VerifyCreatePremiumDb(newPremiumP2DatabaseResult, "testdbcertPremiumDBP2", (P2.Single().BaseObject as ServiceObjective).Id.ToString()); // Validate Get-AzureSqlDatabaseServiceObjective var SLOP1 = P1.Single().BaseObject as ServiceObjective; Assert.AreEqual(SLOP1.Name, "Reserved P1"); Assert.AreEqual(SLOP1.Description, "Resource capacity is reserved."); Assert.IsNotNull(SLOP1.DimensionSettings, "Expecting some Dimension Setting objects."); Assert.AreEqual(SLOP1.DimensionSettings.Count(), 1, "Expecting 1 Dimension Setting."); Assert.AreEqual(SLOP1.DimensionSettings[0].Description, "Resource capacity is reserved.", "Expecting Dimension Setting description as Resource capacity is reserved."); var SLOP2 = P2.Single().BaseObject as ServiceObjective; Assert.AreEqual(SLOP2.Name, "Reserved P2"); Assert.AreEqual(SLOP2.Description, "Resource capacity is reserved."); Assert.IsNotNull(SLOP2.DimensionSettings, "Expecting some Dimension Setting objects."); Assert.AreEqual(SLOP2.DimensionSettings.Count(), 1, "Expecting 1 Dimension Setting."); Assert.AreEqual(SLOP2.DimensionSettings[0].Description, "Resource capacity is reserved.", "Expecting Dimension Setting description as Resource capacity is reserved."); // Validate Get-AzureSqlDatabaseOperation VerifyGetAzureSqlDatabaseOperation(getOperationDbName, getDatabaseOperationByDbResult); VerifyGetAzureSqlDatabaseOperation(getOperationDbName, getDatabaseOperationByNameResult); VerifyGetAzureSqlDatabaseOperation(getOperationDbName, getDatabaseOperationByIdResult); // Validate Remove-AzureSqlDatabase databases = new Database[] { removeDatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting no databases"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual("master", databases[0].Name); Assert.AreEqual("Web", databases[0].Edition); Assert.AreEqual(5, databases[0].MaxSizeGB); Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); } }
private static Database[] VerifyCreatePremiumDb(Collection<PSObject> newPremiumP1DatabaseResult, string databaseName, string serviceObjectiveId) { Database[] databases = new Database[] { newPremiumP1DatabaseResult.Single().BaseObject as Database }; Assert.AreEqual(1, databases.Length, "Expecting one database"); Assert.IsNotNull(databases[0], "Expecting a Database object."); Assert.AreEqual(databases[0].Name, databaseName, string.Format("Expecting Database Name:{0}, actual is:{1}", databaseName, databases[0].Name)); /* SQL Server: Defect 1655888: When creating a premium database, * the immediate returned value do not have valid Edition and Max Database Size info * We should active the following asserts once the defect is fixed. Assert.AreEqual("Premium", databases[0].Edition); Assert.AreEqual(10, databases[0].MaxSizeGB); Assert.AreEqual(databases[0].AssignedServiceObjectiveId, serviceObjectiveId, string.Format("Expecting Database Edition:{0}, actual is:{1}", serviceObjectiveId, databases[0].AssignedServiceObjectiveId)); */ Assert.AreEqual("SQL_Latin1_General_CP1_CI_AS", databases[0].CollationName); return databases; }