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

Side by Side Diff: appengine/findit/handlers/flake/test/list_flakes_test.py

Issue 2435013005: [Findit] Updating flakiness dashboard to be able to triage results (Closed)
Patch Set: Adding tests 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
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 5 import datetime
6 6
7 import webapp2 7 import webapp2
8 8
9 from handlers.flake import list_flakes 9 from handlers.flake import list_flakes
10 from handlers.flake.list_flakes import FilterMasterFlakeAnalysis 10 from handlers.flake.list_flakes import FilterMasterFlakeAnalysis
11 from model import analysis_status 11 from model import analysis_status
12 from model import result_status
12 from model.flake.master_flake_analysis import MasterFlakeAnalysis 13 from model.flake.master_flake_analysis import MasterFlakeAnalysis
13 from waterfall.test import wf_testcase 14 from waterfall.test import wf_testcase
14 15
15 16
16 class FilterFlakeTest(wf_testcase.WaterfallTestCase): 17 class FilterFlakeTest(wf_testcase.WaterfallTestCase):
17 app_module = webapp2.WSGIApplication([ 18 app_module = webapp2.WSGIApplication([
18 ('/waterfall/list-flakes', list_flakes.ListFlakes), 19 ('/waterfall/list-flakes', list_flakes.ListFlakes),
19 ], debug=True) 20 ], debug=True)
20 21
21 def _CreateAndSaveMasterFlakeAnalysis( 22 def _CreateAndSaveMasterFlakeAnalysis(
22 self, master_name, builder_name, build_number, 23 self, master_name, builder_name, build_number,
23 step_name, test_name): 24 step_name, test_name, request_time, status_code=None):
24 analysis = MasterFlakeAnalysis.Create( 25 analysis = MasterFlakeAnalysis.Create(
25 master_name, builder_name, build_number, step_name, test_name) 26 master_name, builder_name, build_number, step_name, test_name)
26 analysis.request_time = datetime.datetime(2016, 10, 01) 27 analysis.request_time = request_time
27 analysis.status = analysis_status.COMPLETED 28 analysis.status = analysis_status.COMPLETED
29 analysis.result_status = status_code
28 analysis.put() 30 analysis.put()
29 return analysis 31 return analysis
30 32
31 def setUp(self): 33 def setUp(self):
32 super(FilterFlakeTest, self).setUp() 34 super(FilterFlakeTest, self).setUp()
33 self.master_name1 = 'm1' 35 self.master_name1 = 'm1'
34 self.master_name2 = 'm2' 36 self.master_name2 = 'm2'
35 self.builder_name1 = 'b1' 37 self.builder_name1 = 'b1'
36 self.builder_name2 = 'b2' 38 self.builder_name2 = 'b2'
37 self.build_number1 = 1 39 self.build_number1 = 1
38 self.build_number2 = 2 40 self.build_number2 = 2
39 self.step_name1 = 's1' 41 self.step_name1 = 's1'
40 self.step_name2 = 's2' 42 self.step_name2 = 's2'
41 self.test_name1 = 't1' 43 self.test_name1 = 't1'
42 self.test_name2 = 't2' 44 self.test_name2 = 't2'
45 self.request_time1 = datetime.datetime(2016, 10, 01)
46 self.request_time2 = datetime.datetime(2016, 10, 02)
47 self.result_status1 = result_status.FOUND_UNTRIAGED
48 self.result_status2 = result_status.FOUND_CORRECT
43 self.master_flake_analysis1 = self._CreateAndSaveMasterFlakeAnalysis( 49 self.master_flake_analysis1 = self._CreateAndSaveMasterFlakeAnalysis(
44 self.master_name1, self.builder_name1, self.build_number1, 50 self.master_name1, self.builder_name1, self.build_number1,
45 self.step_name1, self.test_name1) 51 self.step_name1, self.test_name1, self.request_time1,
52 self.result_status1)
46 self.master_flake_analysis2 = self._CreateAndSaveMasterFlakeAnalysis( 53 self.master_flake_analysis2 = self._CreateAndSaveMasterFlakeAnalysis(
47 self.master_name2, self.builder_name2, self.build_number2, 54 self.master_name2, self.builder_name2, self.build_number2,
48 self.step_name2, self.test_name2) 55 self.step_name2, self.test_name2, self.request_time2,
56 self.result_status2)
49 self.master_flake_analysis3 = self._CreateAndSaveMasterFlakeAnalysis( 57 self.master_flake_analysis3 = self._CreateAndSaveMasterFlakeAnalysis(
50 self.master_name2, self.builder_name2, self.build_number2, 58 self.master_name2, self.builder_name2, self.build_number2,
51 self.step_name2, self.test_name1) 59 self.step_name2, self.test_name1, self.request_time1)
52 60
53 def testFilterMasterName(self): 61 def testFilterMasterName(self):
54 master_flake_analysis_query = MasterFlakeAnalysis.query() 62 master_flake_analysis_query = MasterFlakeAnalysis.query()
55 result = FilterMasterFlakeAnalysis( 63 result = FilterMasterFlakeAnalysis(
56 master_flake_analysis_query, self.master_name1, None, None, None, None) 64 master_flake_analysis_query, master_name=self.master_name1)
65
57 self.assertEqual(len(result), 1) 66 self.assertEqual(len(result), 1)
58 self.assertTrue(result == [self.master_flake_analysis1]) 67 self.assertTrue(result == [self.master_flake_analysis1])
59 68
60 def testFilterBuilderName(self): 69 def testFilterBuilderName(self):
61 master_flake_analysis_query = MasterFlakeAnalysis.query() 70 master_flake_analysis_query = MasterFlakeAnalysis.query()
62 result = FilterMasterFlakeAnalysis(master_flake_analysis_query, None, 71 result = FilterMasterFlakeAnalysis(
63 self.builder_name1, None, None, None) 72 master_flake_analysis_query, builder_name=self.builder_name1)
64 self.assertEqual(len(result), 1) 73 self.assertEqual(len(result), 1)
65 self.assertTrue(result == [self.master_flake_analysis1]) 74 self.assertTrue(result == [self.master_flake_analysis1])
66 75
67 def testFilterBuildNumber(self): 76 def testFilterBuildNumber(self):
68 master_flake_analysis_query = MasterFlakeAnalysis.query() 77 master_flake_analysis_query = MasterFlakeAnalysis.query()
69 result = FilterMasterFlakeAnalysis(master_flake_analysis_query, None, None, 78 result = FilterMasterFlakeAnalysis(
70 self.build_number1, None, None) 79 master_flake_analysis_query, build_number=self.build_number1)
71 self.assertEqual(len(result), 1) 80 self.assertEqual(len(result), 1)
72 self.assertTrue(result == [self.master_flake_analysis1]) 81 self.assertTrue(result == [self.master_flake_analysis1])
73 82
74 def testFilterStepName(self): 83 def testFilterStepName(self):
75 master_flake_analysis_query = MasterFlakeAnalysis.query() 84 master_flake_analysis_query = MasterFlakeAnalysis.query()
76 result = FilterMasterFlakeAnalysis( 85 result = FilterMasterFlakeAnalysis(
77 master_flake_analysis_query, None, None, None, self.step_name1, None) 86 master_flake_analysis_query, step_name=self.step_name1)
78 self.assertEqual(len(result), 1) 87 self.assertEqual(len(result), 1)
79 self.assertTrue(result == [self.master_flake_analysis1]) 88 self.assertTrue(result == [self.master_flake_analysis1])
80 89
81 def testFilterTestName(self): 90 def testFilterTestName(self):
82 master_flake_analysis_query = MasterFlakeAnalysis.query() 91 master_flake_analysis_query = MasterFlakeAnalysis.query()
83 result = FilterMasterFlakeAnalysis( 92 result = FilterMasterFlakeAnalysis(
84 master_flake_analysis_query, None, None, None, None, self.test_name2) 93 master_flake_analysis_query, test_name=self.test_name2)
85 self.assertEqual(len(result), 1) 94 self.assertEqual(len(result), 1)
86 self.assertTrue(result == [self.master_flake_analysis2]) 95 self.assertTrue(result == [self.master_flake_analysis2])
87 96
97 def testFilterResultStatus(self):
98 master_flake_analysis_query = MasterFlakeAnalysis.query()
99 result = FilterMasterFlakeAnalysis(
100 master_flake_analysis_query, status_code=result_status.FOUND_UNTRIAGED)
101 self.assertEqual(len(result), 1)
102 self.assertTrue(result == [self.master_flake_analysis1])
103
104 def testFilterStartDate(self):
105 master_flake_analysis_query = MasterFlakeAnalysis.query()
106 result = FilterMasterFlakeAnalysis(
107 master_flake_analysis_query, start_date=self.request_time2)
108 self.assertEqual(len(result), 1)
109 self.assertTrue(result == [self.master_flake_analysis2])
110
111 def testFilterEndDate(self):
112 master_flake_analysis_query = MasterFlakeAnalysis.query()
113 result = FilterMasterFlakeAnalysis(
114 master_flake_analysis_query, end_date=self.request_time2)
115 self.assertEqual(len(result), 2)
116 self.assertTrue(result == [self.master_flake_analysis1,
117 self.master_flake_analysis3])
118
88 def testFilterMultipleMasterName(self): 119 def testFilterMultipleMasterName(self):
89 master_flake_analysis_query = MasterFlakeAnalysis.query() 120 master_flake_analysis_query = MasterFlakeAnalysis.query()
90 result = FilterMasterFlakeAnalysis( 121 result = FilterMasterFlakeAnalysis(
91 master_flake_analysis_query, self.master_name2, None, None, None, None) 122 master_flake_analysis_query, master_name=self.master_name2)
92 self.assertEqual(len(result), 2) 123 self.assertEqual(len(result), 2)
93 self.assertTrue(result == [self.master_flake_analysis3, 124 self.assertTrue(result == [self.master_flake_analysis3,
94 self.master_flake_analysis2]) 125 self.master_flake_analysis2])
95 126
96 def testFilterMultipleBuilderName(self): 127 def testFilterMultipleBuilderName(self):
97 master_flake_analysis_query = MasterFlakeAnalysis.query() 128 master_flake_analysis_query = MasterFlakeAnalysis.query()
98 result = FilterMasterFlakeAnalysis( 129 result = FilterMasterFlakeAnalysis(
99 master_flake_analysis_query, None, self.builder_name2, None, None, None) 130 master_flake_analysis_query, builder_name=self.builder_name2)
100 self.assertEqual(len(result), 2) 131 self.assertEqual(len(result), 2)
101 self.assertTrue(result == [self.master_flake_analysis3, 132 self.assertTrue(result == [self.master_flake_analysis3,
102 self.master_flake_analysis2]) 133 self.master_flake_analysis2])
103 134
104 def testFilterMultipleBuildNumber(self): 135 def testFilterMultipleBuildNumber(self):
105 master_flake_analysis_query = MasterFlakeAnalysis.query() 136 master_flake_analysis_query = MasterFlakeAnalysis.query()
106 result = FilterMasterFlakeAnalysis( 137 result = FilterMasterFlakeAnalysis(
107 master_flake_analysis_query, None, None, self.build_number2, None, None) 138 master_flake_analysis_query, build_number=self.build_number2)
108 self.assertEqual(len(result), 2) 139 self.assertEqual(len(result), 2)
109 self.assertTrue(result == [self.master_flake_analysis3, 140 self.assertTrue(result == [self.master_flake_analysis3,
110 self.master_flake_analysis2]) 141 self.master_flake_analysis2])
111 142
112 def testFilterMultipleStepName(self): 143 def testFilterMultipleStepName(self):
113 master_flake_analysis_query = MasterFlakeAnalysis.query() 144 master_flake_analysis_query = MasterFlakeAnalysis.query()
114 result = FilterMasterFlakeAnalysis( 145 result = FilterMasterFlakeAnalysis(
115 master_flake_analysis_query, None, None, None, self.step_name2, None) 146 master_flake_analysis_query, step_name=self.step_name2)
116 self.assertEqual(len(result), 2) 147 self.assertEqual(len(result), 2)
117 self.assertTrue(result == [self.master_flake_analysis3, 148 self.assertTrue(result == [self.master_flake_analysis3,
118 self.master_flake_analysis2]) 149 self.master_flake_analysis2])
119 150
120 def testFilterMultipleTestName(self): 151 def testFilterMultipleTestName(self):
121 master_flake_analysis_query = MasterFlakeAnalysis.query() 152 master_flake_analysis_query = MasterFlakeAnalysis.query()
122 result = FilterMasterFlakeAnalysis( 153 result = FilterMasterFlakeAnalysis(
123 master_flake_analysis_query, None, None, None, None, self.test_name1) 154 master_flake_analysis_query, test_name=self.test_name1)
124 self.assertEqual(len(result), 2) 155 self.assertEqual(len(result), 2)
125 self.assertTrue(result == [self.master_flake_analysis1, 156 self.assertTrue(result == [self.master_flake_analysis1,
126 self.master_flake_analysis3]) 157 self.master_flake_analysis3])
127 158
128 def testNormalFlow(self): 159 def testNormalFlow(self):
129 response = self.test_app.get('/waterfall/list-flakes') 160 response = self.test_app.get('/waterfall/list-flakes')
130 self.assertEquals(200, response.status_int) 161 self.assertEquals(200, response.status_int)
131 162
132 def testNormalFlowWithFilter(self): 163 def testNormalFlowWithFilter(self):
133 response = self.test_app.get( 164 response = self.test_app.get(
134 '/waterfall/list-flakes', 165 '/waterfall/list-flakes',
135 params={'build_number': self.build_number1, 166 params={'build_number': self.build_number1,
136 'format': 'json'} 167 'format': 'json'}
137 ) 168 )
138 expected_result = { 169 expected_result = {
139 'master_flake_analyses': [ 170 'master_flake_analyses': [
140 { 171 {
141 'master_name': self.master_name1, 172 'master_name': self.master_name1,
142 'builder_name': self.builder_name1, 173 'builder_name': self.builder_name1,
143 'build_number': self.build_number1, 174 'build_number': self.build_number1,
144 'step_name': self.step_name1, 175 'step_name': self.step_name1,
145 'test_name': self.test_name1, 176 'test_name': self.test_name1,
146 'status': 'Completed', 177 'status': 'Completed',
178 'result_status': result_status.RESULT_STATUS_TO_DESCRIPTION[
179 self.result_status1],
147 'suspected_build': None, 180 'suspected_build': None,
148 'request_time': '2016-10-01 00:00:00 UTC', 181 'request_time': '2016-10-01 00:00:00 UTC'
149 } 182 }
150 ] 183 ],
184 'master_name_filter': '',
185 'builder_name_filter': '',
186 'build_number_filter': self.build_number1,
187 'step_name_filter': '',
188 'test_name_filter': '',
189 'result_status_filter': result_status.UNSPECIFIED,
151 } 190 }
191
152 self.assertEquals(response.json_body, expected_result) 192 self.assertEquals(response.json_body, expected_result)
153 self.assertEquals(200, response.status_int) 193 self.assertEquals(200, response.status_int)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698