public void Fail_Save_NotInitialized_ToStream() { // Setup var ispacName = $"proj_{Fakes.RandomString()}.ispac"; var proj = new Project(); Exception exception; using (var stream = File.OpenWrite(Path.Combine(_workingFolder, ispacName))) { // Execute exception = Record.Exception(() => proj.Save(stream, ProtectionLevel.DontSaveSensitive, null)); } // Assert Assert.NotNull(exception); Assert.IsType <ProjectNotInitializedException>(exception); }
public void Pass_Save() { // Setup var projectName = $"proj_{Fakes.RandomString()}.dtproj"; var projectPath = Path.Combine(_workingFolder, projectName); var configurationName = Fakes.RandomString(); CreateDtprojFiles(projectName, configurationName); var proj = new Project(); proj.LoadFromDtproj(projectPath, configurationName, Fakes.RandomString()); // Execute var exception = Record.Exception(() => proj.Save(Path.ChangeExtension(projectPath, ".ispac"))); // Assert Assert.Null(exception); }
public void Fail_UnparsableProtectionLevel() { // Setup var xml = XmlGenerators.PackageFile(Fakes.RandomString(), 1000, Fakes.RandomString()); xml = xml.Replace("DTS:ProtectionLevel=\"1000\"", "DTS:ProtectionLevel=\"abc\""); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); // Execute var package = new Package(); var exception = Record.Exception(() => package.Initialize(path, null)); // Assert Assert.NotNull(exception); Assert.IsType <InvalidXmlException>(exception); }
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 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); }
public void Pass_Process_AllProperties() { // Setup var projectPath = Fakes.RandomString(); var workingFolder = Fakes.RandomString(); var protectionLevelString = new[] { nameof(ProtectionLevel.EncryptAllWithPassword), nameof(ProtectionLevel.EncryptSensitiveWithPassword) }[Fakes.RandomInt(0, 200) / 200]; var configuration = Fakes.RandomString(); var password = Fakes.RandomString(); var newPassword = Fakes.RandomString(); var outputFolder = Fakes.RandomString(); var releaseNotes = Fakes.RandomString(); var parametersCount = Fakes.RandomInt(0, 10); var parameters = new Dictionary <string, string>(); for (var i = 0; i < parametersCount; i++) { parameters.Add(Fakes.RandomString(), Fakes.RandomString()); } // Execute var buildArguments = new BuildArguments(workingFolder, projectPath, outputFolder, protectionLevelString, password, newPassword, configuration, releaseNotes, parameters); // Assert Assert.Equal(projectPath, buildArguments.ProjectPath); Assert.Equal(configuration, buildArguments.Configuration); Assert.Equal(protectionLevelString, buildArguments.ProtectionLevel); Assert.Equal(newPassword, buildArguments.NewPassword); Assert.Equal(password, buildArguments.Password); Assert.Equal(outputFolder, buildArguments.OutputFolder); Assert.Equal(releaseNotes, buildArguments.ReleaseNotes); Assert.Equal(workingFolder, buildArguments.WorkingFolder); Assert.NotNull(buildArguments.Parameters); Assert.Equal(parametersCount, buildArguments.Parameters.Count); foreach (var parameter in parameters) { Assert.True(buildArguments.Parameters.ContainsKey(parameter.Key)); Assert.Equal(parameter.Value, buildArguments.Parameters[parameter.Key]); } }
public void Fail_New_ProjectParameter_NoProperties() { // Setup var name = Fakes.RandomString(); var value = Fakes.RandomString(); var xmldoc = new XmlDocument(); var parameterXml = $@"<SSIS:Parameter SSIS:Name=""{name}"" xmlns:SSIS=""www.microsoft.com/SqlServer/SSIS""> </SSIS:Parameter>"; 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); }
public void Fail_Save_NotInitialized() { // Setup var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var projectFile = new ProjectFileImpl(); // Execute var exception = Record.Exception(() => projectFile.Save(Fakes.RandomString())); // Assert Assert.NotNull(exception); Assert.IsType <ProjectNotInitializedException>(exception); }
public void Pass_Save_ToStream_NoSensitive() { // Setup // Use ProjectParams xml in this test var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); // Execute string encryptedXml; using (var stream = new MemoryStream()) { // Save with DontSaveSensitive projectFile.Save(stream); stream.Position = 0; var sr = new StreamReader(stream); encryptedXml = sr.ReadToEnd(); } // Assert -- sensitive node should be gone var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(encryptedXml); var encryptedNode = xmlDoc.SelectSingleNode("//SSIS:Property[@SSIS:Name=\"Value\"]", xmlDoc.GetNameSpaceManager()); Assert.Null(encryptedNode); }
public void Fail_Parse_InvalidToken() { // Setup var token = $"-{Fakes.RandomString()}"; var args = new[] { // so that it does not get confused with ProjectPath $"-{nameof(BuildArguments.Configuration)}", Fakes.RandomString(), token }; var testException = new InvalidTokenException(token); // Execute var exception = Record.Exception(() => Program.MainInternal(_builderMock.Object, args)); // Assert Assert.NotNull(exception); Assert.IsType<InvalidTokenException>(exception); Assert.Equal(exception.Message, testException.Message, StringComparer.InvariantCultureIgnoreCase); }
public void Fail_ProcessRecord() { // Setup var projectPath = Fakes.RandomString(); var workingFolder = Fakes.RandomString(); var protectionLevelString = new[] { nameof(ProtectionLevel.EncryptAllWithPassword), nameof(ProtectionLevel.EncryptSensitiveWithPassword) }[Fakes.RandomInt(0, 199) / 200]; var configuration = Fakes.RandomString(); var password = Fakes.RandomString(); var newPassword = Fakes.RandomString(); var outputFolder = Fakes.RandomString(); var releaseNotes = Fakes.RandomString(); var parametersCount = Fakes.RandomInt(0, 10); var parameters = new Dictionary <string, string>(); for (var i = 0; i < parametersCount; i++) { parameters.Add(Fakes.RandomString(), Fakes.RandomString()); } _builder.Setup(b => b.Build(It.IsAny <IBuildArguments>())).Throws(new Exception("TEST")); var powershellCmd = new SsisBuildPowershell { ProtectionLevel = protectionLevelString, Configuration = configuration, NewPassword = newPassword, OutputFolder = outputFolder, Parameters = new Hashtable(parameters), Password = password, ProjectPath = projectPath, ReleaseNotes = releaseNotes }; // Execute var exception = Record.Exception(() => powershellCmd.ProcessRecordInternal(_builder.Object, Fakes.RandomString())); Assert.NotNull(exception); Assert.IsType <Exception>(exception); Assert.Equal("TEST", exception.Message); }
public void Pass_New() { // Setup var parameters = new Dictionary <string, string> { { Fakes.RandomString(), Fakes.RandomString() }, { Fakes.RandomString(), Fakes.RandomString() } }; var name = Fakes.RandomString(); var xml = XmlGenerators.UserConfigurationFile(name, parameters); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); // Execute var config = new UserConfiguration(name); using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream)) { writer.Write(xml); writer.Flush(); stream.Position = 0; config.Initialize(stream, Fakes.RandomString()); } } // Assert Assert.NotNull(config.Parameters); foreach (var parameter in parameters) { Assert.True(config.Parameters.ContainsKey(parameter.Key)); Assert.Equal(null, config.Parameters[parameter.Key].Value); } }
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 Pass_Execute_CustomOutputFolder() { // Setup _projectMock.Setup(p => p.ProtectionLevel).Returns(ProtectionLevel.DontSaveSensitive); _projectMock.Setup(p => p.Parameters).Returns(new Dictionary <string, IParameter>()); _buildArgumentsMock.Setup(ba => ba.ProjectPath).Returns(Path.GetTempFileName()); _buildArgumentsMock.Setup(ba => ba.Parameters).Returns(new ReadOnlyDictionary <string, string>(new Dictionary <string, string>())); _buildArgumentsMock.Setup(ba => ba.Configuration).Returns(Fakes.RandomString()); _buildArgumentsMock.Setup(ba => ba.OutputFolder).Returns(Fakes.RandomString()); var project = _projectMock.Object; var buildArguments = _buildArgumentsMock.Object; var logger = _loggerMock.Object; var builder = new Builder.Builder(logger, project); // Execute var exception = Record.Exception(() => builder.Build(buildArguments)); // Assert Assert.Null(exception); }
public void Pass_New_ProjectParameter(bool sensitive, bool withValue, DataType type) { // Setup var name = Fakes.RandomString(); var value = Fakes.RandomString(); var scope = Fakes.RandomString(); var xmldoc = new XmlDocument(); var parameterXml = XmlGenerators.ProjectFileParameter(name, value, sensitive, type, withValue); xmldoc.LoadXml(parameterXml); // Execute var parameter = new ProjectParameter(scope, xmldoc.DocumentElement); // Assert Assert.NotNull(parameter); Assert.Equal(withValue ? value : null, parameter.Value); Assert.Equal(type.ToString("G"), parameter.ParameterDataType.Name, StringComparer.InvariantCultureIgnoreCase); Assert.Equal(sensitive, parameter.Sensitive); Assert.Equal($"{scope}::{name}", parameter.Name); Assert.Equal(ParameterSource.Original, parameter.Source); }
public void Pass_Error() { // Setup var stdOut = Console.Out; var consoleOutput = new StringWriter(); var message = Fakes.RandomString(); var logger = new ConsoleLogger(); // Execute try { Console.SetOut(consoleOutput); logger.LogError(message); } finally { Console.SetOut(stdOut); } // Assert Assert.True(consoleOutput.ToString().Contains(message)); }
public void Pass_Encrypt() { // Setup var password = Fakes.RandomString(); var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); // Execute string encryptedXml; using (var stream = new MemoryStream()) { projectFile.Save(stream, ProtectionLevel.EncryptSensitiveWithPassword, password); stream.Position = 0; var sr = new StreamReader(stream); encryptedXml = sr.ReadToEnd(); } var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(encryptedXml); var encryptedNode = xmlDoc.SelectSingleNode("//SSIS:Property[@SSIS:Name=\"Value\"]", xmlDoc.GetNameSpaceManager()); // Assert - should have encrypted node and Salt attribute Assert.True(encryptedNode?.Attributes?["Salt", XmlHelpers.Schemas.SSIS]?.Value != null); }
public void Pass_Decrypt_FromFile(ProtectionLevel protectionLevel) { // Setup var password = Fakes.RandomString(); var parameterData = new ParameterSetupData() { Value = Fakes.RandomString(), DataType = DataType.String, Name = Fakes.RandomString(), Sensitive = true }; var xml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>(new[] { parameterData })); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); var projectFile = new ProjectFileImpl(); projectFile.Initialize(path, null); var saveToPath = Path.Combine(_workingFolder, Guid.NewGuid().ToString("D")); projectFile.Save(saveToPath, protectionLevel, password); // Execute var newProjectFile = new ProjectFileImpl(); newProjectFile.Initialize(saveToPath, password); // Assert var decryptedNodeValue = newProjectFile.FileXmlDocumentPublic.SelectSingleNode("//SSIS:Property[@SSIS:Name=\"Value\"]", newProjectFile.FileXmlDocumentPublic.GetNameSpaceManager())?.InnerText; Assert.Equal(parameterData.Value, decryptedNodeValue); }
private static IEnumerable <object[]> ParameterData() { var rnd = new Random(DateTime.Now.Millisecond); var testsCount = rnd.Next(10, 40); for (var cnt = 0; cnt < testsCount; cnt++) { var paramsCount = rnd.Next(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 = rnd.Next(0, 1000) < 500 }); } yield return(new object[] { paramsData }); } yield return(new object[] { new List <ParameterSetupData>() }); }
public void Fail_MainInternal_MissingRequiredArgumentException() { // Setup var stdOut = Console.Out; var consoleOutput = new StringWriter(); Console.SetOut(consoleOutput); // Execute var exception = Record.Exception(() => Program.MainInternal(_deployerMock.Object, new[] { $"-{nameof(DeployArguments.Catalog)}", Fakes.RandomString(), $"-{nameof(DeployArguments.ProjectName)}", Fakes.RandomString(), $"-{nameof(DeployArguments.Folder)}", Fakes.RandomString(), })); Console.SetOut(stdOut); // Assert Assert.NotNull(exception); Assert.IsType <MissingRequiredArgumentException>(exception); Assert.True(consoleOutput.ToString().Contains(new MissingRequiredArgumentException(nameof(DeployArguments.ServerInstance)).Message)); Assert.True(consoleOutput.ToString().ToLowerInvariant().Contains("usage")); }
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 Fail_InvalidProtectionLevelString(ProtectionLevel protectionLevel, int versionMajor, int versionMinor, string versionComments, int versionBuild, string description, string[] packages, string[] connectionManagers, ParameterSetupData[] parameters) { // Setup var projectManifestXmlDoc = new XmlDocument(); var xml = XmlGenerators.ProjectManifestFile(protectionLevel, versionMajor, versionMinor, versionComments, versionBuild, description, packages, connectionManagers, parameters); projectManifestXmlDoc.LoadXml(xml); projectManifestXmlDoc.DocumentElement.Attributes["SSIS:ProtectionLevel"].Value = Fakes.RandomString(); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, projectManifestXmlDoc.OuterXml); // Execute var projectManifest = new ProjectManifest(); var exception = Record.Exception(() => projectManifest.Initialize(path, null)); // Assert Assert.NotNull(exception); Assert.IsType <InvalidXmlException>(exception); Assert.True(exception.Message.Contains("Invalid Protection Level")); }
public void Pass_SetVersion(ProtectionLevel protectionLevel, int versionMajor, int versionMinor, string versionComments, int versionBuild, string description, string[] packages, string[] connectionManagers, ParameterSetupData[] parameters) { // Setup var xml = XmlGenerators.ProjectManifestFile(protectionLevel, versionMajor, versionMinor, versionComments, versionBuild, description, packages, connectionManagers, parameters); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); // Execute var projectManifest = new ProjectManifest(); projectManifest.Initialize(path, null); var newVersionMajor = projectManifest.VersionMajor * 2; var newVersionMinor = projectManifest.VersionMinor * 2; var newVersionBuild = projectManifest.VersionBuild * 2; var newVersionComments = Fakes.RandomString(); var newDescription = Fakes.RandomString(); projectManifest.VersionBuild = newVersionBuild; projectManifest.VersionMajor = newVersionMajor; projectManifest.VersionMinor = newVersionMinor; projectManifest.VersionComments = newVersionComments; projectManifest.Description = newDescription; string savedXml; using (var stream = new MemoryStream()) { projectManifest.Save(stream, ProtectionLevel.DontSaveSensitive, Fakes.RandomString()); stream.Flush(); stream.Position = 0; var sr = new StreamReader(stream); savedXml = sr.ReadToEnd(); } var testXmlDoc = new XmlDocument(); testXmlDoc.LoadXml(savedXml); var versionMajorNodes = testXmlDoc.SelectNodes("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionMajor\"]", testXmlDoc.GetNameSpaceManager()); var versionMinorNodes = testXmlDoc.SelectNodes("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionMinor\"]", testXmlDoc.GetNameSpaceManager()); var versionBuildNodes = testXmlDoc.SelectNodes("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionBuild\"]", testXmlDoc.GetNameSpaceManager()); var versionCommentsNodes = testXmlDoc.SelectNodes("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionComments\"]", testXmlDoc.GetNameSpaceManager()); var descriptionNodes = testXmlDoc.SelectNodes("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"Description\"]", testXmlDoc.GetNameSpaceManager()); // Assert Assert.NotNull(versionMajorNodes); foreach (XmlElement versionMajorNode in versionMajorNodes) { Assert.Equal(newVersionMajor, int.Parse(versionMajorNode.InnerText)); } Assert.NotNull(versionMinorNodes); foreach (XmlElement versionMinorNode in versionMinorNodes) { Assert.Equal(newVersionMinor, int.Parse(versionMinorNode.InnerText)); } Assert.NotNull(versionBuildNodes); foreach (XmlElement versionBuildNode in versionBuildNodes) { Assert.Equal(newVersionBuild, int.Parse(versionBuildNode.InnerText)); } Assert.NotNull(versionCommentsNodes); foreach (XmlElement versionCommentsNode in versionCommentsNodes) { Assert.Equal(newVersionComments, versionCommentsNode.InnerText); } Assert.NotNull(descriptionNodes); foreach (XmlElement descriptionNode in descriptionNodes) { Assert.Equal(newDescription, descriptionNode.InnerText); } Assert.Equal(newVersionBuild, projectManifest.VersionBuild); Assert.Equal(newVersionMajor, projectManifest.VersionMajor); Assert.Equal(newVersionMinor, projectManifest.VersionMinor); Assert.Equal(newVersionComments, projectManifest.VersionComments); Assert.Equal(newDescription, projectManifest.Description); }
public void Fail_NoDescription() { // Setup var xml = XmlGenerators.ProjectManifestFile(ProtectionLevel.DontSaveSensitive, 1, 1, Fakes.RandomString(), 1, Fakes.RandomString(), new string[] { }, new string[] { }, new ParameterSetupData[] { }); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); var descriptionNode = xmlDoc.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"Description\"]", xmlDoc.GetNameSpaceManager()); descriptionNode?.ParentNode?.RemoveChild(descriptionNode); File.WriteAllText(path, xmlDoc.OuterXml); // Execute var projectManifest = new ProjectManifest(); var exception = Record.Exception(() => projectManifest.Initialize(path, null)); // Assert Assert.NotNull(exception); Assert.IsType <InvalidXmlException>(exception); Assert.True(exception.Message.Contains("Description")); }
public void Fail_UserKeyProtectionLevel(ProtectionLevel protectionLevel) { // Setup var xml = XmlGenerators.ProjectManifestFile(protectionLevel, 1, 1, Fakes.RandomString(), 1, Fakes.RandomString(), new string[] {}, new string[] {}, new ParameterSetupData[] {}); var path = Path.Combine(_workingFolder, Guid.NewGuid().ToString("N")); File.WriteAllText(path, xml); // Execute var projectManifest = new ProjectManifest(); var exception = Record.Exception(() => projectManifest.Initialize(path, null)); // Assert Assert.NotNull(exception); Assert.IsType <InvalidProtectionLevelException>(exception); Assert.Equal(((InvalidProtectionLevelException)exception).ProtectionLevel, protectionLevel); }
public void Fail_Execute_ProjectFileNotFoundException() { // Setup var buildArguments = new BuildArguments(_workingFolder, null, null, null, null, null, Fakes.RandomString(), null, null); var logger = _loggerMock.Object; var project = _projectMock.Object; // Execute var builder = new Builder.Builder(logger, project); var exception = Record.Exception(() => builder.Build(buildArguments)); Assert.NotNull(exception); Assert.IsType <ProjectFileNotFoundException>(exception); }
public void Pass_Validate_ProtectionLevelPasswordCombination(string protectionLevelString, bool password, bool newPassword) { // Setup var builder = new Builder.Builder(_loggerMock.Object, _projectMock.Object); _projectMock.Setup(p => p.Parameters).Returns(new Dictionary <string, IParameter>()); // Execute var exception = Record.Exception( () => builder.Build(new BuildArguments(Fakes.RandomString(), Fakes.RandomString(), null, protectionLevelString, password ? Fakes.RandomString() : null, newPassword ? Fakes.RandomString() : null, Fakes.RandomString(), null, null))); // Assert Assert.Null(exception); }
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 Fail_Validate_ProtectionLevelPasswordCombination(string protectionLevelString) { // Setup var builder = new Builder.Builder(_loggerMock.Object, _projectMock.Object); _projectMock.Setup(p => p.Parameters).Returns(new Dictionary <string, IParameter>()); var testException = new PasswordRequiredException(protectionLevelString); // Execute var exception = Record.Exception(() => builder.Build(new BuildArguments(Fakes.RandomString(), Fakes.RandomString(), null, protectionLevelString, null, null, Fakes.RandomString(), null, null))); // Assert Assert.NotNull(exception); Assert.IsType <PasswordRequiredException>(exception); Assert.Equal(exception.Message, testException.Message, StringComparer.InvariantCultureIgnoreCase); }