Diff
Modified: trunk/Websites/perf.webkit.org/ChangeLog (231295 => 231296)
--- trunk/Websites/perf.webkit.org/ChangeLog 2018-05-03 06:05:57 UTC (rev 231295)
+++ trunk/Websites/perf.webkit.org/ChangeLog 2018-05-03 07:06:16 UTC (rev 231296)
@@ -1,3 +1,23 @@
+2018-05-02 Dewei Zhu <[email protected]>
+
+ Create analysis task should sync analysis task status after creation.
+ https://bugs.webkit.org/show_bug.cgi?id=185222
+
+ Reviewed by Ryosuke Niwa.
+
+ * public/v3/models/analysis-task.js:
+ (AnalysisTask.async.create): Fetch newly-created analysis task right about its creation.
+ (AnalysisTask):
+ * tools/js/measurement-set-analyzer.js:
+ (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet): Adjust as 'AnalysisTask.create' now
+ returns an anlysis task instance.
+ (MeasurementSetAnalyzer):
+ * unit-tests/analysis-task-tests.js: Added a unit test for this change.
+ (async):
+ * unit-tests/measurement-set-analyzer-tests.js: Update unit tests accordingly.
+ Fix a typo in one previous unit test.
+ (async):
+
2018-05-01 Dewei Zhu <[email protected]>
Write a script that detects chart changes by using v3 API.
Modified: trunk/Websites/perf.webkit.org/public/v3/models/analysis-task.js (231295 => 231296)
--- trunk/Websites/perf.webkit.org/public/v3/models/analysis-task.js 2018-05-03 06:05:57 UTC (rev 231295)
+++ trunk/Websites/perf.webkit.org/public/v3/models/analysis-task.js 2018-05-03 07:06:16 UTC (rev 231296)
@@ -303,7 +303,7 @@
return results;
}
- static create(name, startPoint, endPoint, testGroupName=null, repetitionCount=0)
+ static async create(name, startPoint, endPoint, testGroupName=null, repetitionCount=0)
{
const parameters = {name, startRun: startPoint.id, endRun: endPoint.id};
if (testGroupName) {
@@ -312,7 +312,8 @@
parameters['repetitionCount'] = repetitionCount;
parameters['testGroupName'] = testGroupName;
}
- return PrivilegedAPI.sendRequest('create-analysis-task', parameters);
+ const response = await PrivilegedAPI.sendRequest('create-analysis-task', parameters);
+ return AnalysisTask.fetchById(response.taskId, true);
}
}
Modified: trunk/Websites/perf.webkit.org/tools/js/measurement-set-analyzer.js (231295 => 231296)
--- trunk/Websites/perf.webkit.org/tools/js/measurement-set-analyzer.js 2018-05-03 06:05:57 UTC (rev 231295)
+++ trunk/Websites/perf.webkit.org/tools/js/measurement-set-analyzer.js 2018-05-03 07:06:16 UTC (rev 231296)
@@ -103,9 +103,10 @@
const summary = `Potential ${rangeWithMostSignificantChange.valueChangeSummary.changeLabel} on ${platform.name()} between ${CommitSet.diff(startCommitSet, endCommitSet)}`;
// FIXME: The iteration count should be smarter than hard-coding.
- const response = await AnalysisTask.create(summary, rangeWithMostSignificantChange.startPoint,
+ const analysisTask = await AnalysisTask.create(summary, rangeWithMostSignificantChange.startPoint,
rangeWithMostSignificantChange.endPoint, 'Confirm', 4);
- this._logger.info(`Created analysis task with id "${response.taskId}" to confirm: "${summary}".`);
+
+ this._logger.info(`Created analysis task with id "${analysisTask.id()}" to confirm: "${summary}".`);
}
}
Modified: trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js (231295 => 231296)
--- trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js 2018-05-03 06:05:57 UTC (rev 231295)
+++ trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js 2018-05-03 07:06:16 UTC (rev 231296)
@@ -323,6 +323,97 @@
'22': { revision: 'ios-revision-2', ownerRevision: null, patch: null}}]}
);
});
+
+ it('should sync the new analysis task status once it is created', async () => {
+ const [startPoint, endPoint] = mockStartAndEndPoints();
+ const creatingPromise = AnalysisTask.create('confirm', startPoint, endPoint, 'Confirm', 4);
+ assert.equal(requests.length, 1);
+ assert.equal(requests[0].url, '/privileged-api/generate-csrf-token');
+ requests[0].resolve({
+ token: 'abc',
+ expiration: Date.now() + 3600 * 1000,
+ });
+
+ await MockRemoteAPI.waitForRequest();
+ assert.equal(requests[1].url, '/privileged-api/create-analysis-task');
+ assert.equal(requests.length, 2);
+ assert.deepEqual(requests[1].data, {name: 'confirm', repetitionCount: 4,
+ startRun: 1, endRun: 2, testGroupName: 'Confirm', token: 'abc', revisionSets: [
+ {'11': {revision: 'webkit-revision-1', ownerRevision: null, patch: null},
+ '22': {revision: 'ios-revision-1', ownerRevision: null, patch: null}},
+ {'11': {revision: 'webkit-revision-2', ownerRevision: null, patch: null},
+ '22': { revision: 'ios-revision-2', ownerRevision: null, patch: null}}]}
+ );
+
+ requests[1].resolve({taskId: '5255', status: 'OK'});
+
+ await MockRemoteAPI.waitForRequest();
+ assert.equal(requests.length, 3);
+ assert.equal(requests[2].url, '/api/analysis-tasks?id=5255');
+ requests[2].resolve({
+ analysisTasks: [{
+ author: null,
+ bugs: [],
+ buildRequestCount: 8,
+ finishedBuildRequestCount: 0,
+ category: 'identified',
+ causes: [],
+ createdAt: 4500,
+ endRun: 2,
+ endRunTime: 5000,
+ fixes: [],
+ id: 5255,
+ metric: MockModels.someMetric.id(),
+ name: 'confirm',
+ needed: null,
+ platform: MockModels.somePlatform.id(),
+ result: 'progression',
+ segmentationStrategy: 1,
+ startRun: 1,
+ startRunTime: 4000,
+ testRangeStrategy: 2
+ }],
+ bugs: [],
+ commits: [],
+ status: 'OK'
+ });
+ const analysisTask = await creatingPromise;
+ assert.equal(analysisTask.id(), 5255);
+ assert.deepEqual(analysisTask.bugs(), []);
+ assert.equal(analysisTask.author(), '');
+ assert.equal(analysisTask.platform(), MockModels.somePlatform);
+ assert.equal(analysisTask.metric(), MockModels.someMetric);
+ });
+
+ it('should return an rejected promise when analysis task creation failed', async () => {
+ const [startPoint, endPoint] = mockStartAndEndPoints();
+ const creatingPromise = AnalysisTask.create('confirm', startPoint, endPoint, 'Confirm', 4);
+ assert.equal(requests.length, 1);
+ assert.equal(requests[0].url, '/privileged-api/generate-csrf-token');
+ requests[0].resolve({
+ token: 'abc',
+ expiration: Date.now() + 3600 * 1000,
+ });
+
+ await MockRemoteAPI.waitForRequest();
+ assert.equal(requests[1].url, '/privileged-api/create-analysis-task');
+ assert.equal(requests.length, 2);
+ assert.deepEqual(requests[1].data, {name: 'confirm', repetitionCount: 4,
+ startRun: 1, endRun: 2, testGroupName: 'Confirm', token: 'abc', revisionSets: [
+ {'11': {revision: 'webkit-revision-1', ownerRevision: null, patch: null},
+ '22': {revision: 'ios-revision-1', ownerRevision: null, patch: null}},
+ {'11': {revision: 'webkit-revision-2', ownerRevision: null, patch: null},
+ '22': { revision: 'ios-revision-2', ownerRevision: null, patch: null}}]}
+ );
+
+ requests[1].reject('401');
+ return creatingPromise.then(() => {
+ assert.ok(false, 'should not be reached');
+ }, (error) => {
+ assert.ok(true);
+ assert.equal(error, '401');
+ });
+ });
});
describe('create with node privilege api', () => {
Modified: trunk/Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js (231295 => 231296)
--- trunk/Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js 2018-05-03 06:05:57 UTC (rev 231295)
+++ trunk/Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js 2018-05-03 07:06:16 UTC (rev 231296)
@@ -247,6 +247,38 @@
});
requests[2].resolve({taskId: '5255', status: 'OK'});
+ await MockRemoteAPI.waitForRequest();
+ assert.equal(requests.length, 4);
+ assert.equal(requests[3].url, '/api/analysis-tasks?id=5255');
+
+ requests[3].resolve({
+ analysisTasks: [{
+ author: null,
+ bugs: [],
+ buildRequestCount: 8,
+ finishedBuildRequestCount: 0,
+ category: 'identified',
+ causes: [],
+ createdAt: 4500,
+ endRun: 6448,
+ endRunTime: 5000,
+ fixes: [],
+ id: 5255,
+ metric: MockModels.someMetric.id(),
+ name: 'Potential 2.38% regression on Some platform between WebKit: r40-r49',
+ needed: null,
+ platform: MockModels.somePlatform.id(),
+ result: 'regression',
+ segmentationStrategy: 1,
+ startRun: 6439,
+ startRunTime: 4000,
+ testRangeStrategy: 2
+ }],
+ bugs: [],
+ commits: [],
+ status: 'OK'
+ });
+
await analysisPromise;
assert.deepEqual(logger.info_logs, ['==== "Some test : Some metric" on "Some platform" ====',
'Created analysis task with id "5255" to confirm: "Potential 2.38% regression on Some platform between WebKit: r35-r44".']);
@@ -297,7 +329,7 @@
result: 'regression',
segmentationStrategy: 1,
startRun: 6434,
- statrRunTime: 4000,
+ startRunTime: 4000,
testRangeStrategy: 2
}],
bugs: [],
@@ -359,6 +391,38 @@
});
requests[2].resolve({taskId: '5255', status: 'OK'});
+ await MockRemoteAPI.waitForRequest();
+ assert.equal(requests.length, 4);
+ assert.equal(requests[3].url, '/api/analysis-tasks?id=5255');
+
+ requests[3].resolve({
+ analysisTasks: [{
+ author: null,
+ bugs: [],
+ buildRequestCount: 8,
+ finishedBuildRequestCount: 0,
+ category: 'identified',
+ causes: [],
+ createdAt: 4500,
+ endRun: 6448,
+ endRunTime: 5000,
+ fixes: [],
+ id: 5255,
+ metric: MockModels.someMetric.id(),
+ name: 'Potential 2.38% regression on Some platform between WebKit: r40-r49',
+ needed: null,
+ platform: MockModels.somePlatform.id(),
+ result: 'regression',
+ segmentationStrategy: 1,
+ startRun: 6439,
+ startRunTime: 4000,
+ testRangeStrategy: 2
+ }],
+ bugs: [],
+ commits: [],
+ status: 'OK'
+ });
+
await analysisPromise;
assert.deepEqual(logger.info_logs, ['==== "Some test : Some metric" on "Some platform" ====',
'Created analysis task with id "5255" to confirm: "Potential 2.38% regression on Some platform between WebKit: r40-r49".']);
@@ -413,6 +477,38 @@
});
requests[2].resolve({taskId: '5255', status: 'OK'});
+ await MockRemoteAPI.waitForRequest();
+ assert.equal(requests.length, 4);
+ assert.equal(requests[3].url, '/api/analysis-tasks?id=5255');
+
+ requests[3].resolve({
+ analysisTasks: [{
+ author: null,
+ bugs: [],
+ buildRequestCount: 8,
+ finishedBuildRequestCount: 0,
+ category: 'identified',
+ causes: [],
+ createdAt: 4500,
+ endRun: 6407,
+ endRunTime: 5000,
+ fixes: [],
+ id: 5255,
+ metric: MockModels.someMetric.id(),
+ name: 'Potential 9.15% progression on Some platform between WebKit: r3-r8',
+ needed: null,
+ platform: MockModels.somePlatform.id(),
+ result: 'progression',
+ segmentationStrategy: 1,
+ startRun: 6402,
+ startRunTime: 4000,
+ testRangeStrategy: 2
+ }],
+ bugs: [],
+ commits: [],
+ status: 'OK'
+ });
+
await analysisPromise;
assert.deepEqual(logger.info_logs, ['==== "Some test : Some metric" on "Some platform" ====',
'Created analysis task with id "5255" to confirm: "Potential 9.15% progression on Some platform between WebKit: r3-r8".']);