Add a model for parsing buildbot JSON with unit tests
[WebKit-https.git] / Websites / perf.webkit.org / unit-tests / measurement-adaptor-tests.js
1 'use strict';
2
3 var assert = require('assert');
4
5 require('../tools/js/v3-models.js');
6 require('./resources/mock-v3-models.js');
7
8 var sampleCluster = {
9     'clusterStart': 946684800000,
10     'clusterSize': 5184000000,
11     'configurations': {
12         'current': [
13             [28954983, 217.94607142857, 20, 4358.9214285714, 950303.02365434, false, [[111, 9, '10.11 15D21', 0], [222, 11, '192483', 1447707055576], [333, 999, 'some unknown revision', 0]], 1447707055576, 184629, 1447762266153, '178', 176],
14             [28952257, 220.11455357143, 20, 4402.2910714286, 969099.67509885, false, [[111, 9, '10.11 15D21', 0], [444, 11, '192486', 1447713500460]], 1447713500460, 184614, 1447760255683, '177', 176]
15         ]
16     },
17     'formatMap': ['id', 'mean', 'iterationCount', 'sum', 'squareSum', 'markedOutlier', 'revisions',
18         'commitTime', 'build', 'buildTime', 'buildNumber', 'builder'],
19     'startTime': 1449532800000,
20     'endTime': 1454716800000,
21     'lastModified': 1452067190008,
22     'clusterCount': 2,
23     'elapsedTime': 210.68406105042,
24     'status': 'OK'
25 };
26 var sampleData = sampleCluster.configurations.current[0];
27
28 describe('MeasurementAdaptor', function () {
29     describe('applyTo', function () {
30         it('should adapt id', function () {
31             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
32             assert.equal(adoptor.applyTo(sampleData).id, 28954983);
33         });
34
35         it('should adapt mean, squareMean, and iteration count', function () {
36             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
37             assert.equal(adoptor.applyTo(sampleData).value, 217.94607142857);
38             assert.equal(adoptor.applyTo(sampleData).sum, 4358.9214285714);
39             assert.equal(adoptor.applyTo(sampleData).squareSum, 950303.02365434);
40             assert.equal(adoptor.applyTo(sampleData).iterationCount, 20);
41         });
42
43         it('should adapt commitTime as the canonical time', function () {
44             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
45             assert.equal(adoptor.applyTo(sampleData).time, 1447707055576);
46         });
47
48         it('should adapt build information as a Build object', function () {
49             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
50             assert.ok(adoptor.applyTo(sampleData).build() instanceof Build);
51             assert.equal(adoptor.applyTo(sampleData).build().id(), 184629);
52             assert.equal(adoptor.applyTo(sampleData).build().buildNumber(), '178');
53             assert.equal(adoptor.applyTo(sampleData).build().builder(), builder);
54             assert.equal(adoptor.applyTo(sampleData).build().label(), 'Build 178 on WebKit Perf Builder');
55             assert.equal(adoptor.applyTo(sampleData).build().url(), 'http://build.webkit.org/builders/WebKit Perf Builder/178');
56         });
57
58         it('should adapt revision information as a RootSet object', function () {
59             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
60             var rootSet = adoptor.applyTo(sampleData).rootSet();
61             assert.ok(rootSet instanceof RootSet);
62             assert.equal(rootSet.latestCommitTime(), 1447707055576);
63         });
64
65         it('should adapt OS X version as a CommitLog object', function () {
66             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
67             var rootSet = adoptor.applyTo(sampleData).rootSet();
68             assert.ok(rootSet instanceof RootSet);
69             assert.equal(rootSet.latestCommitTime(), 1447707055576);
70
71             assert.ok(rootSet.repositories().indexOf(osx) >= 0);
72             assert.equal(rootSet.revisionForRepository(osx), '10.11 15D21');
73
74             var commit = rootSet.commitForRepository(osx);
75             assert.ok(commit instanceof CommitLog);
76             assert.equal(commit.repository(), osx);
77             assert.ok(commit.time() instanceof Date);
78             assert.equal(commit.id(), 111);
79             assert.equal(commit.revision(), '10.11 15D21');
80             assert.equal(commit.label(), '10.11 15D21');
81             assert.equal(commit.title(), 'OS X at 10.11 15D21');
82             assert.equal(commit.url(), '');
83         });
84
85         it('should adapt WebKit revision as a CommitLog object', function () {
86             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
87             var rootSet = adoptor.applyTo(sampleData).rootSet();
88
89             assert.ok(rootSet.repositories().indexOf(webkit) >= 0);
90             assert.equal(rootSet.revisionForRepository(webkit), '192483');
91
92             var commit = rootSet.commitForRepository(webkit);
93             assert.ok(commit instanceof CommitLog);
94             assert.equal(commit.repository(), webkit);
95             assert.ok(commit.time() instanceof Date);
96             assert.equal(commit.id(), 222);
97             assert.equal(+commit.time(), 1447707055576);
98             assert.equal(commit.revision(), '192483');
99             assert.equal(commit.label(), 'r192483');
100             assert.equal(commit.title(), 'WebKit at r192483');
101             assert.equal(commit.url(), 'http://trac.webkit.org/changeset/192483');
102         });
103
104         it('should not create separate CommitLog object for the same revision', function () {
105             var adoptor = new MeasurementAdaptor(sampleCluster.formatMap);
106             assert.equal(adoptor.applyTo(sampleData).rootSet().commitForRepository(webkit),
107                 adoptor.applyTo(sampleData).rootSet().commitForRepository(webkit));
108
109             assert.equal(adoptor.applyTo(sampleData).rootSet().commitForRepository(osx),
110                 adoptor.applyTo(sampleData).rootSet().commitForRepository(osx));
111         });
112
113     });
114 });