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

Side by Side Diff: appengine/findit/handlers/test/triage_analysis_test.py

Issue 1866883002: [Findit] A huge refactoring and some bug fixing. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix nit. Created 4 years, 8 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
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 from google.appengine.ext import ndb 5 from google.appengine.ext import ndb
6 import webapp2 6 import webapp2
7 7
8 from testing_utils import testing 8 from testing_utils import testing
9 9
10 from handlers import triage_analysis 10 from handlers import triage_analysis
11 from model.wf_analysis import WfAnalysis 11 from model.wf_analysis import WfAnalysis
12 from model import wf_analysis_result_status 12 from model import result_status
13 from model import wf_analysis_status 13 from model import analysis_status
14 from waterfall import buildbot 14 from waterfall import buildbot
15 15
16 16
17 class TriageAnalysisTest(testing.AppengineTestCase): 17 class TriageAnalysisTest(testing.AppengineTestCase):
18 app_module = webapp2.WSGIApplication([ 18 app_module = webapp2.WSGIApplication([
19 ('/triage-analysis', triage_analysis.TriageAnalysis), 19 ('/triage-analysis', triage_analysis.TriageAnalysis),
20 ], debug=True) 20 ], debug=True)
21 21
22 def setUp(self): 22 def setUp(self):
23 super(TriageAnalysisTest, self).setUp() 23 super(TriageAnalysisTest, self).setUp()
24 self.master_name = 'm' 24 self.master_name = 'm'
25 self.builder_name = 'b' 25 self.builder_name = 'b'
26 self.build_number_incomplete = 120 # Analysis is not completed yet. 26 self.build_number_incomplete = 120 # Analysis is not completed yet.
27 self.build_number_found = 122 # Suspected CLs are found for this build. 27 self.build_number_found = 122 # Suspected CLs are found for this build.
28 self.build_number_not_found = 123 # No suspected CLs found. 28 self.build_number_not_found = 123 # No suspected CLs found.
29 self.suspected_cls = [{ 29 self.suspected_cls = [{
30 'repo_name': 'chromium', 30 'repo_name': 'chromium',
31 'revision': 'r1', 31 'revision': 'r1',
32 'commit_position': 123, 32 'commit_position': 123,
33 'url': 'https://codereview.chromium.org/123', 33 'url': 'https://codereview.chromium.org/123',
34 }] 34 }]
35 35
36 analysis = WfAnalysis.Create( 36 analysis = WfAnalysis.Create(
37 self.master_name, self.builder_name, self.build_number_incomplete) 37 self.master_name, self.builder_name, self.build_number_incomplete)
38 analysis.status = wf_analysis_status.ANALYZING 38 analysis.status = analysis_status.RUNNING
39 analysis.put() 39 analysis.put()
40 40
41 analysis = WfAnalysis.Create( 41 analysis = WfAnalysis.Create(
42 self.master_name, self.builder_name, self.build_number_found) 42 self.master_name, self.builder_name, self.build_number_found)
43 analysis.status = wf_analysis_status.ANALYZED 43 analysis.status = analysis_status.COMPLETED
44 analysis.suspected_cls = self.suspected_cls 44 analysis.suspected_cls = self.suspected_cls
45 analysis.put() 45 analysis.put()
46 46
47 analysis = WfAnalysis.Create( 47 analysis = WfAnalysis.Create(
48 self.master_name, self.builder_name, self.build_number_not_found) 48 self.master_name, self.builder_name, self.build_number_not_found)
49 analysis.status = wf_analysis_status.ANALYZED 49 analysis.status = analysis_status.COMPLETED
50 analysis.put() 50 analysis.put()
51 51
52 self.mock_current_user(user_email='test@chromium.org', is_admin=True) 52 self.mock_current_user(user_email='test@chromium.org', is_admin=True)
53 53
54 def testUpdateAnalysisResultStatusWhenAnalysisIsIncomplete(self): 54 def testUpdateAnalysisResultStatusWhenAnalysisIsIncomplete(self):
55 success = triage_analysis._UpdateAnalysisResultStatus( 55 success = triage_analysis._UpdateAnalysisResultStatus(
56 self.master_name, self.builder_name, self.build_number_incomplete, True) 56 self.master_name, self.builder_name, self.build_number_incomplete, True)
57 self.assertFalse(success) 57 self.assertFalse(success)
58 analysis = WfAnalysis.Get( 58 analysis = WfAnalysis.Get(
59 self.master_name, self.builder_name, self.build_number_found) 59 self.master_name, self.builder_name, self.build_number_found)
60 self.assertIsNone(analysis.result_status) 60 self.assertIsNone(analysis.result_status)
61 61
62 def testUpdateAnalysisResultStatusWhenFoundAndCorrect(self): 62 def testUpdateAnalysisResultStatusWhenFoundAndCorrect(self):
63 success = triage_analysis._UpdateAnalysisResultStatus( 63 success = triage_analysis._UpdateAnalysisResultStatus(
64 self.master_name, self.builder_name, self.build_number_found, True) 64 self.master_name, self.builder_name, self.build_number_found, True)
65 self.assertTrue(success) 65 self.assertTrue(success)
66 analysis = WfAnalysis.Get( 66 analysis = WfAnalysis.Get(
67 self.master_name, self.builder_name, self.build_number_found) 67 self.master_name, self.builder_name, self.build_number_found)
68 self.assertEquals(wf_analysis_result_status.FOUND_CORRECT, 68 self.assertEquals(result_status.FOUND_CORRECT,
69 analysis.result_status) 69 analysis.result_status)
70 self.assertEquals(self.suspected_cls, analysis.culprit_cls) 70 self.assertEquals(self.suspected_cls, analysis.culprit_cls)
71 71
72 def testUpdateAnalysisResultStatusWhenFoundButIncorrect(self): 72 def testUpdateAnalysisResultStatusWhenFoundButIncorrect(self):
73 success = triage_analysis._UpdateAnalysisResultStatus( 73 success = triage_analysis._UpdateAnalysisResultStatus(
74 self.master_name, self.builder_name, self.build_number_found, False) 74 self.master_name, self.builder_name, self.build_number_found, False)
75 self.assertTrue(success) 75 self.assertTrue(success)
76 analysis = WfAnalysis.Get( 76 analysis = WfAnalysis.Get(
77 self.master_name, self.builder_name, self.build_number_found) 77 self.master_name, self.builder_name, self.build_number_found)
78 self.assertEquals(wf_analysis_result_status.FOUND_INCORRECT, 78 self.assertEquals(result_status.FOUND_INCORRECT,
79 analysis.result_status) 79 analysis.result_status)
80 self.assertIsNone(analysis.culprit_cls) 80 self.assertIsNone(analysis.culprit_cls)
81 81
82 def testUpdateAnalysisResultStatusWhenNotFoundAndCorrect(self): 82 def testUpdateAnalysisResultStatusWhenNotFoundAndCorrect(self):
83 success = triage_analysis._UpdateAnalysisResultStatus( 83 success = triage_analysis._UpdateAnalysisResultStatus(
84 self.master_name, self.builder_name, self.build_number_not_found, True) 84 self.master_name, self.builder_name, self.build_number_not_found, True)
85 self.assertTrue(success) 85 self.assertTrue(success)
86 analysis = WfAnalysis.Get( 86 analysis = WfAnalysis.Get(
87 self.master_name, self.builder_name, self.build_number_not_found) 87 self.master_name, self.builder_name, self.build_number_not_found)
88 self.assertEquals(wf_analysis_result_status.NOT_FOUND_CORRECT, 88 self.assertEquals(result_status.NOT_FOUND_CORRECT,
89 analysis.result_status) 89 analysis.result_status)
90 self.assertIsNone(analysis.culprit_cls) 90 self.assertIsNone(analysis.culprit_cls)
91 91
92 def testUpdateAnalysisResultStatusWhenNotFoundButIncorrect(self): 92 def testUpdateAnalysisResultStatusWhenNotFoundButIncorrect(self):
93 success = triage_analysis._UpdateAnalysisResultStatus( 93 success = triage_analysis._UpdateAnalysisResultStatus(
94 self.master_name, self.builder_name, self.build_number_not_found, False) 94 self.master_name, self.builder_name, self.build_number_not_found, False)
95 self.assertTrue(success) 95 self.assertTrue(success)
96 analysis = WfAnalysis.Get( 96 analysis = WfAnalysis.Get(
97 self.master_name, self.builder_name, self.build_number_not_found) 97 self.master_name, self.builder_name, self.build_number_not_found)
98 self.assertEquals(wf_analysis_result_status.NOT_FOUND_INCORRECT, 98 self.assertEquals(result_status.NOT_FOUND_INCORRECT,
99 analysis.result_status) 99 analysis.result_status)
100 self.assertIsNone(analysis.culprit_cls) 100 self.assertIsNone(analysis.culprit_cls)
101 101
102 def testUpdateAnalysisResultStatusAlsoRecordTriageHistory(self): 102 def testUpdateAnalysisResultStatusAlsoRecordTriageHistory(self):
103 success = triage_analysis._UpdateAnalysisResultStatus( 103 success = triage_analysis._UpdateAnalysisResultStatus(
104 self.master_name, self.builder_name, self.build_number_found, True) 104 self.master_name, self.builder_name, self.build_number_found, True)
105 self.assertTrue(success) 105 self.assertTrue(success)
106 success = triage_analysis._UpdateAnalysisResultStatus( 106 success = triage_analysis._UpdateAnalysisResultStatus(
107 self.master_name, self.builder_name, self.build_number_found, False) 107 self.master_name, self.builder_name, self.build_number_found, False)
108 self.assertTrue(success) 108 self.assertTrue(success)
109 analysis = WfAnalysis.Get( 109 analysis = WfAnalysis.Get(
110 self.master_name, self.builder_name, self.build_number_found) 110 self.master_name, self.builder_name, self.build_number_found)
111 self.assertEquals(2, len(analysis.triage_history)) 111 self.assertEquals(2, len(analysis.triage_history))
112 self.assertEquals(wf_analysis_result_status.FOUND_CORRECT, 112 self.assertEquals(result_status.FOUND_CORRECT,
113 analysis.triage_history[0]['result_status']) 113 analysis.triage_history[0]['result_status'])
114 self.assertEquals(wf_analysis_result_status.FOUND_INCORRECT, 114 self.assertEquals(result_status.FOUND_INCORRECT,
115 analysis.triage_history[1]['result_status']) 115 analysis.triage_history[1]['result_status'])
116 116
117 def testInvalidBuildUrl(self): 117 def testInvalidBuildUrl(self):
118 build_url = 'http://invalid/build/url' 118 build_url = 'http://invalid/build/url'
119 response = self.test_app.get( 119 response = self.test_app.get(
120 '/triage-analysis', 120 '/triage-analysis',
121 params={'url': build_url, 'correct': True, 'format': 'json'}) 121 params={'url': build_url, 'correct': True, 'format': 'json'})
122 self.assertEquals(200, response.status_int) 122 self.assertEquals(200, response.status_int)
123 self.assertEquals({'success': False}, response.json_body) 123 self.assertEquals({'success': False}, response.json_body)
124 124
125 def testSuccessfulTriage(self): 125 def testSuccessfulTriage(self):
126 build_url = buildbot.CreateBuildUrl( 126 build_url = buildbot.CreateBuildUrl(
127 self.master_name, self.builder_name, self.build_number_found) 127 self.master_name, self.builder_name, self.build_number_found)
128 response = self.test_app.get( 128 response = self.test_app.get(
129 '/triage-analysis', 129 '/triage-analysis',
130 params={'url': build_url, 'correct': True, 'format': 'json'}) 130 params={'url': build_url, 'correct': True, 'format': 'json'})
131 self.assertEquals(200, response.status_int) 131 self.assertEquals(200, response.status_int)
132 self.assertEquals({'success': True}, response.json_body) 132 self.assertEquals({'success': True}, response.json_body)
OLDNEW
« no previous file with comments | « appengine/findit/handlers/test/monitor_alerts_test.py ('k') | appengine/findit/handlers/triage_analysis.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698