Title: [105650] trunk/Tools
Revision
105650
Author
[email protected]
Date
2012-01-23 15:49:00 -0800 (Mon, 23 Jan 2012)

Log Message

run-perf-tests should report server-side errors
https://bugs.webkit.org/show_bug.cgi?id=76802

Reviewed by Tony Chang.

Report errors whenever server's response doesn't match "OK".

* Scripts/webkitpy/common/net/file_uploader.py:
(FileUploader.upload_single_text_file):
(FileUploader.upload_as_multipart_form_data):
(FileUploader._upload_data.callback):
(FileUploader):
(FileUploader._upload_data):
* Scripts/webkitpy/performance_tests/perftestsrunner.py:
(PerfTestsRunner._upload_json):
* Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
(test_upload_json):
(test_upload_json.MockFileUploader.upload_single_text_file):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (105649 => 105650)


--- trunk/Tools/ChangeLog	2012-01-23 23:46:15 UTC (rev 105649)
+++ trunk/Tools/ChangeLog	2012-01-23 23:49:00 UTC (rev 105650)
@@ -1,3 +1,24 @@
+2012-01-23  Ryosuke Niwa  <[email protected]>
+
+        run-perf-tests should report server-side errors
+        https://bugs.webkit.org/show_bug.cgi?id=76802
+
+        Reviewed by Tony Chang.
+
+        Report errors whenever server's response doesn't match "OK".
+
+        * Scripts/webkitpy/common/net/file_uploader.py:
+        (FileUploader.upload_single_text_file):
+        (FileUploader.upload_as_multipart_form_data):
+        (FileUploader._upload_data.callback):
+        (FileUploader):
+        (FileUploader._upload_data):
+        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
+        (PerfTestsRunner._upload_json):
+        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
+        (test_upload_json):
+        (test_upload_json.MockFileUploader.upload_single_text_file):
+
 2012-01-22  Ryosuke Niwa  <[email protected]>
 
         run-perf-tests ignore Skipped list on chromium

Modified: trunk/Tools/Scripts/webkitpy/common/net/file_uploader.py (105649 => 105650)


--- trunk/Tools/Scripts/webkitpy/common/net/file_uploader.py	2012-01-23 23:46:15 UTC (rev 105649)
+++ trunk/Tools/Scripts/webkitpy/common/net/file_uploader.py	2012-01-23 23:49:00 UTC (rev 105650)
@@ -89,7 +89,7 @@
         self._timeout_seconds = timeout_seconds
 
     def upload_single_text_file(self, filesystem, content_type, filename):
-        self._upload_data(content_type, filesystem.read_text_file(filename))
+        return self._upload_data(content_type, filesystem.read_text_file(filename))
 
     def upload_as_multipart_form_data(self, filesystem, files, params, timeout_seconds):
         file_objs = []
@@ -99,17 +99,19 @@
 
         # FIXME: We should use the same variable names for the formal and actual parameters.
         content_type, data = "" file_objs)
-        self._upload_data(content_type, data)
+        return self._upload_data(content_type, data)
 
     def _upload_data(self, content_type, data):
         def callback():
             request = urllib2.Request(self._url, data, {"Content-Type": content_type})
-            urllib2.urlopen(request)
+            return urllib2.urlopen(request)
 
         orig_timeout = socket.getdefaulttimeout()
+        response = None
         try:
             # FIXME: We shouldn't mutate global static state.
             socket.setdefaulttimeout(self._timeout_seconds)
-            NetworkTransaction(timeout_seconds=self._timeout_seconds).run(callback)
+            response = NetworkTransaction(timeout_seconds=self._timeout_seconds).run(callback)
         finally:
             socket.setdefaulttimeout(orig_timeout)
+            return response

Modified: trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py (105649 => 105650)


--- trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py	2012-01-23 23:46:15 UTC (rev 105649)
+++ trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py	2012-01-23 23:49:00 UTC (rev 105650)
@@ -174,11 +174,18 @@
     def _upload_json(self, test_results_server, json_path, file_uploader=FileUploader):
         uploader = file_uploader("https://%s/api/test/report" % test_results_server, 120)
         try:
-            uploader.upload_single_text_file(self._host.filesystem, 'application/json', json_path)
+            response = uploader.upload_single_text_file(self._host.filesystem, 'application/json', json_path)
         except Exception, error:
             _log.error("Failed to upload JSON file in 120s: %s" % error)
             return False
 
+        response_body = [line.strip('\n') for line in response]
+        if response_body != ['OK']:
+            _log.error("Uploaded JSON but got a bad response:")
+            for line in response_body:
+                _log.error(line)
+            return False
+
         self._printer.write("JSON file uploaded.")
         return True
 

Modified: trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py (105649 => 105650)


--- trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py	2012-01-23 23:46:15 UTC (rev 105649)
+++ trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py	2012-01-23 23:49:00 UTC (rev 105650)
@@ -29,12 +29,14 @@
 
 """Unit tests for run_perf_tests."""
 
+import StringIO
 import json
 import unittest
 
 from webkitpy.common import array_stream
 from webkitpy.common.host_mock import MockHost
 from webkitpy.common.system.filesystem_mock import MockFileSystem
+from webkitpy.common.system.outputcapture import OutputCapture
 from webkitpy.layout_tests.port.driver import DriverInput, DriverOutput
 from webkitpy.layout_tests.port.test import TestPort
 from webkitpy.layout_tests.views import printing
@@ -240,11 +242,12 @@
 
     def test_upload_json(self):
         regular_output = array_stream.ArrayStream()
-        runner = self.create_runner(buildbot_output=regular_output)
+        runner = self.create_runner(regular_output=regular_output)
         runner._host.filesystem.files['/mock-checkout/some.json'] = 'some content'
 
         called = []
         upload_single_text_file_throws = False
+        upload_single_text_file_return_value = StringIO.StringIO('OK')
 
         class MockFileUploader:
             def __init__(mock, url, timeout):
@@ -259,10 +262,18 @@
                 called.append('upload_single_text_file')
                 if upload_single_text_file_throws:
                     raise "Some exception"
+                return upload_single_text_file_return_value
 
         runner._upload_json('some.host', 'some.json', MockFileUploader)
         self.assertEqual(called, ['FileUploader', 'upload_single_text_file'])
 
+        output = OutputCapture()
+        output.capture_output()
+        upload_single_text_file_return_value = StringIO.StringIO('Some error')
+        runner._upload_json('some.host', 'some.json', MockFileUploader)
+        _, _, logs = output.restore_output()
+        self.assertEqual(logs, 'Uploaded JSON but got a bad response:\nSome error\n')
+
         # Throwing an exception upload_single_text_file shouldn't blow up _upload_json
         called = []
         upload_single_text_file_throws = True
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to