Ejemplo n.º 1
0
        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");
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
            }
        }
Ejemplo n.º 4
0
        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); });
            }
        }
Ejemplo n.º 5
0
 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); });
 }
Ejemplo n.º 6
0
        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(); });
            }
        }
Ejemplo n.º 7
0
 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));
     }
 }
Ejemplo n.º 8
0
        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());
                }
            }
        }
Ejemplo n.º 9
0
        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());
                }
            }
        }
Ejemplo n.º 10
0
        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));
            }
        }
Ejemplo n.º 11
0
        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));
            }
        }
Ejemplo n.º 12
0
 public void Manually_Save_Snapshot()
 {
     var manager = new SqlSnapshotManager(CONNECTION_STRING, TEST_DATABASE_NAME);
     manager.SaveSnapshot();
 }