| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import json |
| |
| import webapp2 |
| import webtest |
| |
| from dashboard import post_bisect_results |
| from dashboard import rietveld_service |
| from dashboard import testing_common |
| from dashboard.models import try_job |
| |
| _SAMPLE_BISECT_RESULTS_JSON = { |
| 'try_job_id': 6789, |
| 'bug_id': 4567, |
| 'status': 'completed', |
| 'bisect_bot': 'linux', |
| 'buildbot_log_url': '', |
| 'command': ('tools/perf/run_benchmark -v ' |
| '--browser=release page_cycler.intl_ar_fa_he'), |
| 'metric': 'warm_times/page_load_time', |
| 'change': '', |
| 'score': 99.9, |
| 'good_revision': '306475', |
| 'bad_revision': '306478', |
| 'warnings': None, |
| 'aborted_reason': None, |
| 'culprit_data': { |
| 'subject': 'subject', |
| 'author': 'author', |
| 'email': 'author@email.com', |
| 'cl_date': '1/2/2015', |
| 'commit_info': 'commit_info', |
| 'revisions_links': [], |
| 'cl': '1235' |
| }, |
| 'revision_data': [ |
| { |
| 'revision_string': 'chromium@1234', |
| 'commit_hash': '1234123412341234123412341234123412341234', |
| 'depot_name': 'chromium', |
| 'mean_value': 70, |
| 'std_dev': 0, |
| 'values': [70, 70, 70], |
| 'result': 'good' |
| }, { |
| 'revision_string': 'chromium@1235', |
| 'depot_name': 'chromium', |
| 'commit_hash': '1235123512351235123512351235123512351235', |
| 'mean_value': 80, |
| 'std_dev': 0, |
| 'values': [80, 80, 80], |
| 'result': 'bad' |
| } |
| ] |
| } |
| |
| # Sample IP addresses to use in the tests below. |
| _WHITELISTED_IP = '123.45.67.89' |
| |
| |
| class PostBisectResultsTest(testing_common.TestCase): |
| |
| def setUp(self): |
| super(PostBisectResultsTest, self).setUp() |
| app = webapp2.WSGIApplication([ |
| ('/post_bisect_results', |
| post_bisect_results.PostBisectResultsHandler)]) |
| self.testapp = webtest.TestApp(app) |
| testing_common.SetIpWhitelist([_WHITELISTED_IP]) |
| self._AddRietveldConfig() |
| |
| def _AddRietveldConfig(self): |
| """Adds a RietveldConfig entity to the datastore. |
| |
| This is used in order to get the Rietveld URL when requests are made to the |
| handler in te tests below. In the real datastore, the RietveldConfig entity |
| would contain credentials. |
| """ |
| rietveld_service.RietveldConfig( |
| id='default_rietveld_config', |
| client_email='sullivan@email.com', |
| service_account_key='Fake Account Key', |
| server_url='https://test-rietveld.appspot.com', |
| internal_server_url='https://test-rietveld.appspot.com').put() |
| |
| def testPost(self): |
| job_key = try_job.TryJob(id=6789, rietveld_issue_id=200034).put() |
| data_param = json.dumps(_SAMPLE_BISECT_RESULTS_JSON) |
| self.testapp.post( |
| '/post_bisect_results', {'data': data_param}, |
| extra_environ={'REMOTE_ADDR': _WHITELISTED_IP}) |
| |
| job = job_key.get() |
| self.assertEqual(6789, job.results_data['try_job_id']) |
| self.assertEqual('completed', job.results_data['status']) |