Changeset 96265 in webkit


Ignore:
Timestamp:
Sep 28, 2011 3:25:38 PM (13 years ago)
Author:
abarth@webkit.org
Message:

garden-o-matic shouldn't depend on test-results.appspot.com
https://bugs.webkit.org/show_bug.cgi?id=69019

Reviewed by Dimitri Glazkov.

This patch moves garden-o-matic from getting full_results.json from
test-results.appspot.com to getting that information directly from the
buildbot. This patch improve the load time and accuracy of
garden-o-matic because test-results.appspot.com is slow and is dropping
a significant number of writes (see
https://bugs.webkit.org/show_bug.cgi?id=68748).

  • BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:
  • BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
  • BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js

    r94579 r96265  
    4848};
    4949
    50 // jQuery makes jsonp requests somewhat ugly (which is fair given that they're
    51 // terrible for security). We use this wrapper to make our lives slightly easier.
    52 net.jsonp = function(url, onsuccess)
     50// We use XMLHttpRequest and CORS to fetch JSONP rather than using script tags.
     51// That's better for security and performance, but we need the server to cooperate
     52// by setting CORS headers.
     53net.jsonp = function(url, callback)
    5354{
    5455    $.ajax({
    5556        url: url,
    56         dataType: 'jsonp',
    57         success: onsuccess
     57        success: function(jsonp) {
     58            callback(base.parseJSONP(jsonp));
     59        },
     60        error: function() {
     61            callback({});
     62        },
    5863    });
    5964};
  • trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js

    r94580 r96265  
    2828(function() {
    2929
    30 var kTestResultsServer = 'http://test-results.appspot.com/';
    31 var kTestResultsQuery = kTestResultsServer + 'testfile?'
    32 var kTestType = 'layout-tests';
    33 var kMasterName = 'ChromiumWebkit';
    34 
    3530var kLayoutTestResultsServer = 'http://build.chromium.org/f/chromium/layout_test_results/';
    3631var kLayoutTestResultsPath = '/results/layout-test-results/';
    3732var kResultsName = 'full_results.json';
     33
     34var kBuildLinkRegexp = /a href="\d+\/"/g;
     35var kBuildNumberRegexp = /\d+/;
    3836
    3937var PASS = 'PASS';
     
    8785{
    8886    return result === PASS;
    89 }
    90 
    91 function resultsParameters(builderName, testName)
    92 {
    93     return {
    94         builder: builderName,
    95         master: kMasterName,
    96         testtype: kTestType,
    97         name: testName,
    98     };
    9987}
    10088
     
    180168};
    181169
    182 function resultsSummaryURL(builderName, resultsName)
    183 {
    184     return resultsDirectoryURL(builderName) + resultsName;
    185 }
    186 
    187 function directoryOfResultsSummaryURL(builderName, testName)
    188 {
    189     var parameters = resultsParameters(builderName, testName);
    190     parameters['dir'] = 1;
    191     return kTestResultsQuery + $.param(parameters);
    192 }
    193 
    194 var g_resultsCache = new base.AsynchronousCache(function(key, callback) {
    195     net.jsonp(kTestResultsServer + 'testfile?key=' + key, callback);
     170results.directoryForBuilder = function(builderName)
     171{
     172    return builderName.replace(/[ .()]/g, '_');
     173}
     174
     175function resultsDirectoryURL(builderName)
     176{
     177    return kLayoutTestResultsServer + results.directoryForBuilder(builderName) + kLayoutTestResultsPath;
     178}
     179
     180function resultsDirectoryListingURL(builderName)
     181{
     182    return kLayoutTestResultsServer + results.directoryForBuilder(builderName) + '/';
     183}
     184
     185function resultsDirectoryURLForBuildNumber(builderName, buildNumber)
     186{
     187    return resultsDirectoryListingURL(builderName) + buildNumber + '/'
     188}
     189
     190function resultsSummaryURL(builderName)
     191{
     192    return resultsDirectoryURL(builderName) + kResultsName;
     193}
     194
     195function resultsSummaryURLForBuildNumber(builderName, buildNumber)
     196{
     197    return resultsDirectoryURLForBuildNumber(builderName, buildNumber) + kResultsName;
     198}
     199
     200var g_resultsCache = new base.AsynchronousCache(function (key, callback) {
     201    net.jsonp(key, callback);
    196202});
    197203
     
    317323    return base.uniquifyArray(collectedResults);
    318324};
     325
     326function historicalResultsSummaryURLs(builderName, callback)
     327{
     328    net.get(resultsDirectoryListingURL(builderName), function(directoryListing) {
     329        var summaryURLs = directoryListing.match(kBuildLinkRegexp).map(function(buildLink) {
     330            var buildNumber = parseInt(buildLink.match(kBuildNumberRegexp)[0]);
     331            return resultsSummaryURLForBuildNumber(builderName, buildNumber);
     332        }).reverse();
     333        callback(summaryURLs);
     334    });
     335}
    319336
    320337function walkHistory(builderName, testName, callback)
     
    349366    }
    350367
    351     net.jsonp(directoryOfResultsSummaryURL(builderName, kResultsName), function(directory) {
    352         keyList = directory.map(function (element) { return element.key; });
     368    historicalResultsSummaryURLs(builderName, function(summaryURLs) {
     369        keyList = summaryURLs;
    353370        continueWalk();
    354371    });
     
    463480};
    464481
    465 results.directoryForBuilder = function(builderName)
    466 {
    467     return builderName.replace(/[ .()]/g, '_');
    468 }
    469 
    470 function resultsDirectoryURL(builderName)
    471 {
    472     return kLayoutTestResultsServer + results.directoryForBuilder(builderName) + kLayoutTestResultsPath;
    473 }
    474 
    475482results.resultKind = function(url)
    476483{
     
    541548results.fetchResultsForBuilder = function(builderName, callback)
    542549{
    543     net.get(resultsSummaryURL(builderName, kResultsName), function(jsonp) {
    544         callback(base.parseJSONP(jsonp));
    545     });
     550    net.jsonp(resultsSummaryURL(builderName), callback);
    546551};
    547552
  • trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js

    r96153 r96265  
    165165
    166166    var keyMap = {
    167         "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGLncUAw": {
    168             "tests": {
    169                 "userscripts": {
    170                     "another-test.html": {
    171                         "expected": "PASS",
    172                         "actual": "TEXT"
    173                     }
    174                 },
    175             },
    176             "revision": "90430"
    177         },
    178         "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGNfTUAw":{
    179             "tests": {
    180                 "userscripts": {
    181                     "user-script-video-document.html": {
    182                         "expected": "FAIL",
    183                         "actual": "TEXT"
    184                     },
    185                     "another-test.html": {
    186                         "expected": "PASS",
    187                         "actual": "TEXT"
    188                     }
    189                 },
    190             },
    191             "revision": "90429"
    192         },
    193         "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGJWCUQw":{
    194             "tests": {
    195                 "userscripts": {
    196                     "another-test.html": {
    197                         "expected": "PASS",
    198                         "actual": "TEXT"
    199                     }
    200                 },
    201             },
    202             "revision": "90426"
    203         },
    204         "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGKbLUAw":{
    205             "tests": {
    206                 "userscripts": {
    207                     "user-script-video-document.html": {
    208                         "expected": "FAIL",
    209                         "actual": "TEXT"
    210                     },
    211                 },
    212             },
    213             "revision": "90424"
    214         },
    215         "abc":{
    216             "tests": {
    217                 "userscripts": {
    218                     "another-test.html": {
    219                         "expected": "PASS",
    220                         "actual": "TEXT"
    221                     }
    222                 },
    223             },
    224             "revision": "90426"
    225         },
    226         "xyz":{
    227             "tests": {
    228             },
    229             "revision": "90425"
    230         }
     167        "Mock_Builder": {
     168            "11108": {
     169                "tests": {
     170                    "userscripts": {
     171                        "another-test.html": {
     172                            "expected": "PASS",
     173                            "actual": "TEXT"
     174                        }
     175                    },
     176                },
     177                "revision": "90430"
     178            },
     179            "11107":{
     180                "tests": {
     181                    "userscripts": {
     182                        "user-script-video-document.html": {
     183                            "expected": "FAIL",
     184                            "actual": "TEXT"
     185                        },
     186                        "another-test.html": {
     187                            "expected": "PASS",
     188                            "actual": "TEXT"
     189                        }
     190                    },
     191                },
     192                "revision": "90429"
     193            },
     194            "11106":{
     195                "tests": {
     196                    "userscripts": {
     197                        "another-test.html": {
     198                            "expected": "PASS",
     199                            "actual": "TEXT"
     200                        }
     201                    },
     202                },
     203                "revision": "90426"
     204            },
     205            "11105":{
     206                "tests": {
     207                    "userscripts": {
     208                        "user-script-video-document.html": {
     209                            "expected": "FAIL",
     210                            "actual": "TEXT"
     211                        },
     212                    },
     213                },
     214                "revision": "90424"
     215            },
     216        },
     217        "Another_Builder": {
     218            "22202":{
     219                "tests": {
     220                    "userscripts": {
     221                        "another-test.html": {
     222                            "expected": "PASS",
     223                            "actual": "TEXT"
     224                        }
     225                    },
     226                },
     227                "revision": "90426"
     228            },
     229            "22201":{
     230                "tests": {
     231                },
     232                "revision": "90425"
     233            },
     234        },
    231235    };
    232236
    233237    simulator.jsonp = function(url, callback) {
    234238        simulator.scheduleCallback(function() {
    235             if (/dir=1/.test(url)) {
    236                 if (/builder=Mock/.test(url)) {
    237                     callback([
    238                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGLncUAw" },
    239                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGNfTUAw" },
    240                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGJWCUQw" },
    241                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGKbLUAw" },
    242                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGOj5UAw" },
    243                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGP-AUQw" },
    244                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGPL3UAw" },
    245                         { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGNHJQAw" },
    246                     ]);
    247                 } else if (/builder=Another/.test(url)) {
    248                     callback([
    249                         { "key": "abc" },
    250                         { "key": "xyz" },
    251                     ]);
    252                 } else {
    253                     ok(false, 'Unexpected URL: ' + url);
    254                 }
    255             } else {
    256                 var key = url.match(/key=([^&]+)/)[1];
    257                 callback(keyMap[key]);
    258             }
    259         });
    260     };
     239            var result = keyMap[/[^/]+_Builder/.exec(url)][/\d+/.exec(url)];
     240            callback(result ? result : {});
     241        });
     242    };
     243
     244    simulator.get = function(url, callback) {
     245        simulator.scheduleCallback(function() {
     246            if (/Mock_Builder/.test(url))
     247                callback('<a href="11101/"></a><a href="11102/"></a><a href="11103/"></a><a href="11104/"></a><a href="11105/"></a><a href="11106/"></a><a href="11107/"></a><a href="11108/"></a>');
     248            else if (/Another_Builder/.test(url))
     249                callback('<a href="22201/"></a><a href="22202/"></a>');
     250            else
     251                ok(false, 'Unexpected URL: ' + url);
     252        });
     253    };
     254
    261255    simulator.runTest(function() {
    262256        results.regressionRangeForFailure("Mock Builder", "userscripts/another-test.html", function(oldestFailingRevision, newestPassingRevision) {
     
    280274
    281275    var keyMap = {
    282         "vsfdsfdsafsdafasd": {
    283             "tests": {
    284                 "userscripts": {
    285                     "another-test.html": {
    286                         "expected": "PASS",
    287                         "actual": "TEXT"
    288                     }
    289                 },
    290             },
    291             "revision": ""
    292         },
    293         "gavsavsrfgwaevwefawvae":{
    294             "tests": {
    295             },
    296             "revision": ""
     276        "Mock_Builder": {
     277            "11103": {
     278                "tests": {
     279                    "userscripts": {
     280                        "another-test.html": {
     281                            "expected": "PASS",
     282                            "actual": "TEXT"
     283                        }
     284                    },
     285                },
     286                "revision": ""
     287            },
     288            "11102":{
     289                "tests": {
     290                },
     291                "revision": ""
     292            },
    297293        },
    298294    };
     
    300296    simulator.jsonp = function(url, callback) {
    301297        simulator.scheduleCallback(function() {
    302             if (/dir=1/.test(url)) {
    303                 callback([
    304                     { "key": "vsfdsfdsafsdafasd" },
    305                     { "key": "gavsavsrfgwaevwefawvae" },
    306                 ]);
    307             } else {
    308                 var key = url.match(/key=([^&]+)/)[1];
    309                 callback(keyMap[key]);
    310             }
    311         });
    312     };
     298            var result = keyMap[/[^/]+_Builder/.exec(url)][/\d+/.exec(url)];
     299            callback(result ? result : {});
     300        });
     301    };
     302
     303    simulator.get = function(url, callback) {
     304        simulator.scheduleCallback(function() {
     305            callback('<a href="11101/"></a><a href="11102/"></a><a href="11103/"></a>');
     306        });
     307    };
     308
    313309
    314310    simulator.runTest(function() {
  • trunk/Tools/ChangeLog

    r96263 r96265  
     12011-09-28  Adam Barth  <abarth@webkit.org>
     2
     3        garden-o-matic shouldn't depend on test-results.appspot.com
     4        https://bugs.webkit.org/show_bug.cgi?id=69019
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        This patch moves garden-o-matic from getting full_results.json from
     9        test-results.appspot.com to getting that information directly from the
     10        buildbot.  This patch improve the load time and accuracy of
     11        garden-o-matic because test-results.appspot.com is slow and is dropping
     12        a significant number of writes (see
     13        https://bugs.webkit.org/show_bug.cgi?id=68748).
     14
     15        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:
     16        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:
     17        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results_unittests.js:
     18
    1192011-09-28  David Levin  <levin@chromium.org>
    220
Note: See TracChangeset for help on using the changeset viewer.