Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(420)

Side by Side Diff: tools/auto_bisect/fetch_build_test.py

Issue 548233002: Add a module to fetch builds from different types of builders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to comments. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Unit tests for the fetch_builds module."""
6
7 import errno
8 import os
9 import sys
10 import unittest
11
12 import fetch_build
13 import mock_wrapper as mock
14
15
16 # The tests below test private functions (W0212).
17 # Some methods don't reference self because they use the mock module (R0201).
18 # pylint: disable=R0201,W0212
19 class FetchBuildTest(unittest.TestCase):
20 """Test case for functions related to fetching builds."""
ojan 2014/09/12 00:36:28 Useless comment.
qyearsley 2014/09/12 03:21:13 Done.
21
22 def setUp(self):
23 # Don't print to console when running tests.
24 sys.stdout = open(os.devnull, 'w')
25
26 @mock.patch('fetch_build.os.path.exists')
27 @mock.patch('fetch_build.cloud_storage')
28 def test_FetchFromCloudStorage_FileFound(
29 self, mock_cloud_storage, mock_os_path_exists):
30 mock_cloud_storage.Exists.return_value = True
31 mock_os_path_exists.return_value = True
32 local_path = fetch_build.FetchFromCloudStorage(
33 'my_bucket', 'remote/foo.zip', 'local')
34 self.assertEqual('local/foo.zip', local_path)
35 mock_cloud_storage.Get.assert_called_with(
36 'my_bucket', 'remote/foo.zip', 'local/foo.zip')
37
38 @mock.patch('fetch_build.cloud_storage')
39 def test_FetchFromCloudStorage_FileNotFound(
40 self, mock_cloud_storage):
41 mock_cloud_storage.Exists.return_value = False
42 local_path = fetch_build.FetchFromCloudStorage(
43 'my_bucket', 'remote/foo.zip', 'local')
44 self.assertIsNone(local_path)
45 self.assertFalse(mock_cloud_storage.Get.called)
46
47
48 class BuildArchiveTest(unittest.TestCase):
49 """Test case for the BuildArchive class and subclasses."""
ojan 2014/09/12 00:36:28 Ditto
qyearsley 2014/09/12 03:21:14 Done.
50
51 @mock.patch('fetch_build.bisect_utils')
52 def test_CreatePerfBuildArchive(self, mock_bisect_utils):
53 self._SetPlatformLinux(mock_bisect_utils)
54 instance = fetch_build.BuildArchive.Create(fetch_build.PERF_BUILDER)
55 self._SetPlatformLinux(mock_bisect_utils)
56 self.assertEqual('chrome-perf', instance.BucketName())
57 self.assertTrue(isinstance(instance, fetch_build.PerfBuildArchive))
58
59 @mock.patch('fetch_build.bisect_utils')
60 def test_CreateFullBuildArchive(self, mock_bisect_utils):
61 self._SetPlatformLinux(mock_bisect_utils)
62 instance = fetch_build.BuildArchive.Create(fetch_build.FULL_BUILDER)
63 self.assertEqual('chromium-linux-archive', instance.BucketName())
64 self.assertTrue(isinstance(instance, fetch_build.FullBuildArchive))
65
66 @mock.patch('fetch_build.bisect_utils')
67 def test_BuildArchive_NonExistentType(self, mock_bisect_utils):
68 self._SetPlatformLinux(mock_bisect_utils)
69 self.assertRaises(NotImplementedError,
70 fetch_build.BuildArchive.Create, 'other')
71
72 @mock.patch('fetch_build.bisect_utils')
73 def test_FullBuildArchive_Linux(self, mock_bisect_utils):
74 self._SetPlatformLinux(mock_bisect_utils)
75 archive = fetch_build.FullBuildArchive()
76 self.assertEqual('chromium-linux-archive', archive.BucketName())
77 self.assertEqual(
78 'chromium.linux/Linux Builder/full-build-linux_1234567890abcdef.zip',
79 archive.FilePath('1234567890abcdef'))
80
81 @mock.patch('fetch_build.bisect_utils')
82 def test_FullBuildArchive_Android(self, mock_bisect_utils):
83 self._SetPlatformLinux(mock_bisect_utils)
84 archive = fetch_build.FullBuildArchive(target_platform='android')
85 self.assertEqual('chromium-android', archive.BucketName())
86 self.assertEqual('android_main_rel/full-build-linux_1234567890abcdef.zip',
87 archive.FilePath('1234567890abcdef'))
88
89 @mock.patch('fetch_build.bisect_utils')
90 def test_PerfBuildArchive_Linux(self, mock_bisect_utils):
91 self._SetPlatformLinux(mock_bisect_utils)
92 archive = fetch_build.PerfBuildArchive()
93 self.assertEqual('chrome-perf', archive.BucketName())
94 self.assertEqual(
95 'Linux Builder/full-build-linux_1234567890abcdef.zip',
96 archive.FilePath('1234567890abcdef'))
97
98 @mock.patch('fetch_build.bisect_utils')
99 def test_PerfBuildArchive_Android(self, mock_bisect_utils):
100 self._SetPlatformLinux(mock_bisect_utils)
101 archive = fetch_build.PerfBuildArchive(target_platform='android')
102 self.assertEqual('chrome-perf', archive.BucketName())
103 self.assertEqual(
104 'android_perf_rel/full-build-linux_123456.zip',
105 archive.FilePath('123456'))
106
107 @mock.patch('fetch_build.bisect_utils')
108 def test_PerfBuildArchive_64BitWindows(self, mock_bisect_utils):
109 mock_bisect_utils.IsLinuxHost.return_value = False
110 mock_bisect_utils.IsMacHost.return_value = False
111 mock_bisect_utils.IsWindowsHost.return_value = True
112 mock_bisect_utils.Is64BitWindows.return_value = True
113 archive = fetch_build.PerfBuildArchive(target_arch='x64')
114 self.assertEqual('chrome-perf', archive.BucketName())
115 self.assertEqual(
116 'Win x64 Builder/full-build-win32_123456.zip',
117 archive.FilePath('123456'))
118
119 @mock.patch('fetch_build.bisect_utils')
120 def test_PerfBuildArchive_WithDepsPatchSha(self, mock_bisect_utils):
121 self._SetPlatformLinux(mock_bisect_utils)
122 archive = fetch_build.PerfBuildArchive()
123 self.assertEqual(
124 'Linux Builder/full-build-linux_123456'
125 '_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.zip',
126 archive.FilePath(123456, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))
127
128 @staticmethod
129 def _SetPlatformLinux(mock_bisect_utils):
130 mock_bisect_utils.IsLinuxHost.return_value = True
131 mock_bisect_utils.IsMacHost.return_value = False
132 mock_bisect_utils.IsWindowsHost.return_value = False
133 mock_bisect_utils.Is64BitWindows.return_value = False
134
135
136 class UnzipTest(unittest.TestCase):
137 """Test case for the Unzip function and subsidiary functions."""
ojan 2014/09/12 00:36:28 You guessed it. :)
qyearsley 2014/09/12 03:21:14 Done.
138
139 @mock.patch('fetch_build.bisect_utils')
140 @mock.patch('fetch_build._MakeDirectory')
141 @mock.patch('fetch_build._UnzipUsingCommand')
142 def test_Unzip_Linux(
143 self, mock_UnzipUsingCommand, mock_MakeDirectory, mock_bisect_utils):
144 mock_bisect_utils.IsLinuxHost.return_value = True
145 mock_bisect_utils.IsMacHost.return_value = False
146 mock_bisect_utils.IsWindowsHost.return_value = False
147 fetch_build.Unzip('x.zip', 'out_dir', verbose=False)
148 mock_MakeDirectory.assert_called_with('out_dir')
149 mock_UnzipUsingCommand.assert_called_with(
150 ['unzip', '-o'], 'x.zip', 'out_dir')
151
152 @mock.patch('fetch_build.os')
153 @mock.patch('fetch_build.bisect_utils')
154 @mock.patch('fetch_build._MakeDirectory')
155 @mock.patch('fetch_build._UnzipUsingZipFile')
156 def test_Unzip_Mac_LargeFile(
157 self, mock_UnzipUsingZipFile, mock_MakeDirectory, mock_bisect_utils,
158 mock_os):
159 # The zipfile module is used to unzip on mac when the file is > 4GB.
160 mock_bisect_utils.IsLinuxHost.return_value = False
161 mock_bisect_utils.IsMacHost.return_value = True
162 mock_bisect_utils.IsWindowsHost.return_value = False
163 mock_os.path.getsize.return_value = 2 ** 33 # 8GB
164 fetch_build.Unzip('x.zip', 'out_dir', verbose=False)
165 mock_MakeDirectory.assert_called_with('out_dir')
166 mock_UnzipUsingZipFile.assert_called_with('x.zip', 'out_dir', False)
167
168 @mock.patch('fetch_build.os')
169 @mock.patch('fetch_build.bisect_utils.RunProcess')
170 def test_UnzipUsingCommand(self, mock_RunProcess, mock_os):
171 # The _UnzipUsingCommand function should move to the output
172 # directory and run the command with the file's absolute path.
173 mock_os.path.abspath.return_value = '/foo/some/path/x.zip'
174 mock_os.getcwd.return_value = 'curr_dir'
175 mock_RunProcess.return_value = 0
176 fetch_build._UnzipUsingCommand(['unzip'], 'x.zip', 'out_dir')
177 mock_os.chdir.assert_has_calls(
178 [mock.call('out_dir'), mock.call('curr_dir')])
179 mock_RunProcess.assert_called_with(['unzip', '/foo/some/path/x.zip'])
180
181 @mock.patch('fetch_build.os')
182 def test_MakeDirectory(self, mock_os):
183 # _MakeDirectory uses os.makedirs.
184 fetch_build._MakeDirectory('some/path')
185 mock_os.makedirs.assert_called_with('some/path')
186
187 @mock.patch('fetch_build.os')
188 def test_MakeDirectory_RaisesError(self, mock_os):
189 mock_os.makedirs.side_effect = OSError()
190 self.assertRaises(OSError, fetch_build._MakeDirectory, 'some/path')
191
192 @mock.patch('fetch_build.os')
193 def test_MakeDirectory_SucceedsIfDirectoryExists(self, mock_os):
194 already_exists = OSError()
195 already_exists.errno = errno.EEXIST
196 mock_os.makedirs.side_effect = already_exists
197
198
199 if __name__ == '__main__':
200 unittest.main()
201
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698