예제 #1
0
        public void Pass_UpdateVersionInfo()
        {
            // Setup
            var manifestMock = new Mock <IProjectManifest>();

            var protectionLevel = Fakes.RandomEnum <ProtectionLevel>();

            manifestMock.SetupGet(m => m.ProtectionLevel).Returns(protectionLevel);

            manifestMock.SetupAllProperties();
            var manifest = manifestMock.Object;

            var project = new Project();

            typeof(Project).GetField("_projectManifest", BindingFlags.NonPublic | BindingFlags.Instance)?.SetValue(project, manifest);
            typeof(Project).GetField("_isLoaded", BindingFlags.NonPublic | BindingFlags.Instance)?.SetValue(project, true);

            // Execute
            project.VersionMajor    = Fakes.RandomInt(0, 100);
            project.VersionMinor    = Fakes.RandomInt(0, 100);
            project.VersionBuild    = Fakes.RandomInt(0, 100);
            project.VersionComments = Fakes.RandomString();
            project.Description     = Fakes.RandomString();

            // Assert
            Assert.Equal(project.VersionMajor, manifest.VersionMajor);
            Assert.Equal(project.VersionMinor, manifest.VersionMinor);
            Assert.Equal(project.VersionBuild, manifest.VersionBuild);
            Assert.Equal(project.VersionComments, manifest.VersionComments);
            Assert.Equal(project.Description, manifest.Description);
            Assert.Equal(project.ProtectionLevel, manifest.ProtectionLevel);
        }
예제 #2
0
        public void Pass_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(1, 10);
            var parameters      = new Dictionary <string, string>();

            for (var i = 0; i < parametersCount; i++)
            {
                parameters.Add(Fakes.RandomString(), Fakes.RandomString());
            }

            BuildArguments buildArguments = null;

            _builder.Setup(b => b.Build(It.IsAny <IBuildArguments>())).Callback((IBuildArguments ba) => { buildArguments = ba as BuildArguments; });

            // Execute
            var powershellCmd = new SsisBuildPowershell
            {
                ProtectionLevel = protectionLevelString,
                Configuration   = configuration,
                NewPassword     = newPassword,
                OutputFolder    = outputFolder,
                Parameters      = new Hashtable(parameters),
                Password        = password,
                ProjectPath     = projectPath,
                ReleaseNotes    = releaseNotes
            };

            powershellCmd.ProcessRecordInternal(_builder.Object, workingFolder);

            // Assert
            Assert.NotNull(buildArguments);
            Assert.Equal(projectPath, buildArguments.ProjectPath);
            Assert.Equal(workingFolder, buildArguments.WorkingFolder);
            Assert.Equal(protectionLevelString, buildArguments.ProtectionLevel);
            Assert.Equal(configuration, buildArguments.Configuration);
            Assert.Equal(password, buildArguments.Password);
            Assert.Equal(newPassword, buildArguments.NewPassword);
            Assert.Equal(outputFolder, buildArguments.OutputFolder);
            Assert.Equal(releaseNotes, buildArguments.ReleaseNotes);

            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]);
            }
        }
예제 #3
0
        public void Pass_Execute_BuildArgumentsParametersUpdate()
        {
            // Setup
            var outputParameters = new List <TestBuildParameterUpdateResult>();
            var inputParameers   = new List <TestBuildParameterUpdateInput>();

            var paramsCount = Fakes.RandomInt(20, 100);

            for (var i = 0; i < paramsCount; i++)
            {
                inputParameers.Add(new TestBuildParameterUpdateInput()
                {
                    Value = Fakes.RandomString(),
                    // to ensure it is unique
                    Name = $"{Guid.NewGuid():N}-{Fakes.RandomString()}"
                });
            }

            _projectMock.Setup(p => p.ProtectionLevel).Returns(ProtectionLevel.DontSaveSensitive);
            _projectMock.Setup(p => p.Parameters).Returns(new Dictionary <string, IParameter>());
            _projectMock.Setup(p => p.UpdateParameter(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <ParameterSource>())).Callback(
                (string parameterName, string value, ParameterSource parameterSource) =>
            {
                outputParameters.Add(new TestBuildParameterUpdateResult
                {
                    Name   = parameterName,
                    Value  = value,
                    Source = parameterSource
                });
            });

            _buildArgumentsMock.Setup(ba => ba.ProjectPath).Returns(Path.GetTempFileName());
            _buildArgumentsMock.Setup(ba => ba.Parameters).Returns(new ReadOnlyDictionary <string, string>(inputParameers.ToDictionary(i => i.Name, i => i.Value)));
            _buildArgumentsMock.Setup(ba => ba.Configuration).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);
            Assert.True(outputParameters.Count == paramsCount);
            for (var cnt = 0; cnt < paramsCount; cnt++)
            {
                Assert.True(
                    outputParameters[cnt].Value == inputParameers[cnt].Value &&
                    outputParameters[cnt].Name == inputParameers[cnt].Name &&
                    outputParameters[cnt].Source == ParameterSource.Manual
                    );
            }
        }
예제 #4
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]);
            }
        }
예제 #5
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);
        }
예제 #6
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()
                });
            }
        }
예제 #7
0
        public void Pass_Process_AllProperties_ExplicitProjectPathNoRoot()
        {
            // Setup
            var filePath = $"{Fakes.RandomString()}.dtproj";
            var protectionLevelString = new[] { "EncryptAllWithPassword", "EncryptSensitiveWithPassword" }[Fakes.RandomInt(0, 199) / 200];
            var args = new[]
            {
                Path.GetFileName(filePath),
                $"-{nameof(BuildArguments.Configuration)}",
                Fakes.RandomString(),
                $"-{nameof(BuildArguments.ProtectionLevel)}",
                protectionLevelString,
                $"-{nameof(BuildArguments.NewPassword)}",
                Fakes.RandomString(),
                $"-{nameof(BuildArguments.Password)}",
                Fakes.RandomString(),
                $"-{nameof(BuildArguments.OutputFolder)}",
                $".\\{Fakes.RandomString()}",
                $"-{nameof(BuildArguments.ReleaseNotes)}",
                $".\\{Fakes.RandomString()}",
                $"-Parameter:{Fakes.RandomString()}::{Fakes.RandomString()}",
                Fakes.RandomString(),
                $"-Parameter:{Fakes.RandomString()}::{Fakes.RandomString()}",
                Fakes.RandomString(),
            };

            IBuildArguments buildArguments = null;

            _builderMock.Setup(b => b.Build(It.IsAny<IBuildArguments>())).Callback((IBuildArguments ba) => buildArguments = ba);

            // Execute
            Program.MainInternal(_builderMock.Object, args);

            // Assert
            Assert.NotNull(buildArguments);
            Assert.Equal(filePath, buildArguments.ProjectPath);
            Assert.Equal(args[2], buildArguments.Configuration);
            Assert.Equal(args[4], buildArguments.ProtectionLevel);
            Assert.Equal(args[6], buildArguments.NewPassword);
            Assert.Equal(args[8], buildArguments.Password);
            Assert.Equal(args[10], buildArguments.OutputFolder);
            Assert.Equal(args[12], buildArguments.ReleaseNotes);

            Assert.NotNull(buildArguments.Parameters);
            Assert.True(buildArguments.Parameters.Count == 2);
            Assert.Equal(args[14], buildArguments.Parameters[args[13].Split(new[] { ':' }, 2)[1]]);
            Assert.Equal(args[16], buildArguments.Parameters[args[15].Split(new[] { ':' }, 2)[1]]);
        }