blob: 3c6b1a575dae99cfe8038d30160e07b0f1c7fdf6 [file] [log] [blame]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -07001#!/usr/bin/env python2
2# -*- coding: utf-8 -*-
Chris Sosa47a7d4e2012-03-28 11:26:55 -07003# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
Gilad Arnoldc65330c2012-09-20 15:17:48 -07007"""Unit tests for build_artifact module.
Chris Sosa47a7d4e2012-03-28 11:26:55 -07008
9These unit tests take tarball from google storage locations to fully test
Chris Sosa76e44b92013-01-31 12:11:38 -080010the artifact download process. Please make sure to set up your boto file.
Chris Sosa47a7d4e2012-03-28 11:26:55 -070011"""
12
Gabe Black3b567202015-09-23 14:07:59 -070013from __future__ import print_function
14
15import itertools
Chris Sosa47a7d4e2012-03-28 11:26:55 -070016import os
Gilad Arnold1638d822013-11-07 23:38:16 -080017import random
Chris Sosa47a7d4e2012-03-28 11:26:55 -070018import shutil
Chris Sosa47a7d4e2012-03-28 11:26:55 -070019import tempfile
20import unittest
21
Achuith Bhandarkar16ce7902019-09-26 11:17:01 +020022import mock
Gilad Arnoldabb352e2012-09-23 01:24:27 -070023
Gilad Arnoldc65330c2012-09-20 15:17:48 -070024import build_artifact
Gilad Arnold1638d822013-11-07 23:38:16 -080025import devserver_constants
Gabe Black3b567202015-09-23 14:07:59 -070026import downloader
Chris Sosa47a7d4e2012-03-28 11:26:55 -070027
Gilad Arnoldabb352e2012-09-23 01:24:27 -070028
Chris Sosa76e44b92013-01-31 12:11:38 -080029_VERSION = 'R26-3646.0.0-rc1'
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -070030_TEST_GOLO_BUILD_ID = 'x86-generic-chromium-pfq/R26-3646.0.0-rc1'
31_TEST_GOLO_ARCHIVE = 'gs://chromeos-image-archive/' + _TEST_GOLO_BUILD_ID
32_TEST_NON_EXISTING_GOLO_BUILD_ID = 'x86-generic-chromium-pfq/R26-no_such_build'
Dan Shi6e50c722013-08-19 15:05:06 -070033_TEST_NON_EXISTING_GOLO_ARCHIVE = (
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -070034 'gs://chromeos-image-archive/' + _TEST_NON_EXISTING_GOLO_BUILD_ID)
Chris Sosa76e44b92013-01-31 12:11:38 -080035
Gilad Arnold1638d822013-11-07 23:38:16 -080036_TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT = [
37 'autotest/test_suites/control.PGO_record',
38 'autotest/test_suites/control.au',
39 'autotest/test_suites/control.audio',
40 'autotest/test_suites/control.browsertests',
41 'autotest/test_suites/control.bvt',
42 'autotest/test_suites/control.dummy',
43 'autotest/test_suites/control.enterprise',
44 'autotest/test_suites/control.enterprise_enroll',
45 'autotest/test_suites/control.faft_dev',
46 'autotest/test_suites/control.faft_ec',
47 'autotest/test_suites/control.faft_normal',
48 'autotest/test_suites/control.graphics',
49 'autotest/test_suites/control.graphicsGLES',
50 'autotest/test_suites/control.hwqual',
51 'autotest/test_suites/control.kernel_daily_benchmarks',
52 'autotest/test_suites/control.kernel_daily_regression',
53 'autotest/test_suites/control.kernel_per-build_benchmarks',
54 'autotest/test_suites/control.kernel_per-build_regression',
55 'autotest/test_suites/control.kernel_weekly_regression',
56 'autotest/test_suites/control.link_perf',
57 'autotest/test_suites/control.network3g',
58 'autotest/test_suites/control.network3g_gobi',
59 'autotest/test_suites/control.network_wifi',
60 'autotest/test_suites/control.onccell',
61 'autotest/test_suites/control.pagecycler',
62 'autotest/test_suites/control.perfalerts',
63 'autotest/test_suites/control.power_build',
64 'autotest/test_suites/control.power_daily',
65 'autotest/test_suites/control.power_requirements',
66 'autotest/test_suites/control.pyauto',
67 'autotest/test_suites/control.pyauto_basic',
68 'autotest/test_suites/control.pyauto_endurance',
69 'autotest/test_suites/control.pyauto_perf',
70 'autotest/test_suites/control.regression',
71 'autotest/test_suites/control.security',
72 'autotest/test_suites/control.servo',
73 'autotest/test_suites/control.smoke',
74 'autotest/test_suites/control.sync',
75 'autotest/test_suites/control.vda',
76 'autotest/test_suites/control.video',
77 'autotest/test_suites/control.webrtc',
78 'autotest/test_suites/control.wificell',
79 'autotest/test_suites/control.wifichaos',
80 'autotest/test_suites/dependency_info',
81 'autotest/test_suites/dev_harness.py',
82]
83
84_TEST_GOLO_ARCHIVE_IMAGE_ZIPFILE_CONTENT = [
Gilad Arnold1638d822013-11-07 23:38:16 -080085 'boot.config',
86 'boot.desc',
87 'chromiumos_qemu_image.bin',
88 'chromiumos_test_image.bin',
89 'config.txt',
90 'mount_image.sh',
91 'oem.image',
92 'pack_partitions.sh',
93 'umount_image.sh',
94 'unpack_partitions.sh',
95]
96
97
Chris Sosa76e44b92013-01-31 12:11:38 -080098# Different as the above does not have deltas (for smaller artifacts).
99_DELTA_VERSION = 'R26-3645.0.0'
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700100_TEST_GOLO_FOR_DELTAS_BUILD_ID = 'x86-mario-release/' + _DELTA_VERSION
Chris Sosa76e44b92013-01-31 12:11:38 -0800101_TEST_GOLO_FOR_DELTAS = (
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700102 'gs://chromeos-image-archive/' + _TEST_GOLO_FOR_DELTAS_BUILD_ID)
Yu-Ju Honge61cbe92012-07-10 14:10:26 -0700103
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700104
Achuith Bhandarkar16ce7902019-09-26 11:17:01 +0200105class BuildArtifactTest(unittest.TestCase):
Gabe Black3b567202015-09-23 14:07:59 -0700106 """Test different BuildArtifact operations."""
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700107
108 def setUp(self):
Chris Sosa76e44b92013-01-31 12:11:38 -0800109 self.work_dir = tempfile.mkdtemp('build_artifact_unittest')
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700110
111 def tearDown(self):
112 shutil.rmtree(self.work_dir)
113
Gilad Arnold1638d822013-11-07 23:38:16 -0800114 def _CheckMarker(self, marker_file, installed_files):
115 with open(os.path.join(self.work_dir, marker_file)) as f:
116 self.assertItemsEqual(installed_files, [line.strip() for line in f])
117
Don Garrett15daac82016-08-22 18:56:00 -0700118 @unittest.skip('crbug.com/640063 Broken test.')
Yu-Ju Hong5d5bf0d2014-02-11 21:38:20 -0800119 def testBundledArtifactTypes(self):
120 """Tests that all known bundled artifacts are either zip or tar files."""
121 known_names = ['zip', '.tgz', '.tar', 'tar.bz2', 'tar.xz', 'tar.gz']
Gabe Black3b567202015-09-23 14:07:59 -0700122 for d in itertools.chain(*build_artifact.chromeos_artifact_map.values()):
123 if issubclass(d, build_artifact.BundledArtifact):
124 self.assertTrue(any(d.ARTIFACT_NAME.endswith(name)
125 for name in known_names))
Yu-Ju Hong5d5bf0d2014-02-11 21:38:20 -0800126
Don Garrett15daac82016-08-22 18:56:00 -0700127 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 12:11:38 -0800128 def testProcessBuildArtifact(self):
129 """Processes a real tarball from GSUtil and stages it."""
Gabe Black3b567202015-09-23 14:07:59 -0700130 artifact = build_artifact.Artifact(
131 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700132 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
133 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700134 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800135 self.assertItemsEqual(
136 artifact.installed_files,
137 [os.path.join(self.work_dir, build_artifact.TEST_SUITES_FILE)])
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700138 self.assertTrue(os.path.exists(os.path.join(
Chris Sosa76e44b92013-01-31 12:11:38 -0800139 self.work_dir, build_artifact.TEST_SUITES_FILE)))
Gilad Arnold1638d822013-11-07 23:38:16 -0800140 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700141
Don Garrett15daac82016-08-22 18:56:00 -0700142 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 12:11:38 -0800143 def testProcessTarball(self):
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700144 """Downloads a real tarball and untars it."""
Gabe Black3b567202015-09-23 14:07:59 -0700145 artifact = build_artifact.BundledArtifact(
146 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Gilad Arnold1638d822013-11-07 23:38:16 -0800147 expected_installed_files = [
148 os.path.join(self.work_dir, filename)
149 for filename in ([build_artifact.TEST_SUITES_FILE] +
150 _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700151 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
152 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700153 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800154 self.assertItemsEqual(artifact.installed_files, expected_installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700155 self.assertTrue(os.path.isdir(os.path.join(
Chris Sosa76e44b92013-01-31 12:11:38 -0800156 self.work_dir, 'autotest', 'test_suites')))
Gilad Arnold1638d822013-11-07 23:38:16 -0800157 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700158
Don Garrett15daac82016-08-22 18:56:00 -0700159 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 12:11:38 -0800160 def testProcessTarballWithFile(self):
161 """Downloads a real tarball and only untars one file from it."""
162 file_to_download = 'autotest/test_suites/control.au'
Gabe Black3b567202015-09-23 14:07:59 -0700163 artifact = build_artifact.BundledArtifact(
164 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION,
165 files_to_extract=[file_to_download])
Gilad Arnold1638d822013-11-07 23:38:16 -0800166 expected_installed_files = [
167 os.path.join(self.work_dir, filename)
168 for filename in [build_artifact.TEST_SUITES_FILE] + [file_to_download]]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700169 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
170 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700171 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800172 self.assertItemsEqual(artifact.installed_files, expected_installed_files)
Chris Sosa76e44b92013-01-31 12:11:38 -0800173 self.assertTrue(os.path.exists(os.path.join(
174 self.work_dir, file_to_download)))
Gilad Arnold1638d822013-11-07 23:38:16 -0800175 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700176
Achuith Bhandarkar16ce7902019-09-26 11:17:01 +0200177 @mock.patch('build_artifact.AutotestTarball._Extract')
178 @mock.patch('build_artifact.AutotestTarball._UpdateName')
179 @mock.patch('subprocess.check_call')
180 @mock.patch('downloader.GoogleStorageDownloader.Fetch')
181 @mock.patch('downloader.GoogleStorageDownloader.Wait')
182 def testDownloadAutotest(self, wait_mock, fetch_mock, check_call_mock,
183 update_name_mock, extract_mock):
Yu-Ju Honge61cbe92012-07-10 14:10:26 -0700184 """Downloads a real autotest tarball for test."""
Gabe Black3b567202015-09-23 14:07:59 -0700185 artifact = build_artifact.AutotestTarball(
186 build_artifact.AUTOTEST_FILE, self.work_dir, _VERSION,
187 files_to_extract=None, exclude=['autotest/test_suites'])
Chris Sosa76e44b92013-01-31 12:11:38 -0800188
joychen0a8e34e2013-06-24 17:58:36 -0700189 install_dir = self.work_dir
190 artifact.staging_dir = install_dir
Achuith Bhandarkar16ce7902019-09-26 11:17:01 +0200191
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700192 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
193 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700194 artifact.Process(dl, True)
Gilad Arnold1638d822013-11-07 23:38:16 -0800195 self.assertItemsEqual(artifact.installed_files, [])
Chris Sosa76e44b92013-01-31 12:11:38 -0800196 self.assertTrue(os.path.isdir(
197 os.path.join(self.work_dir, 'autotest', 'packages')))
Gilad Arnold1638d822013-11-07 23:38:16 -0800198 self._CheckMarker(artifact.marker_name, [])
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700199
Achuith Bhandarkar16ce7902019-09-26 11:17:01 +0200200 wait_mock.assert_called_with('autotest.tar', False, 1)
201 fetch_mock.assert_called_with('autotest.tar', install_dir + '/')
202 check_call_mock.assert_called_with(
203 ['autotest/utils/packager.py', '--action=upload', '--repository',
204 os.path.join(install_dir, 'autotest/packages'), '--all'],
205 cwd=install_dir)
206 update_name_mock.assert_called()
207 extract_mock.assert_called()
208
Don Garrett15daac82016-08-22 18:56:00 -0700209 @unittest.skip('crbug.com/640063 Broken test.')
Gilad Arnoldc65330c2012-09-20 15:17:48 -0700210 def testAUTestPayloadBuildArtifact(self):
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700211 """Downloads a real tarball and treats it like an AU payload."""
Gabe Black3b567202015-09-23 14:07:59 -0700212 artifact = build_artifact.AUTestPayload(
213 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Gilad Arnold1638d822013-11-07 23:38:16 -0800214 expected_installed_files = [
215 os.path.join(self.work_dir, devserver_constants.UPDATE_FILE)]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700216 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
217 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700218 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800219 self.assertItemsEqual(artifact.installed_files, expected_installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700220 self.assertTrue(os.path.exists(os.path.join(
Gilad Arnold1638d822013-11-07 23:38:16 -0800221 self.work_dir, devserver_constants.UPDATE_FILE)))
222 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa76e44b92013-01-31 12:11:38 -0800223
Don Garrett15daac82016-08-22 18:56:00 -0700224 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 12:11:38 -0800225 def testDeltaPayloadsArtifact(self):
226 """Downloads delta paylaods from test bucket."""
Gabe Black3b567202015-09-23 14:07:59 -0700227 nton = build_artifact.DeltaPayloadNtoN(self.work_dir, _DELTA_VERSION)
228 mton = build_artifact.DeltaPayloadMtoN(self.work_dir, _DELTA_VERSION)
Gilad Arnold1638d822013-11-07 23:38:16 -0800229 delta_installed_files = ('update.gz', 'stateful.tgz')
Chris Sosa76e44b92013-01-31 12:11:38 -0800230 nton_dir = os.path.join(self.work_dir, 'au', '%s_nton' % _DELTA_VERSION)
231 mton_dir = os.path.join(self.work_dir, 'au', '%s_mton' % _DELTA_VERSION)
Gabe Black3b567202015-09-23 14:07:59 -0700232 dl = downloader.GoogleStorageDownloader(self.work_dir,
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700233 _TEST_GOLO_FOR_DELTAS,
234 _TEST_GOLO_FOR_DELTAS_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700235 nton.Process(dl, False)
236 mton.Process(dl, False)
237 self.assertItemsEqual(nton.installed_files,
238 [os.path.join(nton_dir, filename)
239 for filename in delta_installed_files])
240 self.assertItemsEqual(mton.installed_files,
241 [os.path.join(mton_dir, filename)
242 for filename in delta_installed_files])
Chris Sosa76e44b92013-01-31 12:11:38 -0800243 self.assertTrue(os.path.exists(os.path.join(nton_dir, 'update.gz')))
244 self.assertTrue(os.path.exists(os.path.join(mton_dir, 'update.gz')))
Gabe Black3b567202015-09-23 14:07:59 -0700245 self._CheckMarker(nton.marker_name, nton.installed_files)
246 self._CheckMarker(mton.marker_name, mton.installed_files)
Chris Sosa76e44b92013-01-31 12:11:38 -0800247
Don Garrett15daac82016-08-22 18:56:00 -0700248 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 12:11:38 -0800249 def testImageUnzip(self):
250 """Downloads and stages a zip file and extracts a test image."""
Gilad Arnold1638d822013-11-07 23:38:16 -0800251 files_to_extract = ['chromiumos_test_image.bin']
Gabe Black3b567202015-09-23 14:07:59 -0700252 artifact = build_artifact.BundledArtifact(
253 build_artifact.IMAGE_FILE, self.work_dir, _VERSION,
254 files_to_extract=files_to_extract)
Gilad Arnold1638d822013-11-07 23:38:16 -0800255 expected_installed_files = [
256 os.path.join(self.work_dir, filename)
257 for filename in [build_artifact.IMAGE_FILE] + files_to_extract]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700258 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
259 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700260 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800261 self.assertItemsEqual(expected_installed_files, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700262 self.assertTrue(os.path.exists(os.path.join(
Chris Sosa76e44b92013-01-31 12:11:38 -0800263 self.work_dir, 'chromiumos_test_image.bin')))
Gilad Arnold1638d822013-11-07 23:38:16 -0800264 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa76e44b92013-01-31 12:11:38 -0800265
Don Garrett15daac82016-08-22 18:56:00 -0700266 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 12:11:38 -0800267 def testImageUnzipWithExcludes(self):
268 """Downloads and stages a zip file while excluding all large files."""
Gabe Black3b567202015-09-23 14:07:59 -0700269 artifact = build_artifact.BundledArtifact(
270 build_artifact.IMAGE_FILE, self.work_dir, _VERSION, exclude=['*.bin'])
Gilad Arnold1638d822013-11-07 23:38:16 -0800271 expected_extracted_files = [
272 filename for filename in _TEST_GOLO_ARCHIVE_IMAGE_ZIPFILE_CONTENT
273 if not filename.endswith('.bin')]
274 expected_installed_files = [
275 os.path.join(self.work_dir, filename)
276 for filename in [build_artifact.IMAGE_FILE] + expected_extracted_files]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700277 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
278 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700279 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800280 self.assertItemsEqual(expected_installed_files, artifact.installed_files)
Chris Sosa76e44b92013-01-31 12:11:38 -0800281 self.assertFalse(os.path.exists(os.path.join(
282 self.work_dir, 'chromiumos_test_image.bin')))
Gilad Arnold1638d822013-11-07 23:38:16 -0800283 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700284
Don Garrett15daac82016-08-22 18:56:00 -0700285 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa6b0c6172013-08-05 17:01:33 -0700286 def testArtifactFactory(self):
Don Garrettfb15e322016-06-21 19:12:08 -0700287 """Tests that BuildArtifact works for both named and file artifacts."""
Chris Sosa6b0c6172013-08-05 17:01:33 -0700288 name_artifact = 'test_suites' # This file is in every real GS dir.
289 file_artifact = 'metadata.json' # This file is in every real GS dir.
Gabe Black3b567202015-09-23 14:07:59 -0700290 factory = build_artifact.ChromeOSArtifactFactory(
291 self.work_dir, [name_artifact], [file_artifact], _VERSION)
Chris Sosa6b0c6172013-08-05 17:01:33 -0700292 artifacts = factory.RequiredArtifacts()
293 self.assertEqual(len(artifacts), 2)
Gilad Arnold1638d822013-11-07 23:38:16 -0800294 expected_installed_files_0 = [
295 os.path.join(self.work_dir, filename) for filename
296 in ([build_artifact.TEST_SUITES_FILE] +
297 _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)]
298 expected_installed_files_1 = [os.path.join(self.work_dir, file_artifact)]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700299 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
300 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700301 artifacts[0].Process(dl, False)
302 artifacts[1].Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800303 self.assertItemsEqual(artifacts[0].installed_files,
304 expected_installed_files_0)
305 self.assertItemsEqual(artifacts[1].installed_files,
306 expected_installed_files_1)
Chris Sosa6b0c6172013-08-05 17:01:33 -0700307 # Test suites directory exists.
308 self.assertTrue(os.path.exists(os.path.join(
309 self.work_dir, 'autotest', 'test_suites')))
310 # File artifact was staged.
311 self.assertTrue(os.path.exists(os.path.join(self.work_dir,
312 file_artifact)))
Gilad Arnold1638d822013-11-07 23:38:16 -0800313 self._CheckMarker(artifacts[0].marker_name, artifacts[0].installed_files)
314 self._CheckMarker(artifacts[1].marker_name, artifacts[1].installed_files)
Chris Sosa6b0c6172013-08-05 17:01:33 -0700315
Don Garrett15daac82016-08-22 18:56:00 -0700316 @unittest.skip('crbug.com/640063 Broken test.')
Dan Shi6e50c722013-08-19 15:05:06 -0700317 def testProcessBuildArtifactWithException(self):
318 """Test processing a non-existing artifact from GSUtil."""
Gabe Black3b567202015-09-23 14:07:59 -0700319 artifact = build_artifact.Artifact(
320 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Dan Shi6e50c722013-08-19 15:05:06 -0700321 try:
Gabe Black3b567202015-09-23 14:07:59 -0700322 dl = downloader.GoogleStorageDownloader(self.work_dir,
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700323 _TEST_NON_EXISTING_GOLO_ARCHIVE,
324 _TEST_NON_EXISTING_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700325 artifact.Process(dl, False)
Dan Shi6e50c722013-08-19 15:05:06 -0700326 except Exception as e:
327 expected_exception = e
328 exception = artifact.GetException()
329 self.assertEqual(str(exception), str(expected_exception))
330
Don Garrett15daac82016-08-22 18:56:00 -0700331 @unittest.skip('crbug.com/640063 Broken test.')
Gilad Arnold1638d822013-11-07 23:38:16 -0800332 def testArtifactStaged(self):
333 """Tests the artifact staging verification logic."""
Gabe Black3b567202015-09-23 14:07:59 -0700334 artifact = build_artifact.BundledArtifact(
335 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Gilad Arnold1638d822013-11-07 23:38:16 -0800336 expected_installed_files = [
337 os.path.join(self.work_dir, filename)
338 for filename in ([build_artifact.TEST_SUITES_FILE] +
339 _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)]
Luis Hector Chavezdca9dd72018-06-12 12:56:30 -0700340 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
341 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 14:07:59 -0700342 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-07 23:38:16 -0800343
344 # Check that it works when all files are there.
345 self.assertTrue(artifact.ArtifactStaged())
346
347 # Remove an arbitrary file among the ones staged, ensure the check fails
348 # and that the marker files is removed.
349 os.remove(random.choice(expected_installed_files))
350 self.assertTrue(os.path.exists(os.path.join(self.work_dir,
351 artifact.marker_name)))
352 self.assertFalse(artifact.ArtifactStaged())
353 self.assertFalse(os.path.exists(os.path.join(self.work_dir,
354 artifact.marker_name)))
355
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700356
357if __name__ == '__main__':
358 unittest.main()