Changeset 108399 in webkit
- Timestamp:
- Feb 21, 2012 2:26:41 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChangeLog
r108288 r108399 1 2012-02-20 Ryosuke Niwa <rniwa@webkit.org> 2 3 perf-o-matic: Extract logic to generate JSON responses as classes to unit test 4 https://bugs.webkit.org/show_bug.cgi?id=79018 5 6 Rubber-stamped by Adam Birth. 7 8 Extracted DashboardJSONGenerator, ManifestJSONGenerator, and RunsJSONGenerator 9 into json_generators.py from DashboardHandler, ManifestHandler, and RunsHandler 10 and added unit tests for the former three classes. 11 12 Merged the latter three classes into controler.py since they have become too trivial 13 to have their own files. 14 15 * Websites/webkit-perf.appspot.com/controller.py: 16 (ManifestUpdateHandler): 17 (ManifestUpdateHandler.get): 18 (ManifestUpdateHandler.post): 19 (DashboardUpdateHandler): 20 (DashboardUpdateHandler.get): 21 (DashboardUpdateHandler.post): 22 (_get_test_branch_platform_ids): 23 (RunsUpdateHandler): 24 (RunsUpdateHandler.get): 25 (CachedRunsHandler.get): 26 * Websites/webkit-perf.appspot.com/dashboard_handler.py: Removed. 27 * Websites/webkit-perf.appspot.com/json_generators.py: Added. 28 (JSONGeneratorBase): 29 (JSONGeneratorBase.to_json): 30 (DashboardJSONGenerator): 31 (DashboardJSONGenerator.__init__): 32 (DashboardJSONGenerator.value): 33 (ManifestJSONGenerator): 34 (ManifestJSONGenerator.__init__): 35 (ManifestJSONGenerator.value): 36 (RunsJSONGenerator): 37 (RunsJSONGenerator.__init__): 38 (RunsJSONGenerator._generate_runs): 39 (RunsJSONGenerator._entry_from_build_and_result): 40 (RunsJSONGenerator.value): 41 * Websites/webkit-perf.appspot.com/json_generators_unittest.py: Added. 42 (_create_results): 43 (JSONGeneratorBaseTest): 44 (JSONGeneratorBaseTest.test_to_json): 45 (JSONGeneratorBaseTest.test_to_json.AJSONGenerator): 46 (JSONGeneratorBaseTest.test_to_json.AJSONGenerator.value): 47 (DashboardJSONGeneratorTest): 48 (DashboardJSONGeneratorTest.test_value_no_branch): 49 (DashboardJSONGeneratorTest.test_value_no_plaforms): 50 (DashboardJSONGeneratorTest.test_value_single_platform): 51 (DashboardJSONGeneratorTest.test_value_two_platforms): 52 (ManifestJSONGeneratorTest): 53 (ManifestJSONGeneratorTest.test_value_no_branch): 54 (ManifestJSONGeneratorTest.test_value_no_plaforms): 55 (ManifestJSONGeneratorTest._assert_single_test): 56 (ManifestJSONGeneratorTest.test_value_single_platform): 57 (ManifestJSONGeneratorTest.test_value_two_platforms): 58 (ManifestJSONGeneratorTest.test_value_two_tests): 59 (RunsJSONGeneratorTest): 60 (RunsJSONGeneratorTest._create_results): 61 (RunsJSONGeneratorTest.test_generate_runs): 62 (RunsJSONGeneratorTest.test_value_without_results): 63 (RunsJSONGeneratorTest.test_value_with_results): 64 (RunsJSONGeneratorTest._assert_entry): 65 (RunsJSONGeneratorTest.test_run_from_build_and_result): 66 (RunsJSONGeneratorTest.test_run_from_build_and_result.create_build): 67 * Websites/webkit-perf.appspot.com/main.py: 68 * Websites/webkit-perf.appspot.com/manifest_handler.py: Removed. 69 * Websites/webkit-perf.appspot.com/models.py: 70 (Test.update_or_insert.execute): 71 (Test): 72 (TestResult.get_or_insert_from_parsed_json): 73 * Websites/webkit-perf.appspot.com/models_unittest.py: 74 (TestModelTests.test_update_or_insert_to_update): 75 (TestResultTests.test_get_or_insert_stat_value): 76 * Websites/webkit-perf.appspot.com/runs_handler.py: Removed. 77 1 78 2012-02-20 Martin Robinson <mrobinson@igalia.com> 2 79 -
trunk/Websites/webkit-perf.appspot.com/controller.py
r108094 r108399 32 32 from google.appengine.ext import db 33 33 34 from json_generators import DashboardJSONGenerator 35 from json_generators import ManifestJSONGenerator 36 from json_generators import RunsJSONGenerator 37 from models import Branch 38 from models import Platform 34 39 from models import Test 35 40 from models import PersistentCache 41 from models import model_from_numeric_id 36 42 37 43 … … 42 48 def schedule_manifest_update(): 43 49 taskqueue.add(url='/api/test/update') 50 51 52 class ManifestUpdateHandler(webapp2.RequestHandler): 53 def post(self): 54 self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' 55 cache_manifest(ManifestJSONGenerator().to_json()) 56 self.response.out.write('OK') 44 57 45 58 … … 62 75 63 76 77 class DashboardUpdateHandler(webapp2.RequestHandler): 78 def post(self): 79 self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' 80 cache_dashboard(DashboardJSONGenerator().to_json()) 81 self.response.out.write('OK') 82 83 64 84 class CachedDashboardHandler(webapp2.RequestHandler): 65 85 def get(self): … … 80 100 81 101 102 def _get_test_branch_platform_ids(handler): 103 try: 104 test_id = int(handler.request.get('id', 0)) 105 branch_id = int(handler.request.get('branchid', 0)) 106 platform_id = int(handler.request.get('platformid', 0)) 107 return test_id, branch_id, platform_id 108 except TypeError: 109 # FIXME: Output an error here 110 return 0, 0, 0 111 112 113 class RunsUpdateHandler(webapp2.RequestHandler): 114 def get(self): 115 self.post() 116 117 def get(self): 118 self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' 119 test_id, branch_id, platform_id = _get_test_branch_platform_ids(self) 120 121 branch = model_from_numeric_id(branch_id, Branch) 122 platform = model_from_numeric_id(platform_id, Platform) 123 test = model_from_numeric_id(test_id, Test) 124 assert branch 125 assert platform 126 assert test 127 128 cache_runs(test_id, branch_id, platform_id, RunsJSONGenerator(branch, platform, test.name).to_json()) 129 self.response.out.write('OK') 130 131 82 132 class CachedRunsHandler(webapp2.RequestHandler): 83 133 def get(self): 84 134 self.response.headers['Content-Type'] = 'application/json' 85 135 86 try: 87 test_id = int(self.request.get('id', 0)) 88 branch_id = int(self.request.get('branchid', 0)) 89 platform_id = int(self.request.get('platformid', 0)) 90 except TypeError: 91 # FIXME: Output an error here 92 test_id = 0 93 branch_id = 0 94 platform_id = 0 95 136 test_id, branch_id, platform_id = _get_test_branch_platform_ids(self) 96 137 runs = PersistentCache.get_cache(Test.cache_key(test_id, branch_id, platform_id)) 97 138 if runs: -
trunk/Websites/webkit-perf.appspot.com/main.py
r107386 r108399 24 24 from controller import CachedManifestHandler 25 25 from controller import CachedRunsHandler 26 from controller import DashboardUpdateHandler 27 from controller import ManifestUpdateHandler 28 from controller import RunsUpdateHandler 26 29 from create_handler import CreateHandler 27 from dashboard_handler import DashboardHandler28 from manifest_handler import ManifestHandler29 30 from report_handler import ReportHandler 30 31 from report_handler import AdminReportHandler 31 32 from report_process_handler import ReportProcessHandler 32 33 from report_logs_handler import ReportLogsHandler 33 from runs_handler import RunsHandler34 34 from merge_tests_handler import MergeTestsHandler 35 35 … … 40 40 ('/admin/create/(.*)', CreateHandler), 41 41 ('/api/test/?', CachedManifestHandler), 42 ('/api/test/update', Manifest Handler),42 ('/api/test/update', ManifestUpdateHandler), 43 43 ('/api/test/report/?', ReportHandler), 44 44 ('/api/test/report/process', ReportProcessHandler), 45 45 ('/api/test/runs/?', CachedRunsHandler), 46 ('/api/test/runs/update', Runs Handler),46 ('/api/test/runs/update', RunsUpdateHandler), 47 47 ('/api/test/dashboard/?', CachedDashboardHandler), 48 ('/api/test/dashboard/update', Dashboard Handler),48 ('/api/test/dashboard/update', DashboardUpdateHandler), 49 49 ] 50 50 -
trunk/Websites/webkit-perf.appspot.com/models.py
r108270 r108399 161 161 if platform.key() not in test.platforms: 162 162 test.platforms.append(platform.key()) 163 test.put() 163 164 existing_test[0] = test 164 165 return None … … 200 201 valueMedian=_float_or_none(result, 'median'), valueStdev=_float_or_none(result, 'stdev'), 201 202 valueMin=_float_or_none(result, 'min'), valueMax=_float_or_none(result, 'max')) 202 203 @staticmethod204 def generate_runs(branch, platform, test_name):205 builds = Build.all()206 builds.filter('branch =', branch)207 builds.filter('platform =', platform)208 209 for build in builds:210 results = TestResult.all()211 results.filter('name =', test_name)212 results.filter('build =', build)213 for result in results:214 yield build, result215 raise StopIteration216 203 217 204 -
trunk/Websites/webkit-perf.appspot.com/models_unittest.py
r108270 r108399 251 251 self.assertEqualUnorderedList(test.platforms, [platform.key(), other_platform.key()]) 252 252 253 test = models.Test.get(test.key()) 254 self.assertEqualUnorderedList(test.branches, [branch.key(), other_branch.key()]) 255 self.assertEqualUnorderedList(test.platforms, [platform.key(), other_platform.key()]) 256 253 257 254 258 class TestResultTests(DataStoreTestsBase): … … 286 290 self.assertEqual(result.valueMax, 45) 287 291 288 def _create_results(self, test_name, values):289 branch, platform, builder = _create_some_builder()290 results = []291 for i, value in enumerate(values):292 build = models.Build(branch=branch, platform=platform, builder=builder,293 buildNumber=i, revision=100 + i, timestamp=datetime.now())294 build.put()295 result = models.TestResult(name=test_name, build=build, value=value)296 result.put()297 results.append(result)298 return branch, platform, results299 300 def test_generate_runs(self):301 branch, platform, results = self._create_results('some-test', [50.0, 51.0, 52.0, 49.0, 48.0])302 last_i = 0303 for i, (build, result) in enumerate(models.TestResult.generate_runs(branch, platform, "some-test")):304 self.assertEqual(build.buildNumber, i)305 self.assertEqual(build.revision, 100 + i)306 self.assertEqual(result.name, 'some-test')307 self.assertEqual(result.value, results[i].value)308 last_i = i309 self.assertTrue(last_i + 1, len(results))310 311 292 312 293 class ReportLogTests(DataStoreTestsBase):
Note: See TracChangeset
for help on using the changeset viewer.