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

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: Rebase to resolve conflict 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 json 5 import json
6 import mock 6 import mock
7 import pickle
7 import re 8 import re
8 9
9 import endpoints 10 import endpoints
10 from google.appengine.api import taskqueue 11 from google.appengine.api import taskqueue
11 import webtest 12 import webtest
12 13
13 from testing_utils import testing 14 from testing_utils import testing
14 15
15 from common.waterfall import failure_type 16 from common.waterfall import failure_type
16 import findit_api 17 import findit_api
17 from findit_api import FindItApi 18 from model import analysis_status
19 from model.flake.flake_analysis_request import FlakeAnalysisRequest
18 from model.wf_analysis import WfAnalysis 20 from model.wf_analysis import WfAnalysis
19 from model.wf_swarming_task import WfSwarmingTask 21 from model.wf_swarming_task import WfSwarmingTask
20 from model.wf_try_job import WfTryJob 22 from model.wf_try_job import WfTryJob
21 from model import analysis_status
22 from waterfall import waterfall_config 23 from waterfall import waterfall_config
23 24
24 25
25 class FinditApiTest(testing.EndpointsTestCase): 26 class FinditApiTest(testing.EndpointsTestCase):
26 api_service_cls = FindItApi 27 api_service_cls = findit_api.FindItApi
27 28
28 def setUp(self): 29 def setUp(self):
29 super(FinditApiTest, self).setUp() 30 super(FinditApiTest, self).setUp()
30 self.taskqueue_requests = [] 31 self.taskqueue_requests = []
31 def Mocked_taskqueue_add(**kwargs): 32 def Mocked_taskqueue_add(**kwargs):
32 self.taskqueue_requests.append(kwargs) 33 self.taskqueue_requests.append(kwargs)
33 self.mock(taskqueue, 'add', Mocked_taskqueue_add) 34 self.mock(taskqueue, 'add', Mocked_taskqueue_add)
34 35
35 def _MockMasterIsSupported(self, supported): 36 def _MockMasterIsSupported(self, supported):
36 def MockMasterIsSupported(*_): 37 def MockMasterIsSupported(*_):
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 'builder_name': builder_name, 700 'builder_name': builder_name,
700 'build_number': build_number, 701 'build_number': build_number,
701 'failed_steps': [], 702 'failed_steps': [],
702 }, 703 },
703 ] 704 ]
704 } 705 }
705 self.assertEqual( 706 self.assertEqual(
706 expected_payload_json, 707 expected_payload_json,
707 json.loads(self.taskqueue_requests[0].get('payload'))) 708 json.loads(self.taskqueue_requests[0].get('payload')))
708 709
709 @mock.patch.object( 710 @mock.patch.object(findit_api, '_AsyncProcessFlakeReport', return_value=None)
710 findit_api.flake_analysis_service, 711 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) 712 self.mock_current_user(user_email='test@chromium.org', is_admin=False)
714 713
715 flake = { 714 flake = {
716 'name': 'suite.test', 715 'name': 'suite.test',
717 'is_step': False, 716 'is_step': False,
718 'bug_id': 123, 717 'bug_id': 123,
719 'build_steps': [ 718 'build_steps': [
720 { 719 {
721 'master_name': 'm', 720 'master_name': 'm',
722 'builder_name': 'b', 721 'builder_name': 'b',
723 'build_number': 456, 722 'build_number': 456,
724 'step_name': 'name (with patch) on Windows-7-SP1', 723 'step_name': 'name (with patch) on Windows-7-SP1',
725 } 724 }
726 ] 725 ]
727 } 726 }
728 727
729 self.assertRaisesRegexp( 728 self.assertRaisesRegexp(
730 webtest.app.AppError, 729 webtest.app.AppError,
731 re.compile('.*401 Unauthorized.*', 730 re.compile('.*401 Unauthorized.*',
732 re.MULTILINE | re.DOTALL), 731 re.MULTILINE | re.DOTALL),
733 self.call_api, 'AnalyzeFlake', body=flake) 732 self.call_api, 'AnalyzeFlake', body=flake)
733 mocked_func.assert_not_called()
734 734
735 @mock.patch.object( 735 @mock.patch.object(
736 findit_api.flake_analysis_service, 736 findit_api, '_AsyncProcessFlakeReport', side_effect=Exception())
737 'ScheduleAnalysisForFlake', return_value=True) 737 def testAuthorizedRequestToAnalyzeFlakeNotQueued(self, mocked_func):
738 def testAuthorizedRequestToAnalyzeFlake(self, _mocked_object):
739 self.mock_current_user(user_email='test@chromium.org', is_admin=True) 738 self.mock_current_user(user_email='test@chromium.org', is_admin=True)
740 739
741 flake = { 740 flake = {
742 'name': 'suite.test', 741 'name': 'suite.test',
743 'is_step': False, 742 'is_step': False,
744 'bug_id': 123, 743 'bug_id': 123,
745 'build_steps': [ 744 'build_steps': [
746 { 745 {
747 'master_name': 'm', 746 'master_name': 'm',
748 'builder_name': 'b', 747 'builder_name': 'b',
749 'build_number': 456, 748 'build_number': 456,
750 'step_name': 'name (with patch) on Windows-7-SP1', 749 'step_name': 'name (with patch) on Windows-7-SP1',
751 } 750 }
752 ] 751 ]
753 } 752 }
754 753
755 response = self.call_api('AnalyzeFlake', body=flake) 754 response = self.call_api('AnalyzeFlake', body=flake)
756 self.assertEqual(200, response.status_int) 755 self.assertEqual(200, response.status_int)
757 self.assertTrue(response.json_body.get('analysis_triggered')) 756 self.assertFalse(response.json_body.get('queued'))
757 self.assertEqual(1, mocked_func.call_count)
758 self.assertEqual(0, len(self.taskqueue_requests))
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