Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1137)

Side by Side Diff: appengine/findit/test/findit_api_test.py

Issue 2435983003: [Findit] Asynchronously process flake reports from chromium-try-flakes. (Closed)
Patch Set: fix nit. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/findit/queue.yaml ('k') | appengine/findit/waterfall-backend.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import datetime
stgao 2016/10/21 14:44:35 todo: remove
stgao 2016/10/21 22:25:15 Done.
5 import json 6 import json
6 import mock 7 import mock
8 import pickle
7 import re 9 import re
8 10
9 import endpoints 11 import endpoints
10 from google.appengine.api import taskqueue 12 from google.appengine.api import taskqueue
11 import webtest 13 import webtest
12 14
13 from testing_utils import testing 15 from testing_utils import testing
14 16
15 from common.waterfall import failure_type 17 from common.waterfall import failure_type
16 import findit_api 18 import findit_api
17 from findit_api import FindItApi 19 from model import analysis_status
20 from model.flake.flake_analysis_request import FlakeAnalysisRequest
18 from model.wf_analysis import WfAnalysis 21 from model.wf_analysis import WfAnalysis
19 from model.wf_swarming_task import WfSwarmingTask 22 from model.wf_swarming_task import WfSwarmingTask
20 from model.wf_try_job import WfTryJob 23 from model.wf_try_job import WfTryJob
21 from model import analysis_status
22 from waterfall import waterfall_config 24 from waterfall import waterfall_config
23 25
24 26
25 class FinditApiTest(testing.EndpointsTestCase): 27 class FinditApiTest(testing.EndpointsTestCase):
26 api_service_cls = FindItApi 28 api_service_cls = findit_api.FindItApi
27 29
28 def setUp(self): 30 def setUp(self):
29 super(FinditApiTest, self).setUp() 31 super(FinditApiTest, self).setUp()
30 self.taskqueue_requests = [] 32 self.taskqueue_requests = []
31 def Mocked_taskqueue_add(**kwargs): 33 def Mocked_taskqueue_add(**kwargs):
32 self.taskqueue_requests.append(kwargs) 34 self.taskqueue_requests.append(kwargs)
33 self.mock(taskqueue, 'add', Mocked_taskqueue_add) 35 self.mock(taskqueue, 'add', Mocked_taskqueue_add)
34 36
35 def _MockMasterIsSupported(self, supported): 37 def _MockMasterIsSupported(self, supported):
36 def MockMasterIsSupported(*_): 38 def MockMasterIsSupported(*_):
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 'builder_name': builder_name, 701 'builder_name': builder_name,
700 'build_number': build_number, 702 'build_number': build_number,
701 'failed_steps': [], 703 'failed_steps': [],
702 }, 704 },
703 ] 705 ]
704 } 706 }
705 self.assertEqual( 707 self.assertEqual(
706 expected_payload_json, 708 expected_payload_json,
707 json.loads(self.taskqueue_requests[0].get('payload'))) 709 json.loads(self.taskqueue_requests[0].get('payload')))
708 710
709 @mock.patch.object( 711 @mock.patch.object(findit_api, '_AsyncProcessFlakeReport', return_value=None)
710 findit_api.flake_analysis_service, 712 def testUnauthorizedRequestToAnalyzeFlake(self, mocked_func):
711 'ScheduleAnalysisForFlake', return_value=None)
712 def testUnauthorizedRequestToAnalyzeFlake(self, _mocked_object):
713 self.mock_current_user(user_email='test@chromium.org', is_admin=False) 713 self.mock_current_user(user_email='test@chromium.org', is_admin=False)
714 714
715 flake = { 715 flake = {
716 'name': 'suite.test', 716 'name': 'suite.test',
717 'is_step': False, 717 'is_step': False,
718 'bug_id': 123, 718 'bug_id': 123,
719 'build_steps': [ 719 'build_steps': [
720 { 720 {
721 'master_name': 'm', 721 'master_name': 'm',
722 'builder_name': 'b', 722 'builder_name': 'b',
723 'build_number': 456, 723 'build_number': 456,
724 'step_name': 'name (with patch) on Windows-7-SP1', 724 'step_name': 'name (with patch) on Windows-7-SP1',
725 } 725 }
726 ] 726 ]
727 } 727 }
728 728
729 self.assertRaisesRegexp( 729 self.assertRaisesRegexp(
730 webtest.app.AppError, 730 webtest.app.AppError,
731 re.compile('.*401 Unauthorized.*', 731 re.compile('.*401 Unauthorized.*',
732 re.MULTILINE | re.DOTALL), 732 re.MULTILINE | re.DOTALL),
733 self.call_api, 'AnalyzeFlake', body=flake) 733 self.call_api, 'AnalyzeFlake', body=flake)
734 mocked_func.assert_not_called()
734 735
735 @mock.patch.object( 736 @mock.patch.object(
736 findit_api.flake_analysis_service, 737 findit_api, '_AsyncProcessFlakeReport', side_effect=Exception())
737 'ScheduleAnalysisForFlake', return_value=True) 738 def testAuthorizedRequestToAnalyzeFlakeNotQueued(self, mocked_func):
738 def testAuthorizedRequestToAnalyzeFlake(self, _mocked_object):
739 self.mock_current_user(user_email='test@chromium.org', is_admin=True) 739 self.mock_current_user(user_email='test@chromium.org', is_admin=True)
740 740
741 flake = { 741 flake = {
742 'name': 'suite.test', 742 'name': 'suite.test',
743 'is_step': False, 743 'is_step': False,
744 'bug_id': 123, 744 'bug_id': 123,
745 'build_steps': [ 745 'build_steps': [
746 { 746 {
747 'master_name': 'm', 747 'master_name': 'm',
748 'builder_name': 'b', 748 'builder_name': 'b',
749 'build_number': 456, 749 'build_number': 456,
750 'step_name': 'name (with patch) on Windows-7-SP1', 750 'step_name': 'name (with patch) on Windows-7-SP1',
751 } 751 }
752 ] 752 ]
753 } 753 }
754 754
755 response = self.call_api('AnalyzeFlake', body=flake) 755 response = self.call_api('AnalyzeFlake', body=flake)
756 self.assertEqual(200, response.status_int) 756 self.assertEqual(200, response.status_int)
757 self.assertTrue(response.json_body.get('analysis_triggered')) 757 self.assertFalse(response.json_body.get('queued'))
758 self.assertEqual(1, mocked_func.call_count)
chanli 2016/10/21 06:08:12 Sorry if this is a stupid question, but if the req
stgao 2016/10/21 14:03:11 Currently, we just drop the request if we fail to
stgao 2016/10/21 22:25:16 Done.
759
760 def testAuthorizedRequestToAnalyzeFlakeQueued(self):
761 self.mock_current_user(user_email='test@chromium.org', is_admin=True)
762
763 flake = {
764 'name': 'suite.test',
765 'is_step': False,
766 'bug_id': 123,
767 'build_steps': [
768 {
769 'master_name': 'm',
770 'builder_name': 'b',
771 'build_number': 456,
772 'step_name': 'name (with patch) on Windows-7-SP1',
773 }
774 ]
775 }
776
777 response = self.call_api('AnalyzeFlake', body=flake)
778 self.assertEqual(200, response.status_int)
779 self.assertTrue(response.json_body.get('queued'))
780 self.assertEqual(1, len(self.taskqueue_requests))
781 request, user_email, is_admin = pickle.loads(
782 self.taskqueue_requests[0]['payload'])
783 self.assertEqual('suite.test', request.name)
784 self.assertFalse(request.is_step)
785 self.assertEqual(123, request.bug_id)
786 self.assertEqual(1, len(request.build_steps))
787 self.assertEqual('m', request.build_steps[0].master_name)
788 self.assertEqual('b', request.build_steps[0].builder_name)
789 self.assertEqual(456, request.build_steps[0].build_number)
790 self.assertEqual('name (with patch) on Windows-7-SP1',
791 request.build_steps[0].step_name)
792 self.assertEqual('test@chromium.org', user_email)
793 self.assertTrue(is_admin)
OLDNEW
« no previous file with comments | « appengine/findit/queue.yaml ('k') | appengine/findit/waterfall-backend.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698