Remove the dependence on jsonp from more of new-run-webkit-tests and the test results...
authorojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 20 Nov 2011 01:13:19 +0000 (01:13 +0000)
committerojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 20 Nov 2011 01:13:19 +0000 (01:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=72813

Reviewed by Adam Barth.

Once this lands, we can start storing pure json in the test results server and then
we can delete the code with all the FIXMEs added here.

* Scripts/webkitpy/layout_tests/controllers/manager.py:
* Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
Only add jsonp for full_results.json.
* TestResultServer/model/jsonresults.py:
* TestResultServer/model/jsonresults_unittest.py:
Accept pure json uploads.
* TestResultServer/static-dashboards/dashboard_base.js:
(appendJSONScriptElementFor):
Use the callback parameter so that the server can start returning pure json if it's left out.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@100862 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
Tools/TestResultServer/model/jsonresults.py
Tools/TestResultServer/model/jsonresults_unittest.py
Tools/TestResultServer/static-dashboards/dashboard_base.js

index c72176d56dd6e94e8644c5181152121fa4e84b6f..3f6e03d800fd26014c9b9a16f043996a398b6349 100644 (file)
@@ -1,3 +1,23 @@
+2011-11-19  Ojan Vafai  <ojan@chromium.org>
+
+        Remove the dependence on jsonp from more of new-run-webkit-tests and the test results server
+        https://bugs.webkit.org/show_bug.cgi?id=72813
+
+        Reviewed by Adam Barth.
+
+        Once this lands, we can start storing pure json in the test results server and then
+        we can delete the code with all the FIXMEs added here.
+
+        * Scripts/webkitpy/layout_tests/controllers/manager.py:
+        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
+        Only add jsonp for full_results.json.
+        * TestResultServer/model/jsonresults.py:
+        * TestResultServer/model/jsonresults_unittest.py:
+        Accept pure json uploads.
+        * TestResultServer/static-dashboards/dashboard_base.js:
+        (appendJSONScriptElementFor):
+        Use the callback parameter so that the server can start returning pure json if it's left out.
+
 2011-11-19  Ojan Vafai  <ojan@chromium.org>
 
         Allow json NRWT downloads to be pure json and not jsonp
index d7347a02746436cbaa42b2bde40910a2429e3d88..ad4be2c8abc44fa5d59aa6c3d7fa59da36a6e041 100644 (file)
@@ -1081,7 +1081,8 @@ class Manager(object):
         json_results_generator.write_json(self._fs, times_trie, times_json_path)
 
         full_results_path = self._fs.join(self._results_directory, "full_results.json")
-        json_results_generator.write_json(self._fs, summarized_results, full_results_path)
+        # We write full_results.json out as jsonp because we need to load it from a file url and Chromium doesn't allow that.
+        json_results_generator.write_json(self._fs, summarized_results, full_results_path, callback="ADD_RESULTS")
 
         generator = json_layout_results_generator.JSONLayoutResultsGenerator(
             self._port, self._options.builder_name, self._options.build_name,
index cf58498bd5243193ce7ca25738cee69b321cdfd0..25c3f525037a9eee976c4aed44cea3f10a457dcb 100644 (file)
@@ -56,6 +56,7 @@ def has_json_wrapper(string):
 
 
 def strip_json_wrapper(json_content):
+    # FIXME: Kill this code once the server returns json instead of jsonp.
     if has_json_wrapper(json_content):
         return json_content[len(_JSON_PREFIX):len(json_content) - len(_JSON_SUFFIX)]
     return json_content
@@ -67,10 +68,11 @@ def load_json(filesystem, file_path):
     return json.loads(content)
 
 
-def write_json(filesystem, json_object, file_path):
+def write_json(filesystem, json_object, file_path, callback=None):
     # Specify separators in order to get compact encoding.
-    json_data = json.dumps(json_object, separators=(',', ':'))
-    json_string = _JSON_PREFIX + json_data + _JSON_SUFFIX
+    json_string = json.dumps(json_object, separators=(',', ':'))
+    if callback:
+        json_string = callback + "(" + json_string + ");"
     filesystem.write_text_file(file_path, json_string)
 
 
index 48dafce19b41e22d3a644ef3a58af16980f6f3d0..c201264507ab62a97c9fb121b8f0e9aa4dce8402 100755 (executable)
@@ -53,10 +53,10 @@ JSON_RESULTS_MAX_BUILDS_SMALL = 200
 class JsonResults(object):
     @classmethod
     def _strip_prefix_suffix(cls, data):
-        assert(data.startswith(JSON_RESULTS_PREFIX))
-        assert(data.endswith(JSON_RESULTS_SUFFIX))
-
-        return data[len(JSON_RESULTS_PREFIX):len(data) - len(JSON_RESULTS_SUFFIX)]
+        # FIXME: Stop stripping jsonp callback once we upload pure json everywhere.
+        if data.startswith(JSON_RESULTS_PREFIX) and data.endswith(JSON_RESULTS_SUFFIX):
+            return data[len(JSON_RESULTS_PREFIX):len(data) - len(JSON_RESULTS_SUFFIX)]
+        return data
 
     @classmethod
     def _generate_file_data(cls, json, sort_keys=False):
index 1f497e907f060b6940e3208b264dfaee86b7bd18..9debeee6c6936a9d59b493940398e8d6982ba7b1 100755 (executable)
@@ -81,6 +81,11 @@ class JsonResultsTest(unittest.TestCase):
     def setUp(self):
         self._builder = "Webkit"
 
+    def test_strip_prefix_suffix(self):
+        json = "['contents']"
+        self.assertEqual(JsonResults._strip_prefix_suffix(JSON_RESULTS_PREFIX + json + JSON_RESULTS_SUFFIX), json)
+        self.assertEqual(JsonResults._strip_prefix_suffix(json), json)
+
     def _make_test_json(self, test_data):
         if not test_data:
             return JSON_RESULTS_PREFIX + JSON_RESULTS_SUFFIX
index 8d1d0a29c8c7403ce5d4db12d74091372d8ef12d..52043441e26746a59a5727104b54e2dcaf10707b 100644 (file)
@@ -526,7 +526,7 @@ function appendJSONScriptElementFor(builderName)
     else
         resultsFilename = 'results-small.json';
 
-    appendScript(pathToBuilderResultsFile(builderName) + resultsFilename,
+    appendScript(pathToBuilderResultsFile(builderName) + resultsFilename + '&callback=ADD_RESULTS',
             partial(handleResourceLoadError, builderName),
             partial(handleScriptLoaded, builderName));
 }