/// <summary> /// Wait for Continuous Copy operation to become catchup. /// </summary> /// <param name="powershell">The powershell instance containing the context.</param> /// <param name="contextVariable">The variable name that holds the server context.</param> /// <param name="dbCopyVariable">The variable name that holds the db copy object.</param> public static void WaitContinuousCopyCatchup( System.Management.Automation.PowerShell powershell, string contextVariable, string dbCopyVariable) { if (DatabaseTestHelper.CommonServiceBaseUri == null) { // Don't need to wait during playback return; } HttpSession testSession = new HttpSession(); testSession.Messages = new HttpMessageCollection(); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { for (int i = 0; i < 20; i++) { Collection <PSObject> databaseCopy = powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"{0} | Get-AzureSqlDatabaseCopy " + @"-Context $context", dbCopyVariable)); Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.IsTrue( databaseCopy.First().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); Services.Server.DatabaseCopy databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy.Single().BaseObject; if (databaseCopyObj.ReplicationStateDescription == "CATCH_UP") { break; } Thread.Sleep(TimeSpan.FromSeconds(1)); } } } }
/// <summary> /// Create a new database in the given server context along with a continuous copy at the specified partner server /// </summary> /// <param name="powershell">The powershell instance containing the context.</param> /// <param name="contextVariable">The variable name that holds the server context.</param> /// <param name="databaseVariable">The variable name that holds the database object.</param> /// <param name="databaseName">The name of the database to create and to copy.</param> /// <param name="partnerServer">The name of the partner server where the continuous copy goes to</param> public static void CreateDatabaseWithCopy( System.Management.Automation.PowerShell powershell, string contextVariable, string databaseVariable, string databaseName, string partnerServer) { HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.Common.CreateDatabaseWithCopy"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Create database with copy case 0: case 1: // Request 2-3: Get database copy case 2: case 3: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> database, databaseCopy; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { database = powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"{0} = New-AzureSqlDatabaseWithCopy " + @"-Context {1} " + @"-DatabaseName {2} " + @"-PartnerServer {3} " + @"-Collation Japanese_CI_AS " + @"-Edition Web " + @"-MaxSizeGB 5 " + @"-MaxLagInMinutes 15 " + @"-Force", databaseVariable, contextVariable, databaseName, partnerServer), databaseVariable); databaseCopy = powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"Get-AzureSqlDatabaseCopy " + @"-Context {0} " + @"-DatabaseName {1} " + @"-PartnerServer {2}", contextVariable, databaseName, partnerServer) ); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); // Validate Database object returned Assert.IsTrue( database.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database databaseObj = (Services.Server.Database)database.Single().BaseObject; Assert.AreEqual(databaseName, databaseObj.Name, "Expected database name to match"); Assert.AreEqual("Japanese_CI_AS", databaseObj.CollationName, "Expected collation to be Japanese_CI_AS"); Assert.AreEqual("Web", databaseObj.Edition, "Expected edition to be Web"); Assert.AreEqual(5, databaseObj.MaxSizeGB, "Expected max size to be 5 GB"); // Validate DatabaseCopy object returned Assert.IsTrue( databaseCopy.First().BaseObject is Services.Server.DatabaseCopy, "Expected a DatabaseCopy object"); Services.Server.DatabaseCopy databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy.First().BaseObject; Assert.AreEqual("testserver", databaseCopyObj.SourceServerName, "Expected source server name to be testserver"); Assert.AreEqual( databaseName, databaseCopyObj.SourceDatabaseName, string.Format( CultureInfo.InvariantCulture, "Expected source database name to be {0}", databaseName) ); Assert.AreEqual( partnerServer, databaseCopyObj.DestinationServerName, string.Format( CultureInfo.InvariantCulture, "Expected destination server name to be {0}", partnerServer) ); Assert.AreEqual( databaseName, databaseCopyObj.DestinationDatabaseName, string.Format( CultureInfo.InvariantCulture, "Expected destination database name to be {0}", databaseName) ); Assert.IsTrue(databaseCopyObj.IsContinuous, "Expected copy to be continuous"); Assert.AreEqual(15, databaseCopyObj.MaximumLag, "Expected maximum lag to be 15 minutes"); Assert.AreEqual("CATCH_UP", databaseCopyObj.ReplicationStateDescription, "Expected replication state to be CATCH_UP"); } }
public void GetAzureSqlDatabaseContinuousCopyWithSqlAuth() { using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create()) { // Create a context NewAzureSqlDatabaseServerContextTests.CreateServerContextSqlAuth( powershell, "$context"); // Create 2 test databases NewAzureSqlDatabaseTests.CreateTestDatabasesWithSqlAuth( powershell, "$context"); // Start two continuous database copy operation StartAzureSqlDatabaseCopyTests.StartDatabaseContinuousCopyWithSqlAuth( powershell, "$context", "$copy1", "testdb1"); StartAzureSqlDatabaseCopyTests.StartDatabaseContinuousCopyWithSqlAuth( powershell, "$context", "$copy2", "testdb2"); HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.GetAzureSqlDatabaseContinuousCopyWithSqlAuth"); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Get all database copies request case 0: case 1: // Request 2-3: Get database copies for testdb1 case 2: case 3: // Request 4-5: Get database copies for testdb2 case 4: case 5: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> databaseCopies, databaseCopy1, databaseCopy2; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { databaseCopies = powershell.InvokeBatchScript( @"Get-AzureSqlDatabaseCopy " + @"-Context $context"); databaseCopy1 = powershell.InvokeBatchScript( @"Get-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName testdb1"); databaseCopy2 = powershell.InvokeBatchScript( @"Get-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName testdb2"); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.AreEqual(2, databaseCopies.Count, "Expecting 2 Database Copy objects"); Assert.IsTrue( databaseCopy1.First().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); Services.Server.DatabaseCopy databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy1.Single().BaseObject; Assert.AreEqual( "testserver", databaseCopyObj.SourceServerName, "Expected source server name to be testserver"); Assert.AreEqual( "testdb1", databaseCopyObj.SourceDatabaseName, "Expected source database name to be testdb1"); Assert.AreEqual( "partnersrv", databaseCopyObj.DestinationServerName, "Expected destination server name to be partnersrv"); Assert.AreEqual( "testdb1", databaseCopyObj.DestinationDatabaseName, "Expected destination database name to be testdb1"); Assert.IsTrue( databaseCopyObj.IsContinuous, "Expected copy to be continuous"); Assert.IsTrue( databaseCopy2.First().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy2.Single().BaseObject; Assert.AreEqual( "testserver", databaseCopyObj.SourceServerName, "Expected source server name to be testserver"); Assert.AreEqual( "testdb2", databaseCopyObj.SourceDatabaseName, "Expected source database name to be testdb2"); Assert.AreEqual( "partnersrv", databaseCopyObj.DestinationServerName, "Expected destination server name to be partnersrv"); Assert.AreEqual( "testdb2", databaseCopyObj.DestinationDatabaseName, "Expected destination database name to be testdb2"); Assert.IsTrue( databaseCopyObj.IsContinuous, "Expected copy to be continuous"); } } }
/// <summary> /// Create continuous copy of testdb1 to partnersrv. /// </summary> /// <param name="powershell">The powershell instance containing the context.</param> /// <param name="contextVariable">The variable name that holds the server context.</param> /// <param name="copyVariable">The variable name that holds the copy object.</param> /// <param name="databaseName">The name of the database to copy.</param> public static void StartDatabaseContinuousCopyWithSqlAuth( System.Management.Automation.PowerShell powershell, string contextVariable, string copyVariable, string databaseName) { HttpSession testSession = DatabaseTestHelper.DefaultSessionCollection.GetSession( "UnitTest.Common.StartAzureSqlDatabaseContinuousCopyWithSqlAuth." + databaseName); DatabaseTestHelper.SetDefaultTestSessionSettings(testSession); testSession.RequestValidator = new Action <HttpMessage, HttpMessage.Request>( (expected, actual) => { Assert.AreEqual(expected.RequestInfo.Method, actual.Method); Assert.AreEqual(expected.RequestInfo.UserAgent, actual.UserAgent); switch (expected.Index) { // Request 0-1: Start database copy request case 0: case 1: DatabaseTestHelper.ValidateHeadersForODataRequest( expected.RequestInfo, actual); break; default: Assert.Fail("No more requests expected."); break; } }); using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection <PSObject> databaseCopy; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { databaseCopy = powershell.InvokeBatchScript( string.Format( CultureInfo.InvariantCulture, @"{0} = Start-AzureSqlDatabaseCopy " + @"-Context $context " + @"-DatabaseName {1} " + @"-PartnerServer partnersrv " + @"-ContinuousCopy", copyVariable, databaseName), copyVariable); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.IsTrue( databaseCopy.Single().BaseObject is Services.Server.DatabaseCopy, "Expecting a Database Copy object"); Services.Server.DatabaseCopy databaseCopyObj = (Services.Server.DatabaseCopy)databaseCopy.Single().BaseObject; Assert.AreEqual( "testserver", databaseCopyObj.SourceServerName, "Unexpected source server name"); Assert.AreEqual( databaseName, databaseCopyObj.SourceDatabaseName, "Unexpected source database name"); Assert.AreEqual( "partnersrv", databaseCopyObj.DestinationServerName, "Unexpected destination server name"); Assert.AreEqual( databaseName, databaseCopyObj.DestinationDatabaseName, "Unexpected destination database name"); Assert.IsTrue( databaseCopyObj.IsContinuous, "Expected copy to be continuous"); } }