OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |