| # -*- coding: utf-8 -*- |
| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Unit tests for build_artifact module. |
| |
| These unit tests take tarball from google storage locations to fully test |
| the artifact download process. Please make sure to set up your boto file. |
| """ |
| |
| from __future__ import print_function |
| |
| import itertools |
| import os |
| import random |
| import shutil |
| import tempfile |
| |
| import mock |
| |
| from chromite.lib import cros_test_lib |
| from chromite.lib.xbuddy import build_artifact |
| from chromite.lib.xbuddy import devserver_constants |
| from chromite.lib.xbuddy import downloader |
| |
| |
| _VERSION = 'R80-12653.0.0-rc1' |
| _BUILDER = 'amd64-generic-full' |
| _TEST_GOLO_BUILD_ID = '%s/%s' % (_BUILDER, _VERSION) |
| _TEST_GOLO_ARCHIVE = 'gs://chromeos-image-archive/' + _TEST_GOLO_BUILD_ID |
| _TEST_NON_EXISTING_GOLO_BUILD_ID = 'amd64-generic-full/R26-no_such_build' |
| _TEST_NON_EXISTING_GOLO_ARCHIVE = ( |
| 'gs://chromeos-image-archive/' + _TEST_NON_EXISTING_GOLO_BUILD_ID) |
| |
| _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT = [ |
| 'autotest/test_suites/control.youtube_mse_eme', |
| 'autotest/test_suites/control.wifi_stress', |
| 'autotest/test_suites/control.wifi_endtoend', |
| 'autotest/test_suites/control.chameleon_hdmi_stress', |
| 'autotest/test_suites/control.enroll_retainment', |
| 'autotest/test_suites/control.wifi_interop_static', |
| 'autotest/test_suites/control.gce-smoke', |
| 'autotest/test_suites/control.power_requirements', |
| 'autotest/test_suites/control.hardware_storagequal', |
| 'autotest/test_suites/control.bluetooth_qualification', |
| 'autotest/test_suites/control.gpu_hang', |
| 'autotest/test_suites/control.faft_lab', |
| 'autotest/test_suites/control.AFDO_record', |
| 'autotest/test_suites/control.faft_lv5', |
| 'autotest/test_suites/control.link_perf', |
| 'autotest/test_suites/control.dummy', |
| 'autotest/test_suites/control.fingerprint', |
| 'autotest/test_suites/control.cellular_pseudomodem', |
| 'autotest/test_suites/control.wifi_release', |
| 'autotest/test_suites/control.regression', |
| 'autotest/test_suites/control.check_setup_storage_qual', |
| 'autotest/test_suites/control.chameleon_audio_perbuild', |
| 'autotest/test_suites/control.brillo-bvt', |
| 'autotest/test_suites/control.usb-camera', |
| 'autotest/test_suites/control.wilco_bve', |
| 'autotest/test_suites/control.wifi_tdls_cast', |
| 'autotest/test_suites/control.cellular_ota_verizon', |
| 'autotest/test_suites/control.chrome-informational', |
| 'autotest/test_suites/control.security', |
| 'autotest/test_suites/control.faft_pd', |
| 'autotest/test_suites/control.video', |
| 'autotest/test_suites/control.ent-wificell', |
| 'autotest/test_suites/control.wifi_interop_wpa2', |
| 'autotest/test_suites/control.chameleon_audio_unstable', |
| 'autotest/test_suites/control.paygen_au_beta', |
| 'autotest/test_suites/control.bluetooth_sanity', |
| 'autotest/test_suites/control.vmtest_informational4', |
| 'autotest/test_suites/control.faft_ec', |
| 'autotest/test_suites/control.kernel_daily_benchmarks', |
| 'autotest/test_suites/control.wifi_perf', |
| 'autotest/test_suites/control.faft_ec_au_2', |
| 'autotest/test_suites/control.bluetooth_standalone', |
| 'autotest/test_suites/control.moblab_quick', |
| 'autotest/test_suites/control.telemetry_unit_server', |
| 'autotest/test_suites/control.faft_smoke', |
| 'autotest/test_suites/control.vmtest_informational1', |
| 'autotest/test_suites/control.audio', |
| 'autotest/test_suites/control.faft_lv3', |
| 'autotest/test_suites/control.touch', |
| 'autotest/test_suites/control.cellular_endtoend', |
| 'autotest/test_suites/control.faft_setup', |
| 'autotest/test_suites/control.faft_bios_tot', |
| 'autotest/test_suites/control.graphics_per-build', |
| 'autotest/test_suites/control.cellular_au_nightly', |
| 'autotest/test_suites/control.vmtest_informational2', |
| 'autotest/test_suites/control.faft_normal', |
| 'autotest/test_suites/control.crosbolt_perf_weekly', |
| 'autotest/test_suites/control.sb65-presubmit', |
| 'autotest/test_suites/control.faft_flashrom', |
| 'autotest/test_suites/control.paygen_au_canary', |
| 'autotest/test_suites/control.bluetooth_stress', |
| 'autotest/test_suites/control.bvt-cq', |
| 'autotest/test_suites/control.au-perbuild', |
| 'autotest/test_suites/control.brillo-experimental', |
| 'autotest/test_suites/control.moblab_storage_qual', |
| 'autotest/test_suites/control.power_measurement_wrapper', |
| 'autotest/test_suites/control.deqp', |
| 'autotest/test_suites/control.kiosk_longevity', |
| 'autotest/test_suites/control.faft_ec_au_1', |
| 'autotest/test_suites/control.faft_lv4', |
| 'autotest/test_suites/control.hwqual', |
| 'autotest/test_suites/control.power_loadtest_fast', |
| 'autotest/test_suites/control.bluetooth', |
| 'autotest/test_suites/control.bvt-tast-cq', |
| 'autotest/test_suites/control.cellular_ota', |
| 'autotest/test_suites/control.powerplay', |
| 'autotest/test_suites/control.power_loadtest_1hour', |
| 'autotest/test_suites/control.dummyflake', |
| 'autotest/test_suites/control.bluetooth_flaky', |
| 'autotest/test_suites/control.wifichaos', |
| 'autotest/test_suites/control.faft_ec_au_3', |
| 'autotest/test_suites/control.graphics_system', |
| 'autotest/test_suites/control.provision', |
| 'autotest/test_suites/control.cups_weekly', |
| 'autotest/test_suites/control.bvt-tast-chrome-pfq', |
| 'autotest/test_suites/control.bluestreak-pre-cq', |
| 'autotest/test_suites/control.bvt-perbuild', |
| 'autotest/test_suites/control.au_fsi', |
| 'autotest/test_suites/control.faft_cr50_prepvt', |
| 'autotest/test_suites/control.bvt-tast-android-pfq', |
| 'autotest/test_suites/control.hardware_memoryqual', |
| 'autotest/test_suites/control.sanity', |
| 'autotest/test_suites/control.brillo-postsubmit', |
| 'autotest/test_suites/control.hardware_storagequal_cq', |
| 'autotest/test_suites/control.hardware_memoryqual_quick', |
| 'autotest/test_suites/control.faft_infra', |
| 'autotest/test_suites/control.wifi_matfunc_bcm4356', |
| 'autotest/test_suites/control.gts', |
| 'autotest/test_suites/control.dummy_server_nossp', |
| 'autotest/test_suites/control.faft_lv2', |
| 'autotest/test_suites/control.faft_bios_au_2', |
| 'autotest/test_suites/control.faft_lv1', |
| 'autotest/test_suites/control.av_webcam', |
| 'autotest/test_suites/control.power_sanity', |
| 'autotest/test_suites/control.wificell-pre-cq', |
| 'autotest/test_suites/control.hotrod', |
| 'autotest/test_suites/control.skylab_staging_test', |
| 'autotest/test_suites/control.perfalerts', |
| 'autotest/test_suites/control.bvt-installer', |
| 'autotest/test_suites/control.graphics_browser', |
| 'autotest/test_suites/control.network_nightly', |
| 'autotest/test_suites/control.moblab', |
| 'autotest/test_suites/control.ent-nightly', |
| 'autotest/test_suites/control.kernel_weekly_regression', |
| 'autotest/test_suites/control.crosbolt_perf_perbuild', |
| 'autotest/test_suites/control.wifi_matfunc', |
| 'autotest/test_suites/control.hardware_storagequal_quick', |
| 'autotest/test_suites/control.push_to_prod', |
| 'autotest/test_suites/control.gce-sanity', |
| 'autotest/test_suites/control.suite_attr_wrapper', |
| 'autotest/test_suites/control.platform_test_nightly', |
| 'autotest/test_suites/control.faft_bios_au_1', |
| 'autotest/test_suites/control.faft_cr50_experimental', |
| 'autotest/test_suites/control.kernel_per-build_regression', |
| 'autotest/test_suites/control.app-compat', |
| 'autotest/test_suites/control.jailed_build', |
| 'autotest/test_suites/control.bvt-arc', |
| 'autotest/test_suites/control.wifi_flaky', |
| 'autotest/test_suites/suite_to_control_file_map', |
| 'autotest/test_suites/control.test_that_wrapper', |
| 'autotest/test_suites/control.experimental', |
| 'autotest/test_suites/control.ent-perbuild', |
| 'autotest/test_suites/control.wifi_update_router', |
| 'autotest/test_suites/control.faft_cr50_pvt', |
| 'autotest/test_suites/control.stress', |
| 'autotest/test_suites/control.cellular_ota_sprint', |
| 'autotest/test_suites/control.bvt-inline', |
| 'autotest/test_suites/control.brillo-smoke', |
| 'autotest/test_suites/control.faft_ec3po', |
| 'autotest/test_suites/control.video_image_comparison_chameleon', |
| 'autotest/test_suites/control.smoke', |
| 'autotest/test_suites/control.moblab-cts-mini', |
| 'autotest/test_suites/control.cellular_mbim_compliance', |
| 'autotest/test_suites/control.kernel_daily_regression', |
| 'autotest/test_suites/control.cellular_au', |
| 'autotest/test_suites/control.faft_bios', |
| 'autotest/test_suites/control.kernel_per-build_benchmarks', |
| 'autotest/test_suites/control.usb_detect_stress', |
| 'autotest/test_suites/control.crosbolt_perf_nightly', |
| 'autotest/test_suites/control.tablet_mode', |
| 'autotest/test_suites/control.bluetooth_wifi_coex', |
| 'autotest/test_suites/control.youtube_page', |
| 'autotest/test_suites/control.faft_dev', |
| 'autotest/test_suites/control.storagequal', |
| 'autotest/test_suites/control.wifi_atten_perf', |
| 'autotest/test_suites/control.cr50_stress', |
| 'autotest/test_suites/control.cellular_ota_tmobile', |
| 'autotest/test_suites/control.wifi_interop', |
| 'autotest/test_suites/control.arc-unit-test', |
| 'autotest/test_suites/control.bluestreak-partners', |
| 'autotest/test_suites/control.chameleon_hdmi_unstable', |
| 'autotest/test_suites/control.graphics', |
| 'autotest/test_suites/control.cros_test_platform', |
| 'autotest/test_suites/control.faft_cr50_tot', |
| 'autotest/test_suites/control.network_ui', |
| 'autotest/test_suites/control.brillo-presubmit', |
| 'autotest/test_suites/control.graphics_per-week', |
| 'autotest/test_suites/control.usb_detect', |
| 'autotest/test_suites/control.partners', |
| 'autotest/test_suites/control.faft_ec_tot', |
| 'autotest/test_suites/control.check_setup_cts_N', |
| 'autotest/test_suites/control.tendo_experimental', |
| 'autotest/test_suites/control.power_idle', |
| 'autotest/test_suites/control.vmtest_informational3', |
| 'autotest/test_suites/control.faft_bios_au_3', |
| 'autotest/test_suites/control.dummy_server', |
| 'autotest/test_suites/control.cts_P', |
| 'autotest/test_suites/control.bluetooth_e2e', |
| 'autotest/test_suites/control.power_daily', |
| 'autotest/test_suites/control.cellular_ota_att', |
| 'autotest/test_suites/dependency_info', |
| 'autotest/test_suites/control.power_loadtest', |
| 'autotest/test_suites/control.chameleon_hdmi_perbuild', |
| 'autotest/test_suites/control.cellular_modem_repair', |
| 'autotest/test_suites/control.faft_wilco', |
| 'autotest/test_suites/control.graphics_per-day', |
| 'autotest/test_suites/control.manual_platform_suite', |
| 'autotest/test_suites/control.hardware_storagequal_temp', |
| 'autotest/test_suites/control.paygen_au_dev', |
| 'autotest/test_suites/control.cros-av-analysis', |
| 'autotest/test_suites/control.bvt-tast-informational', |
| 'autotest/test_suites/control.brillo-audio', |
| 'autotest/test_suites/control.cts_N', |
| 'autotest/test_suites/control.faft_bios_ec3po', |
| 'autotest/test_suites/control.power_build', |
| 'autotest/test_suites/control.toolchain-tests', |
| 'autotest/test_suites/control.security_weekly', |
| 'autotest/test_suites/control.wifi_lucidsleep', |
| 'autotest/test_suites/control.telemetry_unit', |
| 'autotest/test_suites/control.paygen_au_stable', |
| ] |
| |
| _TEST_GOLO_ARCHIVE_IMAGE_ZIPFILE_CONTENT = [ |
| 'image.zip', |
| 'unpack_partitions.sh', |
| 'chromiumos_base_image.bin-package-sizes.json', |
| 'config.txt', |
| 'pack_partitions.sh', |
| 'umount_image.sh', |
| 'id_rsa.pub', |
| 'boot.config', |
| 'partition_script.sh', |
| 'boot_images/vmlinuz-4.14.151-13598-g75d9ce1f04f5', |
| 'boot_images/vmlinuz', |
| 'mount_image.sh', |
| 'id_rsa', |
| 'license_credits.html', |
| 'boot.desc', |
| ] |
| |
| |
| class BuildArtifactTest(cros_test_lib.MockTestCase): |
| """Test different BuildArtifact operations.""" |
| |
| def setUp(self): |
| self.work_dir = tempfile.mkdtemp('build_artifact_unittest') |
| |
| def tearDown(self): |
| shutil.rmtree(self.work_dir) |
| |
| def _CheckMarker(self, marker_file, installed_files): |
| with open(os.path.join(self.work_dir, marker_file)) as f: |
| self.assertEqual(installed_files, f.read().splitlines()) |
| |
| def testBundledArtifactTypes(self): |
| """Tests that all known bundled artifacts are either zip or tar files.""" |
| known_names = ['zip', '.tgz', '.tar', 'tar.bz2', 'tar.xz', 'tar.gz'] |
| # pylint: disable=dict-values-not-iterating |
| for d in itertools.chain(*build_artifact.chromeos_artifact_map.values()): |
| if issubclass(d, build_artifact.BundledArtifact): |
| self.assertTrue(any(d.ARTIFACT_NAME.endswith(name) |
| for name in known_names)) |
| |
| @cros_test_lib.NetworkTest() |
| def testProcessBuildArtifact(self): |
| """Processes a real tarball from GSUtil and stages it.""" |
| artifact = build_artifact.Artifact( |
| build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION) |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| self.assertEqual( |
| artifact.installed_files, |
| [os.path.join(self.work_dir, build_artifact.TEST_SUITES_FILE)]) |
| self.assertExists(os.path.join(self.work_dir, |
| build_artifact.TEST_SUITES_FILE)) |
| self._CheckMarker(artifact.marker_name, artifact.installed_files) |
| |
| @cros_test_lib.NetworkTest() |
| def testProcessTarball(self): |
| """Downloads a real tarball and untars it.""" |
| artifact = build_artifact.BundledArtifact( |
| build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION) |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| expected_installed_files = [ |
| os.path.join(self.work_dir, filename) |
| for filename in ([build_artifact.TEST_SUITES_FILE] + |
| _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)] |
| self.assertEqual(artifact.installed_files, expected_installed_files) |
| self.assertTrue(os.path.isdir(os.path.join( |
| self.work_dir, 'autotest', 'test_suites'))) |
| self._CheckMarker(artifact.marker_name, artifact.installed_files) |
| |
| @cros_test_lib.NetworkTest() |
| def testProcessTarballWithFile(self): |
| """Downloads a real tarball and only untars one file from it.""" |
| file_to_download = 'autotest/test_suites/control.provision' |
| artifact = build_artifact.BundledArtifact( |
| build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION, |
| files_to_extract=[file_to_download]) |
| expected_installed_files = [ |
| os.path.join(self.work_dir, filename) |
| for filename in [build_artifact.TEST_SUITES_FILE] + [file_to_download]] |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| self.assertEqual(artifact.installed_files, expected_installed_files) |
| self.assertExists(os.path.join(self.work_dir, |
| file_to_download)) |
| self._CheckMarker(artifact.marker_name, artifact.installed_files) |
| |
| @mock.patch.object(build_artifact.AutotestTarball, '_Extract') |
| @mock.patch.object(build_artifact.AutotestTarball, '_UpdateName') |
| @mock.patch.object(downloader.GoogleStorageDownloader, 'Fetch') |
| @mock.patch.object(downloader.GoogleStorageDownloader, 'Wait') |
| def testDownloadAutotest(self, wait_mock, fetch_mock, |
| update_name_mock, extract_mock): |
| """Downloads a real autotest tarball for test.""" |
| artifact = build_artifact.AutotestTarball( |
| build_artifact.AUTOTEST_FILE, self.work_dir, _VERSION, |
| files_to_extract=None, exclude=['autotest/test_suites']) |
| |
| install_dir = self.work_dir |
| artifact.staging_dir = install_dir |
| |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| |
| rc = self.StartPatcher(cros_test_lib.RunCommandMock()) |
| rc.SetDefaultCmdResult() |
| artifact.Process(dl, True) |
| |
| self.assertFalse(artifact.installed_files) |
| self.assertTrue(os.path.isdir( |
| os.path.join(self.work_dir, 'autotest', 'packages'))) |
| self.assertFalse(os.path.getsize( |
| os.path.join(self.work_dir, artifact.marker_name))) |
| |
| wait_mock.assert_called_with('autotest.tar', False, None, 1) |
| fetch_mock.assert_called_with('autotest.tar', install_dir + '/') |
| update_name_mock.assert_called() |
| extract_mock.assert_called() |
| rc.assertCommandContains( |
| ['autotest/utils/packager.py', '--action=upload', '--repository', |
| os.path.join(install_dir, 'autotest/packages'), '--all'], |
| cwd=install_dir) |
| |
| @cros_test_lib.NetworkTest() |
| def testAUTestPayloadBuildArtifact(self): |
| """Downloads a real tarball and treats it like an AU payload.""" |
| artifact = build_artifact.AUTestPayload( |
| build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION) |
| expected_installed_files = [ |
| os.path.join(self.work_dir, devserver_constants.UPDATE_FILE)] |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| self.assertEqual(artifact.installed_files, expected_installed_files) |
| self.assertExists(os.path.join(self.work_dir, |
| devserver_constants.UPDATE_FILE)) |
| self._CheckMarker(artifact.marker_name, artifact.installed_files) |
| |
| @cros_test_lib.NetworkTest() |
| def testDeltaPayloadsArtifact(self): |
| """Downloads delta paylaods from test bucket.""" |
| nton = build_artifact.DeltaPayloadNtoN(self.work_dir, _VERSION) |
| dl = downloader.GoogleStorageDownloader( |
| self.work_dir, _TEST_GOLO_ARCHIVE, _TEST_GOLO_BUILD_ID) |
| nton.Process(dl, False) |
| |
| nton_dir = os.path.join(self.work_dir, 'au', '%s_nton' % _VERSION) |
| # TODO(ahassani, achuith): update.gz appears twice. |
| delta_installed_files = ('update.gz', 'update.gz.json', |
| 'update.gz', 'stateful.tgz') |
| self.assertEqual(nton.installed_files, |
| [os.path.join(nton_dir, filename) |
| for filename in delta_installed_files]) |
| self.assertExists(os.path.join(nton_dir, 'update.gz')) |
| self._CheckMarker(nton.marker_name, nton.installed_files) |
| |
| @cros_test_lib.NetworkTest() |
| def testImageUnzip(self): |
| """Downloads and stages a zip file and extracts a test image.""" |
| files_to_extract = ['chromiumos_test_image.bin'] |
| artifact = build_artifact.BundledArtifact( |
| build_artifact.IMAGE_FILE, self.work_dir, _VERSION, |
| files_to_extract=files_to_extract) |
| expected_installed_files = [ |
| os.path.join(self.work_dir, filename) |
| for filename in [build_artifact.IMAGE_FILE] + files_to_extract] |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| self.assertEqual(expected_installed_files, artifact.installed_files) |
| self.assertExists(os.path.join(self.work_dir, |
| 'chromiumos_test_image.bin')) |
| self._CheckMarker(artifact.marker_name, artifact.installed_files) |
| |
| @cros_test_lib.NetworkTest() |
| def testImageUnzipWithExcludes(self): |
| """Downloads and stages a zip file while excluding all large files.""" |
| artifact = build_artifact.BundledArtifact( |
| build_artifact.IMAGE_FILE, self.work_dir, _VERSION, exclude=['*.bin']) |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| |
| expected_installed_files = [ |
| os.path.join(self.work_dir, filename) |
| for filename in _TEST_GOLO_ARCHIVE_IMAGE_ZIPFILE_CONTENT] |
| self.assertEqual(expected_installed_files, artifact.installed_files) |
| self.assertNotExists(os.path.join(self.work_dir, |
| 'chromiumos_test_image.bin')) |
| self._CheckMarker(artifact.marker_name, artifact.installed_files) |
| |
| @cros_test_lib.NetworkTest() |
| def testArtifactFactory(self): |
| """Tests that BuildArtifact works for both named and file artifacts.""" |
| name_artifact = 'test_suites' # This file is in every real GS dir. |
| file_artifact = 'metadata.json' # This file is in every real GS dir. |
| factory = build_artifact.ChromeOSArtifactFactory( |
| self.work_dir, [name_artifact], [file_artifact], _VERSION) |
| artifacts = factory.RequiredArtifacts() |
| self.assertEqual(len(artifacts), 2) |
| expected_installed_files_0 = [ |
| os.path.join(self.work_dir, filename) for filename |
| in ([build_artifact.TEST_SUITES_FILE] + |
| _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)] |
| expected_installed_files_1 = [os.path.join(self.work_dir, file_artifact)] |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifacts[0].Process(dl, False) |
| artifacts[1].Process(dl, False) |
| self.assertEqual(artifacts[0].installed_files, expected_installed_files_0) |
| self.assertEqual(artifacts[1].installed_files, expected_installed_files_1) |
| # Test suites directory exists. |
| self.assertExists(os.path.join(self.work_dir, 'autotest', 'test_suites')) |
| # File artifact was staged. |
| self.assertExists(os.path.join(self.work_dir, file_artifact)) |
| self._CheckMarker(artifacts[0].marker_name, artifacts[0].installed_files) |
| self._CheckMarker(artifacts[1].marker_name, artifacts[1].installed_files) |
| |
| def testProcessBuildArtifactWithException(self): |
| """Test processing a non-existing artifact from GSUtil.""" |
| artifact = build_artifact.Artifact( |
| build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION) |
| try: |
| dl = downloader.GoogleStorageDownloader(self.work_dir, |
| _TEST_NON_EXISTING_GOLO_ARCHIVE, |
| _TEST_NON_EXISTING_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| except Exception as e: |
| expected_exception = e |
| saved_exception = artifact.GetException() |
| # saved_exception has traceback info - strip it. |
| self.assertEqual(str(expected_exception), |
| str(saved_exception).split('\n')[0]) |
| |
| @cros_test_lib.NetworkTest() |
| def testArtifactStaged(self): |
| """Tests the artifact staging verification logic.""" |
| artifact = build_artifact.BundledArtifact( |
| build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION) |
| expected_installed_files = [ |
| os.path.join(self.work_dir, filename) |
| for filename in ([build_artifact.TEST_SUITES_FILE] + |
| _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)] |
| dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE, |
| _TEST_GOLO_BUILD_ID) |
| artifact.Process(dl, False) |
| |
| # Check that it works when all files are there. |
| self.assertTrue(artifact.ArtifactStaged()) |
| |
| # Remove an arbitrary file among the ones staged, ensure the check fails |
| # and that the marker files is removed. |
| os.remove(random.choice(expected_installed_files)) |
| self.assertExists(os.path.join(self.work_dir, artifact.marker_name)) |
| self.assertFalse(artifact.ArtifactStaged()) |
| self.assertNotExists(os.path.join(self.work_dir, artifact.marker_name)) |