| // Copyright 2021 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| 'use strict'; |
| |
| // SwarmingTask represents a task in the swarming server. |
| class SwarmingTask { |
| constructor(runner, json) { |
| this.query_runner_ = runner; |
| this.task_id_ = json.task_id; |
| this.run_id_ = json.run_id || undefined; |
| this.failure_ = json.failure; |
| this.state_ = json.state; |
| this.tags_ = {}; |
| json.tags.map(tag => { |
| const parts = tag.split(':'); |
| this.tags_[parts.shift()] = parts.join(':'); |
| }); |
| } |
| |
| get name() { |
| return this.tags_.name; |
| } |
| get task_id() { |
| return this.task_id_; |
| } |
| }; |
| |
| // A ChildSwarmingTask is the task that actually runs tests and contains |
| // artifacts. So to find all the failed tests, it downloads the artifacts from |
| // the swarming server, and parses the `output.json` file. |
| class ChildSwarmingTask extends SwarmingTask { |
| // Returns a promoise for a parsed JSON object from the contents in |
| // `filename` for this task. |
| async downloadJSONFile(filename) { |
| return this.query_runner_.retrieveJSONFile(this.task_id_, filename); |
| } |
| }; |
| |
| // A ParentSwarmingTask itself does not run tests. It delegates the job of |
| // running the tests to a ChildSwarmingTask. Therefore, to find all the all |
| // failing tests, it needs to aggregate the failed tests of all its children |
| // swarming tasks. |
| class ParentSwarmingTask extends SwarmingTask { |
| findChildTasks() { |
| const results = |
| this.query_runner_.retrieveTasks(`parent_task_id:${this.run_id_}`); |
| return results.map(r => new ChildSwarmingTask(this.query_runner_, r)); |
| } |
| }; |
| |
| module.exports = { |
| ParentSwarmingTask, |
| }; |