Skip to content

Commit

Permalink
Extend test-groups API to be able to fetch test group information fro…
Browse files Browse the repository at this point in the history
…m a build request.

https://bugs.webkit.org/show_bug.cgi?id=270467
rdar://124024370

Reviewed by Ryosuke Niwa.

Add `/api/test-groups?buildRequest=<id>` API so that we can query test-group information from a build request.

* Websites/perf.webkit.org/public/api/test-groups.php: Added support for `/api/test-groups?buildRequest=<id>`.
* Websites/perf.webkit.org/server-tests/api-test-groups.js: Added unit tests for new API.

Canonical link: https://commits.webkit.org/275648@main
  • Loading branch information
dewei-zhu committed Mar 4, 2024
1 parent cac2e64 commit c87270c
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 6 deletions.
22 changes: 16 additions & 6 deletions Websites/perf.webkit.org/public/api/test-groups.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,23 @@ function main($path) {

if (!count($path)) {
$task_id = array_get($_GET, 'task');
if (!$task_id)
exit_with_error('TaskIdNotSpecified');
$request_id = array_get($_GET, 'buildRequest');
if (!$task_id && !$request_id)
exit_with_error('TaskOrBuildRequestIdNotSpecified');
if ($task_id && $request_id)
exit_with_error('CannotSpecifyBothTaskAndBuildRequestIds');

$test_groups = $db->select_rows('analysis_test_groups', 'testgroup', array('task' => $task_id));
if (!is_array($test_groups))
exit_with_error('FailedToFetchTestGroups');
$build_requests_fetcher->fetch_for_task($task_id);
if ($task_id) {
$test_groups = $db->select_rows('analysis_test_groups', 'testgroup', array('task' => $task_id));
if (!is_array($test_groups))
exit_with_error('FailedToFetchTestGroups');
$build_requests_fetcher->fetch_for_task($task_id);
} else {
$test_groups = $db->query_and_fetch_all('SELECT analysis_test_groups.* FROM analysis_test_groups JOIN build_requests ON request_group=testgroup_id WHERE request_id = $1', array(intval($request_id)));
if (!is_array($test_groups))
exit_with_error('FailedToFetchTestGroups');
$build_requests_fetcher->fetch_requests_for_groups($test_groups);
}
} elseif ($path[0] == 'ready-for-notification') {
$test_groups = $db->query_and_fetch_all("SELECT * FROM analysis_test_groups
WHERE EXISTS(SELECT 1 FROM build_requests
Expand Down
64 changes: 64 additions & 0 deletions Websites/perf.webkit.org/server-tests/api-test-groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
const assert = require('assert');
const MockData = require('./resources/mock-data.js');
const TestServer = require('./resources/test-server.js');
const assertThrows = require('./resources/common-operations.js').assertThrows;
const prepareServerTest = require('./resources/common-operations.js').prepareServerTest;

describe('/api/test-groups', function () {
Expand Down Expand Up @@ -245,4 +246,67 @@ describe('/api/test-groups', function () {
assert.deepStrictEqual(anotherTestGroup.testParameterSets, [null, null, null, null]);
});
});

describe('/api/test-groups?(task=<task_id>|buildRequest=<id>)', () => {
it('should reject with "TaskOrBuildRequestIdNotSpecified" if no argument is specified', async () => {
const content = await TestServer.remoteAPI().getJSON('/api/test-groups');
assert.strictEqual(content['status'], 'TaskOrBuildRequestIdNotSpecified');
});

it('should reject with "CannotSpecifyBothTaskAndBuildRequestIds" if both build request and task id are specified', async () => {
const content = await TestServer.remoteAPI().getJSON('/api/test-groups?task=500&buildRequest=700');
assert.strictEqual(content['status'], 'CannotSpecifyBothTaskAndBuildRequestIds');
});

it('should return an empty list when task id is invalid', async () => {
const content = await TestServer.remoteAPI().getJSON('/api/test-groups?task=1000000');
assert.strictEqual(content.status, 'OK');
assert.deepStrictEqual(content.testGroups, []);
assert.deepStrictEqual(content.buildRequests, []);
assert.deepStrictEqual(content.commitSets, []);
assert.deepStrictEqual(content.testParameterSets, []);
assert.deepStrictEqual(content.commits, []);
assert.deepStrictEqual(content.uploadedFiles, []);
});

it('should return an empty list when build request id is invalid', async () => {
await MockData.addMockData(TestServer.database());
const content = await TestServer.remoteAPI().getJSON('/api/test-groups?buildRequest=1000000');
assert.strictEqual(content.status, 'OK');
assert.deepStrictEqual(content.testGroups, []);
assert.deepStrictEqual(content.buildRequests, []);
assert.deepStrictEqual(content.commitSets, []);
assert.deepStrictEqual(content.testParameterSets, []);
assert.deepStrictEqual(content.commits, []);
assert.deepStrictEqual(content.uploadedFiles, []);
});

it('should return test group information for a task id', async () => {
await MockData.addMockData(TestServer.database());
const content = await TestServer.remoteAPI().getJSON('/api/test-groups?task=500');
assert.strictEqual(content.status, 'OK');
assert.deepStrictEqual(content.testGroups.length, 1);
assert.deepStrictEqual(content.testGroups[0].id, '600');
assert.deepStrictEqual(content.buildRequests.length, 4);
assert.deepStrictEqual(content.buildRequests[0].id, '700');
assert.deepStrictEqual(content.commitSets.length, 2);
assert.deepStrictEqual(content.testParameterSets, []);
assert.deepStrictEqual(content.commits.length, 3);
assert.deepStrictEqual(content.uploadedFiles, []);
});

it('should return test group information for a given build request', async () => {
await MockData.addMockData(TestServer.database());
const content = await TestServer.remoteAPI().getJSON('/api/test-groups?buildRequest=700');
assert.strictEqual(content.status, 'OK');
assert.deepStrictEqual(content.testGroups.length, 1);
assert.deepStrictEqual(content.testGroups[0].id, '600');
assert.deepStrictEqual(content.buildRequests.length, 4);
assert.deepStrictEqual(content.buildRequests[0].id, '700');
assert.deepStrictEqual(content.commitSets.length, 2);
assert.deepStrictEqual(content.testParameterSets, []);
assert.deepStrictEqual(content.commits.length, 3);
assert.deepStrictEqual(content.uploadedFiles, []);
});
});
});

0 comments on commit c87270c

Please sign in to comment.