Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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]);
            }
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #11
0
        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);
            }
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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));
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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));
        }
Beispiel #22
0
        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()
                });
            }
        }
Beispiel #23
0
        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"));
        }
Beispiel #24
0
        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);
        }
Beispiel #25
0
        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"));
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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);
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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));
            }
        }
Beispiel #30
0
        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);
        }