public void DoExecute_fails_on_nonversioned_script()
        {
            // arrange
              IEnumerable<DbScriptToRun> nonVersionedScript = new List<DbScriptToRun>() { new DbScriptToRun(DbVersion.FromString("1.0"), "Core/TestData/NonVersionedScript/01.NonVersionedScript.sql") };

              _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, nonVersionedScript);

              // act, assert
              Assert.Throws<DeploymentTaskException>(() => _deploymentStep.PrepareAndExecute());
        }
Пример #2
0
        public void DoExecute_fails_on_nonversioned_script()
        {
            // arrange
            IEnumerable <DbScriptToRun> nonVersionedScript = new List <DbScriptToRun>()
            {
                new DbScriptToRun(DbVersion.FromString("1.0"), "Core/TestData/NonVersionedScript/01.NonVersionedScript.sql")
            };

            _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, nonVersionedScript);

            // act, assert
            Assert.Throws <DeploymentTaskException>(() => _deploymentStep.PrepareAndExecute());
        }
        public void DoExecute_does_not_fail_on_nonversioned_script_when_is_marked_as_non_transactional()
        {
            // arrange
              IEnumerable<DbScriptToRun> nonTransactionalScript = new List<DbScriptToRun>() { new DbScriptToRun(DbVersion.FromString("1.0"), "Core/TestData/NonVersionedScript/02.NonVersionedScript.notrans.sql") };

              _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, nonTransactionalScript);

              // act
              _deploymentStep.PrepareAndExecute();

              // assert
              _dbScriptRunnerFake.Verify(x => x.Execute(It.IsAny<string>()));
        }
Пример #4
0
        public void DoExecute_fails_on_not_existing_script()
        {
            // arrange
            IEnumerable <DbScriptToRun> notExistingScripts = new List <DbScriptToRun>()
            {
                new DbScriptToRun(DbVersion.FromString("1.0"), "someScript.sql")
            };

            _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, notExistingScripts);

            // act, assert
            Assert.Throws <FileNotFoundException>(() => _deploymentStep.PrepareAndExecute());
        }
Пример #5
0
        public void DoExecute_does_not_fail_on_nonversioned_script_when_is_marked_as_non_transactional()
        {
            // arrange
            IEnumerable <DbScriptToRun> nonTransactionalScript = new List <DbScriptToRun>()
            {
                new DbScriptToRun(DbVersion.FromString("1.0"), "Core/TestData/NonVersionedScript/02.NonVersionedScript.notrans.sql")
            };

            _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, nonTransactionalScript);

            // act
            _deploymentStep.PrepareAndExecute();

            // assert
            _dbScriptRunnerFake.Verify(x => x.Execute(It.IsAny <string>()));
        }
        public void DoExecute_fails_on_not_existing_script()
        {
            // arrange
              IEnumerable<DbScriptToRun> notExistingScripts = new List<DbScriptToRun>() { new DbScriptToRun(DbVersion.FromString("1.0"), "someScript.sql") };

              _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, notExistingScripts);

              // act, assert
              Assert.Throws<FileNotFoundException>(() => _deploymentStep.PrepareAndExecute());
        }
 public void SetUp()
 {
     _dbScriptRunnerFake = new Mock<IDbScriptRunner>(MockBehavior.Loose);
       _deploymentStep = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, _ScriptsToRun);
 }
Пример #8
0
 public void SetUp()
 {
     _dbScriptRunnerFake = new Mock <IDbScriptRunner>(MockBehavior.Loose);
     _deploymentStep     = new RunDbScriptsDeploymentStep(_dbScriptRunnerFake.Object, _DatabaseServerName, _ScriptsToRun);
 }
Пример #9
0
        protected override void DoPrepare()
        {
            EnvironmentInfo environmentInfo = GetEnvironmentInfo();
            DbProjectInfo   projectInfo     = GetProjectInfo <DbProjectInfo>();

            DbProjectConfiguration dbProjectConfiguration =
                environmentInfo.GetDbProjectConfiguration(projectInfo);

            DatabaseServer databaseServer =
                environmentInfo.GetDatabaseServer(dbProjectConfiguration.DatabaseServerId);

            string databaseServerMachineName = databaseServer.MachineName;

            bool databaseExists = _dbVersionProvider.CheckIfDatabaseExists(
                projectInfo.DbName,
                databaseServerMachineName);

            // create a step for downloading the artifacts
            var downloadArtifactsDeploymentStep =
                new DownloadArtifactsDeploymentStep(
                    projectInfo,
                    DeploymentInfo,
                    GetTempDirPath(),
                    _artifactsRepository);

            AddSubTask(downloadArtifactsDeploymentStep);

            // create a step for extracting the artifacts
            var extractArtifactsDeploymentStep =
                new ExtractArtifactsDeploymentStep(
                    projectInfo,
                    environmentInfo,
                    DeploymentInfo,
                    downloadArtifactsDeploymentStep.ArtifactsFilePath,
                    GetTempDirPath(),
                    _fileAdapter,
                    _directoryAdapter,
                    _zipFileAdapter);

            AddSubTask(extractArtifactsDeploymentStep);

            if (databaseExists)
            {
                // create a step for gathering scripts to run
                var gatherDbScriptsToRunDeploymentStep = new GatherDbScriptsToRunDeploymentStep(
                    projectInfo.DbName,
                    new Lazy <string>(() => extractArtifactsDeploymentStep.BinariesDirPath),
                    databaseServerMachineName,
                    environmentInfo.Name,
                    DeploymentInfo,
                    _dbVersionProvider,
                    _createScriptsToRunSelector
                    );

                AddSubTask(gatherDbScriptsToRunDeploymentStep);

                // create a step for running scripts
                var runDbScriptsDeploymentStep = new RunDbScriptsDeploymentStep(
                    GetScriptRunner(projectInfo.IsTransactional, databaseServerMachineName, projectInfo.DbName, environmentInfo.DatabaseServers.FirstOrDefault(e => e.Id == projectInfo.DatabaseServerId)),
                    databaseServerMachineName,
                    new DeferredEnumerable <DbScriptToRun>(() => gatherDbScriptsToRunDeploymentStep.ScriptsToRun));

                AddSubTask(runDbScriptsDeploymentStep);
            }

            else
            {
                // create step for dropping database
                var createDatabaseDeploymentStep = new CreateDatabaseDeploymentStep(projectInfo, databaseServer, _dbManagerFactory);

                AddSubTask(createDatabaseDeploymentStep);

                // create step for deploying dacpac
                var publishDatabaseDeploymentStep =
                    new PublishDatabaseDeploymentStep(
                        projectInfo,
                        databaseServer,
                        GetTempDirPath(),
                        _databasePublisher);

                AddSubTask(publishDatabaseDeploymentStep);
            }

            foreach (string userId in projectInfo.Users)
            {
                var environmentUser = environmentInfo.EnvironmentUsers.SingleOrDefault(x => x.Id == userId);

                if (environmentUser == null)
                {
                    throw new DeploymentTaskException(string.Format("User [{0}] doesn't exist in enviroment configuration [{1}] in project [{2}]", userId, environmentInfo.Name, projectInfo.Name));
                }

                string user = _userNameNormalizer.ConvertToPreWin2000UserName(environmentUser.UserName, environmentInfo.DomainName);

                IDbManager manager = _dbManagerFactory.CreateDbManager(databaseServerMachineName);

                if (databaseExists && manager.UserExists(projectInfo.DbName, user))
                {
                    foreach (string dbUserRole in _dbUserRoles)
                    {
                        if (!manager.CheckIfUserIsInRole(projectInfo.DbName, user, dbUserRole))
                        {
                            AddSubTask(new AddRoleToUserStep(manager, projectInfo.DbName, user, dbUserRole));
                        }
                    }
                }
                else
                {
                    AddSubTask(new AddUserToDatabaseStep(manager, projectInfo.DbName, user));
                    foreach (string dbUserRole in _dbUserRoles)
                    {
                        AddSubTask(new AddRoleToUserStep(manager, projectInfo.DbName, user, dbUserRole));
                    }
                }
            }
        }