public void Disposing_Should_Restore_The_Database_If_Snapshot_Exists() { var CountCommand = new SqlCommand("SELECT Count(name) FROM People"); var DestructiveCommand = new SqlCommand("DELETE FROM People"); using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { using (var conn = new SqlConnection(CONNECTION_STRING)) { conn.Open(); conn.ChangeDatabase(TEST_DATABASE_NAME); SetupDatabase(conn); CountCommand.Connection = conn; DestructiveCommand.Connection = conn; manager.SaveSnapshot(); Assert.AreEqual(4, CountCommand.ExecuteScalar()); DestructiveCommand.ExecuteNonQuery(); Assert.AreEqual(0, CountCommand.ExecuteScalar()); } } using (var conn = new SqlConnection(CONNECTION_STRING)) { conn.Open(); conn.ChangeDatabase(TEST_DATABASE_NAME); CountCommand.Connection = conn; Assert.AreEqual(4, CountCommand.ExecuteScalar(), "database should have been restored"); } }
public void Disposing_Manager_Removes_Work_Directory() { string work; using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { manager.SaveSnapshot(); // create file and work directory work = manager.WorkDirectory; Assert.IsTrue(Directory.Exists(work)); } Assert.IsFalse(Directory.Exists(work)); }
public void DeleteSnapshot_Removes_Backup_File_From_Work_Directory() { // arrange using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { manager.SaveSnapshot(); // act|assert Assert.That(File.Exists(manager.BackupFilePath)); manager.DeleteSnapshot(); Assert.IsFalse(File.Exists(manager.BackupFilePath)); } }
public void SaveSnapshot_Throws_When_Snapshot_Already_Exists_And_Overwite_Equals_False() { using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { manager.SaveSnapshot(); Assert.Throws<ExistingSnapshotException>(delegate { manager.SaveSnapshot(false); }); } }
public void Throw_When_Connection_String_Arg_Does_Not_Disable_Pooling() { var badConnectionString = @"Server=.\SQLExpress;Initial Catalog=master;Integrated Security=SSPI;User Instance=true;"; Assert.Throws<ArgumentException>(delegate { var x = new SqlSnapshotManager(badConnectionString, TEST_DATABASE_NAME); }); }
public void RestoreSnapshot_Throws_When_No_Snapshots_Exist() { using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { manager.DeleteSnapshot(); Assert.Throws<NoSnapshotException>(delegate { manager.RestoreSnapshot(); }); } }
public void SaveSnapshot_Creates_Database_Backup_In_Work_Directory() { using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { Assert.IsFalse(File.Exists(manager.BackupFilePath)); manager.SaveSnapshot(); Assert.That(File.Exists(manager.BackupFilePath)); } }
public void RestoreSnapshot_Reverts_Database_DML_Operations() { // arrange using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { var CountCommand = new SqlCommand("SELECT Count(name) FROM People"); var DestructiveCommand = new SqlCommand("DELETE FROM People"); using (var conn = new SqlConnection(CONNECTION_STRING)) { conn.Open(); conn.ChangeDatabase(TEST_DATABASE_NAME); SetupDatabase(conn); CountCommand.Connection = conn; DestructiveCommand.Connection = conn; manager.SaveSnapshot(); Assert.AreEqual(4, CountCommand.ExecuteScalar()); DestructiveCommand.ExecuteNonQuery(); Assert.AreEqual(0, CountCommand.ExecuteScalar()); // close connection so exclusive access can be attained for restore conn.Close(); // ACT manager.RestoreSnapshot(); conn.Open(); conn.ChangeDatabase(TEST_DATABASE_NAME); Assert.AreEqual(4, CountCommand.ExecuteScalar()); } } }
public void RestoreSnapshot_Reverts_Database_DDL_Operations() { // arrange using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { var ExistsCommand = new SqlCommand("SELECT OBJECT_ID(N'dbo.People')"); var DestructiveCommand = new SqlCommand("DROP TABLE People"); using (var conn = new SqlConnection(CONNECTION_STRING)) { conn.Open(); conn.ChangeDatabase(TEST_DATABASE_NAME); SetupDatabase(conn); ExistsCommand.Connection = conn; DestructiveCommand.Connection = conn; manager.SaveSnapshot(); Assert.AreNotEqual(DBNull.Value, ExistsCommand.ExecuteScalar()); DestructiveCommand.ExecuteNonQuery(); Assert.AreEqual(DBNull.Value, ExistsCommand.ExecuteScalar()); // close connection so exclusive access can be attained for restore conn.Close(); // ACT manager.RestoreSnapshot(); conn.Open(); conn.ChangeDatabase(TEST_DATABASE_NAME); Assert.AreNotEqual(DBNull.Value, ExistsCommand.ExecuteScalar()); } } }
public void Performance_Of_Cycle() { using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { var timer = new Stopwatch(); timer.Start(); manager.SaveSnapshot(); manager.RestoreSnapshot(); timer.Stop(); Console.WriteLine("The snapshot save/restore cycle takes {0} milliseconds on this machine.".Fill(timer.ElapsedMilliseconds)); } }
public void Performance_Of_Average_Restore() { using (var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME)) { var timer = new Stopwatch(); manager.SaveSnapshot(); var count = 10; timer.Start(); for (int i = 0; i < count; i++) { manager.RestoreSnapshot(); } timer.Stop(); Console.WriteLine("Restoring a snapshot took an average of {0} milliseconds on this machine.".Fill(timer.ElapsedMilliseconds / count)); } }
public void Manually_Save_Snapshot() { var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME); manager.SaveSnapshot(); }