OLD | NEW |
1 # Copyright 2017 The Chromium Authors. All rights reserved. | 1 # Copyright 2017 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 | 7 |
8 import webapp2 | 8 import webapp2 |
9 import webtest | 9 import webtest |
10 | 10 |
(...skipping 18 matching lines...) Expand all Loading... |
29 @mock.patch.object( | 29 @mock.patch.object( |
30 pinpoint_request.start_try_job, 'GuessStoryFilter') | 30 pinpoint_request.start_try_job, 'GuessStoryFilter') |
31 def testPost_CallsGuessStoryFilter(self, mock_story_filter): | 31 def testPost_CallsGuessStoryFilter(self, mock_story_filter): |
32 mock_story_filter.return_value = 'bar' | 32 mock_story_filter.return_value = 'bar' |
33 response = self.testapp.post('/pinpoint/new/prefill', {'test_path': 'foo'}) | 33 response = self.testapp.post('/pinpoint/new/prefill', {'test_path': 'foo'}) |
34 self.assertEqual( | 34 self.assertEqual( |
35 {'story_filter': 'bar'}, json.loads(response.body)) | 35 {'story_filter': 'bar'}, json.loads(response.body)) |
36 mock_story_filter.assert_called_with('foo') | 36 mock_story_filter.assert_called_with('foo') |
37 | 37 |
38 | 38 |
39 class PinpointNewRequestHandlerTest(testing_common.TestCase): | 39 class PinpointNewPerfTryRequestHandlerTest(testing_common.TestCase): |
40 | 40 |
41 def setUp(self): | 41 def setUp(self): |
42 super(PinpointNewRequestHandlerTest, self).setUp() | 42 super(PinpointNewPerfTryRequestHandlerTest, self).setUp() |
43 | 43 |
44 app = webapp2.WSGIApplication( | 44 app = webapp2.WSGIApplication( |
45 [(r'/pinpoint/new', pinpoint_request.PinpointNewRequestHandler)]) | 45 [(r'/pinpoint/new', |
| 46 pinpoint_request.PinpointNewPerfTryRequestHandler)]) |
46 self.testapp = webtest.TestApp(app) | 47 self.testapp = webtest.TestApp(app) |
47 | 48 |
48 self.SetCurrentUser('foo@chromium.org') | 49 self.SetCurrentUser('foo@chromium.org') |
| 50 |
| 51 namespaced_stored_object.Set('bot_dimensions_map', { |
| 52 'mac': [ |
| 53 {'key': 'foo', 'value': 'mac_dimensions'} |
| 54 ], |
| 55 'android-webview-nexus5x': [ |
| 56 {'key': 'foo', 'value': 'android_dimensions'} |
| 57 ] |
| 58 }) |
| 59 |
| 60 namespaced_stored_object.Set('repositories', { |
| 61 'chromium': {'some': 'params'}, |
| 62 'v8': {'more': 'params'} |
| 63 }) |
| 64 |
| 65 namespaced_stored_object.Set('bot_browser_map', [ |
| 66 ['android-webview', 'webview'], |
| 67 ['', 'release'] |
| 68 ]) |
| 69 |
| 70 @mock.patch.object( |
| 71 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=False)) |
| 72 def testPost_NotSheriff(self): |
| 73 response = self.testapp.post('/pinpoint/new') |
| 74 self.assertEqual( |
| 75 {u'error': u'User "foo@chromium.org" not authorized.'}, |
| 76 json.loads(response.body)) |
| 77 |
| 78 @mock.patch.object( |
| 79 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 80 @mock.patch.object(pinpoint_service, 'NewJob') |
| 81 @mock.patch.object( |
| 82 pinpoint_request, 'PinpointParamsFromPerfTryParams', |
| 83 mock.MagicMock(return_value={'test': 'result'})) |
| 84 def testPost_Succeeds(self, mock_pinpoint): |
| 85 mock_pinpoint.return_value = {'foo': 'bar'} |
| 86 self.SetCurrentUser('foo@chromium.org') |
| 87 params = {'a': 'b', 'c': 'd'} |
| 88 response = self.testapp.post('/pinpoint/new', params) |
| 89 |
| 90 expected_args = mock.call({'test': 'result'}) |
| 91 self.assertEqual([expected_args], mock_pinpoint.call_args_list) |
| 92 self.assertEqual({'foo': 'bar'}, json.loads(response.body)) |
| 93 |
| 94 @mock.patch.object( |
| 95 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=False)) |
| 96 def testPinpointParams_InvalidSheriff_RaisesError(self): |
| 97 params = { |
| 98 'test_path': 'ChromiumPerf/foo/blah/foo' |
| 99 } |
| 100 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 101 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 102 |
| 103 @mock.patch.object( |
| 104 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 105 def testPinpointParams_BotUndefined_ReturnsError(self): |
| 106 params = { |
| 107 'test_path': 'ChromiumPerf/foo/blah/foo', |
| 108 'bisect_mode': 'performance', |
| 109 'story_filter': '', |
| 110 } |
| 111 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 112 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 113 |
| 114 @mock.patch.object( |
| 115 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 116 def testPinpointParams_NonTelemetry_RaisesError(self): |
| 117 params = { |
| 118 'test_path': 'ChromiumPerf/mac/cc_perftests/foo', |
| 119 'start_commit': 'abcd1234', |
| 120 'end_commit': 'efgh5678', |
| 121 'start_repository': 'chromium', |
| 122 'end_repository': 'chromium', |
| 123 } |
| 124 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 125 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 126 |
| 127 @mock.patch.object( |
| 128 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 129 def testPinpointParams_IsolateTarget_Telemetry(self): |
| 130 params = { |
| 131 'test_path': 'ChromiumPerf/mac/system_health/foo', |
| 132 'start_commit': 'abcd1234', |
| 133 'end_commit': 'efgh5678', |
| 134 'start_repository': 'chromium', |
| 135 'end_repository': 'chromium', |
| 136 'extra_telemetry_args': [['--extra-trace-args', 'abc,123,foo']], |
| 137 } |
| 138 results = pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 139 |
| 140 self.assertEqual('mac', results['configuration']) |
| 141 self.assertEqual('release', results['browser']) |
| 142 self.assertEqual('system_health', results['benchmark']) |
| 143 self.assertEqual('', results['chart']) |
| 144 self.assertEqual('telemetry_perf_tests', results['target']) |
| 145 self.assertEqual('foo@chromium.org', results['email']) |
| 146 self.assertEqual('chromium', results['start_repository']) |
| 147 self.assertEqual('abcd1234', results['start_git_hash']) |
| 148 self.assertEqual('chromium', results['end_repository']) |
| 149 self.assertEqual('efgh5678', results['end_git_hash']) |
| 150 self.assertEqual('0', results['auto_explore']) |
| 151 self.assertEqual('', results['bug_id']) |
| 152 self.assertEqual('', results['story']) |
| 153 self.assertEqual( |
| 154 [['--extra-trace-args', 'abc,123,foo']], |
| 155 json.loads(results['extra_telemetry_args'])) |
| 156 self.assertEqual( |
| 157 [{'key': 'foo', 'value': 'mac_dimensions'}], |
| 158 json.loads(results['dimensions'])) |
| 159 |
| 160 @mock.patch.object( |
| 161 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 162 def testPinpointParams_IsolateTarget_WebviewTelemetry(self): |
| 163 params = { |
| 164 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 165 'start_commit': 'abcd1234', |
| 166 'end_commit': 'efgh5678', |
| 167 'start_repository': 'chromium', |
| 168 'end_repository': 'chromium', |
| 169 'extra_telemetry_args': '', |
| 170 } |
| 171 results = pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 172 |
| 173 self.assertEqual('android-webview-nexus5x', results['configuration']) |
| 174 self.assertEqual('webview', results['browser']) |
| 175 self.assertEqual('system_health', results['benchmark']) |
| 176 self.assertEqual('', results['chart']) |
| 177 self.assertEqual('telemetry_perf_webview_tests', results['target']) |
| 178 self.assertEqual('foo@chromium.org', results['email']) |
| 179 self.assertEqual('chromium', results['start_repository']) |
| 180 self.assertEqual('abcd1234', results['start_git_hash']) |
| 181 self.assertEqual('chromium', results['end_repository']) |
| 182 self.assertEqual('efgh5678', results['end_git_hash']) |
| 183 self.assertEqual('0', results['auto_explore']) |
| 184 self.assertEqual('', results['bug_id']) |
| 185 self.assertEqual( |
| 186 [{'key': 'foo', 'value': 'android_dimensions'}], |
| 187 json.loads(results['dimensions'])) |
| 188 |
| 189 @mock.patch.object( |
| 190 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 191 def testPinpointParams_StartRepositoryInvalid_RaisesError(self): |
| 192 params = { |
| 193 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 194 'start_commit': 'abcd1234', |
| 195 'end_commit': 'efgh5678', |
| 196 'start_repository': 'foo', |
| 197 'end_repository': 'chromium', |
| 198 'extra_telemetry_args': '', |
| 199 } |
| 200 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 201 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 202 |
| 203 @mock.patch.object( |
| 204 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 205 def testPinpointParams_StartRepositoryNoChromium_RaisesError(self): |
| 206 params = { |
| 207 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 208 'start_commit': 'abcd1234', |
| 209 'end_commit': 'efgh5678', |
| 210 'start_repository': 'v8', |
| 211 'end_repository': 'chromium', |
| 212 'extra_telemetry_args': '', |
| 213 } |
| 214 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 215 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 216 |
| 217 @mock.patch.object( |
| 218 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 219 def testPinpointParams_EndRepositoryNoChromium_RaisesError(self): |
| 220 params = { |
| 221 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 222 'start_commit': 'abcd1234', |
| 223 'end_commit': 'efgh5678', |
| 224 'start_repository': 'chromium', |
| 225 'end_repository': 'v8', |
| 226 'extra_telemetry_args': '', |
| 227 } |
| 228 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 229 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 230 |
| 231 @mock.patch.object( |
| 232 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 233 @mock.patch.object( |
| 234 pinpoint_request.crrev_service, 'GetNumbering', |
| 235 mock.MagicMock(return_value={'git_sha': 'abcd'})) |
| 236 def testPinpointParams_ConvertsCommitsToGitHashes(self): |
| 237 params = { |
| 238 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 239 'start_commit': '1234', |
| 240 'end_commit': '5678', |
| 241 'start_repository': 'chromium', |
| 242 'end_repository': 'chromium', |
| 243 'extra_telemetry_args': '', |
| 244 } |
| 245 results = pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 246 |
| 247 self.assertEqual('abcd', results['start_git_hash']) |
| 248 self.assertEqual('abcd', results['end_git_hash']) |
| 249 |
| 250 @mock.patch.object( |
| 251 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 252 @mock.patch.object( |
| 253 pinpoint_request.crrev_service, 'GetNumbering') |
| 254 def testPinpointParams_SkipsConvertingHashes(self, mock_crrev): |
| 255 params = { |
| 256 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 257 'start_commit': 'abcd1234', |
| 258 'end_commit': 'efgh5678', |
| 259 'start_repository': 'chromium', |
| 260 'end_repository': 'chromium', |
| 261 'extra_telemetry_args': '', |
| 262 } |
| 263 results = pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 264 |
| 265 self.assertEqual('abcd1234', results['start_git_hash']) |
| 266 self.assertEqual('efgh5678', results['end_git_hash']) |
| 267 self.assertFalse(mock_crrev.called) |
| 268 |
| 269 @mock.patch.object( |
| 270 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 271 def testPinpointParams_InvalidRepositoryCommitPosition(self): |
| 272 params = { |
| 273 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 274 'start_commit': '123', |
| 275 'end_commit': '456', |
| 276 'start_repository': 'v8', |
| 277 'end_repository': 'v8', |
| 278 'extra_telemetry_args': '', |
| 279 } |
| 280 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 281 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 282 |
| 283 @mock.patch.object( |
| 284 utils, 'IsValidSheriffUser', mock.MagicMock(return_value=True)) |
| 285 @mock.patch.object( |
| 286 pinpoint_request.crrev_service, 'GetNumbering', |
| 287 mock.MagicMock(return_value={'error': {'message': 'foo'}})) |
| 288 def testPinpointParams_CrrevFails(self): |
| 289 params = { |
| 290 'test_path': 'ChromiumPerf/android-webview-nexus5x/system_health/foo', |
| 291 'start_commit': '123', |
| 292 'end_commit': '456', |
| 293 'start_repository': 'v8', |
| 294 'end_repository': 'v8', |
| 295 'extra_telemetry_args': '', |
| 296 } |
| 297 with self.assertRaises(pinpoint_request.InvalidParamsError): |
| 298 pinpoint_request.PinpointParamsFromPerfTryParams(params) |
| 299 |
| 300 |
| 301 |
| 302 class PinpointNewBisectRequestHandlerTest(testing_common.TestCase): |
| 303 |
| 304 def setUp(self): |
| 305 super(PinpointNewBisectRequestHandlerTest, self).setUp() |
| 306 |
| 307 app = webapp2.WSGIApplication( |
| 308 [(r'/pinpoint/new', |
| 309 pinpoint_request.PinpointNewBisectRequestHandler)]) |
| 310 self.testapp = webtest.TestApp(app) |
| 311 |
| 312 self.SetCurrentUser('foo@chromium.org') |
49 | 313 |
50 namespaced_stored_object.Set('bot_dimensions_map', { | 314 namespaced_stored_object.Set('bot_dimensions_map', { |
51 'mac': [ | 315 'mac': [ |
52 {'key': 'foo', 'value': 'mac_dimensions'} | 316 {'key': 'foo', 'value': 'mac_dimensions'} |
53 ], | 317 ], |
54 'android-webview-nexus5x': [ | 318 'android-webview-nexus5x': [ |
55 {'key': 'foo', 'value': 'android_dimensions'} | 319 {'key': 'foo', 'value': 'android_dimensions'} |
56 ] | 320 ] |
57 }) | 321 }) |
58 | 322 |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 'start_commit': '123', | 678 'start_commit': '123', |
415 'end_commit': '456', | 679 'end_commit': '456', |
416 'start_repository': 'v8', | 680 'start_repository': 'v8', |
417 'end_repository': 'v8', | 681 'end_repository': 'v8', |
418 'bisect_mode': 'performance', | 682 'bisect_mode': 'performance', |
419 'story_filter': '', | 683 'story_filter': '', |
420 } | 684 } |
421 with self.assertRaises(pinpoint_request.InvalidParamsError): | 685 with self.assertRaises(pinpoint_request.InvalidParamsError): |
422 pinpoint_request.PinpointParamsFromBisectParams(params) | 686 pinpoint_request.PinpointParamsFromBisectParams(params) |
423 | 687 |
OLD | NEW |