private ExcecutionResult ExecuteNonTransactionalCreateDatabaseSqlScripts(
            DatabaseConnectionParameters connectionParameters,
            Dictionary <string, FileInfo> filesToExecute,
            Encoding encodingForReadingSqlScripts)
        {
            IDbConnection connection = CreateDbConnection(connectionParameters);
            TransactionalSqlFileExecutor sqlFileExecutor = new TransactionalSqlFileExecutor(connection, _outputLogger);

            try
            {
                sqlFileExecutor.ExecuteNonTransactional(filesToExecute.Select(item => item.Key).ToList(), encodingForReadingSqlScripts);
            }
            catch (TransactionalSqlFileExecutorException exception)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(exception.Message);
                result.Errors.Add(exception.InnerException.Message);
                return(result);
            }

            return(new ExcecutionResult {
                Success = true
            });
        }
        public virtual ExcecutionResult ExecuteCreateDatabase(
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            // Execute optional FileStructurePolicy
            if (_createDatabasePolicy != null)
            {
                PolicyResult policyResult = _createDatabasePolicy.Check(_databaseScriptsDirInfo);

                if (!policyResult.Success)
                {
                    // Policy failed Return errors
                    ExcecutionResult result = new ExcecutionResult {
                        Success = false
                    };
                    result.Errors.AddRange(policyResult.Messages);
                    return(result);
                }
            }

            SqlFilesListReader filesReader = new SqlFilesListReader(_databaseScriptsDirInfo);

            Dictionary <string, FileInfo> filesToExecute = filesReader.GetCreateDatabaseFileToExecute();

            return(ExecuteNonTransactionalCreateDatabaseSqlScripts(connectionParameters, filesToExecute, encodingForReadingSqlScripts));
        }
Esempio n. 3
0
        public void ShouldCallExecuteCreateDatabaseWhenBeforeExecuteScriptsActionIsCreateDatabase()
        {
            // arrange
            DatabaseReleaseTool databaseReleaseToolMock =
                MockRepository.GeneratePartialMock <DatabaseReleaseTool>(
                    Environment.CurrentDirectory,
                    new CreateDatabasePolicyComposite(),
                    new FileStructurePolicyComposite(),
                    new ConsoleOutputLogger(),
                    new ConnectionStringFactory(),
                    null);
            DatabaseConnectionParameters databaseConnectionParameters = new DatabaseConnectionParameters
            {
                BeforeExecuteScriptsAction =
                    BeforeExecuteScriptsAction
                    .CreateDatabase
            };

            databaseReleaseToolMock.Expect(x => x.ExecuteCreateDatabase(databaseConnectionParameters, Encoding.ASCII))
            .Repeat.Once()
            .Return(new ExcecutionResult());

            // act
            databaseReleaseToolMock.Execute(string.Empty, string.Empty, databaseConnectionParameters, Encoding.ASCII);

            // assert
            databaseReleaseToolMock.VerifyAllExpectations();
        }
Esempio n. 4
0
        ShouldCallExecuteCreateDatabaseAndExecuteAllScriptsForDatabaseWhenBeforeExecuteScriptsActionIsCreateDatabaseAndANdResultOfExecuteCreateDatabaseIsSucces()
        {
            // arrange
            DatabaseReleaseTool databaseReleaseToolMock =
                MockRepository.GeneratePartialMock <DatabaseReleaseTool>(
                    Environment.CurrentDirectory,
                    new CreateDatabasePolicyComposite(),
                    new FileStructurePolicyComposite(),
                    new ConsoleOutputLogger(),
                    new ConnectionStringFactory(),
                    null);
            DatabaseConnectionParameters databaseConnectionParameters = new DatabaseConnectionParameters
            {
                BeforeExecuteScriptsAction =
                    BeforeExecuteScriptsAction
                    .CreateDatabase
            };

            databaseReleaseToolMock.Expect(x => x.ExecuteCreateDatabase(databaseConnectionParameters, Encoding.UTF7))
            .Repeat.Once()
            .Return(new ExcecutionResult {
                Success = true
            });
            databaseReleaseToolMock.Expect(
                x => x.ExecuteAllScriptsForDatabase("1.0.0", "2.0.0", databaseConnectionParameters, Encoding.UTF7))
            .Repeat.Once()
            .Return(new ExcecutionResult());

            // act
            databaseReleaseToolMock.Execute("1.0.0", "2.0.0", databaseConnectionParameters, Encoding.UTF7);

            // assert
            databaseReleaseToolMock.VerifyAllExpectations();
        }
Esempio n. 5
0
        public void ShouldThrowFileNotFoundExceptionWhenParameterSpecifiesConfigFileThatDoesNotExist()
        {
            DatabaseConnectionParameters fromFileParameters = new DatabaseConnectionParameters
            {
                ConfigurationFileName =
                    "IDoNoTExist.config",
                CreationType =
                    ConnectionStringCreationType
                    .FromConfigurationFile
            };

            Assert.That(() => { _connectionStringFactory.Create(fromFileParameters); }, Throws.TypeOf(typeof(FileNotFoundException)));
        }
Esempio n. 6
0
        public void ShouldUseDbConnectionToMasterWhenBeforeExecuteScriptsActionIsCreateDatabase()
        {
            // Arrange
            DirectoryInfo directoryInfo =
                DirectoryStructureHelper.CreateValidDatabaseDirStructure(
                    "ShouldUseDbConnectionToMasterWhenBeforeExecuteScriptsActionIsCreateDatabase");

            DirectoryStructureHelper.CreateEmptyFile(Path.Combine(directoryInfo.GetDirectories()[1].FullName, "CreateDatabase.sql"));

            IDatabaseConnectionFactory databaseConnectionFactory = MockRepository.GenerateMock <IDatabaseConnectionFactory>();
            IDbConnection  connection  = MockRepository.GenerateStub <IDbConnection>();
            IDbTransaction transaction = MockRepository.GenerateStub <IDbTransaction>();
            IDbCommand     command     = MockRepository.GenerateStub <IDbCommand>();

            databaseConnectionFactory.Expect(
                c => c.CreateDatabaseConnection("Data Source=.;Initial Catalog=master;User ID=testUser;Password=testPassword", DatabaseType.MsSql))
            .Repeat.Once()
            .Return(connection);
            connection.Expect(method => method.BeginTransaction()).Return(transaction);
            connection.Expect(method => method.CreateCommand()).Return(command);

            DatabaseReleaseTool dbreleaseTool = new DatabaseReleaseTool(
                directoryInfo.FullName,
                new CreateDatabasePolicyComposite(),
                null,
                new ConsoleOutputLogger(),
                new ConnectionStringFactory(),
                databaseConnectionFactory);

            DatabaseConnectionParameters parameters = new DatabaseConnectionParameters
            {
                BeforeExecuteScriptsAction =
                    BeforeExecuteScriptsAction.CreateDatabase,
                DatabaseType = DatabaseType.MsSql,
                CreationType =
                    ConnectionStringCreationType.FromArguments,
                Arguments =
                {
                    Hostname = ".",
                    Username = "******",
                    Password = "******",
                    Database = "FruitDB"
                }
            };

            // Act
            dbreleaseTool.ExecuteCreateDatabase(parameters, Encoding.Default);

            // Assert
            databaseConnectionFactory.VerifyAllExpectations();
        }
Esempio n. 7
0
        public void ShouldCreateConnectionStringFromConfigurationFile()
        {
            // Arrange
            DatabaseConnectionParameters fromFileParameters = new DatabaseConnectionParameters
            {
                ConfigurationFileName = "TestConfig.config",
                CreationType          =
                    ConnectionStringCreationType
                    .FromConfigurationFile
            };

            // Act
            string connectionString = _connectionStringFactory.Create(fromFileParameters);

            // Assert
            Assert.That(connectionString, Is.EqualTo("Data Source=.;Initial Catalog=testdb;User ID=xx;Password=xxxx"));
        }
Esempio n. 8
0
        public void SmokeTest()
        {
            // Setup
            DirectoryInfo directoryInfo = DirectoryStructureHelper.CreateValidDatabaseDirStructure("SmokeTest");

            DirectoryStructureHelper.CreateEmptyFile(Path.Combine(directoryInfo.GetDirectories()[1].FullName, "CreateDatabase.sql"));

            IDatabaseConnectionFactory databaseConnectionFactory = MockRepository.GenerateMock <IDatabaseConnectionFactory>();
            IDbConnection  connection  = MockRepository.GenerateStub <IDbConnection>();
            IDbTransaction transaction = MockRepository.GenerateStub <IDbTransaction>();
            IDbCommand     command     = MockRepository.GenerateStub <IDbCommand>();

            databaseConnectionFactory.Expect(
                c => c.CreateDatabaseConnection("Data Source=.;Initial Catalog=master;User ID=testUser;Password=testPassword", DatabaseType.MsSql))
            .Repeat.Once()
            .Return(connection);
            connection.Expect(method => method.BeginTransaction()).Return(transaction);
            connection.Expect(method => method.CreateCommand()).Return(command);

            DatabaseReleaseTool dbreleaseTool = new DatabaseReleaseTool(
                directoryInfo.FullName,
                new CreateDatabasePolicyComposite(),
                null,
                new ConsoleOutputLogger(),
                new ConnectionStringFactory(),
                databaseConnectionFactory);

            DatabaseConnectionParameters parameters = new DatabaseConnectionParameters();

            parameters.BeforeExecuteScriptsAction = BeforeExecuteScriptsAction.CreateDatabase;
            parameters.DatabaseType       = DatabaseType.MsSql;
            parameters.CreationType       = ConnectionStringCreationType.FromArguments;
            parameters.Arguments.Hostname = ".";
            parameters.Arguments.Username = "******";
            parameters.Arguments.Password = "******";
            parameters.Arguments.Database = "testdb";

            // Act
            ExcecutionResult result = dbreleaseTool.ExecuteCreateDatabase(parameters, Encoding.Default);

            // Assert
            Assert.That(result.Success, Is.True, "error: {0} ", result.Errors);
        }
        public void ExecuteAllScriptsForDatabaseSmokeTest()
        {
            // Setup
            string        pathName      = "ExecuteAllScriptsForDatabaseSmokeTest";
            DirectoryInfo directoryInfo = DirectoryStructureHelper.CreateValidDatabaseDirStructure(pathName);

            DirectoryStructureHelper.CreateEmptyFile(Path.Combine(directoryInfo.GetDirectories()[1].FullName, "1.0_TestScript.sql"));

            IFileStructurePolicy fileStucturePolicyComposite = new FileStructurePolicyComposite();

            IDatabaseConnectionFactory connectionFactory = CreateMockDatabaseConnectionFactory();

            IOutputLogger       outputLogger  = new ConsoleOutputLogger();
            DatabaseReleaseTool dbreleaseTool = new DatabaseReleaseTool(
                directoryInfo.FullName,
                null,
                fileStucturePolicyComposite,
                outputLogger,
                _connectionStringFactory,
                connectionFactory);

            string fromVersion = "1.0.0.0";
            string toVersion   = "2.0";

            DatabaseConnectionParameters parameters = new DatabaseConnectionParameters {
                DatabaseType = DatabaseType.MsSql
            };

            parameters.CreationType       = ConnectionStringCreationType.FromArguments;
            parameters.Arguments.Hostname = ".";
            parameters.Arguments.Username = "******";
            parameters.Arguments.Password = "******";
            parameters.Arguments.Database = "testdatabase";

            // Act
            ExcecutionResult result = dbreleaseTool.ExecuteAllScriptsForDatabase(fromVersion, toVersion, parameters, null);

            Assert.IsTrue(result.Success, string.Join("|", result.Errors.ToArray()));
            Assert.IsEmpty(result.Errors);
        }
        public ExcecutionResult Execute(
            string fromVersion,
            string toVersion,
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            var excecutionResult = new ExcecutionResult {
                Success = true
            };

            if (connectionParameters.BeforeExecuteScriptsAction == BeforeExecuteScriptsAction.CreateDatabase)
            {
                excecutionResult = ExecuteCreateDatabase(connectionParameters, encodingForReadingSqlScripts);
            }

            if (excecutionResult.Success)
            {
                excecutionResult = ExecuteAllScriptsForDatabase(fromVersion, toVersion, connectionParameters, encodingForReadingSqlScripts);
            }

            return(excecutionResult);
        }
        public virtual ExcecutionResult ExecuteAllScriptsForDatabase(
            string fromVersion,
            string toVersion,
            DatabaseConnectionParameters connectionParameters,
            Encoding encodingForReadingSqlScripts)
        {
            if (string.IsNullOrEmpty(fromVersion))
            {
                throw new ArgumentException(@"Cannot be null or empty.", "fromVersion");
            }

            if (string.IsNullOrEmpty(toVersion))
            {
                throw new ArgumentException(@"Cannot be null or empty.", "toVersion");
            }

            if (encodingForReadingSqlScripts == null)
            {
                encodingForReadingSqlScripts = Encoding.Default;
            }

            Version fromVersionObject;
            Version toVersionObject;

            try
            {
                fromVersionObject = VersionNumberHelper.RemoveNegativeNumbersFromVersionObject(new Version(fromVersion));
            }
            catch (Exception ex)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(
                    string.Format("Invalid fromVersion. Could not parse fromVersion to a usable version object. {0}", ex.Message));
                return(result);
            }

            try
            {
                toVersionObject = VersionNumberHelper.RemoveNegativeNumbersFromVersionObject(new Version(toVersion));
            }
            catch (Exception ex)
            {
                var result = new ExcecutionResult {
                    Success = false
                };
                result.Errors.Add(string.Format("Invalid toVersion. Could not parse toVersion to a usable version object. {0}", ex.Message));
                return(result);
            }

            // Execute optional FileStructurePolicy
            if (_fileStructurePolicy != null)
            {
                PolicyResult policyResult = _fileStructurePolicy.Check(_databaseScriptsDirInfo);

                if (!policyResult.Success)
                {
                    // Policy failed Return errors
                    ExcecutionResult result = new ExcecutionResult {
                        Success = false
                    };
                    result.Errors.AddRange(policyResult.Messages);
                    return(result);
                }
            }

            SqlFilesListReader            filesReader    = new SqlFilesListReader(_databaseScriptsDirInfo);
            Dictionary <string, FileInfo> filesToExecute = filesReader.GetSpecificVersionedFilesToExecute(fromVersionObject, toVersionObject);

            return(ExecuteSqlScripts(connectionParameters, filesToExecute, encodingForReadingSqlScripts));
        }
        private IDbConnection CreateDbConnection(DatabaseConnectionParameters connectionParameters)
        {
            string connectionString = _connectionStringFactory.Create(connectionParameters);

            return(_databaseConnectionFactory.CreateDatabaseConnection(connectionString, connectionParameters.DatabaseType));
        }
Esempio n. 13
0
 public void SetUp()
 {
     _parameters = CreateTestParameters();
 }
Esempio n. 14
0
        private static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                PrintUsage();
                return(-1);
            }

            // Initialize default values
            ApplicationOptions options = optionsParser.Parse(args);

            if (options.InformationSwitch == InformationSwitch.On)
            {
                // Print extra info
                PrintUsage();
                PrintDatabaseDirectoryStructureTemplate();
                return(-2);
            }

            ArgumentValidationResult validationResult = argumentValidator.Validate(args);

            if (validationResult.Status == ArgumentValidationStatus.Failed)
            {
                outputLogger.WriteErrorMessage("\nArgument error:\n");
                validationResult.ValidationMessages.ForEach(
                    item => outputLogger.WriteErrorMessage(string.Format(CultureInfo.InvariantCulture, "\t{0}\n", item)));
                PrintUsage();
                return(-3);
            }

            DatabaseReleaseTool databaseReleaseTool;

            try
            {
                databaseReleaseTool = new DatabaseReleaseTool(
                    options.DatabaseScriptsPath,
                    new CreateDatabasePolicyComposite(),
                    new FileStructurePolicyComposite(),
                    outputLogger,
                    new ConnectionStringFactory(),
                    new DatabaseConnectionFactory());
            }
            catch (Exception ex)
            {
                outputLogger.WriteErrorMessage(string.Format("Error while creating databasereleasetool. {0}.", ex.Message));
                outputLogger.WriteDebugMessage(ex.StackTrace);
                return(-5);
            }

            DatabaseConnectionParameters connectionParameters = new DatabaseConnectionParameters();

            // Check if a configuration file parameter is passed.
            // If so then the database configuration will be read from the config file instead of the commandline.
            if (!string.IsNullOrEmpty(options.ConfigurationFilename))
            {
                // Check with configfile
                outputLogger.WriteInfoMessage("Starting DatabaseRelease Tool in ConfigFile Modus.");

                outputLogger.WriteDebugMessage(
                    string.Format(CultureInfo.InvariantCulture, "ConfigFile: {0}.", options.ConfigurationFilename));
                outputLogger.WriteDebugMessage(
                    string.Format(CultureInfo.InvariantCulture, "Database Path: {0}.", options.DatabaseScriptsPath));

                // Create databasesettings with configfile.
                connectionParameters.CreationType               = ConnectionStringCreationType.FromConfigurationFile;
                connectionParameters.ConfigurationFileName      = options.ConfigurationFilename;
                connectionParameters.BeforeExecuteScriptsAction =
                    GetBeforeExecuteScriptsActionFromConfigurationFile(options.ConfigurationFilename);
            }
            else
            {
                // check with databaseparams
                connectionParameters.CreationType = ConnectionStringCreationType.FromArguments;
                connectionParameters.BeforeExecuteScriptsAction = options.BeforeExecuteScriptsAction;
                connectionParameters.Arguments.Hostname         = options.Servername;
                connectionParameters.Arguments.Database         = options.DatabaseName;
                connectionParameters.Arguments.Username         = options.Username;
                connectionParameters.Arguments.Password         = options.Password;
            }

            // DatabaseType is given
            if (options.DatabaseType != DatabaseType.None)
            {
                DatabaseType type = options.DatabaseType;

                // database type is mssql by default.
                connectionParameters.DatabaseType = type;
                outputLogger.WriteInfoMessage(string.Format(CultureInfo.InvariantCulture, "DatabaseType is: {0}.", type));
            }
            else
            {
                connectionParameters.DatabaseType = DatabaseType.MsSql; // default;

                // Create databasesettings with parameters.
                outputLogger.WriteInfoMessage("No DatabaseType was given using default MsSql.");
            }

            ExcecutionResult result;

            try
            {
                result = databaseReleaseTool.Execute(
                    options.FromVersion,
                    options.ToVersion,
                    connectionParameters,
                    options.EncodingForReadingSqlScripts);
            }
            catch (Exception ex)
            {
                outputLogger.WriteErrorMessage(
                    string.Format(CultureInfo.InvariantCulture, "Unexpected error while Executing scripts. {0}.", ex.Message));
                outputLogger.WriteDebugMessage(ex.StackTrace);
                return(-6);
            }

            if (!result.Success)
            {
                outputLogger.WriteErrorMessage("Excecution failed with the following errors: ");
                outputLogger.WriteErrorMessage(string.Join("\n", result.Errors.ToArray()));
                return(-10);
            }

            outputLogger.WriteSuccessMessage("Execution succeeded.");

            return(0);
        }