static Package FindOrCreateExecutionPackage(RestClient client, Root root, Project project, Options options, SystemInfo systemInfo) { Package scriptPackage = client.GetExecutionPackageByProjectAndName(root, project.Id, options.ExecutionPackage); if (scriptPackage == null) { // let's try to create all the packages in the path string[] parts = options.ExecutionPackage.Split(new[] {systemInfo.PackagePathSeparator}, StringSplitOptions.RemoveEmptyEntries); Package parent = client.GetExecutionPackageByProjectAndName(root, project.Id, parts[0]) ?? client.CreateExecutionPackageForProject(root, project.Id, parts[0]); for (int i = 1; i < parts.Length; i++) { Package match = client.GetExecutionPackageByParentPackageAndName(root, parent.Id, parts[i]) ?? client.CreateExecutionPackageForParentProject(root, parent.Id, parts[i]); parent = match; } scriptPackage = parent; } return scriptPackage; }
static AutomatedTest FindOrCreateAutomatedTest(RestClient client, Root root, Package scriptPackage, Options options) { AutomatedTest automatedTest = client.GetAutomatedTestByPackageAndTestName(root, scriptPackage.Id, options.TestName) ?? client.CreateAutomatedTest(root, scriptPackage.Id, options.TestName, options.Type, options.SubType); return automatedTest; }
static void Main(string[] args) { ServicePointManager.UseNagleAlgorithm = false; Console.WriteLine(HeadingInfo); var options = new Options(); var parser = new CommandLineParser(new CommandLineParserSettings(Console.Error)); if (!parser.ParseArguments(args, options)) { Environment.Exit(1); } var client = new RestClient { Authenticator = new HttpBasicAuthenticator(options.UserName, options.Password) }; Root root = client.GetRoot(options.Server); SystemInfo systemInfo = client.GetSystemInfo(root); Project project = GetProject(client, root, options); Package scriptPackage = FindOrCreateScriptPackage(client, root, project, options, systemInfo); AutomatedTest automatedTest = FindOrCreateAutomatedTest(client, root, scriptPackage, options); Package executionPackage = FindOrCreateExecutionPackage(client, root, project, options, systemInfo); AutomatedTestAssignment automatedTestAssignment = FindOrCreateAutomatedTestAssignment(client, root, executionPackage, automatedTest); IRestResponse<BackgroundTask> progress = StartUploadResults(automatedTestAssignment, options, client); PollTaskProgress(client, progress); Environment.Exit(0); }
static IRestResponse<BackgroundTask> StartUploadResults(AutomatedTestAssignment automatedTestAssignment, Options options, RestClient client) { string fileToUpload = CreateFileToUpload(options.ResultFiles); try { if (options.SaveCopy) { string copyPath = Path.Combine(Environment.CurrentDirectory, "report.zip"); File.Copy(fileToUpload, copyPath); } IRestRequest request = new RestRequest(automatedTestAssignment.GetLink("Runs"), Method.POST).AddHeader("Content-Type", "multipart/mixed"); string path = Path.GetFullPath(fileToUpload); request.AddFile("report", path); IRestResponse<BackgroundTask> result = client.Execute<BackgroundTask>(request); if (result.ErrorMessage != null) { Console.WriteLine("Error occured while uploading results: {0}", result.ErrorMessage); Environment.Exit(3); } if (result.StatusCode != HttpStatusCode.Accepted) { Console.WriteLine("Error occured while uploading results: {0}", result.Content); Environment.Exit(4); } return result; } finally { File.Delete(fileToUpload); } }
static Project GetProject(RestClient client, Root root, Options options) { Project project = client.GetProjectByName(root, options.Project); if (project == null) { Console.WriteLine("Project '{0}' does not exist.", options.Project); Environment.Exit(1); } return project; }