| Index: Tools/GardeningServer/model/test/ct-failures-tests.html
|
| diff --git a/Tools/GardeningServer/model/test/ct-failures-tests.html b/Tools/GardeningServer/model/test/ct-failures-tests.html
|
| deleted file mode 100644
|
| index 1f73e91f09ff5ca8175e92924beac06e5166c8a2..0000000000000000000000000000000000000000
|
| --- a/Tools/GardeningServer/model/test/ct-failures-tests.html
|
| +++ /dev/null
|
| @@ -1,534 +0,0 @@
|
| -<!--
|
| -Copyright 2014 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.
|
| --->
|
| -
|
| -<link rel="import" href="../ct-failures.html">
|
| -
|
| -<link rel="import" href="../../lib/network-simulator.html">
|
| -<link rel="import" href="../ct-commit-list.html">
|
| -<link rel="import" href="../ct-commit-log-mock.html">
|
| -<link rel="import" href="../ct-failure-group.html">
|
| -<link rel="import" href="../ct-step-failure.html">
|
| -
|
| -<script>
|
| -(function () {
|
| -'use strict';
|
| -
|
| -var assert = chai.assert;
|
| -
|
| -describe('ct-failures', function() {
|
| - describe('failureComparator', function() {
|
| - it('should sort failures', function() {
|
| - var analyzer = new CTFailures(new CTCommitList(undefined, []));
|
| -
|
| - var resultsByBuilder = {};
|
| - var failure1 = new CTStepFailure("step1", "reason1", resultsByBuilder, 123, 123);
|
| - var failure2 = new CTStepFailure("step1", "reason2", resultsByBuilder, 123, 123);
|
| - var failure3 = new CTStepFailure("step1", "reason3", resultsByBuilder, 123, 123);
|
| - var failure4 = new CTStepFailure("step2", "reason1", resultsByBuilder, 123, 123);
|
| -
|
| - var failures = [failure4, failure3, failure2, failure1];
|
| - var expectedFailures = [failure1, failure2, failure3, failure4];
|
| - assert.deepEqual(failures.sort(analyzer._failureComparator), expectedFailures);
|
| - });
|
| - });
|
| -
|
| - describe('failureByTreeListComparator', function() {
|
| - it('should compare failures correctly', function() {
|
| - var analyzer = new CTFailures(new CTCommitList(undefined, []));
|
| -
|
| - var cl1 = new CTCommitList(undefined, ['chromium:1', 'blink:2']);
|
| - var cl2 = new CTCommitList(undefined, ['chromium:2', 'blink:1']);
|
| - var cl3 = new CTCommitList(undefined, ['chromium:2', 'blink:2']);
|
| - var cl4 = new CTCommitList(undefined, []);
|
| - var group1 = new CTFailureGroup('', new CTStepFailureGroupData([], cl1));
|
| - var group2 = new CTFailureGroup('', new CTStepFailureGroupData([], cl2));
|
| - var group3 = new CTFailureGroup('', new CTStepFailureGroupData([], cl3));
|
| - var group4 = new CTFailureGroup('', new CTStepFailureGroupData([], cl4));
|
| -
|
| - // Sort by last revision first.
|
| - assert(analyzer._failureByTreeListComparator('chromium', group1, group2) > 0);
|
| - assert(analyzer._failureByTreeListComparator('chromium', group2, group1) < 0);
|
| - assert(analyzer._failureByTreeListComparator('chromium', group1, group1) == 0);
|
| -
|
| - // If the tree revisions are equal, take others.
|
| - assert(analyzer._failureByTreeListComparator('chromium', group2, group3) > 0);
|
| -
|
| - // Prioritize the given tree.
|
| - assert(analyzer._failureByTreeListComparator('chromium', group1, group2) > 0);
|
| - assert(analyzer._failureByTreeListComparator('blink', group1, group2) < 0);
|
| -
|
| - // Default to 'chromium'.
|
| - assert(analyzer._failureByTreeListComparator(undefined, group1, group2) > 0);
|
| -
|
| - // Failures without a revision go to the end.
|
| - assert(analyzer._failureByTreeListComparator('chromium', group4, group1) > 0);
|
| - });
|
| - });
|
| -
|
| - describe('._mungeAlerts', function() {
|
| - it('puts alerts into a standard format', function() {
|
| - var analyzer = new CTFailures(new CTCommitList(undefined, []));
|
| - var alerts = [
|
| - {
|
| - reason: 'reason',
|
| - master_url: 'https://build.chromium.org/p/chromium.webkit',
|
| - tree: 'blink',
|
| - },
|
| - {
|
| - reason: 'reason:type',
|
| - master_url: 'https://build.chromium.org/p/chromium.chrome',
|
| - tree: 'chromium',
|
| - },
|
| - {
|
| - master_url: 'https://build.chromium.org/p/chromium.gpu',
|
| - tree: 'chromium',
|
| - },
|
| - {
|
| - reason: 'reason:type',
|
| - failureType: 'actual_type',
|
| - tree: undefined,
|
| - },
|
| - ];
|
| - analyzer._mungeAlerts(alerts);
|
| - assert.lengthOf(alerts, 4);
|
| - assert.deepEqual(alerts[0], {
|
| - reason: 'reason',
|
| - failureType: 'FAIL',
|
| - master_url: 'https://build.chromium.org/p/chromium.webkit',
|
| - tree: 'blink',
|
| - });
|
| - assert.deepEqual(alerts[1], {
|
| - reason: 'reason',
|
| - failureType: 'type',
|
| - master_url: 'https://build.chromium.org/p/chromium.chrome',
|
| - tree: 'chromium',
|
| - });
|
| - assert.deepEqual(alerts[2], {
|
| - failureType: 'UNKNOWN',
|
| - master_url: 'https://build.chromium.org/p/chromium.gpu',
|
| - tree: 'chromium',
|
| - });
|
| - assert.deepEqual(alerts[3], {
|
| - reason: 'reason:type',
|
| - failureType: 'actual_type',
|
| - tree: undefined,
|
| - });
|
| - });
|
| - });
|
| -
|
| - describe('.groupFailuresByTreeAndReason', function() {
|
| - it('groups failures', function() {
|
| - var analyzer = new CTFailures(new CTCommitList(undefined, []));
|
| - var linuxAnnotation = [1];
|
| - var winAnnotation = [2];
|
| - var blinkAnnotation = [3];
|
| - var annotations = {
|
| - 'https_//build.chromium.org/p/chromium::Linux::1::unit_tests::MyTest': linuxAnnotation,
|
| - 'https_//build.chromium.org/p/chromium::Win::3::unit_tests::MyTest': winAnnotation,
|
| - 'https_//build.chromium.org/p/chromium.webkit::Linux::1::LayoutTests::MyTest': blinkAnnotation,
|
| - };
|
| - var failuresByTree = analyzer._groupFailuresByTreeAndReason([{
|
| - tree: 'chromium',
|
| - step_name: 'unit_tests',
|
| - reason: 'MyTest',
|
| - builder_name: 'Linux',
|
| - failureType: 'a_type',
|
| - failing_build: 1,
|
| - last_failing_build: 2,
|
| - master_url: 'https://build.chromium.org/p/chromium',
|
| - }, {
|
| - tree: 'chromium',
|
| - step_name: 'unit_tests',
|
| - reason: 'MyTest',
|
| - builder_name: 'Win',
|
| - failureType: 'another_type',
|
| - failing_build: 3,
|
| - last_failing_build: 44,
|
| - master_url: 'https://build.chromium.org/p/chromium',
|
| - }, {
|
| - tree: 'blink',
|
| - step_name: 'LayoutTests',
|
| - reason: 'MyTest',
|
| - builder_name: 'Linux',
|
| - failureType: 'a_type',
|
| - failing_build: 1,
|
| - last_failing_build: 2,
|
| - master_url: 'https://build.chromium.org/p/chromium.webkit',
|
| - }], annotations);
|
| - assert.equal(Object.size(failuresByTree), 2);
|
| - assert.equal(Object.size(failuresByTree.chromium), 1);
|
| - assert.property(failuresByTree.chromium, '{"step":"unit_tests","reason":"MyTest"}');
|
| - var chromiumBuilders = failuresByTree.chromium['{"step":"unit_tests","reason":"MyTest"}'];
|
| - assert.equal(Object.size(chromiumBuilders), 2);
|
| - assert.equal(Object.size(chromiumBuilders.Linux), 7);
|
| - assert.propertyVal(chromiumBuilders.Linux, 'key', 'https_//build.chromium.org/p/chromium::Linux::1::unit_tests::MyTest');
|
| - assert.propertyVal(chromiumBuilders.Linux, 'actual', 'a_type');
|
| - assert.propertyVal(chromiumBuilders.Linux, 'lastFailingBuild', 2);
|
| - assert.propertyVal(chromiumBuilders.Linux, 'masterUrl', 'https://build.chromium.org/p/chromium');
|
| - assert.propertyVal(chromiumBuilders.Linux, 'failingBuildCount', 2);
|
| - assert.propertyVal(chromiumBuilders.Linux, 'annotation', linuxAnnotation);
|
| -
|
| - assert.equal(Object.size(chromiumBuilders.Win), 7);
|
| - assert.propertyVal(chromiumBuilders.Win, 'key', 'https_//build.chromium.org/p/chromium::Win::3::unit_tests::MyTest');
|
| - assert.propertyVal(chromiumBuilders.Win, 'actual', 'another_type');
|
| - assert.propertyVal(chromiumBuilders.Win, 'lastFailingBuild', 44);
|
| - assert.propertyVal(chromiumBuilders.Win, 'masterUrl', 'https://build.chromium.org/p/chromium');
|
| - assert.propertyVal(chromiumBuilders.Win, 'failingBuildCount', 42);
|
| - assert.propertyVal(chromiumBuilders.Win, 'annotation', winAnnotation);
|
| -
|
| - assert.equal(Object.size(failuresByTree.blink), 1);
|
| - assert.property(failuresByTree.blink, '{"step":"LayoutTests","reason":"MyTest"}');
|
| - var blinkBuilders = failuresByTree.blink['{"step":"LayoutTests","reason":"MyTest"}'];
|
| - assert.equal(Object.size(blinkBuilders), 1);
|
| - assert.equal(Object.size(blinkBuilders.Linux), 7);
|
| - assert.propertyVal(blinkBuilders.Linux, 'key', 'https_//build.chromium.org/p/chromium.webkit::Linux::1::LayoutTests::MyTest');
|
| - assert.propertyVal(blinkBuilders.Linux, 'actual', 'a_type');
|
| - assert.propertyVal(blinkBuilders.Linux, 'lastFailingBuild', 2);
|
| - assert.propertyVal(blinkBuilders.Linux, 'masterUrl', 'https://build.chromium.org/p/chromium.webkit');
|
| - assert.propertyVal(blinkBuilders.Linux, 'failingBuildCount', 2);
|
| - assert.propertyVal(blinkBuilders.Linux, 'annotation', blinkAnnotation);
|
| - });
|
| - });
|
| -
|
| - describe('.update', function() {
|
| - it('should update everything', function(done) {
|
| - var simulator = new NetworkSimulator(assert, done);
|
| - var netData = {
|
| - 'sheriff-o-matic.appspot.com/alerts': {
|
| - stale_builder_alerts: [
|
| - {
|
| - 'master_url': 'http://build.chromium.org/p/chromium.webkit',
|
| - 'builder_name': 'Linux Tests',
|
| - 'state': 'building',
|
| - 'last_update_time': 1409697347.089103,
|
| - 'pending_builds': 4,
|
| - 'tree': 'blink',
|
| - },
|
| - {
|
| - 'master_url': 'http://build.chromium.org/p/chromium.linux',
|
| - 'builder_name': 'Linux Tests (dbg)',
|
| - 'state': 'offline',
|
| - 'last_update_time': 1409697347.089103,
|
| - 'pending_builds': 2,
|
| - 'tree': 'blink',
|
| - },
|
| - {
|
| - 'master_url': 'http://build.chromium.org/p/chromium.win',
|
| - 'builder_name': 'Win Tests (dbg)',
|
| - 'state': 'idle',
|
| - 'last_update_time': 1409697347.089103,
|
| - 'pending_builds': 5,
|
| - 'tree': 'blink',
|
| - },
|
| - {
|
| - 'last_update_time': 1409697347.089103,
|
| - 'master_url': 'https://build.chromium.org/p/chromium.perf',
|
| - 'master_name': 'chromium.perf',
|
| - 'tree': 'chromium',
|
| - },
|
| - ],
|
| - range_groups: [
|
| - {
|
| - sort_key: 'linux: Linux Tests (dbg)(1)',
|
| - failure_keys: [ 'f1', ],
|
| - likely_revisions: [
|
| - 'chromium: 100',
|
| - 'chromium: 101',
|
| - ],
|
| - merged_first_failing: {
|
| - blink: 50,
|
| - nacl: 50,
|
| - v8: 50,
|
| - chromium: 101,
|
| - },
|
| - merged_last_passing: {
|
| - blink: 50,
|
| - nacl: 50,
|
| - v8: 50,
|
| - chromium: 99,
|
| - },
|
| - },
|
| - {
|
| - sort_key: 'linux: Linux Tests (dbg)(1)',
|
| - failure_keys: [ 'f2', ],
|
| - likely_revisions: [
|
| - 'chromium: 200',
|
| - ],
|
| - merged_first_failing: {
|
| - blink: 50,
|
| - nacl: 50,
|
| - v8: 50,
|
| - chromium: 200,
|
| - },
|
| - merged_last_passing: {
|
| - blink: 50,
|
| - nacl: 50,
|
| - v8: 50,
|
| - chromium: 199,
|
| - },
|
| - },
|
| - {
|
| - sort_key: 'mac: Mac Tests',
|
| - failure_keys: [ 'f3', ],
|
| - likely_revisions: [
|
| - 'chromium: 100',
|
| - 'chromium: 101',
|
| - ],
|
| - merged_first_failing: {
|
| - blink: 50,
|
| - nacl: 50,
|
| - v8: 50,
|
| - chromium: 200,
|
| - },
|
| - merged_last_passing: {
|
| - blink: 50,
|
| - nacl: 50,
|
| - v8: 50,
|
| - chromium: 199,
|
| - },
|
| - },
|
| - ],
|
| - alerts: [
|
| - {
|
| - last_result_time: 1409697347.089103,
|
| - passing_build: 2485,
|
| - last_failing_build: 2489,
|
| - failing_build: 2486,
|
| - latest_revisions: {
|
| - v8: 50,
|
| - chromium: 103,
|
| - nacl: 50,
|
| - blink: 51
|
| - },
|
| - master_url: "https://build.chromium.org/p/chromium.linux",
|
| - reason: null,
|
| - failing_revisions: {
|
| - v8: 50,
|
| - chromium: 101,
|
| - nacl: 50,
|
| - blink: 50
|
| - },
|
| - builder_name: "Linux Tests (dbg)(1)",
|
| - key: "f1",
|
| - step_name: "compile",
|
| - tree: 'chromium',
|
| - passing_revisions: {
|
| - v8: 50,
|
| - chromium: 99,
|
| - nacl: 50,
|
| - blink: 50
|
| - },
|
| - would_close_tree: true
|
| - },
|
| - {
|
| - last_result_time: 1409697347.089103,
|
| - passing_build: 2485,
|
| - last_failing_build: 2489,
|
| - failing_build: 2486,
|
| - latest_revisions: {
|
| - v8: 50,
|
| - chromium: 203,
|
| - nacl: 50,
|
| - blink: 51
|
| - },
|
| - master_url: "https://build.chromium.org/p/chromium.linux",
|
| - reason: 'Foo.Test',
|
| - failing_revisions: {
|
| - v8: 50,
|
| - chromium: 200,
|
| - nacl: 50,
|
| - blink: 50
|
| - },
|
| - builder_name: "Linux Tests (dbg)(1)",
|
| - key: "f2",
|
| - step_name: "foo_tests",
|
| - tree: 'chromium',
|
| - passing_revisions: {
|
| - v8: 50,
|
| - chromium: 99,
|
| - nacl: 50,
|
| - blink: 50
|
| - },
|
| - would_close_tree: true
|
| - },
|
| - {
|
| - last_result_time: 1409697347.089103,
|
| - passing_build: 2485,
|
| - last_failing_build: 2489,
|
| - failing_build: 2486,
|
| - latest_revisions: {
|
| - v8: 50,
|
| - chromium: 103,
|
| - nacl: 50,
|
| - blink: 51
|
| - },
|
| - master_url: "https://build.chromium.org/p/chromium.mac",
|
| - reason: null,
|
| - failing_revisions: {
|
| - v8: 50,
|
| - chromium: 101,
|
| - nacl: 50,
|
| - blink: 50
|
| - },
|
| - builder_name: "Mac Tests",
|
| - key: "f3",
|
| - step_name: "compile",
|
| - tree: 'chromium',
|
| - passing_revisions: {
|
| - v8: 50,
|
| - chromium: 99,
|
| - nacl: 50,
|
| - blink: 50
|
| - },
|
| - would_close_tree: true
|
| - },
|
| - ],
|
| - date: 1409697816.726562,
|
| - },
|
| - 'trooper-o-matic.appspot.com/alerts': {
|
| -
|
| - }
|
| - }
|
| - simulator.json = function(url) {
|
| - var matched = Object.find(netData, function(key) {
|
| - return url.indexOf(key) != -1;
|
| - });
|
| - if (matched) {
|
| - return Promise.resolve(netData[matched]);
|
| - } else {
|
| - return Promise.reject('Unexpected url: ' + url);
|
| - }
|
| - };
|
| - simulator.runTest(function() {
|
| - var analyzer = new CTFailures(CTCommitLogMock());
|
| - return analyzer.update().then(function() {
|
| - assert.property(analyzer.failures, 'chromium');
|
| - assert.lengthOf(analyzer.failures.chromium, 4);
|
| - var masterFailureGroup = analyzer.failures.chromium[0];
|
| - var testFailureGroup = analyzer.failures.chromium[1];
|
| - var compileFailureGroup = analyzer.failures.chromium[2];
|
| - var macCompileFailureGroup = analyzer.failures.chromium[3];
|
| - assert.equal(compileFailureGroup.constructor, CTFailureGroup);
|
| - assert.equal(compileFailureGroup.key, 'compile::Linux Tests (dbg)(1)');
|
| - assert.lengthOf(compileFailureGroup.data.failures, 1);
|
| - var failure = compileFailureGroup.data.failures[0];
|
| - assert.equal(failure.constructor, CTStepFailure);
|
| - assert.equal(failure.key, 'compile::Linux Tests (dbg)(1)');
|
| - assert.equal(failure.step, 'compile');
|
| - assert.equal(failure.testName, null);
|
| - var resultNodesByBuilder = failure.resultNodesByBuilder;
|
| - assert.property(resultNodesByBuilder, 'Linux Tests (dbg)(1)');
|
| - var dbgBuilder = resultNodesByBuilder['Linux Tests (dbg)(1)'];
|
| - assert.propertyVal(dbgBuilder, 'actual', 'UNKNOWN');
|
| - assert.propertyVal(dbgBuilder, 'lastFailingBuild', 2489);
|
| - assert.propertyVal(dbgBuilder, 'masterUrl', 'https://build.chromium.org/p/chromium.linux');
|
| - assert.propertyVal(dbgBuilder, 'failingBuildCount', 4);
|
| - assert.property(analyzer.failures, 'blink');
|
| - assert.lengthOf(analyzer.failures.blink, 3);
|
| - assert.equal(analyzer.failures.blink[0].data.failure.hoursSinceLastUpdate, 0.13);
|
| -
|
| - var commitList = compileFailureGroup.data.commitList;
|
| - assert.equal(commitList.constructor, CTCommitList);
|
| - assert.lengthOf(commitList.repositories, 1);
|
| - var repositoryCommitList = commitList.repositories[0];
|
| - assert.propertyVal(repositoryCommitList, 'range', '100 : 101');
|
| - assert.propertyVal(repositoryCommitList, 'expanded', false);
|
| -
|
| - // Flip |expanded| to true to check that it's preserved across updates.
|
| - repositoryCommitList.expanded = true;
|
| -
|
| - // Update |netData| to make sure it's propagated into the updated values.
|
| - netData['sheriff-o-matic.appspot.com/alerts'].alerts[0].last_failing_build = 2490;
|
| -
|
| - return analyzer.update().then(function() {
|
| - assert.strictEqual(analyzer.failures.chromium[0], masterFailureGroup)
|
| - assert.strictEqual(analyzer.failures.chromium[1], testFailureGroup)
|
| - assert.strictEqual(analyzer.failures.chromium[2], compileFailureGroup)
|
| - assert.strictEqual(analyzer.failures.chromium[3], macCompileFailureGroup)
|
| - assert.strictEqual(compileFailureGroup.data.failures[0], failure)
|
| - assert.strictEqual(failure.resultNodesByBuilder, resultNodesByBuilder);
|
| - assert.strictEqual(resultNodesByBuilder['Linux Tests (dbg)(1)'], dbgBuilder);
|
| - assert.propertyVal(dbgBuilder, 'lastFailingBuild', 2490);
|
| -
|
| - assert.strictEqual(compileFailureGroup.data.commitList, commitList);
|
| - assert.strictEqual(commitList.repositories[0], repositoryCommitList);
|
| - assert.propertyVal(repositoryCommitList, 'expanded', true);
|
| - });
|
| - });
|
| - });
|
| - });
|
| - });
|
| -
|
| - describe('processTrooperFailures', function() {
|
| - it('should filter out updates that are not alerts', function() {
|
| - var analyzer = new CTFailures(new CTCommitList(undefined, []));
|
| - analyzer.failures = {};
|
| - analyzer._processTrooperFailures({},
|
| - {'key_1': {'tree_1': {should_alert: true, should_appear: true},
|
| - 'tree_2': {should_alert: false, should_appear: false}},
|
| - 'key_2': {'tree_3': {should_alert: false, should_appear: false},
|
| - 'tree_4': {should_alert: true, should_appear: true}}});
|
| - analyzer.failures['trooper'].forEach(function(failure) {
|
| - assert(failure.data.data.should_appear);
|
| - });
|
| - assert(analyzer.failures['trooper'].length == 2);
|
| - });
|
| - });
|
| -
|
| - describe('processTrooperFailures', function() {
|
| - it('should list all failures with category builder and master', function() {
|
| - var emptyCommit = new CTCommitList(undefined, []);
|
| - var emptyGroupData = new CTStepFailureGroupData([], emptyCommit);
|
| - var group1 = new CTFailureGroup('', emptyGroupData, 'builder');
|
| - var group2 = new CTFailureGroup('', emptyGroupData, 'failedOnce');
|
| - var group3 = new CTFailureGroup('', emptyGroupData, 'master');
|
| -
|
| - var analyzer = new CTFailures(new CTCommitList(undefined, []));
|
| - analyzer.failures = {};
|
| - analyzer._processTrooperFailures(
|
| - {'tree_1': [group1], 'tree_2': [group2, group3]}, {});
|
| - analyzer.failures['trooper'].forEach(function(failure) {
|
| - assert(failure.category == 'builder' || failure.category == 'master');
|
| - });
|
| - assert(analyzer.failures['trooper'].length == 2);
|
| - });
|
| - });
|
| -
|
| - describe('processFailuresForRangeGroup', function() {
|
| - it('should use tree name from json', function() {
|
| - var analyzer = new CTFailures(null);
|
| -
|
| - var annotations = Promise.resolve({
|
| - 'test-key': 'test-annotation',
|
| - })
|
| - var range_groups = {
|
| - 'failure_keys': ['test-key'],
|
| - 'likely_revisions': []
|
| - }
|
| - var alertsByKey = {
|
| - 'test-key': {
|
| - 'key': 'test-key',
|
| - 'step_name': 'bot_update',
|
| - 'tree': 'test-tree',
|
| - 'builder_name': 'Linux',
|
| - 'last_failing_build': 1234,
|
| - 'failing_build': 1234,
|
| - 'master_url': 'https://build.chromium.org/p/chromium',
|
| - 'reason': 'test-reason',
|
| - }
|
| - }
|
| - var newFailures = {}
|
| -
|
| - analyzer._processFailuresForRangeGroup(newFailures, range_groups, alertsByKey, annotations)
|
| - assert.ok('test-tree' in newFailures)
|
| - assert.notOk('chromium' in newFailures)
|
| - });
|
| - });
|
| -
|
| -});
|
| -
|
| -})()
|
| -</script>
|
|
|