Diff
Modified: trunk/Websites/perf.webkit.org/ChangeLog (198825 => 198826)
--- trunk/Websites/perf.webkit.org/ChangeLog 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/ChangeLog 2016-03-30 04:16:48 UTC (rev 198826)
@@ -1,5 +1,33 @@
2016-03-29 Ryosuke Niwa <rn...@webkit.org>
+ Make dependency injection in unit tests more explicit
+ https://bugs.webkit.org/show_bug.cgi?id=156006
+
+ Reviewed by Joseph Pecoraro.
+
+ Make the dependency injection of model objects in unit tests explicit so that server tests that create
+ "real" model objects won't create these mock objects. Now each test that uses mock model objects would call
+ MockModels.inject() to inject before / beforeEach and access each object using a property on MockModels
+ instead of them being implicitly defined on the global object.
+
+ Similarly, MockRemoteAPI now only replaces global.RemoteAPI during each test so that server tests can use
+ real RemoteAPI to access the test Apache server.
+
+ * unit-tests/analysis-task-tests.js:
+ * unit-tests/buildbot-syncer-tests.js:
+ (createSampleBuildRequest):
+ * unit-tests/measurement-adaptor-tests.js:
+ * unit-tests/measurement-set-tests.js:
+ * unit-tests/resources/mock-remote-api.js:
+ (MockRemoteAPI.getJSONWithStatus):
+ (MockRemoteAPI.inject): Added. Override RemoteAPI on the global object during each test.
+ * unit-tests/resources/mock-v3-models.js:
+ (MockModels.inject): Added. Create mock model objects before each test, and clear all static maps of
+ various v3 model classes (to remove all singleton objects for those model classes).
+ * unit-tests/test-groups-tests.js:
+
+2016-03-29 Ryosuke Niwa <rn...@webkit.org>
+
BuildbotSyncer should be able to fetch JSON from buildbot
https://bugs.webkit.org/show_bug.cgi?id=155921
Modified: trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/analysis-task-tests.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -3,8 +3,8 @@
var assert = require('assert');
require('../tools/js/v3-models.js');
-require('./resources/mock-v3-models.js');
-require('./resources/mock-remote-api.js');
+let MockModels = require('./resources/mock-v3-models.js').MockModels;
+let MockRemoteAPI = require('./resources/mock-remote-api.js').MockRemoteAPI;
function sampleAnalysisTask()
{
@@ -117,6 +117,9 @@
}
describe('AnalysisTask', function () {
+ MockModels.inject();
+ let requests = MockRemoteAPI.inject();
+
describe('fetchAll', function () {
it('should request all analysis tasks', function () {
var callCount = 0;
@@ -167,8 +170,8 @@
assert.equal(AnalysisTask.all().length, 1);
var task = AnalysisTask.all()[0];
assert.equal(task.id(), 1082);
- assert.equal(task.metric(), someMetric);
- assert.equal(task.platform(), somePlatform);
+ assert.equal(task.metric(), MockModels.someMetric);
+ assert.equal(task.platform(), MockModels.somePlatform);
assert.ok(task.hasResults());
assert.ok(task.hasPendingRequests());
assert.equal(task.requestLabel(), '6 of 14');
@@ -194,7 +197,7 @@
var commit = task.causes()[0];
assert.equal(commit.revision(), '196051');
- assert.equal(commit.repository(), webkit);
+ assert.equal(commit.repository(), MockModels.webkit);
assert.equal(+commit.time(), 1454481246108);
done();
}).catch(function (error) { done(error); });
@@ -204,7 +207,7 @@
var adoptor = new MeasurementAdaptor(measurementCluster().formatMap);
var adoptedMeasurement = adoptor.applyTo(measurementCluster().configurations.current[0]);
assert.equal(adoptedMeasurement.id, 37188161);
- assert.equal(adoptedMeasurement.rootSet().commitForRepository(webkit).revision(), '196051');
+ assert.equal(adoptedMeasurement.rootSet().commitForRepository(MockModels.webkit).revision(), '196051');
var promise = AnalysisTask.fetchAll();
requests[0].resolve(sampleAnalysisTask());
@@ -216,7 +219,7 @@
assert.equal(task.causes().length, 1);
var commit = task.causes()[0];
assert.equal(commit.revision(), '196051');
- assert.equal(commit.repository(), webkit);
+ assert.equal(commit.repository(), MockModels.webkit);
assert.equal(+commit.time(), 1454481246108);
done();
}).catch(function (error) { done(error); });
Modified: trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/buildbot-syncer-tests.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -3,8 +3,8 @@
let assert = require('assert');
require('../tools/js/v3-models.js');
-require('./resources/mock-remote-api.js');
-require('./resources/mock-v3-models.js');
+let MockRemoteAPI = require('./resources/mock-remote-api.js').MockRemoteAPI;
+let MockModels = require('./resources/mock-v3-models.js').MockModels;
let BuildbotBuildEntry = require('../tools/js/buildbot-syncer.js').BuildbotBuildEntry;
let BuildbotSyncer = require('../tools/js/buildbot-syncer.js').BuildbotSyncer;
@@ -74,9 +74,9 @@
function createSampleBuildRequest()
{
let rootSet = RootSet.ensureSingleton('4197', {roots: [
- {'id': '111127', 'time': 1456955807334, 'repository': webkit, 'revision': '197463'},
- {'id': '111237', 'time': 1456931874000, 'repository': sharedRepository, 'revision': '80229'},
- {'id': '88930', 'time': 0, 'repository': ios, 'revision': '13A452'},
+ {'id': '111127', 'time': 1456955807334, 'repository': MockModels.webkit, 'revision': '197463'},
+ {'id': '111237', 'time': 1456931874000, 'repository': MockModels.sharedRepository, 'revision': '80229'},
+ {'id': '88930', 'time': 0, 'repository': MockModels.ios, 'revision': '13A452'},
]});
let request = BuildRequest.ensureSingleton('16733', {'rootSet': rootSet, 'status': 'pending'});
@@ -281,6 +281,9 @@
}
describe('BuildbotSyncer', function () {
+ MockModels.inject();
+ let requests = MockRemoteAPI.inject();
+
describe('_loadConfig', function () {
function smallConfiguration()
Modified: trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/measurement-adaptor-tests.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -3,7 +3,7 @@
var assert = require('assert');
require('../tools/js/v3-models.js');
-require('./resources/mock-v3-models.js');
+let MockModels = require('./resources/mock-v3-models.js').MockModels;
var sampleCluster = {
'clusterStart': 946684800000,
@@ -26,6 +26,8 @@
var sampleData = sampleCluster.configurations.current[0];
describe('MeasurementAdaptor', function () {
+ MockModels.inject();
+
describe('applyTo', function () {
it('should adapt id', function () {
var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
@@ -50,7 +52,7 @@
assert.ok(adoptor.applyTo(sampleData).build() instanceof Build);
assert.equal(adoptor.applyTo(sampleData).build().id(), 184629);
assert.equal(adoptor.applyTo(sampleData).build().buildNumber(), '178');
- assert.equal(adoptor.applyTo(sampleData).build().builder(), builder);
+ assert.equal(adoptor.applyTo(sampleData).build().builder(), MockModels.builder);
assert.equal(adoptor.applyTo(sampleData).build().label(), 'Build 178 on WebKit Perf Builder');
assert.equal(adoptor.applyTo(sampleData).build().url(), 'http://build.webkit.org/builders/WebKit Perf Builder/178');
});
@@ -68,12 +70,12 @@
assert.ok(rootSet instanceof RootSet);
assert.equal(rootSet.latestCommitTime(), 1447707055576);
- assert.ok(rootSet.repositories().indexOf(osx) >= 0);
- assert.equal(rootSet.revisionForRepository(osx), '10.11 15D21');
+ assert.ok(rootSet.repositories().indexOf(MockModels.osx) >= 0);
+ assert.equal(rootSet.revisionForRepository(MockModels.osx), '10.11 15D21');
- var commit = rootSet.commitForRepository(osx);
+ var commit = rootSet.commitForRepository(MockModels.osx);
assert.ok(commit instanceof CommitLog);
- assert.equal(commit.repository(), osx);
+ assert.equal(commit.repository(), MockModels.osx);
assert.ok(commit.time() instanceof Date);
assert.equal(commit.id(), 111);
assert.equal(commit.revision(), '10.11 15D21');
@@ -86,12 +88,12 @@
var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
var rootSet = adoptor.applyTo(sampleData).rootSet();
- assert.ok(rootSet.repositories().indexOf(webkit) >= 0);
- assert.equal(rootSet.revisionForRepository(webkit), '192483');
+ assert.ok(rootSet.repositories().indexOf(MockModels.webkit) >= 0);
+ assert.equal(rootSet.revisionForRepository(MockModels.webkit), '192483');
- var commit = rootSet.commitForRepository(webkit);
+ var commit = rootSet.commitForRepository(MockModels.webkit);
assert.ok(commit instanceof CommitLog);
- assert.equal(commit.repository(), webkit);
+ assert.equal(commit.repository(), MockModels.webkit);
assert.ok(commit.time() instanceof Date);
assert.equal(commit.id(), 222);
assert.equal(+commit.time(), 1447707055576);
@@ -103,11 +105,11 @@
it('should not create separate CommitLog object for the same revision', function () {
var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
- assert.equal(adoptor.applyTo(sampleData).rootSet().commitForRepository(webkit),
- adoptor.applyTo(sampleData).rootSet().commitForRepository(webkit));
+ assert.equal(adoptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.webkit),
+ adoptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.webkit));
- assert.equal(adoptor.applyTo(sampleData).rootSet().commitForRepository(osx),
- adoptor.applyTo(sampleData).rootSet().commitForRepository(osx));
+ assert.equal(adoptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.osx),
+ adoptor.applyTo(sampleData).rootSet().commitForRepository(MockModels.osx));
});
});
Modified: trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/measurement-set-tests.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -2,11 +2,14 @@
var assert = require('assert');
-require('./resources/mock-remote-api.js');
+let MockRemoteAPI = require('./resources/mock-remote-api.js').MockRemoteAPI;
require('../tools/js/v3-models.js');
-require('./resources/mock-v3-models.js');
+let MockModels = require('./resources/mock-v3-models.js').MockModels;
describe('MeasurementSet', function () {
+ MockModels.inject();
+ let requests = MockRemoteAPI.inject();
+
beforeEach(function () {
MeasurementSet._set = null;
});
Modified: trunk/Websites/perf.webkit.org/unit-tests/resources/mock-remote-api.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/resources/mock-remote-api.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/resources/mock-remote-api.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -3,8 +3,7 @@
if (!assert.notReached)
assert.notReached = function () { assert(false, 'This code path should not be reached'); }
-global.requests = [];
-global.RemoteAPI = {
+var MockRemoteAPI = {
getJSON: function (url)
{
return this.getJSONWithStatus(url);
@@ -23,11 +22,27 @@
request.reject = reject;
});
- requests.push(request);
+ MockRemoteAPI.requests.push(request);
return request.promise;
},
+ inject: function ()
+ {
+ var originalRemoteAPI = global.RemoteAPI;
+
+ beforeEach(function () {
+ MockRemoteAPI.requests.length = 0;
+ originalRemoteAPI = global.RemoteAPI;
+ global.RemoteAPI = MockRemoteAPI;
+ });
+
+ afterEach(function () {
+ global.RemoteAPI = originalRemoteAPI;
+ });
+
+ return MockRemoteAPI.requests;
+ }
};
+MockRemoteAPI.requests = [];
-beforeEach(function () {
- requests = [];
-});
+if (typeof module != 'undefined')
+ module.exports.MockRemoteAPI = MockRemoteAPI;
Modified: trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/resources/mock-v3-models.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -1,20 +1,41 @@
'use strict';
-beforeEach(function () {
- AnalysisTask._fetchAllPromise = null;
- AnalysisTask.clearStaticMap();
- CommitLog.clearStaticMap();
- RootSet.clearStaticMap();
- TestGroup.clearStaticMap();
- BuildRequest.clearStaticMap();
+var MockModels = {
+ inject: function () {
+ beforeEach(function () {
+ AnalysisTask._fetchAllPromise = null;
+ AnalysisTask.clearStaticMap();
+ CommitLog.clearStaticMap();
+ Metric.clearStaticMap();
+ RootSet.clearStaticMap();
+ Test.clearStaticMap();
+ TestGroup.clearStaticMap();
+ BuildRequest.clearStaticMap();
- global.osx = Repository.ensureSingleton(9, {name: 'OS X'});
- global.ios = Repository.ensureSingleton(22, {name: 'iOS'});
- global.webkit = Repository.ensureSingleton(11, {name: 'WebKit', url: 'http://trac.webkit.org/changeset/$1'});
- global.sharedRepository = Repository.ensureSingleton(16, {name: 'Shared'});
- global.builder = new Builder(176, {name: 'WebKit Perf Builder', buildUrl: 'http://build.webkit.org/builders/$builderName/$buildNumber'});
+ MockModels.osx = Repository.ensureSingleton(9, {name: 'OS X'});
+ MockModels.ios = Repository.ensureSingleton(22, {name: 'iOS'});
+ MockModels.webkit = Repository.ensureSingleton(11, {name: 'WebKit', url: 'http://trac.webkit.org/changeset/$1'});
+ MockModels.sharedRepository = Repository.ensureSingleton(16, {name: 'Shared'});
+ MockModels.builder = new Builder(176, {name: 'WebKit Perf Builder', buildUrl: 'http://build.webkit.org/builders/$builderName/$buildNumber'});
- global.someTest = Test.ensureSingleton(1928, {name: 'Some test'});
- global.someMetric = Metric.ensureSingleton(2884, {name: 'Some metric', test: someTest});
- global.somePlatform = Platform.ensureSingleton(65, {name: 'Some platform', metrics: [someMetric]});
-});
+ MockModels.someTest = Test.ensureSingleton(1, {name: 'Some test'});
+ MockModels.someMetric = Metric.ensureSingleton(2884, {name: 'Some metric', test: MockModels.someTest});
+ MockModels.somePlatform = Platform.ensureSingleton(65, {name: 'Some platform', metrics: [MockModels.someMetric]});
+
+ MockModels.speedometer = Test.ensureSingleton(1928, {name: 'Speedometer'});
+ MockModels.jetstream = Test.ensureSingleton(1886, {name: 'JetStream'});
+ MockModels.dromaeo = Test.ensureSingleton(2022, {name: 'Dromaeo'});
+ MockModels.domcore = Test.ensureSingleton(2023, {name: 'DOM Core Tests', parentId: 2022});
+
+ MockModels.iphone = Platform.ensureSingleton(12, {name: 'iPhone', metrics: []});
+ MockModels.ipad = Platform.ensureSingleton(13, {name: 'iPad', metrics: []});
+
+ MockModels.plt = Test.ensureSingleton(844, {name: 'Page Load Test'});
+ MockModels.pltMean = Metric.ensureSingleton(1158, {name: 'Time', aggregator: 'Arithmetic', test: MockModels.plt});
+ MockModels.elCapitan = Platform.ensureSingleton(31, {name: 'El Capitan', metrics: [MockModels.pltMean]});
+ });
+ }
+}
+
+if (typeof module != 'undefined')
+ module.exports.MockModels = MockModels;
Modified: trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js (198825 => 198826)
--- trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js 2016-03-30 03:34:15 UTC (rev 198825)
+++ trunk/Websites/perf.webkit.org/unit-tests/test-groups-tests.js 2016-03-30 04:16:48 UTC (rev 198826)
@@ -3,7 +3,7 @@
var assert = require('assert');
require('../tools/js/v3-models.js');
-require('./resources/mock-v3-models.js');
+let MockModels = require('./resources/mock-v3-models.js').MockModels;
function sampleTestGroup() {
return {
@@ -104,6 +104,7 @@
}
describe('TestGroup', function () {
+ MockModels.inject();
describe('_createModelsFromFetchedTestGroups', function () {
it('should create test groups', function () {
@@ -164,31 +165,31 @@
assert.ok(secondSet instanceof RootSet);
assert.equal(secondSet, buildRequests[3].rootSet());
- assert.equal(firstSet.revisionForRepository(webkit), '191622');
- var firstWebKitCommit = firstSet.commitForRepository(webkit);
+ assert.equal(firstSet.revisionForRepository(MockModels.webkit), '191622');
+ var firstWebKitCommit = firstSet.commitForRepository(MockModels.webkit);
assert.ok(firstWebKitCommit instanceof CommitLog);
- assert.ok(firstWebKitCommit, buildRequests[2].rootSet().commitForRepository(webkit));
- assert.ok(firstWebKitCommit.repository(), webkit);
+ assert.ok(firstWebKitCommit, buildRequests[2].rootSet().commitForRepository(MockModels.webkit));
+ assert.ok(firstWebKitCommit.repository(), MockModels.webkit);
assert.ok(firstWebKitCommit.revision(), '191622');
assert.ok(firstWebKitCommit.time() instanceof Date);
assert.ok(+firstWebKitCommit.time(), 1445945816878);
- assert.equal(secondSet.revisionForRepository(webkit), '192736');
- var secondWebKitCommit = secondSet.commitForRepository(webkit);
+ assert.equal(secondSet.revisionForRepository(MockModels.webkit), '192736');
+ var secondWebKitCommit = secondSet.commitForRepository(MockModels.webkit);
assert.ok(secondWebKitCommit instanceof CommitLog);
- assert.ok(secondWebKitCommit, buildRequests[3].rootSet().commitForRepository(webkit));
- assert.ok(secondWebKitCommit.repository(), webkit);
+ assert.ok(secondWebKitCommit, buildRequests[3].rootSet().commitForRepository(MockModels.webkit));
+ assert.ok(secondWebKitCommit.repository(), MockModels.webkit);
assert.ok(secondWebKitCommit.revision(), '192736');
assert.ok(secondWebKitCommit.time() instanceof Date);
assert.ok(+secondWebKitCommit.time(), 1445945816878);
- assert.equal(firstSet.revisionForRepository(osx), '10.11 15A284');
- var osxCommit = firstSet.commitForRepository(osx);
+ assert.equal(firstSet.revisionForRepository(MockModels.osx), '10.11 15A284');
+ var osxCommit = firstSet.commitForRepository(MockModels.osx);
assert.ok(osxCommit instanceof CommitLog);
- assert.equal(osxCommit, buildRequests[1].rootSet().commitForRepository(osx));
- assert.equal(osxCommit, buildRequests[2].rootSet().commitForRepository(osx));
- assert.equal(osxCommit, buildRequests[3].rootSet().commitForRepository(osx));
- assert.ok(osxCommit.repository(), osx);
+ assert.equal(osxCommit, buildRequests[1].rootSet().commitForRepository(MockModels.osx));
+ assert.equal(osxCommit, buildRequests[2].rootSet().commitForRepository(MockModels.osx));
+ assert.equal(osxCommit, buildRequests[3].rootSet().commitForRepository(MockModels.osx));
+ assert.ok(osxCommit.repository(), MockModels.osx);
assert.ok(osxCommit.revision(), '10.11 15A284');
});
});