public void ProcessParameterDeserializer_ConvertsExportedTestSpec() { var testSpec = new AgileTestPlatformSpec { AssemblyFileSpec = @"**\*.Tests.dll", ExecutionPlatform = ExecutionPlatformType.X86, FailBuildOnFailure = true, RunName = "Unit Tests", RunSettingsForTestRun = new RunSettings {ServerRunSettingsFile = "run.settings", TypeRunSettings = RunSettingsType.CodeCoverageEnabled}, TestCaseFilter = "*FakeTests" }; var procParam = new[] { "AgileTestSpecs", Serialize(new ExportedAgileTestPlatformSpec[] { testSpec }) }; ExportedProcessParameterTransformer.ProcessParameterDeserializer(procParam).ShouldBeEquivalentTo(new TestSpecList(testSpec)); }
public void ProcessParameterDeserializer_ConvertsExportedTestSpec() { var testSpec = new AgileTestPlatformSpec { AssemblyFileSpec = @"**\*.Tests.dll", ExecutionPlatform = ExecutionPlatformType.X86, FailBuildOnFailure = true, RunName = "Unit Tests", RunSettingsForTestRun = new RunSettings { ServerRunSettingsFile = "run.settings", TypeRunSettings = RunSettingsType.CodeCoverageEnabled }, TestCaseFilter = "*FakeTests" }; var procParam = new[] { "AgileTestSpecs", this.Serialize(new ExportedAgileTestPlatformSpec[] { testSpec }) }; ExportedProcessParameterTransformer.ProcessParameterDeserializer(procParam).ShouldBeEquivalentTo(new TestSpecList(testSpec)); }
private void ButtonImport_OnClick(object sender, RoutedEventArgs e) { foreach (var item in this.DataGridBuildsToImport.Items) { BuildImport bi = item as BuildImport; try { if (bi == null) { return; } if (!File.Exists(bi.JsonFile)) { bi.Status = "Failed"; bi.StatusImage = "Graphics/Failed.png"; bi.Message = "File not found"; } else { ExportedBuildDefinition exdef = JsonConvert.DeserializeObject<ExportedBuildDefinition>(File.ReadAllText(bi.JsonFile)); var newBuildDefinition = this.buildServer.CreateBuildDefinition(this.lableTeamProject.Content.ToString()); newBuildDefinition.Name = exdef.Name; newBuildDefinition.Description = exdef.Description; newBuildDefinition.ContinuousIntegrationType = exdef.ContinuousIntegrationType; newBuildDefinition.ContinuousIntegrationQuietPeriod = exdef.ContinuousIntegrationQuietPeriod; newBuildDefinition.QueueStatus = exdef.QueueStatus; if (exdef.SourceProviders.All(s => s.Name != "TFGIT")) { foreach (var mapping in exdef.Mappings) { newBuildDefinition.Workspace.AddMapping(mapping.ServerItem, mapping.LocalItem, mapping.MappingType); } } newBuildDefinition.RetentionPolicyList.Clear(); foreach (var ret in exdef.RetentionPolicyList) { newBuildDefinition.AddRetentionPolicy(ret.BuildReason, ret.BuildStatus, ret.NumberToKeep, ret.DeleteOptions); } foreach (var sp in exdef.SourceProviders) { var provider = newBuildDefinition.CreateInitialSourceProvider(sp.Name); if (exdef.SourceProviders.All(s => s.Name == "TFGIT")) { provider.Fields["RepositoryName"] = sp.Fields["RepositoryName"]; provider.Fields["DefaultBranch"] = sp.Fields["DefaultBranch"]; provider.Fields["CIBranches"] = sp.Fields["CIBranches"]; provider.Fields["RepositoryUrl"] = sp.Fields["RepositoryUrl"]; } newBuildDefinition.SetSourceProvider(provider); } newBuildDefinition.BuildController = this.buildServer.GetBuildController(exdef.BuildController); var x = this.buildServer.QueryProcessTemplates(this.lableTeamProject.Content.ToString()); if (x.All(p => p.ServerPath != exdef.ProcessTemplate)) { bi.Status = "Failed"; bi.StatusImage = "Graphics/Failed.png"; bi.Message = "Process Template not found - " + exdef.ProcessTemplate; continue; } newBuildDefinition.Process = this.buildServer.QueryProcessTemplates(this.lableTeamProject.Content.ToString()).First(p => p.ServerPath == exdef.ProcessTemplate); newBuildDefinition.DefaultDropLocation = exdef.DefaultDropLocation; foreach (var sched in exdef.Schedules) { var newSched = newBuildDefinition.AddSchedule(); newSched.DaysToBuild = sched.DaysToBuild; newSched.StartTime = sched.StartTime; newSched.TimeZone = sched.TimeZone; } var process = WorkflowHelpers.DeserializeProcessParameters(newBuildDefinition.ProcessParameters); foreach (var param in exdef.ProcessParameters) { if (param.Key != "AgentSettings" && param.Key != "BuildSettings" && param.Key != "TestSpecs") { Newtonsoft.Json.Linq.JArray arrayItem = param.Value as Newtonsoft.Json.Linq.JArray; if (arrayItem == null) { Newtonsoft.Json.Linq.JObject objectItem = param.Value as Newtonsoft.Json.Linq.JObject; if (objectItem == null) { if (param.Key == "CleanWorkspace") { process.Add(param.Key, (CleanWorkspaceOption)Enum.Parse(typeof(CleanWorkspaceOption), param.Value.ToString())); } else if (param.Key == "RunCodeAnalysis") { process.Add(param.Key, (CodeAnalysisOption)Enum.Parse(typeof(CodeAnalysisOption), param.Value.ToString())); } else { process.Add(param.Key, param.Value); } } else { Microsoft.TeamFoundation.Build.Common.BuildParameter paramItem = new Microsoft.TeamFoundation.Build.Common.BuildParameter(param.Value.ToString()); process.Add(param.Key, paramItem); } } else { string[] arrayItemList = new string[arrayItem.Count]; for (int i = 0; i < arrayItem.Count; i++) { arrayItemList[i] = arrayItem[i].ToString(); } process.Add(param.Key, arrayItemList); } } } if (exdef.ProjectsToBuild != null) { process.Add("BuildSettings", new BuildSettings { ProjectsToBuild = exdef.ProjectsToBuild, PlatformConfigurations = exdef.ConfigurationsToBuild }); } if (exdef.TfvcAgentSettings != null) { process.Add("AgentSettings", new AgentSettings { MaxExecutionTime = exdef.TfvcAgentSettings.MaxExecutionTime, MaxWaitTime = exdef.TfvcAgentSettings.MaxWaitTime, Name = exdef.TfvcAgentSettings.Name, TagComparison = exdef.TfvcAgentSettings.Comparison, Tags = exdef.TfvcAgentSettings.Tags }); } else if (exdef.GitAgentSettings != null) { process.Add("AgentSettings", exdef.GitAgentSettings); } if (exdef.AgileTestSpecs != null) { TestSpecList tsl = new TestSpecList(); foreach (var aitem in exdef.AgileTestSpecs) { AgileTestPlatformSpec agileSpec = new AgileTestPlatformSpec(); agileSpec.AssemblyFileSpec = aitem.AssemblyFileSpec; agileSpec.ExecutionPlatform = aitem.ExecutionPlatform; agileSpec.FailBuildOnFailure = aitem.FailBuildOnFailure; agileSpec.RunName = aitem.RunName; agileSpec.TestCaseFilter = aitem.TestCaseFilter; agileSpec.RunSettingsForTestRun = new RunSettings(); agileSpec.RunSettingsForTestRun.ServerRunSettingsFile = aitem.RunSettingsFileName; agileSpec.RunSettingsForTestRun.TypeRunSettings = aitem.TypeRunSettings; tsl.Add(agileSpec); } process.Add("TestSpecs", tsl); } if (exdef.BuildReasons != null) { foreach (var key in exdef.BuildReasons.Keys) { if (process.ContainsKey(key)) { process[key] = exdef.BuildReasons[key]; } } } if (exdef.IntegerParameters != null) { foreach (var key in exdef.IntegerParameters.Keys) { if (process.ContainsKey(key)) { process[key] = exdef.IntegerParameters[key]; } } } if (exdef.BuildVerbosities != null) { foreach (var key in exdef.BuildVerbosities.Keys) { if (process.ContainsKey(key)) { process[key] = exdef.BuildVerbosities[key]; } } } newBuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process); newBuildDefinition.Save(); bi.Status = "Succeeded"; bi.StatusImage = "Graphics/Succeeded.png"; bi.Message = string.Empty; } } catch (Exception ex) { bi.Status = "Failed"; bi.StatusImage = "Graphics/Failed.png"; bi.Message = ex.Message; } finally { this.DataGridBuildsToImport.ItemsSource = null; this.DataGridBuildsToImport.ItemsSource = this.buildFiles; } } }
private void ButtonImport_OnClick(object sender, RoutedEventArgs e) { foreach (var item in this.DataGridBuildsToImport.Items) { BuildImport bi = item as BuildImport; try { if (bi == null) { return; } if (!File.Exists(bi.JsonFile)) { bi.Status = "Failed"; bi.StatusImage = "Graphics/Failed.png"; bi.Message = "File not found"; } else { ExportedBuildDefinition exdef = JsonConvert.DeserializeObject <ExportedBuildDefinition>(File.ReadAllText(bi.JsonFile)); var newBuildDefinition = this.buildServer.CreateBuildDefinition(this.lableTeamProject.Content.ToString()); newBuildDefinition.Name = exdef.Name; newBuildDefinition.Description = exdef.Description; newBuildDefinition.ContinuousIntegrationType = exdef.ContinuousIntegrationType; newBuildDefinition.ContinuousIntegrationQuietPeriod = exdef.ContinuousIntegrationQuietPeriod; newBuildDefinition.QueueStatus = exdef.QueueStatus; if (exdef.SourceProviders.All(s => s.Name != "TFGIT")) { foreach (var mapping in exdef.Mappings) { newBuildDefinition.Workspace.AddMapping(mapping.ServerItem, mapping.LocalItem, mapping.MappingType); } } newBuildDefinition.RetentionPolicyList.Clear(); foreach (var ret in exdef.RetentionPolicyList) { newBuildDefinition.AddRetentionPolicy(ret.BuildReason, ret.BuildStatus, ret.NumberToKeep, ret.DeleteOptions); } foreach (var sp in exdef.SourceProviders) { var provider = newBuildDefinition.CreateInitialSourceProvider(sp.Name); if (exdef.SourceProviders.All(s => s.Name == "TFGIT")) { provider.Fields["RepositoryName"] = sp.Fields["RepositoryName"]; provider.Fields["DefaultBranch"] = sp.Fields["DefaultBranch"]; provider.Fields["CIBranches"] = sp.Fields["CIBranches"]; provider.Fields["RepositoryUrl"] = sp.Fields["RepositoryUrl"]; } newBuildDefinition.SetSourceProvider(provider); } newBuildDefinition.BuildController = this.buildServer.GetBuildController(exdef.BuildController); var x = this.buildServer.QueryProcessTemplates(this.lableTeamProject.Content.ToString()); if (x.All(p => p.ServerPath != exdef.ProcessTemplate)) { bi.Status = "Failed"; bi.StatusImage = "Graphics/Failed.png"; bi.Message = "Process Template not found - " + exdef.ProcessTemplate; continue; } newBuildDefinition.Process = this.buildServer.QueryProcessTemplates(this.lableTeamProject.Content.ToString()).First(p => p.ServerPath == exdef.ProcessTemplate); newBuildDefinition.DefaultDropLocation = exdef.DefaultDropLocation; foreach (var sched in exdef.Schedules) { var newSched = newBuildDefinition.AddSchedule(); newSched.DaysToBuild = sched.DaysToBuild; newSched.StartTime = sched.StartTime; newSched.TimeZone = sched.TimeZone; } var process = WorkflowHelpers.DeserializeProcessParameters(newBuildDefinition.ProcessParameters); foreach (var param in exdef.ProcessParameters) { if (param.Key != "AgentSettings" && param.Key != "BuildSettings" && param.Key != "TestSpecs") { Newtonsoft.Json.Linq.JArray arrayItem = param.Value as Newtonsoft.Json.Linq.JArray; if (arrayItem == null) { Newtonsoft.Json.Linq.JObject objectItem = param.Value as Newtonsoft.Json.Linq.JObject; if (objectItem == null) { if (param.Key == "CleanWorkspace") { process.Add(param.Key, (CleanWorkspaceOption)Enum.Parse(typeof(CleanWorkspaceOption), param.Value.ToString())); } else if (param.Key == "RunCodeAnalysis") { process.Add(param.Key, (CodeAnalysisOption)Enum.Parse(typeof(CodeAnalysisOption), param.Value.ToString())); } else { process.Add(param.Key, param.Value); } } else { Microsoft.TeamFoundation.Build.Common.BuildParameter paramItem = new Microsoft.TeamFoundation.Build.Common.BuildParameter(param.Value.ToString()); process.Add(param.Key, paramItem); } } else { string[] arrayItemList = new string[arrayItem.Count]; for (int i = 0; i < arrayItem.Count; i++) { arrayItemList[i] = arrayItem[i].ToString(); } process.Add(param.Key, arrayItemList); } } } if (exdef.ProjectsToBuild != null) { process.Add("BuildSettings", new BuildSettings { ProjectsToBuild = exdef.ProjectsToBuild, PlatformConfigurations = exdef.ConfigurationsToBuild }); } if (exdef.TfvcAgentSettings != null) { process.Add("AgentSettings", new AgentSettings { MaxExecutionTime = exdef.TfvcAgentSettings.MaxExecutionTime, MaxWaitTime = exdef.TfvcAgentSettings.MaxWaitTime, Name = exdef.TfvcAgentSettings.Name, TagComparison = exdef.TfvcAgentSettings.Comparison, Tags = exdef.TfvcAgentSettings.Tags }); } else if (exdef.GitAgentSettings != null) { process.Add("AgentSettings", exdef.GitAgentSettings); } if (exdef.AgileTestSpecs != null) { TestSpecList tsl = new TestSpecList(); foreach (var aitem in exdef.AgileTestSpecs) { AgileTestPlatformSpec agileSpec = new AgileTestPlatformSpec(); agileSpec.AssemblyFileSpec = aitem.AssemblyFileSpec; agileSpec.ExecutionPlatform = aitem.ExecutionPlatform; agileSpec.FailBuildOnFailure = aitem.FailBuildOnFailure; agileSpec.RunName = aitem.RunName; agileSpec.TestCaseFilter = aitem.TestCaseFilter; agileSpec.RunSettingsForTestRun = new RunSettings(); agileSpec.RunSettingsForTestRun.ServerRunSettingsFile = aitem.RunSettingsFileName; agileSpec.RunSettingsForTestRun.TypeRunSettings = aitem.TypeRunSettings; tsl.Add(agileSpec); } process.Add("TestSpecs", tsl); } if (exdef.BuildReasons != null) { foreach (var key in exdef.BuildReasons.Keys) { if (process.ContainsKey(key)) { process[key] = exdef.BuildReasons[key]; } } } if (exdef.IntegerParameters != null) { foreach (var key in exdef.IntegerParameters.Keys) { if (process.ContainsKey(key)) { process[key] = exdef.IntegerParameters[key]; } } } if (exdef.BuildVerbosities != null) { foreach (var key in exdef.BuildVerbosities.Keys) { if (process.ContainsKey(key)) { process[key] = exdef.BuildVerbosities[key]; } } } newBuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process); newBuildDefinition.Save(); bi.Status = "Succeeded"; bi.StatusImage = "Graphics/Succeeded.png"; bi.Message = string.Empty; } } catch (Exception ex) { bi.Status = "Failed"; bi.StatusImage = "Graphics/Failed.png"; bi.Message = ex.Message; } finally { this.DataGridBuildsToImport.ItemsSource = null; this.DataGridBuildsToImport.ItemsSource = this.buildFiles; } } }