public void Manages_database() { var settings = new ConnectionSettings("server", "db", true, null, null); var scriptDirectory = @"c:\scripts"; var taskAttributes = new TaskAttributes(settings, scriptDirectory); var mocks = new MockRepository(); var taskObserver = mocks.CreateMock<ITaskObserver>(); var generator = mocks.CreateMock<ILogMessageGenerator>(); var factory = mocks.CreateMock<IDatabaseActionExecutorFactory>(); var creator = mocks.CreateMock<IDatabaseActionExecutor>(); var updater = mocks.CreateMock<IDatabaseActionExecutor>(); var executors = new IDatabaseActionExecutor[] { creator, updater }; using (mocks.Record()) { Expect.Call(generator.GetInitialMessage(taskAttributes)).Return("starting..."); taskObserver.Log("starting..."); Expect.Call(factory.GetExecutors(RequestedDatabaseAction.Create)).Return(executors); creator.Execute(taskAttributes, taskObserver); updater.Execute(taskAttributes, taskObserver); } using (mocks.Playback()) { ISqlDatabaseManager manager = new SqlDatabaseManager(generator, factory); manager.Upgrade(taskAttributes, taskObserver); } mocks.VerifyAll(); }
public void Versions_database() { string assembly = SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(SqlDatabaseManager.SQL_FILE_TEMPLATE, "VersionDatabase"); ConnectionSettings settings = new ConnectionSettings(String.Empty, String.Empty, false, String.Empty, String.Empty); string sqlScript = "SQL script..."; MockRepository mocks = new MockRepository(); IResourceFileLocator fileLocator = mocks.CreateMock<IResourceFileLocator>(); IQueryExecutor queryExecutor = mocks.CreateMock<IQueryExecutor>(); ITaskObserver taskObserver = mocks.CreateMock<ITaskObserver>(); using (mocks.Record()) { Expect.Call(fileLocator.ReadTextFile(assembly, sqlFile)).Return(sqlScript); Expect.Call(queryExecutor.ExecuteScalarInteger(settings, sqlScript)).Return(7); taskObserver.SetVariable("usdDatabaseVersion", "7"); } using (mocks.Playback()) { IDatabaseVersioner versioner = new DatabaseVersioner(fileLocator, queryExecutor); versioner.VersionDatabase(settings, taskObserver); } mocks.VerifyAll(); }
public bool UpdateDatabase(ConnectionSettings settings, string scriptDirectory, RequestedDatabaseAction action) { var manager = new SqlDatabaseManager(); var taskAttributes = new TaskAttributes(settings, scriptDirectory) { RequestedDatabaseAction = action, }; try { manager.Upgrade(taskAttributes, this); foreach (var property in _properties) { Log(property.Key +": " + property.Value); } return true; } catch (Exception exception) { var ex = exception; do { Log("Failure: " + ex.Message); ex = ex.InnerException; } while (ex!=null); //Log(exception.ToString()); } return false; }
public void Correctly_drops_connections() { string assembly = SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(SqlDatabaseManager.SQL_FILE_TEMPLATE, "DropConnections"); ConnectionSettings settings = new ConnectionSettings("server", "MyDatabase", true, null, null); MockRepository mocks = new MockRepository(); ITaskObserver taskObserver = mocks.CreateMock<ITaskObserver>(); IResourceFileLocator fileLocator = mocks.CreateMock<IResourceFileLocator>(); ITokenReplacer replacer = mocks.CreateMock<ITokenReplacer>(); IQueryExecutor queryExecutor = mocks.CreateMock<IQueryExecutor>(); using (mocks.Record()) { taskObserver.Log("Dropping connections for database MyDatabase\n"); Expect.Call(fileLocator.ReadTextFile(assembly, sqlFile)).Return("Unformatted SQL"); replacer.Text = "Unformatted SQL"; replacer.Replace("DatabaseName", "MyDatabase"); Expect.Call(replacer.Text).Return("Formatted SQL"); queryExecutor.ExecuteNonQuery(settings, "Formatted SQL", false); } using (mocks.Playback()) { IDatabaseConnectionDropper dropper = new DatabaseConnectionDropper(fileLocator, replacer, queryExecutor); dropper.Drop(settings, taskObserver); } mocks.VerifyAll(); }
public void Drops_database() { var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, null); var mocks = new MockRepository(); var connectionDropper = mocks.CreateMock<IDatabaseConnectionDropper>(); var taskObserver = mocks.CreateMock<ITaskObserver>(); var queryExecutor = mocks.CreateMock<IQueryExecutor>(); using (mocks.Record()) { connectionDropper.Drop(settings, taskObserver); queryExecutor.ExecuteNonQuery(settings, "ALTER DATABASE [db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE drop database [db]", false); } using (mocks.Playback()) { IDatabaseActionExecutor dropper = new DatabaseDropper(connectionDropper, queryExecutor); dropper.Execute(taskAttributes, taskObserver); } mocks.VerifyAll(); }
public void Should_not_fail_if_datebase_does_not_exist() { var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, null); var mocks = new MockRepository(); var connectionDropper = mocks.DynamicMock<IDatabaseConnectionDropper>(); var taskObserver = mocks.CreateMock<ITaskObserver>(); var queryExecutor = mocks.CreateMock<IQueryExecutor>(); using (mocks.Record()) { Expect.Call(() => queryExecutor.ExecuteNonQuery(settings, "ALTER DATABASE [db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE drop database [db]", false)) .Throw(new Exception("foo message")); Expect.Call(() => taskObserver.Log("Database 'db' could not be dropped.")); } using (mocks.Playback()) { IDatabaseActionExecutor dropper = new DatabaseDropper(connectionDropper, queryExecutor); dropper.Execute(taskAttributes, taskObserver); } mocks.VerifyAll(); }
public void ProperlyComparesTwoNonIdenticalConnectionSettings() { ConnectionSettings settings1 = new ConnectionSettings("server", "database", true, "username", "password"); ConnectionSettings settings2 = new ConnectionSettings("server1", "database", true, "username", "password"); Assert.AreNotEqual(settings1, settings2); }
public void MarkScriptAsExecuted(ConnectionSettings settings, string scriptFilename, ITaskObserver task) { string insertTemplate = "insert into usd_AppliedDatabaseScript (ScriptFile, DateApplied) values ('{0}', getdate())"; string sql = string.Format(insertTemplate, scriptFilename); _executor.ExecuteNonQuery(settings, sql, true); }
public void CorrectlyGeneratesConnectionStringWithDatabaseAndUserSecurityAndDatabaseExcluded() { IConnectionStringGenerator generator = new ConnectionStringGenerator(); ConnectionSettings settings = new ConnectionSettings("server", "db", false, "usr", "pwd"); string connString = generator.GetConnectionString(settings, false); Assert.AreEqual("Data Source=server;User ID=usr;Password=pwd;", connString); }
public void EnsureSchemaCreated(ConnectionSettings settings) { string assembly = SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(SqlDatabaseManager.SQL_FILE_TEMPLATE, "CreateSchema"); string sql = _locator.ReadTextFile(assembly, sqlFile); _executor.ExecuteNonQuery(settings, sql, true); }
public void CorrectlyGeneratesConnectionStringWithDatabaseAndIntegratedSecurityAndDatabaseExcluded() { IConnectionStringGenerator generator = new ConnectionStringGenerator(); ConnectionSettings settings = new ConnectionSettings("server", "db", true, string.Empty, string.Empty); string connString = generator.GetConnectionString(settings, false); Assert.AreEqual("Data Source=server;Integrated Security=True;", connString); }
public void VersionDatabase(ConnectionSettings settings, ITaskObserver taskObserver) { string assembly = SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(SqlDatabaseManager.SQL_FILE_TEMPLATE, "VersionDatabase"); string sql = _fileLocator.ReadTextFile(assembly, sqlFile); string version = _executor.ExecuteScalarInteger(settings, sql).ToString(); taskObserver.SetVariable(_databaseVersionPropertyName, version); }
public void Creates_initial_log_message_for_database_create() { ILogMessageGenerator generator = new LogMessageGenerator(); var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, "c:\\scripts"); string message = generator.GetInitialMessage(taskAttributes); Assert.That(message, Is.EqualTo("Create db on server using scripts from c:\\scripts\n")); }
public void PropertyAccessorsWorkProperly() { ConnectionSettings settings = new ConnectionSettings("server", "database", true, "username", "password"); Assert.AreEqual("server", settings.Server); Assert.AreEqual("database", settings.Database); Assert.AreEqual(true, settings.IntegratedAuthentication); Assert.AreEqual("username", settings.Username); Assert.AreEqual("password", settings.Password); }
public void Creates_initial_log_message_for_database_create_while_skiping_some_files() { ILogMessageGenerator generator = new LogMessageGenerator(); var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, "c:\\scripts") { SkipFileNameContaining = "_data_"}; string message = generator.GetInitialMessage(taskAttributes); Assert.That(message, Is.EqualTo("Create db on server using scripts from c:\\scripts while skipping file containing _data_\n")); }
public void Creates_initial_log_message_for_database_drop() { ILogMessageGenerator generator = new LogMessageGenerator(); var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, "c:\\scripts") {RequestedDatabaseAction = RequestedDatabaseAction.Drop}; string message = generator.GetInitialMessage(taskAttributes); Assert.That(message, Is.EqualTo("Drop db on server\n")); }
public bool ScriptAlreadyExecuted(ConnectionSettings settings, string scriptFilename) { if (_appliedScripts == null) { _appliedScripts = _executor.ReadFirstColumnAsStringArray(settings, "select ScriptFile from usd_AppliedDatabaseScript"); } bool alreadyExecuted = Array.IndexOf(_appliedScripts, scriptFilename) >= 0; return alreadyExecuted; }
public void Import(string excelFile, string server, string database, bool integrated, string username, string password, ITaskObserver taskObserver) { string message = string.Format("\nImporting Excel File '{0}' to Database '{1}' on Server '{2}'\n", excelFile, database, server); taskObserver.Log(message); var settings = new ConnectionSettings(server, database, integrated, username, password); string sql = _fileLocator.ReadTextFile("Tarantino.Core", "Tarantino.Core.DatabaseManager.SqlFiles.ImportExcel.sql"); _tokenReplacer.Text = sql; _tokenReplacer.Replace("DATABASE", database); _tokenReplacer.Replace("EXCEL_FILE", excelFile); _queryExecutor.ExecuteNonQuery(settings, _tokenReplacer.Text, false); }
public void Drop(ConnectionSettings settings, ITaskObserver taskObserver) { string message = string.Format("Dropping connections for database {0}\n", settings.Database); taskObserver.Log(message); string assembly = SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(SqlDatabaseManager.SQL_FILE_TEMPLATE, "DropConnections"); string sql = _fileLocator.ReadTextFile(assembly, sqlFile); _replacer.Text = sql; _replacer.Replace("DatabaseName", settings.Database); sql = _replacer.Text; _executor.ExecuteNonQuery(settings, sql, false); }
public void Execute(string fullFilename, ConnectionSettings settings, ITaskObserver taskObserver) { string scriptFilename = getFilename(fullFilename); if (_executionTracker.ScriptAlreadyExecuted(settings, scriptFilename)) { taskObserver.Log(string.Format("Skipping (already executed): {0}", scriptFilename)); } else { taskObserver.Log(string.Format("Executing: {0}", scriptFilename)); string sql = _fileSystem.ReadTextFile(fullFilename); _executor.ExecuteNonQuery(settings, sql, true); _executionTracker.MarkScriptAsExecuted(settings, scriptFilename, taskObserver); } }
public void CorrectlyMarksScriptAsExecuted() { ConnectionSettings settings = new ConnectionSettings(string.Empty, string.Empty, false, string.Empty, string.Empty); string scriptFilename = "03_Test.sql"; MockRepository mocks = new MockRepository(); IQueryExecutor queryExecutor = mocks.CreateMock<IQueryExecutor>(); ITaskObserver observer = mocks.CreateMock<ITaskObserver>(); queryExecutor.ExecuteNonQuery(settings, "insert into usd_AppliedDatabaseScript (ScriptFile, DateApplied) values ('03_Test.sql', getdate())", true); mocks.ReplayAll(); IScriptExecutionTracker tracker = new ScriptExecutionTracker(queryExecutor); tracker.MarkScriptAsExecuted(settings, scriptFilename, observer); mocks.VerifyAll(); }
public void CorrectlyDeterminesWhenScriptHasNotBeenExecuted() { ConnectionSettings settings = new ConnectionSettings(string.Empty, string.Empty, false, string.Empty, string.Empty); string scriptFilename = "03_Test.sql"; string[] executedScriptFiles = new string[] { "01_Test.sql", "02_Test.sql" }; MockRepository mocks = new MockRepository(); IQueryExecutor queryExecutor = mocks.CreateMock<IQueryExecutor>(); Expect.Call(queryExecutor.ReadFirstColumnAsStringArray(settings, "select ScriptFile from usd_AppliedDatabaseScript")).Return(executedScriptFiles); mocks.ReplayAll(); IScriptExecutionTracker tracker = new ScriptExecutionTracker(queryExecutor); bool alreadyExecuted = tracker.ScriptAlreadyExecuted(settings, scriptFilename); Assert.AreEqual(false, alreadyExecuted); mocks.VerifyAll(); }
protected override void ExecuteTask() { try { var manager = new SqlDatabaseManager(); var settings = new ConnectionSettings(Server, Database, IntegratedAuthentication, Username, Password); var taskAttributes = new TaskAttributes(settings, ScriptDirectory.FullName) { SkipFileNameContaining = SkipFileNameContaining, RequestedDatabaseAction = Action, }; manager.Upgrade(taskAttributes, this); } catch { if (FailOnError) throw; } }
public string GetConnectionString(ConnectionSettings settings, bool includeDatabaseName) { StringBuilder connectionString = new StringBuilder(); connectionString.AppendFormat("Data Source={0};", settings.Server); if (includeDatabaseName) { connectionString.AppendFormat("Initial Catalog={0};", settings.Database); } if (settings.IntegratedAuthentication) { connectionString.Append("Integrated Security=True;"); } else connectionString.AppendFormat("User ID={0};Password={1};", settings.Username, settings.Password); return connectionString.ToString(); }
public void Updates_database() { var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, "c:\\scripts"); var mocks = new MockRepository(); var executor = mocks.CreateMock<IScriptFolderExecutor>(); var taskObserver = mocks.CreateMock<ITaskObserver>(); using (mocks.Record()) { executor.ExecuteScriptsInFolder(taskAttributes, "Update", taskObserver); } using (mocks.Playback()) { IDatabaseActionExecutor updater = new DatabaseUpdater(executor); updater.Execute(taskAttributes, taskObserver); } mocks.VerifyAll(); }
public void CorrectlyInitializesSchema() { string assembly = Tarantino.Core.DatabaseManager.Services.Impl.SqlDatabaseManager.SQL_FILE_ASSEMBLY; string sqlFile = string.Format(Tarantino.Core.DatabaseManager.Services.Impl.SqlDatabaseManager.SQL_FILE_TEMPLATE, "CreateSchema"); ConnectionSettings settings = new ConnectionSettings(String.Empty, String.Empty, false, String.Empty, String.Empty); string sqlScript = "SQL script..."; MockRepository mocks = new MockRepository(); IResourceFileLocator fileLocator = mocks.CreateMock<IResourceFileLocator>(); IQueryExecutor queryExecutor = mocks.CreateMock<IQueryExecutor>(); Expect.Call(fileLocator.ReadTextFile(assembly, sqlFile)).Return(sqlScript); queryExecutor.ExecuteNonQuery(settings, sqlScript, true); mocks.ReplayAll(); ISchemaInitializer versioner = new SchemaInitializer(fileLocator, queryExecutor); versioner.EnsureSchemaCreated(settings); mocks.VerifyAll(); }
private static void Main(string[] args) { if (args.Length != 4 && args.Length != 6) { InvalidArguments(); return; } ConnectionSettings settings = null; var deployer = new ConsoleDatabaseDeployer(); var action = (RequestedDatabaseAction)Enum.Parse(typeof(RequestedDatabaseAction), args[0]); string server = args[1]; string database = args[2]; string scriptDirectory = args[3]; if (args.Length == 4) { settings = new ConnectionSettings(server, database, true, null, null); } else if (args.Length == 6) { string username = args[4]; string password = args[5]; settings = new ConnectionSettings(server, database, false, username, password); } if (deployer.UpdateDatabase(settings, scriptDirectory, action)) { return; } Environment.ExitCode = 1; }
public void Executes_only_filtereded_scripts_within_a_folder() { var settings = new ConnectionSettings("server", "db", true, null, null); var sqlFiles = new[] { "c:\\scripts\\Update\\001.sql", "c:\\scripts\\Update\\002_data_.sql", "c:\\scripts\\Update\\003.sql" }; var filteredFiles = new[] { "c:\\scripts\\Update\\001.sql", "c:\\scripts\\Update\\003.sql" }; var taskAttributes = new TaskAttributes(settings, "c:\\scripts") { RequestedDatabaseAction = RequestedDatabaseAction.Update, SkipFileNameContaining = "_data_" }; var mocks = new MockRepository(); var initializer = mocks.CreateMock<ISchemaInitializer>(); var fileLocator = mocks.CreateMock<ISqlFileLocator>(); var executor = mocks.CreateMock<IChangeScriptExecutor>(); var versioner = mocks.CreateMock<IDatabaseVersioner>(); var taskObserver = mocks.CreateMock<ITaskObserver>(); var fileFilterService = mocks.CreateMock<IFileFilterService>(); using (mocks.Record()) { initializer.EnsureSchemaCreated(settings); Expect.Call(fileLocator.GetSqlFilenames("c:\\scripts", "Update")).Return(sqlFiles); Expect.Call(fileFilterService.GetFilteredFilenames(sqlFiles, "_data_")).Return(filteredFiles); executor.Execute("c:\\scripts\\Update\\001.sql", settings, taskObserver); executor.Execute("c:\\scripts\\Update\\003.sql", settings, taskObserver); versioner.VersionDatabase(settings, taskObserver); } using (mocks.Playback()) { IScriptFolderExecutor folderExecutor = new ScriptFolderExecutor(initializer, fileLocator, executor, versioner, fileFilterService); folderExecutor.ExecuteScriptsInFolder(taskAttributes, "Update", taskObserver); } mocks.VerifyAll(); }
public void Creates_database() { var settings = new ConnectionSettings("server", "db", true, null, null); var taskAttributes = new TaskAttributes(settings, "c:\\scripts"); var mocks = new MockRepository(); var queryExecutor = mocks.CreateMock<IQueryExecutor>(); var executor = mocks.CreateMock<IScriptFolderExecutor>(); var taskObserver = mocks.CreateMock<ITaskObserver>(); using (mocks.Record()) { queryExecutor.ExecuteNonQuery(settings, "create database [db]", false); executor.ExecuteScriptsInFolder(taskAttributes, "ExistingSchema", taskObserver); } using (mocks.Playback()) { IDatabaseActionExecutor creator = new DatabaseCreator(queryExecutor, executor); creator.Execute(taskAttributes, taskObserver); } mocks.VerifyAll(); }
public void Calculates_correct_hash_code() { ConnectionSettings settings1 = new ConnectionSettings("Server", "Database", true, "Username", "Password"); int expectedHashCode = "ServerDatabaseUsernamePasswordTrue".GetHashCode(); Assert.That(settings1.GetHashCode(), Is.EqualTo(expectedHashCode)); }