blob: 316cb7ac96f9b3bde5ef36e6ceee8dcbc40902cc [file] [log] [blame]
Luis Hector Chavezdca9dd72018-06-12 19:56:301#!/usr/bin/env python2
2# -*- coding: utf-8 -*-
Chris Sosa47a7d4e2012-03-28 18:26:553# 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 22:17:487"""Unit tests for build_artifact module.
Chris Sosa47a7d4e2012-03-28 18:26:558
9These unit tests take tarball from google storage locations to fully test
Chris Sosa76e44b92013-01-31 20:11:3810the artifact download process. Please make sure to set up your boto file.
Chris Sosa47a7d4e2012-03-28 18:26:5511"""
12
Gabe Black3b567202015-09-23 21:07:5913from __future__ import print_function
14
15import itertools
Chris Sosa47a7d4e2012-03-28 18:26:5516import os
Gilad Arnold1638d822013-11-08 07:38:1617import random
Chris Sosa47a7d4e2012-03-28 18:26:5518import shutil
19import subprocess
20import tempfile
21import unittest
22
Gilad Arnoldabb352e2012-09-23 08:24:2723import mox
24
Gilad Arnoldc65330c2012-09-20 22:17:4825import build_artifact
Gilad Arnold1638d822013-11-08 07:38:1626import devserver_constants
Gabe Black3b567202015-09-23 21:07:5927import downloader
Chris Sosa47a7d4e2012-03-28 18:26:5528
Gilad Arnoldabb352e2012-09-23 08:24:2729
Chris Sosa76e44b92013-01-31 20:11:3830_VERSION = 'R26-3646.0.0-rc1'
Luis Hector Chavezdca9dd72018-06-12 19:56:3031_TEST_GOLO_BUILD_ID = 'x86-generic-chromium-pfq/R26-3646.0.0-rc1'
32_TEST_GOLO_ARCHIVE = 'gs://chromeos-image-archive/' + _TEST_GOLO_BUILD_ID
33_TEST_NON_EXISTING_GOLO_BUILD_ID = 'x86-generic-chromium-pfq/R26-no_such_build'
Dan Shi6e50c722013-08-19 22:05:0634_TEST_NON_EXISTING_GOLO_ARCHIVE = (
Luis Hector Chavezdca9dd72018-06-12 19:56:3035 'gs://chromeos-image-archive/' + _TEST_NON_EXISTING_GOLO_BUILD_ID)
Chris Sosa76e44b92013-01-31 20:11:3836
Gilad Arnold1638d822013-11-08 07:38:1637_TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT = [
38 'autotest/test_suites/control.PGO_record',
39 'autotest/test_suites/control.au',
40 'autotest/test_suites/control.audio',
41 'autotest/test_suites/control.browsertests',
42 'autotest/test_suites/control.bvt',
43 'autotest/test_suites/control.dummy',
44 'autotest/test_suites/control.enterprise',
45 'autotest/test_suites/control.enterprise_enroll',
46 'autotest/test_suites/control.faft_dev',
47 'autotest/test_suites/control.faft_ec',
48 'autotest/test_suites/control.faft_normal',
49 'autotest/test_suites/control.graphics',
50 'autotest/test_suites/control.graphicsGLES',
51 'autotest/test_suites/control.hwqual',
52 'autotest/test_suites/control.kernel_daily_benchmarks',
53 'autotest/test_suites/control.kernel_daily_regression',
54 'autotest/test_suites/control.kernel_per-build_benchmarks',
55 'autotest/test_suites/control.kernel_per-build_regression',
56 'autotest/test_suites/control.kernel_weekly_regression',
57 'autotest/test_suites/control.link_perf',
58 'autotest/test_suites/control.network3g',
59 'autotest/test_suites/control.network3g_gobi',
60 'autotest/test_suites/control.network_wifi',
61 'autotest/test_suites/control.onccell',
62 'autotest/test_suites/control.pagecycler',
63 'autotest/test_suites/control.perfalerts',
64 'autotest/test_suites/control.power_build',
65 'autotest/test_suites/control.power_daily',
66 'autotest/test_suites/control.power_requirements',
67 'autotest/test_suites/control.pyauto',
68 'autotest/test_suites/control.pyauto_basic',
69 'autotest/test_suites/control.pyauto_endurance',
70 'autotest/test_suites/control.pyauto_perf',
71 'autotest/test_suites/control.regression',
72 'autotest/test_suites/control.security',
73 'autotest/test_suites/control.servo',
74 'autotest/test_suites/control.smoke',
75 'autotest/test_suites/control.sync',
76 'autotest/test_suites/control.vda',
77 'autotest/test_suites/control.video',
78 'autotest/test_suites/control.webrtc',
79 'autotest/test_suites/control.wificell',
80 'autotest/test_suites/control.wifichaos',
81 'autotest/test_suites/dependency_info',
82 'autotest/test_suites/dev_harness.py',
83]
84
85_TEST_GOLO_ARCHIVE_IMAGE_ZIPFILE_CONTENT = [
Gilad Arnold1638d822013-11-08 07:38:1686 'boot.config',
87 'boot.desc',
88 'chromiumos_qemu_image.bin',
89 'chromiumos_test_image.bin',
90 'config.txt',
91 'mount_image.sh',
92 'oem.image',
93 'pack_partitions.sh',
94 'umount_image.sh',
95 'unpack_partitions.sh',
96]
97
98
Chris Sosa76e44b92013-01-31 20:11:3899# Different as the above does not have deltas (for smaller artifacts).
100_DELTA_VERSION = 'R26-3645.0.0'
Luis Hector Chavezdca9dd72018-06-12 19:56:30101_TEST_GOLO_FOR_DELTAS_BUILD_ID = 'x86-mario-release/' + _DELTA_VERSION
Chris Sosa76e44b92013-01-31 20:11:38102_TEST_GOLO_FOR_DELTAS = (
Luis Hector Chavezdca9dd72018-06-12 19:56:30103 'gs://chromeos-image-archive/' + _TEST_GOLO_FOR_DELTAS_BUILD_ID)
Yu-Ju Honge61cbe92012-07-10 21:10:26104
Chris Sosa47a7d4e2012-03-28 18:26:55105
Chris Sosa76e44b92013-01-31 20:11:38106# pylint: disable=W0212
Gilad Arnoldc65330c2012-09-20 22:17:48107class BuildArtifactTest(mox.MoxTestBase):
Gabe Black3b567202015-09-23 21:07:59108 """Test different BuildArtifact operations."""
Chris Sosa47a7d4e2012-03-28 18:26:55109
110 def setUp(self):
111 mox.MoxTestBase.setUp(self)
Chris Sosa76e44b92013-01-31 20:11:38112 self.work_dir = tempfile.mkdtemp('build_artifact_unittest')
Chris Sosa47a7d4e2012-03-28 18:26:55113
114 def tearDown(self):
115 shutil.rmtree(self.work_dir)
116
Gilad Arnold1638d822013-11-08 07:38:16117 def _CheckMarker(self, marker_file, installed_files):
118 with open(os.path.join(self.work_dir, marker_file)) as f:
119 self.assertItemsEqual(installed_files, [line.strip() for line in f])
120
Don Garrett15daac82016-08-23 01:56:00121 @unittest.skip('crbug.com/640063 Broken test.')
Yu-Ju Hong5d5bf0d2014-02-12 05:38:20122 def testBundledArtifactTypes(self):
123 """Tests that all known bundled artifacts are either zip or tar files."""
124 known_names = ['zip', '.tgz', '.tar', 'tar.bz2', 'tar.xz', 'tar.gz']
Gabe Black3b567202015-09-23 21:07:59125 for d in itertools.chain(*build_artifact.chromeos_artifact_map.values()):
126 if issubclass(d, build_artifact.BundledArtifact):
127 self.assertTrue(any(d.ARTIFACT_NAME.endswith(name)
128 for name in known_names))
Yu-Ju Hong5d5bf0d2014-02-12 05:38:20129
Don Garrett15daac82016-08-23 01:56:00130 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 20:11:38131 def testProcessBuildArtifact(self):
132 """Processes a real tarball from GSUtil and stages it."""
Gabe Black3b567202015-09-23 21:07:59133 artifact = build_artifact.Artifact(
134 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Luis Hector Chavezdca9dd72018-06-12 19:56:30135 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
136 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59137 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16138 self.assertItemsEqual(
139 artifact.installed_files,
140 [os.path.join(self.work_dir, build_artifact.TEST_SUITES_FILE)])
Chris Sosa47a7d4e2012-03-28 18:26:55141 self.assertTrue(os.path.exists(os.path.join(
Chris Sosa76e44b92013-01-31 20:11:38142 self.work_dir, build_artifact.TEST_SUITES_FILE)))
Gilad Arnold1638d822013-11-08 07:38:16143 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55144
Don Garrett15daac82016-08-23 01:56:00145 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 20:11:38146 def testProcessTarball(self):
Chris Sosa47a7d4e2012-03-28 18:26:55147 """Downloads a real tarball and untars it."""
Gabe Black3b567202015-09-23 21:07:59148 artifact = build_artifact.BundledArtifact(
149 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Gilad Arnold1638d822013-11-08 07:38:16150 expected_installed_files = [
151 os.path.join(self.work_dir, filename)
152 for filename in ([build_artifact.TEST_SUITES_FILE] +
153 _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)]
Luis Hector Chavezdca9dd72018-06-12 19:56:30154 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
155 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59156 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16157 self.assertItemsEqual(artifact.installed_files, expected_installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55158 self.assertTrue(os.path.isdir(os.path.join(
Chris Sosa76e44b92013-01-31 20:11:38159 self.work_dir, 'autotest', 'test_suites')))
Gilad Arnold1638d822013-11-08 07:38:16160 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55161
Don Garrett15daac82016-08-23 01:56:00162 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 20:11:38163 def testProcessTarballWithFile(self):
164 """Downloads a real tarball and only untars one file from it."""
165 file_to_download = 'autotest/test_suites/control.au'
Gabe Black3b567202015-09-23 21:07:59166 artifact = build_artifact.BundledArtifact(
167 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION,
168 files_to_extract=[file_to_download])
Gilad Arnold1638d822013-11-08 07:38:16169 expected_installed_files = [
170 os.path.join(self.work_dir, filename)
171 for filename in [build_artifact.TEST_SUITES_FILE] + [file_to_download]]
Luis Hector Chavezdca9dd72018-06-12 19:56:30172 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
173 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59174 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16175 self.assertItemsEqual(artifact.installed_files, expected_installed_files)
Chris Sosa76e44b92013-01-31 20:11:38176 self.assertTrue(os.path.exists(os.path.join(
177 self.work_dir, file_to_download)))
Gilad Arnold1638d822013-11-08 07:38:16178 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55179
Don Garrett15daac82016-08-23 01:56:00180 @unittest.skip('crbug.com/640063 Broken test.')
joychen0a8e34e2013-06-25 00:58:36181 def testDownloadAutotest(self):
Yu-Ju Honge61cbe92012-07-10 21:10:26182 """Downloads a real autotest tarball for test."""
Gabe Black3b567202015-09-23 21:07:59183 self.mox.StubOutWithMock(build_artifact.AutotestTarball, '_Extract')
184 artifact = build_artifact.AutotestTarball(
185 build_artifact.AUTOTEST_FILE, self.work_dir, _VERSION,
186 files_to_extract=None, exclude=['autotest/test_suites'])
Chris Sosa76e44b92013-01-31 20:11:38187
joychen0a8e34e2013-06-25 00:58:36188 install_dir = self.work_dir
189 artifact.staging_dir = install_dir
Chris Sosa47a7d4e2012-03-28 18:26:55190 self.mox.StubOutWithMock(subprocess, 'check_call')
joychen0a8e34e2013-06-25 00:58:36191 subprocess.check_call(mox.In('autotest/utils/packager.py'), cwd=install_dir)
Gabe Black3b567202015-09-23 21:07:59192 self.mox.StubOutWithMock(downloader.GoogleStorageDownloader, 'Wait')
Yu-Ju Hong5d5bf0d2014-02-12 05:38:20193 self.mox.StubOutWithMock(artifact, '_UpdateName')
Luis Hector Chavezdca9dd72018-06-12 19:56:30194 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
195 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59196 dl.Wait(artifact.name, False, 1)
Yu-Ju Hong5d5bf0d2014-02-12 05:38:20197 artifact._UpdateName(mox.IgnoreArg())
Gabe Black3b567202015-09-23 21:07:59198 dl.Fetch(artifact.name, install_dir)
Gilad Arnold1638d822013-11-08 07:38:16199 artifact._Extract()
Chris Sosa47a7d4e2012-03-28 18:26:55200 self.mox.ReplayAll()
Gabe Black3b567202015-09-23 21:07:59201 artifact.Process(dl, True)
Chris Sosa47a7d4e2012-03-28 18:26:55202 self.mox.VerifyAll()
Gilad Arnold1638d822013-11-08 07:38:16203 self.assertItemsEqual(artifact.installed_files, [])
Chris Sosa76e44b92013-01-31 20:11:38204 self.assertTrue(os.path.isdir(
205 os.path.join(self.work_dir, 'autotest', 'packages')))
Gilad Arnold1638d822013-11-08 07:38:16206 self._CheckMarker(artifact.marker_name, [])
Chris Sosa47a7d4e2012-03-28 18:26:55207
Don Garrett15daac82016-08-23 01:56:00208 @unittest.skip('crbug.com/640063 Broken test.')
Gilad Arnoldc65330c2012-09-20 22:17:48209 def testAUTestPayloadBuildArtifact(self):
Chris Sosa47a7d4e2012-03-28 18:26:55210 """Downloads a real tarball and treats it like an AU payload."""
Gabe Black3b567202015-09-23 21:07:59211 artifact = build_artifact.AUTestPayload(
212 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Gilad Arnold1638d822013-11-08 07:38:16213 expected_installed_files = [
214 os.path.join(self.work_dir, devserver_constants.UPDATE_FILE)]
Luis Hector Chavezdca9dd72018-06-12 19:56:30215 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
216 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59217 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16218 self.assertItemsEqual(artifact.installed_files, expected_installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55219 self.assertTrue(os.path.exists(os.path.join(
Gilad Arnold1638d822013-11-08 07:38:16220 self.work_dir, devserver_constants.UPDATE_FILE)))
221 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa76e44b92013-01-31 20:11:38222
Don Garrett15daac82016-08-23 01:56:00223 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 20:11:38224 def testDeltaPayloadsArtifact(self):
225 """Downloads delta paylaods from test bucket."""
Gabe Black3b567202015-09-23 21:07:59226 nton = build_artifact.DeltaPayloadNtoN(self.work_dir, _DELTA_VERSION)
227 mton = build_artifact.DeltaPayloadMtoN(self.work_dir, _DELTA_VERSION)
Gilad Arnold1638d822013-11-08 07:38:16228 delta_installed_files = ('update.gz', 'stateful.tgz')
Chris Sosa76e44b92013-01-31 20:11:38229 nton_dir = os.path.join(self.work_dir, 'au', '%s_nton' % _DELTA_VERSION)
230 mton_dir = os.path.join(self.work_dir, 'au', '%s_mton' % _DELTA_VERSION)
Gabe Black3b567202015-09-23 21:07:59231 dl = downloader.GoogleStorageDownloader(self.work_dir,
Luis Hector Chavezdca9dd72018-06-12 19:56:30232 _TEST_GOLO_FOR_DELTAS,
233 _TEST_GOLO_FOR_DELTAS_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59234 nton.Process(dl, False)
235 mton.Process(dl, False)
236 self.assertItemsEqual(nton.installed_files,
237 [os.path.join(nton_dir, filename)
238 for filename in delta_installed_files])
239 self.assertItemsEqual(mton.installed_files,
240 [os.path.join(mton_dir, filename)
241 for filename in delta_installed_files])
Chris Sosa76e44b92013-01-31 20:11:38242 self.assertTrue(os.path.exists(os.path.join(nton_dir, 'update.gz')))
243 self.assertTrue(os.path.exists(os.path.join(mton_dir, 'update.gz')))
Gabe Black3b567202015-09-23 21:07:59244 self._CheckMarker(nton.marker_name, nton.installed_files)
245 self._CheckMarker(mton.marker_name, mton.installed_files)
Chris Sosa76e44b92013-01-31 20:11:38246
Don Garrett15daac82016-08-23 01:56:00247 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 20:11:38248 def testImageUnzip(self):
249 """Downloads and stages a zip file and extracts a test image."""
Gilad Arnold1638d822013-11-08 07:38:16250 files_to_extract = ['chromiumos_test_image.bin']
Gabe Black3b567202015-09-23 21:07:59251 artifact = build_artifact.BundledArtifact(
252 build_artifact.IMAGE_FILE, self.work_dir, _VERSION,
253 files_to_extract=files_to_extract)
Gilad Arnold1638d822013-11-08 07:38:16254 expected_installed_files = [
255 os.path.join(self.work_dir, filename)
256 for filename in [build_artifact.IMAGE_FILE] + files_to_extract]
Luis Hector Chavezdca9dd72018-06-12 19:56:30257 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
258 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59259 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16260 self.assertItemsEqual(expected_installed_files, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55261 self.assertTrue(os.path.exists(os.path.join(
Chris Sosa76e44b92013-01-31 20:11:38262 self.work_dir, 'chromiumos_test_image.bin')))
Gilad Arnold1638d822013-11-08 07:38:16263 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa76e44b92013-01-31 20:11:38264
Don Garrett15daac82016-08-23 01:56:00265 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa76e44b92013-01-31 20:11:38266 def testImageUnzipWithExcludes(self):
267 """Downloads and stages a zip file while excluding all large files."""
Gabe Black3b567202015-09-23 21:07:59268 artifact = build_artifact.BundledArtifact(
269 build_artifact.IMAGE_FILE, self.work_dir, _VERSION, exclude=['*.bin'])
Gilad Arnold1638d822013-11-08 07:38:16270 expected_extracted_files = [
271 filename for filename in _TEST_GOLO_ARCHIVE_IMAGE_ZIPFILE_CONTENT
272 if not filename.endswith('.bin')]
273 expected_installed_files = [
274 os.path.join(self.work_dir, filename)
275 for filename in [build_artifact.IMAGE_FILE] + expected_extracted_files]
Luis Hector Chavezdca9dd72018-06-12 19:56:30276 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
277 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59278 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16279 self.assertItemsEqual(expected_installed_files, artifact.installed_files)
Chris Sosa76e44b92013-01-31 20:11:38280 self.assertFalse(os.path.exists(os.path.join(
281 self.work_dir, 'chromiumos_test_image.bin')))
Gilad Arnold1638d822013-11-08 07:38:16282 self._CheckMarker(artifact.marker_name, artifact.installed_files)
Chris Sosa47a7d4e2012-03-28 18:26:55283
Don Garrett15daac82016-08-23 01:56:00284 @unittest.skip('crbug.com/640063 Broken test.')
Chris Sosa6b0c6172013-08-06 00:01:33285 def testArtifactFactory(self):
Don Garrettfb15e322016-06-22 02:12:08286 """Tests that BuildArtifact works for both named and file artifacts."""
Chris Sosa6b0c6172013-08-06 00:01:33287 name_artifact = 'test_suites' # This file is in every real GS dir.
288 file_artifact = 'metadata.json' # This file is in every real GS dir.
Gabe Black3b567202015-09-23 21:07:59289 factory = build_artifact.ChromeOSArtifactFactory(
290 self.work_dir, [name_artifact], [file_artifact], _VERSION)
Chris Sosa6b0c6172013-08-06 00:01:33291 artifacts = factory.RequiredArtifacts()
292 self.assertEqual(len(artifacts), 2)
Gilad Arnold1638d822013-11-08 07:38:16293 expected_installed_files_0 = [
294 os.path.join(self.work_dir, filename) for filename
295 in ([build_artifact.TEST_SUITES_FILE] +
296 _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)]
297 expected_installed_files_1 = [os.path.join(self.work_dir, file_artifact)]
Luis Hector Chavezdca9dd72018-06-12 19:56:30298 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
299 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59300 artifacts[0].Process(dl, False)
301 artifacts[1].Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16302 self.assertItemsEqual(artifacts[0].installed_files,
303 expected_installed_files_0)
304 self.assertItemsEqual(artifacts[1].installed_files,
305 expected_installed_files_1)
Chris Sosa6b0c6172013-08-06 00:01:33306 # Test suites directory exists.
307 self.assertTrue(os.path.exists(os.path.join(
308 self.work_dir, 'autotest', 'test_suites')))
309 # File artifact was staged.
310 self.assertTrue(os.path.exists(os.path.join(self.work_dir,
311 file_artifact)))
Gilad Arnold1638d822013-11-08 07:38:16312 self._CheckMarker(artifacts[0].marker_name, artifacts[0].installed_files)
313 self._CheckMarker(artifacts[1].marker_name, artifacts[1].installed_files)
Chris Sosa6b0c6172013-08-06 00:01:33314
Don Garrett15daac82016-08-23 01:56:00315 @unittest.skip('crbug.com/640063 Broken test.')
Dan Shi6e50c722013-08-19 22:05:06316 def testProcessBuildArtifactWithException(self):
317 """Test processing a non-existing artifact from GSUtil."""
Gabe Black3b567202015-09-23 21:07:59318 artifact = build_artifact.Artifact(
319 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Dan Shi6e50c722013-08-19 22:05:06320 try:
Gabe Black3b567202015-09-23 21:07:59321 dl = downloader.GoogleStorageDownloader(self.work_dir,
Luis Hector Chavezdca9dd72018-06-12 19:56:30322 _TEST_NON_EXISTING_GOLO_ARCHIVE,
323 _TEST_NON_EXISTING_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59324 artifact.Process(dl, False)
Dan Shi6e50c722013-08-19 22:05:06325 except Exception as e:
326 expected_exception = e
327 exception = artifact.GetException()
328 self.assertEqual(str(exception), str(expected_exception))
329
Don Garrett15daac82016-08-23 01:56:00330 @unittest.skip('crbug.com/640063 Broken test.')
Gilad Arnold1638d822013-11-08 07:38:16331 def testArtifactStaged(self):
332 """Tests the artifact staging verification logic."""
Gabe Black3b567202015-09-23 21:07:59333 artifact = build_artifact.BundledArtifact(
334 build_artifact.TEST_SUITES_FILE, self.work_dir, _VERSION)
Gilad Arnold1638d822013-11-08 07:38:16335 expected_installed_files = [
336 os.path.join(self.work_dir, filename)
337 for filename in ([build_artifact.TEST_SUITES_FILE] +
338 _TEST_GOLO_ARCHIVE_TEST_TARBALL_CONTENT)]
Luis Hector Chavezdca9dd72018-06-12 19:56:30339 dl = downloader.GoogleStorageDownloader(self.work_dir, _TEST_GOLO_ARCHIVE,
340 _TEST_GOLO_BUILD_ID)
Gabe Black3b567202015-09-23 21:07:59341 artifact.Process(dl, False)
Gilad Arnold1638d822013-11-08 07:38:16342
343 # Check that it works when all files are there.
344 self.assertTrue(artifact.ArtifactStaged())
345
346 # Remove an arbitrary file among the ones staged, ensure the check fails
347 # and that the marker files is removed.
348 os.remove(random.choice(expected_installed_files))
349 self.assertTrue(os.path.exists(os.path.join(self.work_dir,
350 artifact.marker_name)))
351 self.assertFalse(artifact.ArtifactStaged())
352 self.assertFalse(os.path.exists(os.path.join(self.work_dir,
353 artifact.marker_name)))
354
Chris Sosa47a7d4e2012-03-28 18:26:55355
356if __name__ == '__main__':
357 unittest.main()