Index: tools/telemetry/telemetry/page/page_runner.py |
diff --git a/tools/telemetry/telemetry/page/page_runner.py b/tools/telemetry/telemetry/page/page_runner.py |
index e5e341167373c6afe737146354b3b0720365cfdc..21a4ce19ec8c517921a61a8d4e1fa02e5fab193e 100644 |
--- a/tools/telemetry/telemetry/page/page_runner.py |
+++ b/tools/telemetry/telemetry/page/page_runner.py |
@@ -19,6 +19,7 @@ from telemetry.core import exceptions |
from telemetry.core import util |
from telemetry.core import wpr_modes |
from telemetry.core.platform.profiler import profiler_finder |
+from telemetry.page import cloud_storage |
from telemetry.page import page_filter |
from telemetry.page import page_runner_repeat |
from telemetry.page import page_test |
@@ -310,6 +311,35 @@ def _PrepareAndRunPage(test, page_set, expectations, finder_options, |
raise |
+def _UpdatePageSetArchivesIfChanged(page_set): |
+ # Attempt to download the credentials file. |
+ if page_set.credentials_path: |
+ try: |
+ cloud_storage.GetIfChanged( |
+ os.path.join(page_set.base_dir, page_set.credentials_path)) |
+ except (cloud_storage.CredentialsError, cloud_storage.PermissionError): |
+ logging.warning('Cannot retrieve credential file: %s', |
+ page_set.credentials_path) |
+ # Scan every serving directory for .sha1 files |
+ # and download them from Cloud Storage. Assume all data is public. |
+ all_serving_dirs = page_set.serving_dirs.copy() |
+ # Add individual page dirs to all serving dirs. |
+ for page in page_set: |
+ if page.is_file: |
+ all_serving_dirs.add(page.serving_dir) |
+ # Scan all serving dirs. |
+ for serving_dir in all_serving_dirs: |
+ if os.path.splitdrive(serving_dir)[1] == '/': |
+ raise ValueError('Trying to serve root directory from HTTP server.') |
+ for dirpath, _, filenames in os.walk(serving_dir): |
+ for filename in filenames: |
+ path, extension = os.path.splitext( |
+ os.path.join(dirpath, filename)) |
+ if extension != '.sha1': |
+ continue |
+ cloud_storage.GetIfChanged(path) |
+ |
+ |
def Run(test, page_set, expectations, finder_options): |
"""Runs a given test against a given page_set with the given options.""" |
results = results_options.PrepareResults(test, finder_options) |
@@ -342,6 +372,7 @@ def Run(test, page_set, expectations, finder_options): |
if (not finder_options.use_live_sites and |
browser_options.wpr_mode != wpr_modes.WPR_RECORD): |
+ _UpdatePageSetArchivesIfChanged(page_set) |
pages = _CheckArchives(page_set, pages, results) |
# Verify credentials path. |