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

Side by Side Diff: dashboard/dashboard/alerts_test.py

Issue 2627073006: Add a ref_test key to Anomaly entities and surface it in alerts JSON. (Closed)
Patch Set: Address review comments Created 3 years, 11 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 | « dashboard/dashboard/alerts.py ('k') | dashboard/dashboard/find_anomalies.py » ('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 unittest 5 import unittest
6 6
7 import mock 7 import mock
8 import webapp2 8 import webapp2
9 import webtest 9 import webtest
10 10
(...skipping 18 matching lines...) Expand all
29 29
30 def _AddAlertsToDataStore(self): 30 def _AddAlertsToDataStore(self):
31 """Adds sample data, including triaged and non-triaged alerts.""" 31 """Adds sample data, including triaged and non-triaged alerts."""
32 key_map = {} 32 key_map = {}
33 33
34 sheriff_key = sheriff.Sheriff( 34 sheriff_key = sheriff.Sheriff(
35 id='Chromium Perf Sheriff', email='sullivan@google.com').put() 35 id='Chromium Perf Sheriff', email='sullivan@google.com').put()
36 testing_common.AddTests(['ChromiumGPU'], ['linux-release'], { 36 testing_common.AddTests(['ChromiumGPU'], ['linux-release'], {
37 'scrolling-benchmark': { 37 'scrolling-benchmark': {
38 'first_paint': {}, 38 'first_paint': {},
39 'first_paint_ref': {},
39 'mean_frame_time': {}, 40 'mean_frame_time': {},
41 'mean_frame_time_ref': {},
40 } 42 }
41 }) 43 })
42 first_paint = utils.TestKey( 44 first_paint = utils.TestKey(
43 'ChromiumGPU/linux-release/scrolling-benchmark/first_paint') 45 'ChromiumGPU/linux-release/scrolling-benchmark/first_paint')
44 mean_frame_time = utils.TestKey( 46 mean_frame_time = utils.TestKey(
45 'ChromiumGPU/linux-release/scrolling-benchmark/mean_frame_time') 47 'ChromiumGPU/linux-release/scrolling-benchmark/mean_frame_time')
46 48
47 # By default, all TestMetadata entities have an improvement_direction of 49 # By default, all TestMetadata entities have an improvement_direction of
48 # UNKNOWN, meaning that neither direction is considered an improvement. 50 # UNKNOWN, meaning that neither direction is considered an improvement.
49 # Here we set the improvement direction so that some anomalies are 51 # Here we set the improvement direction so that some anomalies are
50 # considered improvements. 52 # considered improvements.
51 for test_key in [first_paint, mean_frame_time]: 53 for test_key in [first_paint, mean_frame_time]:
52 test = test_key.get() 54 test = test_key.get()
53 test.improvement_direction = anomaly.DOWN 55 test.improvement_direction = anomaly.DOWN
54 test.put() 56 test.put()
55 57
56 # Add some (12) non-triaged alerts. 58 # Add some (12) non-triaged alerts.
57 for end_rev in range(10000, 10120, 10): 59 for end_rev in range(10000, 10120, 10):
58 test_key = first_paint if end_rev % 20 == 0 else mean_frame_time 60 test_key = first_paint if end_rev % 20 == 0 else mean_frame_time
61 ref_test_key = utils.TestKey('%s_ref' % utils.TestPath(test_key))
59 anomaly_entity = anomaly.Anomaly( 62 anomaly_entity = anomaly.Anomaly(
60 start_revision=end_rev - 5, end_revision=end_rev, test=test_key, 63 start_revision=end_rev - 5, end_revision=end_rev, test=test_key,
61 median_before_anomaly=100, median_after_anomaly=200, 64 median_before_anomaly=100, median_after_anomaly=200,
62 sheriff=sheriff_key) 65 ref_test=ref_test_key, sheriff=sheriff_key)
63 anomaly_entity.SetIsImprovement() 66 anomaly_entity.SetIsImprovement()
64 anomaly_key = anomaly_entity.put() 67 anomaly_key = anomaly_entity.put()
65 key_map[end_rev] = anomaly_key.urlsafe() 68 key_map[end_rev] = anomaly_key.urlsafe()
66 69
67 # Add some (2) already-triaged alerts. 70 # Add some (2) already-triaged alerts.
68 for end_rev in range(10120, 10140, 10): 71 for end_rev in range(10120, 10140, 10):
69 test_key = first_paint if end_rev % 20 == 0 else mean_frame_time 72 test_key = first_paint if end_rev % 20 == 0 else mean_frame_time
73 ref_test_key = utils.TestKey('%s_ref' % utils.TestPath(test_key))
70 bug_id = -1 if end_rev % 20 == 0 else 12345 74 bug_id = -1 if end_rev % 20 == 0 else 12345
71 anomaly_entity = anomaly.Anomaly( 75 anomaly_entity = anomaly.Anomaly(
72 start_revision=end_rev - 5, end_revision=end_rev, test=test_key, 76 start_revision=end_rev - 5, end_revision=end_rev, test=test_key,
73 median_before_anomaly=100, median_after_anomaly=200, 77 median_before_anomaly=100, median_after_anomaly=200,
74 bug_id=bug_id, sheriff=sheriff_key) 78 ref_test=ref_test_key, bug_id=bug_id, sheriff=sheriff_key)
75 anomaly_entity.SetIsImprovement() 79 anomaly_entity.SetIsImprovement()
76 anomaly_key = anomaly_entity.put() 80 anomaly_key = anomaly_entity.put()
77 key_map[end_rev] = anomaly_key.urlsafe() 81 key_map[end_rev] = anomaly_key.urlsafe()
78 if bug_id > 0: 82 if bug_id > 0:
79 bug_data.Bug(id=bug_id).put() 83 bug_data.Bug(id=bug_id).put()
80 84
81 # Add some (6) non-triaged improvements. 85 # Add some (6) non-triaged improvements.
82 for end_rev in range(10140, 10200, 10): 86 for end_rev in range(10140, 10200, 10):
83 test_key = mean_frame_time 87 test_key = mean_frame_time
88 ref_test_key = utils.TestKey('%s_ref' % utils.TestPath(test_key))
84 anomaly_entity = anomaly.Anomaly( 89 anomaly_entity = anomaly.Anomaly(
85 start_revision=end_rev - 5, end_revision=end_rev, test=test_key, 90 start_revision=end_rev - 5, end_revision=end_rev, test=test_key,
86 median_before_anomaly=200, median_after_anomaly=100, 91 median_before_anomaly=200, median_after_anomaly=100,
87 sheriff=sheriff_key) 92 ref_test=ref_test_key, sheriff=sheriff_key)
88 anomaly_entity.SetIsImprovement() 93 anomaly_entity.SetIsImprovement()
89 anomaly_key = anomaly_entity.put() 94 anomaly_key = anomaly_entity.put()
90 self.assertTrue(anomaly_entity.is_improvement) 95 self.assertTrue(anomaly_entity.is_improvement)
91 key_map[end_rev] = anomaly_key.urlsafe() 96 key_map[end_rev] = anomaly_key.urlsafe()
92 97
93 return key_map 98 return key_map
94 99
95 def testGet(self): 100 def testGet(self):
96 response = self.testapp.get('/alerts') 101 response = self.testapp.get('/alerts')
97 self.assertEqual('text/html', response.content_type) 102 self.assertEqual('text/html', response.content_type)
(...skipping 10 matching lines...) Expand all
108 expected_end_rev = 10110 113 expected_end_rev = 10110
109 for alert in anomaly_list: 114 for alert in anomaly_list:
110 self.assertEqual(expected_end_rev, alert['end_revision']) 115 self.assertEqual(expected_end_rev, alert['end_revision'])
111 self.assertEqual(expected_end_rev - 5, alert['start_revision']) 116 self.assertEqual(expected_end_rev - 5, alert['start_revision'])
112 self.assertEqual(key_map[expected_end_rev], alert['key']) 117 self.assertEqual(key_map[expected_end_rev], alert['key'])
113 self.assertEqual('ChromiumGPU', alert['master']) 118 self.assertEqual('ChromiumGPU', alert['master'])
114 self.assertEqual('linux-release', alert['bot']) 119 self.assertEqual('linux-release', alert['bot'])
115 self.assertEqual('scrolling-benchmark', alert['testsuite']) 120 self.assertEqual('scrolling-benchmark', alert['testsuite'])
116 if expected_end_rev % 20 == 0: 121 if expected_end_rev % 20 == 0:
117 self.assertEqual('first_paint', alert['test']) 122 self.assertEqual('first_paint', alert['test'])
123 self.assertEqual(
124 'ChromiumGPU/linux-release/scrolling-benchmark/first_paint_ref',
125 alert['ref_test'])
118 else: 126 else:
119 self.assertEqual('mean_frame_time', alert['test']) 127 self.assertEqual('mean_frame_time', alert['test'])
128 self.assertEqual(
129 'ChromiumGPU/linux-release/scrolling-benchmark/mean_frame_time_ref',
130 alert['ref_test'])
120 self.assertEqual('100.0%', alert['percent_changed']) 131 self.assertEqual('100.0%', alert['percent_changed'])
121 self.assertIsNone(alert['bug_id']) 132 self.assertIsNone(alert['bug_id'])
122 expected_end_rev -= 10 133 expected_end_rev -= 10
123 self.assertEqual(expected_end_rev, 9990) 134 self.assertEqual(expected_end_rev, 9990)
124 135
125 def testPost_TriagedParameterSet_TriagedListed(self): 136 def testPost_TriagedParameterSet_TriagedListed(self):
126 self._AddAlertsToDataStore() 137 self._AddAlertsToDataStore()
127 response = self.testapp.post('/alerts', {'triaged': 'true'}) 138 response = self.testapp.post('/alerts', {'triaged': 'true'})
128 anomaly_list = self.GetJsonValue(response, 'anomaly_list') 139 anomaly_list = self.GetJsonValue(response, 'anomaly_list')
129 # The alerts listed should contain those added above, including alerts 140 # The alerts listed should contain those added above, including alerts
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 def testPost_ExternalUserRequestsInternalOnlySheriff_ErrorMessage(self): 216 def testPost_ExternalUserRequestsInternalOnlySheriff_ErrorMessage(self):
206 sheriff.Sheriff(id='Foo', internal_only=True).put() 217 sheriff.Sheriff(id='Foo', internal_only=True).put()
207 self.assertFalse(utils.IsInternalUser()) 218 self.assertFalse(utils.IsInternalUser())
208 response = self.testapp.post('/alerts?sheriff=Foo') 219 response = self.testapp.post('/alerts?sheriff=Foo')
209 error = self.GetJsonValue(response, 'error') 220 error = self.GetJsonValue(response, 'error')
210 self.assertIsNotNone(error) 221 self.assertIsNotNone(error)
211 222
212 223
213 if __name__ == '__main__': 224 if __name__ == '__main__':
214 unittest.main() 225 unittest.main()
OLDNEW
« no previous file with comments | « dashboard/dashboard/alerts.py ('k') | dashboard/dashboard/find_anomalies.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698