Index: build/android/pylib/local/device/local_device_instrumentation_test_run.py |
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py |
index 4b762c9889a531fdc641e96daa15c098bfd6ab9b..b150187654a8242d43d1be5a9818d2b31d9d0514 100644 |
--- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py |
+++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py |
@@ -513,84 +513,103 @@ class LocalDeviceInstrumentationTestRun( |
def _ProcessRenderTestResults( |
self, device, render_tests_device_output_dir, results): |
- # Will archive test images if we are given a GS bucket to store the results |
- # in and are given a results file to output the links to. |
- if not bool(self._test_instance.gs_results_bucket): |
+ # If GS results bucket is specified, will archive render result images. |
+ # If render image dir is specified, will pull the render result image from |
+ # the device and leave in the directory. |
+ if not (bool(self._test_instance.gs_results_bucket) or |
+ bool(self._test_instance.render_results_dir)): |
return |
failure_images_device_dir = posixpath.join( |
render_tests_device_output_dir, 'failures') |
- |
if not device.FileExists(failure_images_device_dir): |
return |
- render_tests_bucket = ( |
- self._test_instance.gs_results_bucket + '/render_tests') |
- |
diff_images_device_dir = posixpath.join( |
render_tests_device_output_dir, 'diffs') |
golden_images_device_dir = posixpath.join( |
render_tests_device_output_dir, 'goldens') |
- with tempfile_ext.NamedTemporaryDirectory() as temp_dir: |
- device.PullFile(failure_images_device_dir, temp_dir) |
+ with contextlib_ext.Optional( |
+ tempfile_ext.NamedTemporaryDirectory(), |
+ not bool(self._test_instance.render_results_dir)) as render_temp_dir: |
+ render_host_dir = ( |
+ self._test_instance.render_results_dir or render_temp_dir) |
+ |
+ if not os.path.exists(render_host_dir): |
+ os.makedirs(render_host_dir) |
+ |
+ # Pull all render test results from device. |
+ device.PullFile(failure_images_device_dir, render_host_dir) |
if device.FileExists(diff_images_device_dir): |
- device.PullFile(diff_images_device_dir, temp_dir) |
+ device.PullFile(diff_images_device_dir, render_host_dir) |
else: |
logging.error('Diff images not found on device.') |
if device.FileExists(golden_images_device_dir): |
- device.PullFile(golden_images_device_dir, temp_dir) |
+ device.PullFile(golden_images_device_dir, render_host_dir) |
else: |
logging.error('Golden images not found on device.') |
- for failure_filename in os.listdir(os.path.join(temp_dir, 'failures')): |
- m = RE_RENDER_IMAGE_NAME.match(failure_filename) |
- if not m: |
- logging.warning('Unexpected file in render test failures: %s', |
- failure_filename) |
- continue |
- |
- failure_filepath = os.path.join(temp_dir, 'failures', failure_filename) |
- failure_link = google_storage_helper.upload_content_addressed( |
- failure_filepath, bucket=render_tests_bucket) |
- |
- golden_filepath = os.path.join(temp_dir, 'goldens', failure_filename) |
- if os.path.exists(golden_filepath): |
- golden_link = google_storage_helper.upload_content_addressed( |
- golden_filepath, bucket=render_tests_bucket) |
- else: |
- golden_link = '' |
+ # Upload results to Google Storage. |
+ if self._test_instance.gs_results_bucket: |
+ self._UploadRenderTestResults(render_host_dir, results) |
- diff_filepath = os.path.join(temp_dir, 'diffs', failure_filename) |
- if os.path.exists(diff_filepath): |
- diff_link = google_storage_helper.upload_content_addressed( |
- diff_filepath, bucket=render_tests_bucket) |
- else: |
- diff_link = '' |
- |
- with tempfile.NamedTemporaryFile(suffix='.html') as temp_html: |
- jinja2_env = jinja2.Environment( |
- loader=jinja2.FileSystemLoader(_JINJA_TEMPLATE_DIR), |
- trim_blocks=True) |
- template = jinja2_env.get_template(_JINJA_TEMPLATE_FILENAME) |
- # pylint: disable=no-member |
- processed_template_output = template.render( |
- test_name=failure_filename, |
- failure_link=failure_link, |
- golden_link=golden_link, |
- diff_link=diff_link) |
- |
- temp_html.write(processed_template_output) |
- temp_html.flush() |
- html_results_link = google_storage_helper.upload_content_addressed( |
- temp_html.name, |
- bucket=render_tests_bucket, |
- content_type='text/html') |
- for result in results: |
- result.SetLink(failure_filename, html_results_link) |
+ def _UploadRenderTestResults(self, render_host_dir, results): |
+ render_tests_bucket = ( |
+ self._test_instance.gs_results_bucket + '/render_tests') |
+ |
+ for failure_filename in os.listdir( |
+ os.path.join(render_host_dir, 'failures')): |
+ m = RE_RENDER_IMAGE_NAME.match(failure_filename) |
+ if not m: |
+ logging.warning('Unexpected file in render test failures: %s', |
+ failure_filename) |
+ continue |
+ |
+ failure_filepath = os.path.join( |
+ render_host_dir, 'failures', failure_filename) |
+ failure_link = google_storage_helper.upload_content_addressed( |
+ failure_filepath, bucket=render_tests_bucket) |
+ |
+ golden_filepath = os.path.join( |
+ render_host_dir, 'goldens', failure_filename) |
+ if os.path.exists(golden_filepath): |
+ golden_link = google_storage_helper.upload_content_addressed( |
+ golden_filepath, bucket=render_tests_bucket) |
+ else: |
+ golden_link = '' |
+ |
+ diff_filepath = os.path.join( |
+ render_host_dir, 'diffs', failure_filename) |
+ if os.path.exists(diff_filepath): |
+ diff_link = google_storage_helper.upload_content_addressed( |
+ diff_filepath, bucket=render_tests_bucket) |
+ else: |
+ diff_link = '' |
+ |
+ with tempfile.NamedTemporaryFile(suffix='.html') as temp_html: |
+ jinja2_env = jinja2.Environment( |
+ loader=jinja2.FileSystemLoader(_JINJA_TEMPLATE_DIR), |
+ trim_blocks=True) |
+ template = jinja2_env.get_template(_JINJA_TEMPLATE_FILENAME) |
+ # pylint: disable=no-member |
+ processed_template_output = template.render( |
+ test_name=failure_filename, |
+ failure_link=failure_link, |
+ golden_link=golden_link, |
+ diff_link=diff_link) |
+ |
+ temp_html.write(processed_template_output) |
+ temp_html.flush() |
+ html_results_link = google_storage_helper.upload_content_addressed( |
+ temp_html.name, |
+ bucket=render_tests_bucket, |
+ content_type='text/html') |
+ for result in results: |
+ result.SetLink(failure_filename, html_results_link) |
#override |
def _ShouldRetry(self, test): |