public void Fail_Deploy() { // Setup var parameters = GenerateRandomParameters(); _projectMock.SetupAllProperties(); _projectMock.Setup(p => p.Parameters).Returns(new ReadOnlyDictionary <string, IParameter>(parameters)); _deployArgumentsMock.Setup(d => d.Catalog).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.DeploymentFilePath).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.Folder).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectName).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectPassword).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.EraseSensitiveInfo).Returns(Fakes.RandomBool()); _deployArgumentsMock.Setup(d => d.ServerInstance).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.WorkingFolder).Returns(Fakes.RandomString()); _catalogToolsMock.Setup(c => c.DeployProject(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <IDictionary <string, SensitiveParameter> >(), It.IsAny <MemoryStream>())) .Throws(new Exception("TEST")); _loggerMock.Setup(l => l.LogMessage(It.IsAny <string>())).Verifiable(); // Execute var deployer = new Deployer.Deployer(_loggerMock.Object, _projectMock.Object, _catalogToolsMock.Object); var exception = Record.Exception(() => deployer.Deploy(_deployArgumentsMock.Object)); // Assert Assert.NotNull(exception); Assert.IsType <Exception>(exception); Assert.Equal("TEST", exception.Message); }
public void Pass_New_AllArguments() { // 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(); // Execute var deployArguments = new DeployArguments(workingFolder, deploymentFilePath, serverInstance, catalog, folder, projectName, projectPassword, eraseSensitiveInfo); // 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); }
public void Fail_Deploy_DeploymentFileNotFoundException() { // Setup var parameters = GenerateRandomParameters(); _projectMock.SetupAllProperties(); _projectMock.Setup(p => p.Parameters).Returns(new ReadOnlyDictionary <string, IParameter>(parameters)); _deployArgumentsMock.Setup(d => d.Catalog).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.Folder).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectName).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectPassword).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.EraseSensitiveInfo).Returns(Fakes.RandomBool()); _deployArgumentsMock.Setup(d => d.ServerInstance).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.WorkingFolder).Returns(_workingFolder); var deployer = new Deployer.Deployer(_loggerMock.Object, _projectMock.Object, _catalogToolsMock.Object); // Execute var exception = Record.Exception(() => deployer.Deploy(_deployArgumentsMock.Object)); // Assert Assert.NotNull(exception); Assert.IsType <DeploymentFileNotFoundException>(exception); }
public void Pass_Deploy_ImplicitDeploymentFilePath() { // Setup var parameters = GenerateRandomParameters(); _projectMock.SetupAllProperties(); _projectMock.Setup(p => p.Parameters).Returns(new ReadOnlyDictionary <string, IParameter>(parameters)); _deployArgumentsMock.Setup(d => d.Catalog).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.Folder).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectName).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectPassword).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.EraseSensitiveInfo).Returns(Fakes.RandomBool()); _deployArgumentsMock.Setup(d => d.ServerInstance).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.WorkingFolder).Returns(_workingFolder); var realDeploymentFilePath = Path.Combine(_workingFolder, $"{Fakes.RandomString()}.ispac"); File.Create(realDeploymentFilePath).Close(); string receivedDeploymentFilePath = null; _projectMock.Setup(p => p.LoadFromIspac(It.IsAny <string>(), It.IsAny <string>())) .Callback((string deploymentFilePath, string password) => receivedDeploymentFilePath = deploymentFilePath); var deployer = new Deployer.Deployer(_loggerMock.Object, _projectMock.Object, _catalogToolsMock.Object); // Execute deployer.Deploy(_deployArgumentsMock.Object); // Assert Assert.Equal(realDeploymentFilePath, receivedDeploymentFilePath); }
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 Fail_New_ProjectParameter_EmptyName() { // Setup var name = string.Empty; var value = Fakes.RandomString(); var xmldoc = new XmlDocument(); var parameterXml = XmlGenerators.ProjectFileParameter(name, value, Fakes.RandomBool(), Fakes.RandomEnum <DataType>(), Fakes.RandomBool()); xmldoc.LoadXml(parameterXml); // Execute var exception = Record.Exception(() => new ProjectParameter(Fakes.RandomString(), xmldoc.DocumentElement)); // Assert Assert.NotNull(exception); Assert.IsType <InvalidXmlException>(exception); Assert.Equal(xmldoc.DocumentElement?.OuterXml, ((InvalidXmlException)exception).NodeXml); Assert.NotNull(exception.Message); }
private static IDictionary <string, IParameter> GenerateRandomParameters() { var parameters = new Dictionary <string, IParameter>(); var rnd = new Random(); for (var cnt = 0; cnt < rnd.Next(30, 100); cnt++) { var parameterMock = new Mock <IParameter>(); parameterMock.Setup(p => p.Name).Returns(Fakes.RandomString()); parameterMock.Setup(p => p.Value).Returns(Fakes.RandomString()); parameterMock.Setup(p => p.ParameterDataType).Returns(typeof(string)); parameterMock.Setup(p => p.Sensitive).Returns(Fakes.RandomBool()); parameterMock.Setup(p => p.Source).Returns(Fakes.RandomEnum <ParameterSource>()); parameters.Add(parameterMock.Object.Name, parameterMock.Object); } return(parameters); }
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); }
public void Fail_New_MissingFolder() { // Setup // Execute var exception = Record.Exception(() => new DeployArguments(null, null, Fakes.RandomString(), Fakes.RandomString(), null, Fakes.RandomString(), null, Fakes.RandomBool())); // Assert Assert.NotNull(exception); Assert.IsType <MissingRequiredArgumentException>(exception); Assert.True(((MissingRequiredArgumentException)exception).MissingArgument == nameof(DeployArguments.Folder)); }
internal static IEnumerable <object[]> ParameterData() { var protectionLevels = new[] { ProtectionLevel.DontSaveSensitive, ProtectionLevel.EncryptSensitiveWithPassword, ProtectionLevel.EncryptAllWithPassword }; var testsCount = Fakes.RandomInt(1, 20); for (var cnt = 0; cnt < testsCount; cnt++) { var paramsCount = Fakes.RandomInt(0, 20); var paramsData = new List <ParameterSetupData>(); for (var cnt1 = 0; cnt1 < paramsCount; cnt1++) { paramsData.Add(new ParameterSetupData() { Name = Fakes.RandomString(), Value = Fakes.RandomString(), DataType = DataType.String, Sensitive = Fakes.RandomBool() }); } var packages = new List <string>(); var packageNum = Fakes.RandomInt(0, 20); for (var cnt1 = 0; cnt1 < packageNum; cnt1++) { packages.Add(Fakes.RandomString()); } var connections = new List <string>(); var connectionsNum = Fakes.RandomInt(0, 20); for (var cnt1 = 0; cnt1 < connectionsNum; cnt1++) { connections.Add(Fakes.RandomString()); } //ProtectionLevel protectionLevel, //string versionMajor, //string versionMinor, //string versionComments, //string versionBuild, //string description, //string[] packages, //string[] connectionManagers, //ParameterSetupData[] parameters yield return(new object[] { protectionLevels[Fakes.RandomInt(0, 299) / 100], Fakes.RandomInt(0, 100), Fakes.RandomInt(0, 100), Fakes.RandomInt(0, 100) < 30 ? string.Empty : Fakes.RandomString(), Fakes.RandomInt(0, 100), Fakes.RandomInt(0, 100) < 30 ? string.Empty : Fakes.RandomString(), packages.ToArray(), connections.ToArray(), paramsData.ToArray() }); } }
public void Pass_Deploy() { // Setup var parameters = GenerateRandomParameters(); _projectMock.SetupAllProperties(); _projectMock.Setup(p => p.Parameters).Returns(new ReadOnlyDictionary <string, IParameter>(parameters)); _deployArgumentsMock.Setup(d => d.Catalog).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.DeploymentFilePath).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.Folder).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectName).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.ProjectPassword).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.EraseSensitiveInfo).Returns(Fakes.RandomBool()); _deployArgumentsMock.Setup(d => d.ServerInstance).Returns(Fakes.RandomString()); _deployArgumentsMock.Setup(d => d.WorkingFolder).Returns(Fakes.RandomString()); string passedCatalog = null; string passedServerInstance = null; string passedFolder = null; string passedProjectName = null; bool? passedEraseSensitiveInfo = null; SensitiveParameter[] passedParameters = null; _catalogToolsMock.Setup(c => c.DeployProject(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <IDictionary <string, SensitiveParameter> >(), It.IsAny <MemoryStream>())) .Callback( (string connectionString, string folderName, string projectName, bool eraseSensitiveInfo, IDictionary <string, SensitiveParameter> parametersToDeploy, MemoryStream projectStream) => { var sb = new SqlConnectionStringBuilder(connectionString); passedCatalog = sb.InitialCatalog; passedServerInstance = sb.DataSource; passedFolder = folderName; passedProjectName = projectName; passedEraseSensitiveInfo = eraseSensitiveInfo; passedParameters = parametersToDeploy.Values.ToArray(); }) .Verifiable(); _loggerMock.Setup(l => l.LogMessage(It.IsAny <string>())).Verifiable(); var deployer = new Deployer.Deployer(_loggerMock.Object, _projectMock.Object, _catalogToolsMock.Object); // Execute deployer.Deploy(_deployArgumentsMock.Object); // Assert _loggerMock.Verify(m => m.LogMessage(It.IsAny <string>())); Assert.Equal(_deployArgumentsMock.Object.Catalog, passedCatalog); Assert.Equal(_deployArgumentsMock.Object.ServerInstance, passedServerInstance); Assert.Equal(_deployArgumentsMock.Object.Folder, passedFolder); Assert.Equal(_deployArgumentsMock.Object.ProjectName, passedProjectName); Assert.NotNull(passedEraseSensitiveInfo); Assert.Equal(_deployArgumentsMock.Object.EraseSensitiveInfo, passedEraseSensitiveInfo.Value); foreach (var parameter in parameters.Where(p => p.Value.Sensitive)) { Assert.True(passedParameters.Any(pp => pp.Name == parameter.Key && pp.Value == parameter.Value.Value && pp.DataType == parameter.Value.ParameterDataType)); } }
public void Pass_UpdateParameters() { // Setup var manifestMock = new Mock <IProjectManifest>(); var manifestParameters = new[] { CreateParameter($"Project::{Fakes.RandomString()}", Fakes.RandomString(), Fakes.RandomBool(), ParameterSource.Original), CreateParameter($"Project::{Fakes.RandomString()}", Fakes.RandomString(), Fakes.RandomBool(), ParameterSource.Original), }.ToDictionary(p => p.Name, p => p); manifestMock.Setup(m => m.Parameters).Returns(manifestParameters); var manifest = manifestMock.Object; var projectParamsMock = new Mock <IProjectFile>(); var projectParameters = new[] { CreateParameter($"Project::{Fakes.RandomString()}", Fakes.RandomString(), Fakes.RandomBool(), ParameterSource.Original), CreateParameter($"Project::{Fakes.RandomString()}", Fakes.RandomString(), Fakes.RandomBool(), ParameterSource.Original), }.ToDictionary(p => p.Name, p => p); projectParamsMock.Setup(m => m.Parameters).Returns(projectParameters); var projectParams = projectParamsMock.Object; // Execute var project = new Project(); typeof(Project).GetField("_projectManifest", BindingFlags.NonPublic | BindingFlags.Instance)?.SetValue(project, manifest); typeof(Project).GetField("_projectParams", BindingFlags.NonPublic | BindingFlags.Instance)?.SetValue(project, projectParams); typeof(Project).GetField("_isLoaded", BindingFlags.NonPublic | BindingFlags.Instance)?.SetValue(project, true); // Assert Assert.Equal(4, project.Parameters.Count); foreach (var parameter in projectParameters) { var newValue = Fakes.RandomString(); project.UpdateParameter(parameter.Value.Name, newValue, ParameterSource.Manual); Assert.True(project.Parameters.ContainsKey(parameter.Key)); Assert.Equal(newValue, project.Parameters[parameter.Key].Value); Assert.Equal(ParameterSource.Manual, project.Parameters[parameter.Key].Source); } foreach (var parameter in manifestParameters) { var newValue = Fakes.RandomString(); project.UpdateParameter(parameter.Value.Name, newValue, ParameterSource.Manual); Assert.True(project.Parameters.ContainsKey(parameter.Key)); Assert.Equal(newValue, project.Parameters[parameter.Key].Value); Assert.Equal(ParameterSource.Manual, project.Parameters[parameter.Key].Source); } }