blob: 16909dae41d2544e4f1f84f70f0eb72c7e4940f2 [file] [log] [blame]
Gabe Black3b567202015-09-23 14:07:59 -07001#!/usr/bin/python2
Chris Sosa47a7d4e2012-03-28 11:26:55 -07002#
3# 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 downloader module."""
Chris Sosa47a7d4e2012-03-28 11:26:55 -07008
Gabe Black3b567202015-09-23 14:07:59 -07009from __future__ import print_function
10
Chris Sosa76e44b92013-01-31 12:11:38 -080011import mox
Chris Sosa47a7d4e2012-03-28 11:26:55 -070012import os
13import shutil
14import tempfile
15import unittest
16
Gilad Arnoldc65330c2012-09-20 15:17:48 -070017import build_artifact
Chris Sosa47a7d4e2012-03-28 11:26:55 -070018import downloader
19
20
Chris Sosa76e44b92013-01-31 12:11:38 -080021# pylint: disable=W0212,E1120
Chris Masone816e38c2012-05-02 12:22:36 -070022class DownloaderTestBase(mox.MoxTestBase):
Simran Basi4243a862014-12-12 12:48:33 -080023 """Downloader Unittests."""
Chris Sosa47a7d4e2012-03-28 11:26:55 -070024
25 def setUp(self):
26 mox.MoxTestBase.setUp(self)
27 self._work_dir = tempfile.mkdtemp('downloader-test')
Chris Sosa76e44b92013-01-31 12:11:38 -080028 self.board = 'x86-mario-release'
Chris Sosa47a7d4e2012-03-28 11:26:55 -070029 self.build = 'R17-1413.0.0-a1-b1346'
Chris Sosa76e44b92013-01-31 12:11:38 -080030 self.archive_url = (
31 'gs://chromeos-image-archive/%s/%s' % (self.board, self.build))
Simran Basi4243a862014-12-12 12:48:33 -080032 self.local_path = ('/local/path/x86-mario-release/R17-1413.0.0-a1-b1346')
Chris Sosa47a7d4e2012-03-28 11:26:55 -070033
34 def tearDown(self):
Gilad Arnold0b8c3f32012-09-19 14:35:44 -070035 shutil.rmtree(self._work_dir, ignore_errors=True)
Chris Sosa47a7d4e2012-03-28 11:26:55 -070036
Gabe Black3b567202015-09-23 14:07:59 -070037 def _SimpleDownloadOfTestSuites(self, downloader_instance):
Simran Basi4243a862014-12-12 12:48:33 -080038 """Helper to verify test_suites are downloaded correctly.
Chris Sosa47a7d4e2012-03-28 11:26:55 -070039
Simran Basi4243a862014-12-12 12:48:33 -080040 Args:
Gabe Black3b567202015-09-23 14:07:59 -070041 downloader_instance: Downloader object to test with.
Chris Sosa47a7d4e2012-03-28 11:26:55 -070042 """
Gabe Black3b567202015-09-23 14:07:59 -070043 factory = build_artifact.ChromeOSArtifactFactory(
44 downloader_instance.GetBuildDir(), ['test_suites'],
45 None, downloader_instance.GetBuild())
Chris Sosa76e44b92013-01-31 12:11:38 -080046 self.mox.StubOutWithMock(downloader.Downloader,
47 '_DownloadArtifactsSerially')
48 self.mox.StubOutWithMock(downloader.Downloader,
49 '_DownloadArtifactsInBackground')
Chris Sosa47a7d4e2012-03-28 11:26:55 -070050
Chris Sosa76e44b92013-01-31 12:11:38 -080051 downloader.Downloader._DownloadArtifactsInBackground(mox.In(mox.IsA(
Gabe Black3b567202015-09-23 14:07:59 -070052 build_artifact.AutotestTarball)))
Chris Sosa76e44b92013-01-31 12:11:38 -080053 downloader.Downloader._DownloadArtifactsSerially(
Gabe Black3b567202015-09-23 14:07:59 -070054 [mox.IsA(build_artifact.BundledArtifact)], no_wait=True)
Chris Sosa47a7d4e2012-03-28 11:26:55 -070055 self.mox.ReplayAll()
Gabe Black3b567202015-09-23 14:07:59 -070056 downloader_instance.Download(factory)
Chris Sosa76e44b92013-01-31 12:11:38 -080057 # Sanity check the timestamp file exists.
Alex Millera44d5022012-07-27 11:34:16 -070058 self.assertTrue(os.path.exists(
Chris Sosa76e44b92013-01-31 12:11:38 -080059 os.path.join(self._work_dir, self.board, self.build,
60 downloader.Downloader._TIMESTAMP_FILENAME)))
61 self.mox.VerifyAll()
Chris Sosa9164ca32012-03-28 11:04:50 -070062
Simran Basi4243a862014-12-12 12:48:33 -080063 def testSimpleDownloadOfTestSuitesFromGS(self):
64 """Basic test_suites test.
65
66 Verifies that if we request the test_suites from Google Storage, it gets
67 downloaded and the autotest tarball is attempted in the background.
68 """
Gabe Black3b567202015-09-23 14:07:59 -070069 self._SimpleDownloadOfTestSuites(
70 downloader.GoogleStorageDownloader(self._work_dir, self.archive_url))
Simran Basi4243a862014-12-12 12:48:33 -080071
72 def testSimpleDownloadOfTestSuitesFromLocal(self):
73 """Basic test_suites test.
74
75 Verifies that if we request the test_suites from a local path, it gets
76 downloaded and the autotest tarball is attempted in the background.
77 """
Gabe Black3b567202015-09-23 14:07:59 -070078 self._SimpleDownloadOfTestSuites(
79 downloader.LocalDownloader(self._work_dir, self.local_path))
Simran Basi4243a862014-12-12 12:48:33 -080080
Gabe Black3b567202015-09-23 14:07:59 -070081 def _DownloadSymbolsHelper(self, downloader_instance):
Chris Sosa76e44b92013-01-31 12:11:38 -080082 """Basic symbols download."""
Gabe Black3b567202015-09-23 14:07:59 -070083 factory = build_artifact.ChromeOSArtifactFactory(
84 downloader_instance.GetBuildDir(), ['symbols'],
85 None, downloader_instance.GetBuild())
86
Chris Sosa76e44b92013-01-31 12:11:38 -080087 self.mox.StubOutWithMock(downloader.Downloader,
88 '_DownloadArtifactsSerially')
89 # Should not get called but mocking so that we know it wasn't called.
90 self.mox.StubOutWithMock(downloader.Downloader,
91 '_DownloadArtifactsInBackground')
92 downloader.Downloader._DownloadArtifactsSerially(
Gabe Black3b567202015-09-23 14:07:59 -070093 [mox.IsA(build_artifact.BundledArtifact)], no_wait=True)
Chris Masone816e38c2012-05-02 12:22:36 -070094 self.mox.ReplayAll()
Gabe Black3b567202015-09-23 14:07:59 -070095 downloader_instance.Download(factory)
Chris Masone816e38c2012-05-02 12:22:36 -070096 self.mox.VerifyAll()
97
Simran Basi4243a862014-12-12 12:48:33 -080098 def testDownloadSymbolsFromGS(self):
99 """Basic symbols download from Google Storage."""
Gabe Black3b567202015-09-23 14:07:59 -0700100 self._DownloadSymbolsHelper(
101 downloader.GoogleStorageDownloader(self._work_dir, self.archive_url))
Simran Basi4243a862014-12-12 12:48:33 -0800102
103 def testDownloadSymbolsFromLocal(self):
104 """Basic symbols download from a Local Path."""
Gabe Black3b567202015-09-23 14:07:59 -0700105 self._DownloadSymbolsHelper(
106 downloader.LocalDownloader(self._work_dir, self.local_path))
107
108
109class AndroidDownloaderTestBase(mox.MoxTestBase):
110 """Android Downloader Unittests."""
111
112 def setUp(self):
113 mox.MoxTestBase.setUp(self)
114 self._work_dir = tempfile.mkdtemp('downloader-test')
115 self.target = 'shamu-userdebug'
116 self.build_id = '123456'
117
118 def tearDown(self):
119 shutil.rmtree(self._work_dir, ignore_errors=True)
120
121 def testDownloadFromLaunchControl(self):
122 """Basic test to check download from LaunchControl works."""
123 downloader_instance = downloader.LaunchControlDownloader(
124 self._work_dir, self.build_id, self.target)
125 factory = build_artifact.AndroidArtifactFactory(
126 downloader_instance.GetBuildDir(), ['fastboot'],
127 None, downloader_instance.GetBuild())
128 self.mox.StubOutWithMock(downloader.Downloader,
129 '_DownloadArtifactsSerially')
130 self.mox.StubOutWithMock(downloader.Downloader,
131 '_DownloadArtifactsInBackground')
132
133 # TODO(dshi): Uncomment following line after Fetch method is implemented in
134 # LaunchControlDownloader.
135 # downloader.Downloader._DownloadArtifactsInBackground(mox.In(mox.IsA(
136 # build_artifact.ANDROID_FASTBOOT)))
137 downloader.Downloader._DownloadArtifactsSerially(
138 [mox.IsA(build_artifact.Artifact)], no_wait=True)
139 self.mox.ReplayAll()
140 downloader_instance.Download(factory)
141 # Sanity check the timestamp file exists.
142 self.assertTrue(os.path.exists(
143 os.path.join(self._work_dir, self.target, self.build_id,
144 downloader.Downloader._TIMESTAMP_FILENAME)))
145 self.mox.VerifyAll()
Simran Basi4243a862014-12-12 12:48:33 -0800146
Chris Masone816e38c2012-05-02 12:22:36 -0700147
Chris Sosa47a7d4e2012-03-28 11:26:55 -0700148if __name__ == '__main__':
149 unittest.main()