Пример #1
0
        protected override void Process([NotNull] ProcessorArgs args)
        {
            Install9Args   arguments      = (Install9Args)args;
            Task           task           = arguments.Tasker.Tasks.FirstOrDefault(t => t.Name == this.taskName);
            PowerShellTask powershellTask = task as PowerShellTask;

            if (powershellTask != null)
            {
                string result = powershellTask.GetScript();
                if (task.State == TaskState.Failed)
                {
                    throw new AggregateException(string.Format("Failed to execute {0} task. \n{1}", task.Name, result));
                }

                string path = Path.Combine(arguments.Tasker.GlobalParams.First(p => p.Name == "FilesRoot").Value,
                                           string.Format("generated_scripts/{0}", task.UnInstall ? "Uninstall" : "Install"));
                Directory.CreateDirectory(path);

                using (StreamWriter writer = new StreamWriter(Path.Combine(path, string.Format("{0}.ps1", task.Name))))
                {
                    writer.Write(powershellTask.GetScript());
                }
            }
            else
            {
                this.Skip();
            }
        }
        public void ShouldLoadAllValuesFromConfiguration()
        {
            string xml = @"
<powershell>
    <script>testscript.ps1</script>    
	<executable>c:\powershell\powershell.exe</executable>
	<scriptsDirectory>D:\CruiseControl</scriptsDirectory>
	<buildArgs>-noprofile</buildArgs>
	<buildTimeoutSeconds>4</buildTimeoutSeconds>
	<successExitCodes>1</successExitCodes>
	<environment>
        <variable name=""Env1"" value=""value1""/>
        <variable name=""Env2"" value=""value2""/>
   </environment>
</powershell>";

            PowerShellTask task = (PowerShellTask)NetReflector.Read(xml);

            Assert.AreEqual(@"c:\powershell\powershell.exe", task.Executable);
            Assert.AreEqual(@"testscript.ps1", task.Script);
            Assert.AreEqual(@"D:\CruiseControl", task.ConfiguredScriptsDirectory);
            Assert.AreEqual(@"-noprofile", task.BuildArgs);
            Assert.AreEqual(4, task.BuildTimeoutSeconds);
            Assert.AreEqual("1", task.SuccessExitCodes);
            Assert.AreEqual("value1", task.EnvironmentVariables[0].value);
            Assert.AreEqual("Env1", task.EnvironmentVariables[0].name);
            Assert.AreEqual("value2", task.EnvironmentVariables[1].value);
            Assert.AreEqual("Env2", task.EnvironmentVariables[1].name);
        }
        public void SuccessExitCodesHandlesEmpty()
        {
            var task = new PowerShellTask();

            task.SuccessExitCodes = string.Empty;
            Assert.AreEqual(string.Empty, task.SuccessExitCodes);
        }
        public void SuccessExitCodesIsSuccessfullySplitAndRebuilt()
        {
            var task = new PowerShellTask();

            task.SuccessExitCodes = "1,2,3";
            Assert.AreEqual("1,2,3", task.SuccessExitCodes);
        }
Пример #5
0
        /// <summary>
        /// Creates a PowerShell object.
        /// </summary>
        protected override void ProcessRecord()
        {
            TaskBase t;

            switch (Type)
            {
            case TaskType.BatchFile:
                if (ForceBatchFileTaskType)
                {
#pragma warning disable CS0618 // Type or member is obsolete
                    t = new BatchFileTask(Path);
#pragma warning restore CS0618 // Type or member is obsolete
                }
                else
                {
                    t = new CommandLineTask(Path);
                }
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.Executable:
                t           = new ExecutableTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.External:
                t           = new ExternalTask(Name);
                t.Arguments = Arguments;
                break;

            case TaskType.PowerShell:
                t           = new PowerShellTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.TAEFDll:
                t           = new TAEFTest(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.UWP:
                t           = new UWPTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            default:
                throw new FactoryOrchestratorException(Resources.InvalidTaskRunTypeException);
            }

            this.WriteObject(t);
        }
        public void ToStringReturnsTheBaseDirectoryAndExe()
        {
            var task = new PowerShellTask
            {
                ConfiguredScriptsDirectory = "testDir"
            };
            var actual   = task.ToString();
            var expected = " BaseDirectory: testDir, PowerShell: powershell.exe";

            Assert.AreEqual(expected, actual);
        }
        public void DefaultPowerShellShouldBe2IfInstalled()
        {
            var mockRegistry2 = new Mock <IRegistry>();

            PowerShellTask task = new PowerShellTask((IRegistry)mockRegistry2.Object, (ProcessExecutor)mockProcessExecutor.Object);

            mockRegistry2.Setup(registry => registry.GetLocalMachineSubKeyValue(PowerShellTask.regkeypowershell2, PowerShellTask.regkeyholder)).Returns(POWERSHELL2_PATH).Verifiable();
            Assert.AreEqual(POWERSHELL2_PATH + "\\powershell.exe", task.Executable);
            mockRegistry2.Verify();
            mockProcessExecutor.Verify();
        }
        public void ShouldThrowAnExceptionIfPowerShellNotInstalled()
        {
            var mockRegistry2 = new Mock <IRegistry>();

            PowerShellTask task = new PowerShellTask((IRegistry)mockRegistry2.Object, (ProcessExecutor)mockProcessExecutor.Object);

            mockRegistry2.Setup(registry => registry.GetLocalMachineSubKeyValue(PowerShellTask.regkeypowershell2, PowerShellTask.regkeyholder)).Returns(() => null).Verifiable();
            mockRegistry2.Setup(registry => registry.GetLocalMachineSubKeyValue(PowerShellTask.regkeypowershell1, PowerShellTask.regkeyholder)).Returns(() => null).Verifiable();
            Assert.AreEqual(POWERSHELL1_PATH + "\\powershell.exe", task.Executable);
            mockRegistry2.Verify();
            mockProcessExecutor.Verify();
        }
Пример #9
0
        public void DefaultPowerShellShouldBe1IfNothingNewerInstalled()
        {
            var mockRegistry2 = new Mock <IRegistry>();

            PowerShellTask task = new PowerShellTask((IRegistry)mockRegistry2.Object, (ProcessExecutor)mockProcessExecutor.Object);

            mockRegistry2.Setup(registry => registry.GetLocalMachineSubKeyValue(PowerShellTask.regkeypowershell2, PowerShellTask.regkeyholder)).Returns(() => null).Verifiable();
            mockRegistry2.Setup(registry => registry.GetLocalMachineSubKeyValue(PowerShellTask.regkeypowershell1, PowerShellTask.regkeyholder)).Returns(POWERSHELL1_PATH).Verifiable();
            Assert.AreEqual(System.IO.Path.Combine(POWERSHELL1_PATH, "powershell.exe"), task.Executable);
            mockRegistry2.Verify();
            mockProcessExecutor.Verify();
        }
        public void DefaultPowerShellShouldBe2IfInstalled()
        {
            IMock mockRegistry2 = new DynamicMock(typeof(IRegistry));

            PowerShellTask task = new PowerShellTask((IRegistry)mockRegistry2.MockInstance, (ProcessExecutor)mockProcessExecutor.MockInstance);

            mockRegistry2.ExpectAndReturn("GetLocalMachineSubKeyValue", POWERSHELL2_PATH,
                                          PowerShellTask.regkeypowershell2, PowerShellTask.regkeyholder);
            Assert.AreEqual(POWERSHELL2_PATH + "\\powershell.exe", task.Executable);
            mockRegistry2.Verify();
            mockProcessExecutor.Verify();
        }
Пример #11
0
        /// <summary>
        /// Creates a PowerShell object.
        /// </summary>
        protected override void ProcessRecord()
        {
            TaskBase t;

            switch (Type)
            {
            case TaskType.BatchFile:
                t           = new BatchFileTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.Executable:
                t           = new ExecutableTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.External:
                t           = new ExternalTask(Name);
                t.Arguments = Arguments;
                break;

            case TaskType.PowerShell:
                t           = new PowerShellTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.TAEFDll:
                t           = new TAEFTest(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            case TaskType.UWP:
                t           = new UWPTask(Path);
                t.Arguments = Arguments;
                t.Name      = Name;
                break;

            default:
                throw new FactoryOrchestratorException(Resources.InvalidTaskRunTypeException);
            }

            this.WriteObject(t);
        }
Пример #12
0
        public void ShouldLoadMinimalValuesFromConfiguration()
        {
            string         xml  = @"<powershell script=""myScript.ps1"" />";
            PowerShellTask task = (PowerShellTask)NetReflector.Read(xml);

            // Need to override the default registry search, otherwise this fails on a machine that does not have PowerShell installed
            var registryMock2 = new Mock <IRegistry>();

            task.Registry = (IRegistry)registryMock2.Object;
            registryMock2.Setup(registry => registry.GetLocalMachineSubKeyValue(
                                    @"SOFTWARE\Microsoft\PowerShell\2\PowerShellEngine",
                                    @"ApplicationBase")).Returns(@"C:\Windows\System32\WindowsPowerShell\v1.0").Verifiable();

            Assert.AreEqual(@"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", task.Executable);
            Assert.AreEqual(@"myScript.ps1", task.Script);
            Assert.AreEqual(PowerShellTask.DefaultScriptsDirectory, task.ConfiguredScriptsDirectory);
            Assert.AreEqual(PowerShellTask.DefaultBuildTimeOut, task.BuildTimeoutSeconds);
            Assert.AreEqual(string.Empty, task.SuccessExitCodes);
            Assert.AreEqual(0, task.EnvironmentVariables.Length, "Checking environment variable array size.");
        }
Пример #13
0
 public void Setup()
 {
     mockRegistry = new Mock <IRegistry>();
     CreateProcessExecutorMock(POWERSHELL1_PATH);
     mytask = new PowerShellTask((IRegistry)mockRegistry.Object, (ProcessExecutor)mockProcessExecutor.Object);
 }
Пример #14
0
        private TaskBase CreateTestFromFlyout(TaskType testType)
        {
            activeTaskIsNowBg = false;
            if (activeTask == null)
            {
                activeTaskIndex = -1;
                switch (testType)
                {
                case TaskType.ConsoleExe:
                    activeTask = new ExecutableTask(TaskPathBox.Text);
                    break;

                case TaskType.UWP:
                    activeTask = new UWPTask(AppComboBox.SelectedItem.ToString());
                    break;

                case TaskType.External:
                    activeTask = new ExternalTask(TaskPathBox.Text);
                    break;

                case TaskType.TAEFDll:
                    activeTask = new TAEFTest(TaskPathBox.Text);
                    break;

                case TaskType.BatchFile:
                    if (supportsCommandLineTask)
                    {
                        activeTask = new CommandLineTask(TaskPathBox.Text);
                    }
                    else
                    {
#pragma warning disable CS0618 // Type or member is obsolete
                        activeTask = new BatchFileTask(TaskPathBox.Text);
#pragma warning restore CS0618 // Type or member is obsolete
                    }
                    break;

                case TaskType.PowerShell:
                    activeTask = new PowerShellTask(TaskPathBox.Text);
                    break;
                }
            }

            if (!String.IsNullOrWhiteSpace(TestNameBox.Text))
            {
                activeTask.Name = TestNameBox.Text;
            }

            if (!string.IsNullOrWhiteSpace(TimeoutBox.Text))
            {
                try
                {
                    activeTask.TimeoutSeconds = Int32.Parse(TimeoutBox.Text, CultureInfo.CurrentCulture);
                }
                catch (Exception)
                {
                    activeTask.TimeoutSeconds = -1;
                }
            }
            else
            {
                activeTask.TimeoutSeconds = -1;
            }

            if (!string.IsNullOrWhiteSpace(RetryBox.Text))
            {
                try
                {
                    activeTask.MaxNumberOfRetries = UInt32.Parse(RetryBox.Text, CultureInfo.CurrentCulture);
                }
                catch (Exception)
                {
                    activeTask.MaxNumberOfRetries = 0;
                }
            }
            else
            {
                activeTask.MaxNumberOfRetries = 0;
            }

            switch (testType)
            {
            case TaskType.ConsoleExe:
            case TaskType.BatchFile:
            case TaskType.PowerShell:
            case TaskType.TAEFDll:
            case TaskType.External:
                var task = activeTask as TaskBase;
                task.Path      = TaskPathBox.Text;
                task.Arguments = ArgumentsBox.Text;
                break;

            case TaskType.UWP:
                var uwpTask = activeTask as UWPTask;
                uwpTask.Path                 = AppComboBox.SelectedItem.ToString();
                uwpTask.Arguments            = ArgumentsBox.Text;
                uwpTask.AutoPassedIfLaunched = (bool)AutoPassCheck.IsChecked;
                uwpTask.TerminateOnCompleted = (bool)TerminateOnCompleteCheck.IsChecked;
                break;
            }

            switch (testType)
            {
            case TaskType.ConsoleExe:
            case TaskType.BatchFile:
            case TaskType.PowerShell:
                var task = activeTask as ExecutableTask;
                task.BackgroundTask = (bool)BgTaskBox.IsChecked;
                if (task.BackgroundTask)
                {
                    activeTaskIsNowBg = true;
                }
                break;

            default:
                break;
            }

            activeTask.AbortTaskListOnFailed = (bool)AbortOnFailBox.IsChecked;
            activeTask.RunInContainer        = (bool)ContainerBox.IsChecked;

            return(activeTask);
        }
 public void Setup()
 {
     mockRegistry = new DynamicMock(typeof(IRegistry));
     CreateProcessExecutorMock(POWERSHELL1_PATH);
     mytask = new PowerShellTask((IRegistry)mockRegistry.MockInstance, (ProcessExecutor)mockProcessExecutor.MockInstance);
 }