Title: [94309] trunk/Tools
Revision
94309
Author
[email protected]
Date
2011-09-01 10:48:59 -0700 (Thu, 01 Sep 2011)

Log Message

Group failing tests in garden-o-matic if there are more than three in a folder
https://bugs.webkit.org/show_bug.cgi?id=67373

Reviewed by Dimitri Glazkov.

Sometimes a failure will cause many tests in a given directory to fail.
When that happens, it's better to list the directory as a single item
(with a count) rather than spamming all the test names.

(This patch also updates a bunch of unit test expected results after my last commit.)

* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js (94308 => 94309)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js	2011-09-01 17:47:00 UTC (rev 94308)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js	2011-09-01 17:48:59 UTC (rev 94309)
@@ -54,6 +54,14 @@
     return parent + '/' + child;
 };
 
+base.dirName = function(path)
+{
+    var directoryIndex = path.lastIndexOf('/');
+    if (directoryIndex == -1)
+        return path;
+    return path.substr(0, directoryIndex);
+};
+
 base.trimExtension = function(url)
 {
     var index = url.lastIndexOf('.');

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js (94308 => 94309)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js	2011-09-01 17:47:00 UTC (rev 94308)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js	2011-09-01 17:48:59 UTC (rev 94309)
@@ -58,6 +58,12 @@
     equals(value, "test.html");
 });
 
+test("dirName", 3, function() {
+    equals(base.dirName("foo.html"), "foo.html");
+    equals(base.dirName("foo/bar.html"), "foo");
+    equals(base.dirName("foo/bar/baz.html"), "foo/bar");
+});
+
 test("uniquifyArray", 5, function() {
     deepEqual(base.uniquifyArray([]), []);
     deepEqual(base.uniquifyArray(["a"]), ["a"]);

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js (94308 => 94309)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js	2011-09-01 17:47:00 UTC (rev 94308)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js	2011-09-01 17:48:59 UTC (rev 94309)
@@ -51,25 +51,27 @@
     deepEqual(Object.getOwnPropertyNames(grid.__proto__), ["init", "_rowByResult", "add", "removeResultRows"]);
     equal(grid.outerHTML, '<table class="failures">' +
         '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
-        '<tbody></tbody>' +
+        '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
     '</table>');
     var row = grid._rowByResult('TEXT');
     equal(grid.outerHTML, '<table class="failures">' +
         '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
         '<tbody>' +
-            '<tr>' +
+            '<tr class="TEXT">' +
                 '<td>TEXT</td><td></td><td></td>' +
             '</tr>' +
+            '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
         '</tbody>' +
     '</table>');
-    equal(row.outerHTML, '<tr><td>TEXT</td><td></td><td></td></tr>');
+    equal(row.outerHTML, '<tr class="TEXT"><td>TEXT</td><td></td><td></td></tr>');
     grid.add({});
     equal(grid.outerHTML, '<table class="failures">' +
         '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
         '<tbody>' +
-            '<tr>' +
+            '<tr class="TEXT">' +
                 '<td>TEXT</td><td></td><td></td>' +
             '</tr>' +
+            '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
         '</tbody>' +
     '</table>');
     raises(function() {
@@ -79,43 +81,46 @@
     equal(grid.outerHTML, '<table class="failures">' +
         '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
         '<tbody>' +
-            '<tr>' +
+            '<tr class="TEXT">' +
                 '<td>TEXT</td>' +
                 '<td></td>' +
                 '<td><div><span class="architecture">64-bit</span><span class="version">lucid</span></div></td>' +
             '</tr>' +
+            '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
         '</tbody>' +
     '</table>');
     grid.add({'Webkit Mac10.5 (CG)': { actual: 'IMAGE+TEXT'}});
     equal(grid.outerHTML, '<table class="failures">' +
         '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
         '<tbody>' +
-            '<tr>' +
+            '<tr class="IMAGE+TEXT">' +
+                '<td>IMAGE+TEXT</td>' +
+                '<td><div><span class="version">leopard</span></div></td>' +
+                '<td></td>' +
+            '</tr>' +
+            '<tr class="TEXT">' +
                 '<td>TEXT</td>' +
                 '<td></td>' +
                 '<td><div><span class="architecture">64-bit</span><span class="version">lucid</span></div></td>' +
             '</tr>' +
-            '<tr>' +
-                '<td>IMAGE+TEXT</td>' +
-                '<td><div><span class="version">leopard</span></div></td>' +
-                '<td></td>' +
-            '</tr>' +
+            '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
         '</tbody>' +
     '</table>');
     grid.add({'Webkit Mac10.5 (CG)': { actual: 'IMAGE+TEXT'}});
     equal(grid.outerHTML, '<table class="failures">' +
         '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
         '<tbody>' +
-            '<tr>' +
+            '<tr class="IMAGE+TEXT">' +
+                '<td>IMAGE+TEXT</td>' +
+                '<td><div><span class="version">leopard</span></div></td>' +
+                '<td></td>' +
+            '</tr>' +
+            '<tr class="TEXT">' +
                 '<td>TEXT</td>' +
                 '<td></td>' +
                 '<td><div><span class="architecture">64-bit</span><span class="version">lucid</span></div></td>' +
             '</tr>' +
-            '<tr>' +
-                '<td>IMAGE+TEXT</td>' +
-                '<td><div><span class="version">leopard</span></div></td>' +
-                '<td></td>' +
-            '</tr>' +
+            '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
         '</tbody>' +
     '</table>');
 });

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js (94308 => 94309)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js	2011-09-01 17:47:00 UTC (rev 94308)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js	2011-09-01 17:48:59 UTC (rev 94309)
@@ -28,6 +28,8 @@
 
 (function(){
 
+var kMaxTestsPerGroup = 3;
+
 ui.notifications.Stream = base.extends('ol', {
     init: function()
     {
@@ -82,15 +84,10 @@
     }
 });
 
-ui.notifications.FailingTest = base.extends('li', {
-    init: function(failureAnalysis)
+ui.notifications.FailingTestGroup = base.extends('li', {
+    init: function(testGroup)
     {
-        this._failureAnalysis = failureAnalysis;
-        this.textContent = failureAnalysis.testName;
-    },
-    equals: function(failureAnalysis)
-    {
-        return this._failureAnalysis.testName == failureAnalysis.testName;
+        this.textContent = testGroup;
     }
 })
 
@@ -160,9 +157,7 @@
     },
     containsFailureAnalysis: function(failureAnalysis)
     {
-        return Array.prototype.some.call(this._effects.children, function(child) {
-            return child.equals(failureAnalysis);
-        });
+        return this._testNameList.indexOf(failureAnalysis.testName) != -1;
     },
     updateBuilderResults: function(resultNodesByBuilder)
     {
@@ -174,7 +169,10 @@
             return;
         this._testNameList.push(failureAnalysis.testName);
         this.updateBuilderResults(failureAnalysis.resultNodesByBuilder);
-        return this._effects.appendChild(new ui.notifications.FailingTest(failureAnalysis));
+        $(this._effects).empty();
+        this._forEachTestGroup(function (testGroup) {
+            this._effects.appendChild(new ui.notifications.FailingTestGroup(testGroup))
+        }.bind(this));
     },
     addCommitData: function(commitData)
     {
@@ -184,6 +182,26 @@
             this._time.setDate(commitDataDate);
         }
         return this._causes.appendChild(new ui.notifications.SuspiciousCommit(commitData));
+    },
+    _forEachTestGroup: function(callback)
+    {
+        var testsByDirectory = {};
+        this._testNameList.forEach(function(testName) {
+            var directory = base.dirName(testName);
+            testsByDirectory[directory] = testsByDirectory[directory] || [];
+            testsByDirectory[directory].push(testName);
+        });
+        var individualTests = [];
+        Object.keys(testsByDirectory).forEach(function(directory) {
+            var testsInDirectory = testsByDirectory[directory];
+            var count = testsInDirectory.length;
+            if (count <= kMaxTestsPerGroup) {
+                individualTests = individualTests.concat(testsInDirectory);
+                return;
+            }
+            callback(directory + ' (' + count + ' tests)');
+        });
+        individualTests.forEach(callback);
     }
 });
 

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js (94308 => 94309)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js	2011-09-01 17:47:00 UTC (rev 94308)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js	2011-09-01 17:48:59 UTC (rev 94309)
@@ -76,12 +76,10 @@
     equal(info.innerHTML, '<div class="how"></div><div class="what">info</div>');
 });
 
-test('FailingTest', 4, function() {
-    var failingTest = new ui.notifications.FailingTest({testName: 'test'});
+test('FailingTestGroup', 2, function() {
+    var failingTest = new ui.notifications.FailingTestGroup('test');
     equal(failingTest.tagName, 'LI');
     equal(failingTest.innerHTML, 'test');
-    ok(failingTest.equals({testName: 'test'}));
-    ok(!failingTest.equals({testName: 'foo'}));
 });
 
 test('SuspiciousCommit', 2, function() {
@@ -106,6 +104,7 @@
         "testNameList",
         "updateBuilderResults",
         "addFailureAnalysis",
+        "_forEachTestGroup",
         "containsFailureAnalysis",
         "addCommitData"
     ]);
@@ -115,7 +114,7 @@
             '<time class="relative">Just now</time>' +
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
-                '<tbody></tbody>' +
+                '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
             '</table>' +
         '</div>' +
         '<div class="what">' +
@@ -134,7 +133,7 @@
             '<time class="relative">Just now</time>' +
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
-                '<tbody></tbody>' +
+                '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
             '</table>' +
         '</div>' +
         '<div class="what">' +
@@ -156,7 +155,7 @@
             '<time class="relative">Just now</time>' +
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
-                '<tbody></tbody>' +
+                '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
             '</table>' +
         '</div>' +
         '<div class="what">' +
@@ -180,7 +179,7 @@
             '<time class="relative">10 minutes ago</time>' +
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
-                '<tbody></tbody>' +
+                '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
             '</table>' +
         '</div>' +
         '<div class="what">' +
@@ -214,11 +213,12 @@
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
                 '<tbody>' +
-                    '<tr>' +
+                    '<tr class="TEXT">' +
                         '<td>TEXT</td>' +
                         '<td></td>' +
                         '<td><div><span class="architecture">64-bit</span><span class="version">lucid</span></div></td>' +
                     '</tr>' +
+                    '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
                 '</tbody>' +
             '</table>' +
         '</div>' +
@@ -254,12 +254,12 @@
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
                 '<tbody>' +
-                    '<tr>' +
+                    '<tr class="TEXT">' +
                         '<td>TEXT</td>' +
                         '<td></td>' +
                         '<td><div><span class="architecture">64-bit</span><span class="version">lucid</span></div></td>' +
                     '</tr>' +
-                    '<tr>' +
+                    '<tr class="BUILDING" style="">' +
                         '<td>BUILDING</td>' +
                         '<td><div><span class="version">leopard</span></div></td>' +
                         '<td></td>' +
@@ -293,6 +293,36 @@
         '</div>');
 });
 
+test('TestsFailing (grouping)', 1, function() {
+    var testFailures = new ui.notifications.TestsFailing();
+    testFailures.addFailureAnalysis({testName: 'path/to/test1.html', resultNodesByBuilder: {}});
+    testFailures.addFailureAnalysis({testName: 'path/to/test2.html', resultNodesByBuilder: {}});
+    testFailures.addFailureAnalysis({testName: 'path/to/test3.html', resultNodesByBuilder: {}});
+    testFailures.addFailureAnalysis({testName: 'path/to/test4.html', resultNodesByBuilder: {}});
+    testFailures.addFailureAnalysis({testName: 'path/another/test.html', resultNodesByBuilder: {}});
+    equal(testFailures.innerHTML,
+        '<div class="how">' +
+            '<time class="relative">Just now</time>' +
+            '<table class="failures">' +
+                '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
+                '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
+            '</table>' +
+        '</div>' +
+        '<div class="what">' +
+            '<div class="problem">' +
+                '<ul class="effects">' +
+                    '<li>path/to (4 tests)</li>' +
+                    '<li>path/another/test.html</li>' +
+                '</ul>' +
+                '<ul class="actions">' +
+                    '<li><button>Examine</button></li>' +
+                '</ul>' +
+            '</div>' +
+            '<ul class="causes"></ul>' +
+        '</div>');
+
+});
+
 test('BuildersFailing', 1, function() {
     var builderFailing = new ui.notifications.BuildersFailing();
     builderFailing.setFailingBuilders(['WebKit Linux', 'Webkit Vista']);
@@ -301,7 +331,7 @@
             '<time class="relative">Just now</time>' +
             '<table class="failures">' +
                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
-                '<tbody></tbody>' +
+                '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
             '</table>' +
         '</div>' +
         '<div class="what">' +

Modified: trunk/Tools/ChangeLog (94308 => 94309)


--- trunk/Tools/ChangeLog	2011-09-01 17:47:00 UTC (rev 94308)
+++ trunk/Tools/ChangeLog	2011-09-01 17:48:59 UTC (rev 94309)
@@ -1,5 +1,24 @@
 2011-09-01  Adam Barth  <[email protected]>
 
+        Group failing tests in garden-o-matic if there are more than three in a folder
+        https://bugs.webkit.org/show_bug.cgi?id=67373
+
+        Reviewed by Dimitri Glazkov.
+
+        Sometimes a failure will cause many tests in a given directory to fail.
+        When that happens, it's better to list the directory as a single item
+        (with a count) rather than spamming all the test names.
+
+        (This patch also updates a bunch of unit test expected results after my last commit.)
+
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/failures_unittests.js:
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
+
+2011-09-01  Adam Barth  <[email protected]>
+
         Lower the visual noise from the failing builders display
         https://bugs.webkit.org/show_bug.cgi?id=67369
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to