public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues) { var provider = CodeRepositoryProviders?.FirstOrDefault(p => p.Name == Provider); if (provider == null) { return(new TaskRunnerResult($"Code repository provider \"{Provider}\" could not be found.")); } await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices); var arg = GetArgString(); var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString); if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString())) { return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError)); } var outputValues = new Dictionary <string, string>(); if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString())) { outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString()); } return(new TaskRunnerResult(true, "", outputValues) { TaskRemarks = $"The remote repository \"{TaskConfig.Repository}\" has been deleted" }); }
public void GetTaskProviders_ReturnsEmpty() { var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object); var items = taskProviderManager.GetTaskProviders("NotExistProvider"); Assert.Empty(items); }
public async void RefreshTaskProvider_TaskProviderLoaded() { var workingLocation = Path.Combine(AppContext.BaseDirectory, "working", "20180817.1"); if (Directory.Exists(workingLocation)) { Directory.Delete(workingLocation, true); } Directory.CreateDirectory(workingLocation); var taskProviderName = "Polyrific.Catapult.TaskProviders.TestTaskProvider"; var taskProviderType = "TestTaskProvider"; var publishLocation = Path.Combine(workingLocation, "publish"); _engineConfig.SetupGet(e => e.TaskProvidersLocation).Returns(publishLocation); await GenerateTestTaskProvider(taskProviderName, taskProviderType, workingLocation, publishLocation); var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object); taskProviderManager.RefreshTaskProviders(); var newTaskProvider = taskProviderManager.GetTaskProvider(taskProviderType, taskProviderName); Assert.NotNull(newTaskProvider); Assert.Equal(Path.Combine(publishLocation, $"{taskProviderName}.dll"), newTaskProvider.StartFilePath); }
public void GetTaskProvider_ReturnsNull() { var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object); var item = taskProviderManager.GetTaskProvider("NotExistProvider", "not-exist-taskProvider"); Assert.Null(item); }
public void GetTaskProvider_ReturnsTaskProviderItem() { var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object); var item = taskProviderManager.GetTaskProvider("FakeProvider", "fake-taskProvider"); Assert.NotNull(item); Assert.Equal("fake-taskProvider", item.Name); }
public void AddTaskProviderLocation_Success() { var taskProviderManager = new TaskProviderManager(_engineConfig.Object, _taskProviderProcess.Object, _logger.Object); taskProviderManager.AddTaskProviderLocation("path/to/new/location"); Assert.Contains("path/to/new/location", taskProviderManager.TaskProviderLocations); }
public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues) { var provider = CodeRepositoryProviders?.FirstOrDefault(p => p.Name == Provider); if (provider == null) { return(new TaskRunnerResult($"Code repository provider \"{Provider}\" could not be found.")); } await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices); var arg = GetArgString("main"); var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString); if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString())) { return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError)); } var remoteUrl = ""; var taskRemarks = ""; if (result.ContainsKey("remoteUrl")) { remoteUrl = result["remoteUrl"].ToString(); taskRemarks = $"Changes has been pushed into {remoteUrl}"; } var outputValues = new Dictionary <string, string>(); if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString())) { outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString()); } // stop the next process if we're creating a pull request var taskRunnerResult = new TaskRunnerResult(true, remoteUrl, outputValues, TaskConfig.CreatePullRequest) { TaskRemarks = taskRemarks }; if (TaskConfig.CreatePullRequest) { var prUrl = ""; if (result.ContainsKey("pullRequestUrl")) { prUrl = result["pullRequestUrl"].ToString(); } taskRunnerResult.StopRemarks = $"A pull request has been submitted to {prUrl}. Please review it, and restart this queue when it's ready to be merged"; } return(taskRunnerResult); }
public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues) { var provider = CodeRepositoryProviders?.FirstOrDefault(p => p.Name == Provider); if (provider == null) { return(new TaskRunnerResult($"Code repository provider \"{Provider}\" could not be found.")); } await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices); var prNumber = ""; if (previousTasksOutputValues.ContainsKey("PRNumber")) { prNumber = previousTasksOutputValues["PRNumber"]; } if (string.IsNullOrEmpty(prNumber)) { return(new TaskRunnerResult("PR Number was undefined.", !TaskConfig.ContinueWhenError)); } var arg = GetArgString("main", prNumber); var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString); if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString())) { return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError)); } var remoteUrl = ""; var taskRemarks = ""; if (result.ContainsKey("remoteUrl")) { remoteUrl = result["remoteUrl"].ToString(); taskRemarks = $"Pull request #{prNumber} has been merged"; } var outputValues = new Dictionary <string, string>(); if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString())) { outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString()); } return(new TaskRunnerResult(true, remoteUrl, outputValues) { TaskRemarks = taskRemarks }); }
public async void InvokeTaskProvider_Error() { _taskProviderProcess.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Returns((ProcessStartInfo startInfo) => new Process { StartInfo = startInfo }); _taskProviderProcess.Setup(p => p.GetStandardOutput(It.IsAny <Process>())) .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes("")))); _taskProviderProcess.Setup(p => p.GetStandardError(It.IsAny <Process>())) .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes("test error")))); var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object); var result = await taskProviderManager.InvokeTaskProvider("path/to/taskProvider.dll", "taskProvider args"); Assert.Equal("test error", result["errorMessage"]); }
public async void InvokeTaskProvider_Exe_Success() { _taskProviderProcess.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Returns((ProcessStartInfo startInfo) => new Process { StartInfo = startInfo }); _taskProviderProcess.Setup(p => p.GetStandardOutput(It.IsAny <Process>())) .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes("[OUTPUT] {\"output\":\"success\"}\n[LOG][Information]Logged")))); _taskProviderProcess.Setup(p => p.GetStandardError(It.IsAny <Process>())) .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes("")))); var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object); var result = await taskProviderManager.InvokeTaskProvider(Path.Combine(AppContext.BaseDirectory, "taskProvider.exe"), "taskProvider args"); Assert.Equal("success", result["output"]); }
public override async Task <TaskRunnerResult> RunPostprocessingTask() { var provider = HostingProviders?.FirstOrDefault(p => p.Name == Provider); if (provider == null) { return(new TaskRunnerResult($"Deploy provider \"{Provider}\" could not be found.")); } await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices); var arg = GetArgString("post"); var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString); if (result.ContainsKey("errorMessage")) { return(new TaskRunnerResult(result["errorMessage"].ToString(), TaskConfig.PostProcessMustSucceed)); } return(new TaskRunnerResult(true, "")); }
public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues) { var provider = TestProvider?.FirstOrDefault(p => p.Name == Provider); if (provider == null) { return(new TaskRunnerResult($"Test provider \"{Provider}\" could not be found.")); } await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices); var arg = GetArgString("main"); var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString); if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString())) { return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError)); } var testResultLocation = ""; var taskRemarks = ""; if (result.ContainsKey("testResultLocation")) { testResultLocation = result["testResultLocation"].ToString(); taskRemarks = $"The test result is located at {testResultLocation}"; } var outputValues = new Dictionary <string, string>(); if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString())) { outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString()); } return(new TaskRunnerResult(true, testResultLocation, outputValues) { TaskRemarks = taskRemarks }); }