| # Copyright 2015 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import json |
| import os |
| import tempfile |
| import unittest |
| |
| import mock # pylint: disable=import-error |
| |
| from py_utils import cloud_storage |
| from telemetry.wpr import archive_info |
| |
| from core import path_util |
| import fetch_benchmark_deps |
| |
| |
| def NormPaths(paths): |
| return sorted([os.path.normcase(p) for p in paths.splitlines()]) |
| |
| |
| class FetchBenchmarkDepsUnittest(unittest.TestCase): |
| """The test guards fetch_benchmark_deps. |
| |
| It assumes the following telemetry APIs always success: |
| telemetry.wpr.archive_info.WprArchiveInfo.DownloadArchivesIfNeeded |
| py_utils.cloud_storage.GetFilesInDirectoryIfChanged |
| """ |
| |
| def testFetchWPRs(self): |
| test_name = 'system_health.common_desktop' |
| deps_fd, deps_path = tempfile.mkstemp() |
| args = [test_name, '--output-deps=%s' % deps_path] |
| with mock.patch.object(archive_info.WprArchiveInfo, |
| 'DownloadArchivesIfNeeded', autospec=True) as mock_download: |
| with mock.patch('py_utils.cloud_storage' |
| '.GetFilesInDirectoryIfChanged') as mock_get: |
| mock_download.return_value = True |
| mock_get.GetFilesInDirectoryIfChanged.return_value = True |
| fetch_benchmark_deps.main(args) |
| self.assertEqual( |
| # pylint: disable=protected-access |
| os.path.normpath(mock_download.call_args[0][0]._file_path), |
| os.path.join(path_util.GetPerfStorySetsDir(), 'data', |
| 'system_health_desktop.json')) |
| # This benchmark doesn't use any static local files. |
| self.assertFalse(mock_get.called) |
| |
| # Gets json content and remove the temp json file. |
| with open(deps_path) as deps_file: |
| deps = json.loads(deps_file.read()) |
| os.close(deps_fd) |
| os.remove(deps_path) |
| |
| # Checks fetch_benchmark_deps.py output. |
| output_count = 0 |
| for dep in deps[test_name]: |
| fullpath = os.path.join(path_util.GetChromiumSrcDir(), dep) |
| sha1path = fullpath + '.sha1' |
| self.assertTrue(os.path.isfile(sha1path)) |
| output_count += 1 |
| self.assertTrue(output_count > 0) |
| |
| def testFetchServingDirs(self): |
| args = ['media.desktop'] |
| with mock.patch.object(archive_info.WprArchiveInfo, |
| 'DownloadArchivesIfNeeded', autospec=True) as mock_download: |
| with mock.patch('py_utils.cloud_storage' |
| '.GetFilesInDirectoryIfChanged') as mock_get: |
| mock_download.return_value = True |
| mock_get.GetFilesInDirectoryIfChanged.return_value = True |
| fetch_benchmark_deps.main(args) |
| # This benchmark doesn't use any archive files. |
| self.assertFalse(mock_download.called) |
| mock_get.assert_called_once_with( |
| os.path.join(path_util.GetPerfStorySetsDir(), 'media_cases'), |
| cloud_storage.PARTNER_BUCKET) |