Chromium Code Reviews| 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 logging | 5 import logging |
| 6 import os | 6 import os |
| 7 import posixpath | 7 import posixpath |
| 8 import re | 8 import re |
| 9 import time | 9 import time |
| 10 | 10 |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 125 def set_debug_app(): | 125 def set_debug_app(): |
| 126 # Set debug app in order to enable reading command line flags on user | 126 # Set debug app in order to enable reading command line flags on user |
| 127 # builds | 127 # builds |
| 128 if self._test_instance.flags: | 128 if self._test_instance.flags: |
| 129 if not self._test_instance.package_info: | 129 if not self._test_instance.package_info: |
| 130 logging.error("Couldn't set debug app: no package info") | 130 logging.error("Couldn't set debug app: no package info") |
| 131 elif not self._test_instance.package_info.package: | 131 elif not self._test_instance.package_info.package: |
| 132 logging.error("Couldn't set debug app: no package defined") | 132 logging.error("Couldn't set debug app: no package defined") |
| 133 else: | 133 else: |
| 134 dev.RunShellCommand(['am', 'set-debug-app', '--persistent', | 134 dev.RunShellCommand(['am', 'set-debug-app', '--persistent', |
| 135 self._test_instance.package_info.package], | 135 self._test_instance.package_info.package], |
| 136 check_return=True) | 136 check_return=True) |
| 137 @trace_event.traced | 137 @trace_event.traced |
| 138 def edit_shared_prefs(): | 138 def edit_shared_prefs(): |
| 139 for pref in self._test_instance.edit_shared_prefs: | 139 for pref in self._test_instance.edit_shared_prefs: |
| 140 prefs = shared_prefs.SharedPrefs(dev, pref['package'], | 140 prefs = shared_prefs.SharedPrefs(dev, pref['package'], |
| 141 pref['filename']) | 141 pref['filename']) |
| 142 prefs.Load() | 142 prefs.Load() |
| 143 for key in pref.get('remove', []): | 143 for key in pref.get('remove', []): |
| 144 try: | 144 try: |
| 145 prefs.Remove(key) | 145 prefs.Remove(key) |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 373 if r.GetType() == base_test_result.ResultType.UNKNOWN: | 373 if r.GetType() == base_test_result.ResultType.UNKNOWN: |
| 374 r.SetType(base_test_result.ResultType.CRASH) | 374 r.SetType(base_test_result.ResultType.CRASH) |
| 375 | 375 |
| 376 # Handle failures by: | 376 # Handle failures by: |
| 377 # - optionally taking a screenshot | 377 # - optionally taking a screenshot |
| 378 # - logging the raw output at INFO level | 378 # - logging the raw output at INFO level |
| 379 # - clearing the application state while persisting permissions | 379 # - clearing the application state while persisting permissions |
| 380 if any(r.GetType() not in (base_test_result.ResultType.PASS, | 380 if any(r.GetType() not in (base_test_result.ResultType.PASS, |
| 381 base_test_result.ResultType.SKIP) | 381 base_test_result.ResultType.SKIP) |
| 382 for r in results): | 382 for r in results): |
| 383 with contextlib_ext.Optional( | 383 with contextlib_ext.Optional( |
|
jbudorick
2017/05/08 17:08:39
At this point, perhaps we should pull the screensh
mikecase (-- gone --)
2017/05/08 18:35:31
Done, moved screenshot logic into new function.
| |
| 384 tempfile_ext.NamedTemporaryDirectory(), | 384 tempfile_ext.NamedTemporaryDirectory(), |
| 385 self._test_instance.screenshot_dir is None and | 385 self._test_instance.screenshot_dir is None and |
| 386 self._test_instance.gs_results_bucket) as screenshot_host_dir: | 386 self._test_instance.gs_results_bucket) as screenshot_host_dir: |
| 387 screenshot_host_dir = ( | 387 screenshot_host_dir = ( |
| 388 self._test_instance.screenshot_dir or screenshot_host_dir) | 388 self._test_instance.screenshot_dir or screenshot_host_dir) |
| 389 | |
| 389 if screenshot_host_dir: | 390 if screenshot_host_dir: |
| 390 file_name = '%s-%s.png' % ( | 391 screenshot_device_file = posixpath.join( |
| 391 test_display_name, | 392 device.GetExternalStoragePath(), |
| 392 time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime())) | 393 'chromium_tests_output_root', |
| 393 screenshot_file = device.TakeScreenshot( | 394 instrumentation_test_instance.FAILURE_SCREENSHOT_FILE) |
| 394 os.path.join(screenshot_host_dir, file_name)) | 395 screenshot_host_file = os.path.join( |
| 395 logging.info( | 396 screenshot_host_dir, |
| 396 'Saved screenshot for %s to %s.', | 397 '%s-%s.png' % ( |
| 397 test_display_name, screenshot_file) | 398 test_display_name, |
| 398 if self._test_instance.gs_results_bucket: | 399 time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()))) |
| 399 link = google_storage_helper.upload( | 400 if device.FileExists(screenshot_device_file): |
| 400 google_storage_helper.unique_name('screenshot', device=device), | 401 try: |
| 401 screenshot_file, | 402 device.PullFile(screenshot_device_file, screenshot_host_file) |
| 402 bucket=self._test_instance.gs_results_bucket + '/screenshots') | 403 finally: |
| 403 for result in results: | 404 device.RemovePath(screenshot_device_file) |
| 404 result.SetLink('post_test_screenshot', link) | 405 |
| 406 logging.info( | |
| 407 'Saved screenshot for %s to %s.', | |
| 408 test_display_name, screenshot_host_file) | |
| 409 if self._test_instance.gs_results_bucket: | |
| 410 link = google_storage_helper.upload( | |
| 411 google_storage_helper.unique_name( | |
| 412 'screenshot', device=device), | |
| 413 screenshot_host_file, | |
| 414 bucket=('%s/screenshots' % | |
| 415 self._test_instance.gs_results_bucket)) | |
| 416 for result in results: | |
| 417 result.SetLink('post_test_screenshot', link) | |
| 405 | 418 |
| 406 logging.info('detected failure in %s. raw output:', test_display_name) | 419 logging.info('detected failure in %s. raw output:', test_display_name) |
| 407 for l in output: | 420 for l in output: |
| 408 logging.info(' %s', l) | 421 logging.info(' %s', l) |
| 409 if (not self._env.skip_clear_data | 422 if (not self._env.skip_clear_data |
| 410 and self._test_instance.package_info): | 423 and self._test_instance.package_info): |
| 411 permissions = ( | 424 permissions = ( |
| 412 self._test_instance.apk_under_test.GetPermissions() | 425 self._test_instance.apk_under_test.GetPermissions() |
| 413 if self._test_instance.apk_under_test | 426 if self._test_instance.apk_under_test |
| 414 else None) | 427 else None) |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 470 if k in annotations: | 483 if k in annotations: |
| 471 timeout = v | 484 timeout = v |
| 472 break | 485 break |
| 473 else: | 486 else: |
| 474 logging.warning('Using default 1 minute timeout for %s', test_name) | 487 logging.warning('Using default 1 minute timeout for %s', test_name) |
| 475 timeout = 60 | 488 timeout = 60 |
| 476 | 489 |
| 477 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) | 490 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) |
| 478 | 491 |
| 479 return timeout | 492 return timeout |
| OLD | NEW |