public void Fail_ProcessRecord() { // Setup var workingFolder = Fakes.RandomString(); var deploymentFilePath = Fakes.RandomString(); var serverInstance = Fakes.RandomString(); var catalog = Fakes.RandomString(); var folder = Fakes.RandomString(); var projectName = Fakes.RandomString(); var projectPassword = Fakes.RandomString(); var eraseSensitiveInfo = Fakes.RandomBool(); IDeployArguments deployArguments = null; _deployerMock.Setup(d => d.Deploy(It.IsAny <IDeployArguments>())).Throws(new Exception("TEST")); // Execute var powershellCmd = new SsisDeployPowershell { DeploymentFilePath = deploymentFilePath, Folder = folder, Catalog = catalog, ServerInstance = serverInstance, ProjectName = projectName, EraseSensitiveInfo = eraseSensitiveInfo, ProjectPassword = projectPassword }; // Execute var exception = Record.Exception(() => powershellCmd.ProcessRecordInternal(_deployerMock.Object, workingFolder)); Assert.NotNull(exception); Assert.IsType <Exception>(exception); Assert.Equal("TEST", exception.Message); }
public void Pass_MainInternal() { // Setup var args = new[] { Fakes.RandomString(), $"-{nameof(DeployArguments.ServerInstance)}", Fakes.RandomString(), $"-{nameof(DeployArguments.Catalog)}", Fakes.RandomString(), $"-{nameof(DeployArguments.ProjectName)}", Fakes.RandomString(), $"-{nameof(DeployArguments.Folder)}", Fakes.RandomString(), $"-{nameof(DeployArguments.ProjectPassword)}", Fakes.RandomString(), $"-{nameof(DeployArguments.EraseSensitiveInfo)}" }; IDeployArguments deployArguments = null; _deployerMock.Setup(d => d.Deploy(It.IsAny <IDeployArguments>())).Callback((IDeployArguments da) => deployArguments = da); // Execute Program.MainInternal(_deployerMock.Object, args); // Assert Assert.NotNull(deployArguments); Assert.Equal(Environment.CurrentDirectory, deployArguments.WorkingFolder); Assert.Equal(args[0], deployArguments.DeploymentFilePath); Assert.Equal(args[2], deployArguments.ServerInstance); Assert.Equal(args[4], deployArguments.Catalog); Assert.Equal(args[6], deployArguments.ProjectName); Assert.Equal(args[8], deployArguments.Folder); Assert.Equal(args[10], deployArguments.ProjectPassword); Assert.True(deployArguments.EraseSensitiveInfo); }
public void Pass_ProcessRecord() { // Setup var workingFolder = Fakes.RandomString(); var deploymentFilePath = Fakes.RandomString(); var serverInstance = Fakes.RandomString(); var catalog = Fakes.RandomString(); var folder = Fakes.RandomString(); var projectName = Fakes.RandomString(); var projectPassword = Fakes.RandomString(); var eraseSensitiveInfo = Fakes.RandomBool(); IDeployArguments deployArguments = null; _deployerMock.Setup(d => d.Deploy(It.IsAny <IDeployArguments>())).Callback((IDeployArguments da) => { deployArguments = da; }); // Execute var powershellCmd = new SsisDeployPowershell { DeploymentFilePath = deploymentFilePath, Folder = folder, Catalog = catalog, ServerInstance = serverInstance, ProjectName = projectName, EraseSensitiveInfo = eraseSensitiveInfo, ProjectPassword = projectPassword }; powershellCmd.ProcessRecordInternal(_deployerMock.Object, workingFolder); // Assert Assert.Equal(workingFolder, deployArguments.WorkingFolder); Assert.Equal(deploymentFilePath, deployArguments.DeploymentFilePath); Assert.Equal(serverInstance, deployArguments.ServerInstance); Assert.Equal(catalog, deployArguments.Catalog); Assert.Equal(folder, deployArguments.Folder); Assert.Equal(projectName, deployArguments.ProjectName); Assert.Equal(projectPassword, deployArguments.ProjectPassword); Assert.Equal(eraseSensitiveInfo, deployArguments.EraseSensitiveInfo); }
private void LogDeploymentInfo(IDeployArguments deployArguments, Dictionary <string, SensitiveParameter> parametersToDeploy, ProtectionLevel deploymentProtectionLevel) { _logger.LogMessage("SSIS Deploy Engine"); _logger.LogMessage("Copyright (c) 2017 Roman Tumaykin"); _logger.LogMessage(""); _logger.LogMessage("-------------------------------------------------------------------------------"); _logger.LogMessage("Starting SSIS Project deployment with the following parameters:"); _logger.LogMessage(""); _logger.LogMessage($"Project path: {deployArguments.DeploymentFilePath}."); _logger.LogMessage($"Target SQL Server: {deployArguments.ServerInstance}"); _logger.LogMessage($"Target IS Catalog: {deployArguments.Catalog}"); _logger.LogMessage($"Target Project Name: {deployArguments.ProjectName}"); _logger.LogMessage($"Protection Level: {deploymentProtectionLevel:G}"); if (parametersToDeploy.Count > 0) { _logger.LogMessage(""); _logger.LogMessage("The following parameters will be deployed together with the project:"); foreach (var parameter in parametersToDeploy) { _logger.LogMessage($" - {parameter.Key};"); } } }
public void Deploy(IDeployArguments deployArguments) { string deploymentFilePath; if (string.IsNullOrWhiteSpace(deployArguments.DeploymentFilePath)) { deploymentFilePath = Directory.EnumerateFiles(deployArguments.WorkingFolder, "*.ispac").FirstOrDefault(); if (string.IsNullOrWhiteSpace(deploymentFilePath)) { throw new DeploymentFileNotFoundException(deployArguments.WorkingFolder); } } else { deploymentFilePath = Path.GetFullPath( Path.IsPathRooted(deployArguments.DeploymentFilePath) ? deployArguments.DeploymentFilePath : Path.Combine(deployArguments.WorkingFolder, deployArguments.DeploymentFilePath) ); } var catalog = deployArguments.Catalog ?? "SSISDB"; var projectName = deployArguments.ProjectName ?? Path.GetFileNameWithoutExtension(deploymentFilePath); _project.LoadFromIspac(deploymentFilePath, deployArguments.ProjectPassword); var parametersToDeploy = _project.Parameters.Where(p => p.Value.Sensitive && p.Value.Value != null) .ToDictionary(p => string.Copy(p.Key), v => new SensitiveParameter(string.Copy(v.Key), string.Copy(v.Value.Value), v.Value.ParameterDataType)); var deploymentProtectionLevel = deployArguments.EraseSensitiveInfo ? ProtectionLevel.DontSaveSensitive : ProtectionLevel.ServerStorage; LogDeploymentInfo( new DeployArguments( deployArguments.WorkingFolder, deploymentFilePath, deployArguments.ServerInstance, catalog, deployArguments.Folder, projectName, deployArguments.ProjectPassword, deployArguments.EraseSensitiveInfo ), parametersToDeploy, deploymentProtectionLevel); var connectionString = new SqlConnectionStringBuilder() { ApplicationName = "SSIS Deploy", DataSource = deployArguments.ServerInstance, InitialCatalog = catalog, IntegratedSecurity = true }.ConnectionString; using (var zipStream = new MemoryStream()) { _project.Save(zipStream, deploymentProtectionLevel, deployArguments.ProjectPassword); zipStream.Flush(); _catalogTools.DeployProject(connectionString, deployArguments.Folder, projectName, deployArguments.EraseSensitiveInfo, parametersToDeploy, zipStream); } _logger.LogMessage(""); _logger.LogMessage("Deployment completed successfully"); }