public string Restore(string server, string instance, string database, string snapshot, string username = "", string password="")
        {
            DbSnapshotMgr mgr = new DbSnapshotMgr();
            DbConnectionInfo connectionInfo;
            if (!string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(password))
            {
                connectionInfo = new DbConnectionInfo(server, instance, username, password);
            }
            else
            {
                connectionInfo = new DbConnectionInfo(server, instance);
            }

            try
            {
                  mgr.RestoreSnapshot(connectionInfo,database,snapshot);
            }
            catch (Exception ex)
            {

                return ex.ToString();
            }

            return "Ok";
        }
        public Dictionary<string, List<string>> List(string server, string instance)
        {
            DbSnapshotMgr mgr = new DbSnapshotMgr();
            DbConnectionInfo connectionInfo = new DbConnectionInfo(server, instance);

            return mgr.ListSnapshots(connectionInfo);
        }
            public void CreateSnapshotValid()
            {
                var target = new DbSnapshotMgr();
                var connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string databaseName = "Certit";
                string snapshotDatabaseName = string.Empty;

                target.CreateSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
            }
            public void CreateSnapshotMissingDb()
            {
                var target = new DbSnapshotMgr();
                var connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string databaseName = "UnknowDatabase";
                string snapshotDatabaseName = string.Empty;

                try
                {
                    target.CreateSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
                }
                catch (ArgumentOutOfRangeException ex)
                {
                    Assert.IsTrue(ex.Message.Contains(databaseName));
                }
            }
        public string Delete(string server, string instance,  string snapshot)
        {
            DbSnapshotMgr mgr = new DbSnapshotMgr();
            DbConnectionInfo connectionInfo = new DbConnectionInfo(server,instance);
            try
            {
                  mgr.DeleteSnapshot(connectionInfo,snapshot);
            }
            catch (Exception ex)
            {

                return ex.ToString();
            }

            return "Ok";
        }
            public void CreateSnapshotNoValidDbNameParameters()
            {
                var target = new DbSnapshotMgr();
                var connectionInfo = new DbConnectionInfo();
                string databaseName = string.Empty;
                string snapshotDatabaseName = string.Empty;

                try
                {
                    target.CreateSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
                    Assert.Fail();
                }
                catch (ArgumentNullException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("databaseName"));
                }
            }
            public void CreateSnapshotValidthCustomSnapshotName()
            {
                var target = new DbSnapshotMgr();
                var connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string databaseName = "Certit";
                string snapshotDatabaseName = "Certit_pretest";

                try
                {
                    target.CreateSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
                }
                catch (ArgumentNullException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("databaseName"));
                }
            }
            public void ValidRestore()
            {
                DbSnapshotMgr target = new DbSnapshotMgr();
                DbConnectionInfo connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string databaseName = "Certit";
                string snapshotDatabaseName = "Certit_120725";

                target.RestoreSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
            }
            public void SnapshotDbIsNotASnapshot()
            {
                DbSnapshotMgr target = new DbSnapshotMgr();
                DbConnectionInfo connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string databaseName = "Certit";
                string snapshotDatabaseName = "Certit";

                try
                {
                    target.RestoreSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
                    Assert.Fail();
                }
                catch (ArgumentException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("is not a snapshot"));
                }
            }
            public void InvalidSnapshot()
            {
                DbSnapshotMgr target = new DbSnapshotMgr();
                DbConnectionInfo connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string databaseName = "Certit";
                string snapshotDatabaseName = "UnknowSnapshotDb";

                try
                {
                    target.RestoreSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
                    Assert.Fail();
                }
                catch (ArgumentOutOfRangeException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("does not exists"));
                }
            }
            public void InvalidDatabaseName()
            {
                DbSnapshotMgr target = new DbSnapshotMgr();
                DbConnectionInfo connectionInfo = new DbConnectionInfo();
                string databaseName = string.Empty;
                string snapshotDatabaseName = string.Empty;

                try
                {
                    target.RestoreSnapshot(connectionInfo, databaseName, snapshotDatabaseName);
                    Assert.Fail();
                }
                catch (ArgumentNullException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("databaseName"));
                }
            }
            public void ListSnapshot()
            {
                DbSnapshotMgr target = new DbSnapshotMgr();
                DbConnectionInfo connectionInfo = new DbConnectionInfo(@".\", "SQL2012");

                var result = target.ListSnapshots(connectionInfo);
                Assert.IsTrue(result.Count > 0);
            }
            public void DeleteSnapshotValid()
            {
                var target = new DbSnapshotMgr();
                var connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string snapshotDatabaseName = "Certit_pretest";

                target.DeleteSnapshot(connectionInfo, snapshotDatabaseName);
            }
            public void DeleteSnapshotNoValidconnectionInfoParameters()
            {
                var target = new DbSnapshotMgr();
                DbConnectionInfo connectionInfo = null;
                string snapshotDatabaseName = string.Empty;

                try
                {
                    target.DeleteSnapshot(connectionInfo, snapshotDatabaseName);
                    Assert.Fail();
                }
                catch (ArgumentNullException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("connectionInfo"));
                }
            }
            public void DeleteSnapshotDbIsNotASnapshot()
            {
                var target = new DbSnapshotMgr();
                var connectionInfo = new DbConnectionInfo(@".\", "SQL2012");
                string snapshotDatabaseName = "Certit";

                try
                {
                    target.DeleteSnapshot(connectionInfo, snapshotDatabaseName);
                }
                catch (ArgumentException ex)
                {
                    Assert.IsTrue(ex.Message.Contains("is not a snapshot database"));
                }
            }