Example #1
0
        public void Fail_InvalidVersionBuild()
        {
            // 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 versionBuildNode = xmlDoc.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionBuild\"]", xmlDoc.GetNameSpaceManager());

            if (versionBuildNode != null)
            {
                versionBuildNode.InnerText = Fakes.RandomString();
            }
            ;

            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("Build"));
        }
Example #2
0
        public void Pass_SetProtectionLevel(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);
            var projectManifest = new ProjectManifest();

            projectManifest.Initialize(path, null);

            var desiredProtectionLevel = projectManifest.ProtectionLevel;
            //== ProtectionLevel.DontSaveSensitive
            //? ProtectionLevel.DontSaveSensitive
            // : ProtectionLevel.ServerStorage;

            string savedXml;

            using (var stream = new MemoryStream())
            {
                projectManifest.Save(stream, desiredProtectionLevel, Fakes.RandomString());
                stream.Flush();
                stream.Position = 0;

                var sr = new StreamReader(stream);
                savedXml = sr.ReadToEnd();
            }

            // Execute
            var testXmlDoc = new XmlDocument();

            testXmlDoc.LoadXml(savedXml);
            var projectProtectionLevel      = testXmlDoc.DocumentElement?.Attributes["SSIS:ProtectionLevel"]?.Value;
            var packageProtectionLevelNodes = testXmlDoc.SelectNodes("//SSIS:Properties/SSIS:Property[@SSIS:Name = \"ProtectionLevel\"]", testXmlDoc.GetNameSpaceManager());

            // Assert
            ProtectionLevel testProtectionLevel;

            Assert.True(Enum.TryParse(projectProtectionLevel, out testProtectionLevel));
            Assert.Equal(desiredProtectionLevel, testProtectionLevel);

            Assert.NotNull(packageProtectionLevelNodes);

            foreach (XmlElement packageProtectionElement in packageProtectionLevelNodes)
            {
                Assert.Equal(desiredProtectionLevel, (ProtectionLevel)int.Parse(packageProtectionElement.InnerText));
            }

            Assert.Equal(desiredProtectionLevel, projectManifest.ProtectionLevel);
        }
Example #3
0
        public void Pass_New(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);

            // Assert
            Assert.NotNull(projectManifest);

            foreach (var parameterSetupData in parameters)
            {
                var fullName = $"Project::{parameterSetupData.Name}";
                Assert.True(projectManifest.Parameters.ContainsKey(fullName));
                Assert.Equal(parameterSetupData.Value, projectManifest.Parameters[fullName].Value);
                Assert.Equal(parameterSetupData.Sensitive, projectManifest.Parameters[fullName].Sensitive);
                Assert.Equal(parameterSetupData.DataType.ToString("G"), projectManifest.Parameters[fullName].ParameterDataType.Name);
            }

            foreach (var package in packages)
            {
                Assert.True(projectManifest.PackageNames.Contains(package));
                foreach (var parameterSetupData in parameters)
                {
                    var fullName = $"{package}::{parameterSetupData.Name}";
                    Assert.True(projectManifest.Parameters.ContainsKey(fullName));
                    Assert.Equal(parameterSetupData.Value, projectManifest.Parameters[fullName].Value);
                    Assert.Equal(parameterSetupData.Sensitive, projectManifest.Parameters[fullName].Sensitive);
                    Assert.Equal(parameterSetupData.DataType.ToString("G"), projectManifest.Parameters[fullName].ParameterDataType.Name);
                }
            }

            foreach (var connectionManager in connectionManagers)
            {
                Assert.True(projectManifest.ConnectionManagerNames.Contains(connectionManager));
            }

            Assert.Equal(versionMajor, projectManifest.VersionMajor);
            Assert.Equal(versionMinor, projectManifest.VersionMinor);
            Assert.Equal(versionBuild, projectManifest.VersionBuild);
            Assert.Equal(versionComments, projectManifest.VersionComments);
            Assert.Equal(description, projectManifest.Description);
            Assert.Equal(protectionLevel, projectManifest.ProtectionLevel);
        }
Example #4
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);
        }
Example #5
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"));
        }
Example #6
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);
        }
Example #7
0
        internal void CreateDtprojFiles(string projectName, string configurationName)
        {
            var packages    = new[] { $"p_{Fakes.RandomString()}.dtsx", $"p_{Fakes.RandomString()}.dtsx" };
            var connections = new[] { $"c_{Fakes.RandomString()}.conmgr", $"c_{Fakes.RandomString()}.conmgr" };


            var paramName = Fakes.RandomString();

            var projectParamsXml = XmlGenerators.ProjectParamsFile(new List <ParameterSetupData>()
            {
                { new ParameterSetupData
                  {
                      Value     = Fakes.RandomString(),
                      Name      = paramName,
                      DataType  = DataType.String,
                      Sensitive = false
                  } }
            });

            var projectManifestXml = XmlGenerators.ProjectManifestFile(ProtectionLevel.DontSaveSensitive, 1, 2, Fakes.RandomString(), 3, "Descr", packages, connections,
                                                                       new[]
            {
                new ParameterSetupData()
                {
                    Value     = Fakes.RandomString(),
                    DataType  = DataType.String,
                    Name      = Fakes.RandomString(),
                    Sensitive = false
                },
            });
            var configurationXml = XmlGenerators.ConfigurationFile(configurationName, new Dictionary <string, string>()
            {
                {
                    $"Project::{paramName}", Fakes.RandomString()
                }
            });
            var configurationsXmlDoc = new XmlDocument();

            configurationsXmlDoc.LoadXml(configurationXml);

            var userConfigurationXml = XmlGenerators.UserConfigurationFile(configurationName, new Dictionary <string, string>()
            {
                {
                    $"Project::{paramName}", Fakes.RandomString()
                }
            });
            var dtprojXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
                <Project xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
                  <DeploymentModel>Project</DeploymentModel>
                  <DeploymentModelSpecificContent>
                    <Manifest>
                      {projectManifestXml}
                    </Manifest>
                  </DeploymentModelSpecificContent>
                  <Configurations>
                      {configurationsXmlDoc.SelectSingleNode("//Configuration", configurationsXmlDoc.GetNameSpaceManager())?.OuterXml}
                  </Configurations>
                </Project>";

            var dtproj = projectName;

            File.WriteAllText(Path.Combine(_workingFolder, dtproj), dtprojXml);
            File.WriteAllText(Path.Combine(_workingFolder, "Project.params"), projectParamsXml);
            File.WriteAllText($"{Path.Combine(_workingFolder, dtproj)}.user", userConfigurationXml);
            foreach (var package in packages)
            {
                var packageXml = XmlGenerators.PackageFile(Fakes.RandomString(), (int)ProtectionLevel.EncryptSensitiveWithPassword, Fakes.RandomString());
                File.WriteAllText($"{Path.Combine(_workingFolder, package)}", packageXml);
            }

            foreach (var connection in connections)
            {
                var projectConnectionsXml = XmlGenerators.ProjectConnectionsFile();
                File.WriteAllText($"{Path.Combine(_workingFolder, connection)}", projectConnectionsXml);
            }
        }