OLD | NEW |
| (Empty) |
1 #!/usr/bin/python | |
2 | |
3 # Copyright (c) 2010 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 | |
7 """Unittests for cbuildbot. Needs to be run inside of chroot for mox.""" | |
8 | |
9 import __builtin__ | |
10 import mox | |
11 import os | |
12 import posix | |
13 import shutil | |
14 import tempfile | |
15 import unittest | |
16 | |
17 # Fixes circular dependency error. | |
18 import cbuildbot_comm | |
19 import cbuildbot | |
20 from cros_build_lib import ReinterpretPathForChroot | |
21 | |
22 | |
23 class CBuildBotTest(mox.MoxTestBase): | |
24 | |
25 def setUp(self): | |
26 mox.MoxTestBase.setUp(self) | |
27 # Always stub RunCommmand out as we use it in every method. | |
28 self.mox.StubOutWithMock(cbuildbot, 'RunCommand') | |
29 self.tracking_branch = 'cros/master' | |
30 self._test_repos = [['kernel', 'third_party/kernel/files'], | |
31 ['login_manager', 'platform/login_manager'] | |
32 ] | |
33 self._test_cros_workon_packages = \ | |
34 'chromeos-base/kernel\nchromeos-base/chromeos-login\n' | |
35 self._test_board = 'test-board' | |
36 self._buildroot = '.' | |
37 self._test_dict = {'kernel' : ['chromos-base/kernel', 'dev-util/perf'], | |
38 'cros' : ['chromos-base/libcros'] | |
39 } | |
40 self._test_string = "kernel.git@12345test cros.git@12333test" | |
41 self._test_string += " crosutils.git@blahblah" | |
42 self._revision_file = 'test-revisions.pfq' | |
43 self._test_parsed_string_array = [ | |
44 ['chromeos-base/kernel', '12345test'], | |
45 ['dev-util/perf', '12345test'], | |
46 ['chromos-base/libcros', '12345test'] | |
47 ] | |
48 self._overlays = ['%s/src/third_party/chromiumos-overlay' % self._buildroot] | |
49 self._chroot_overlays = [ | |
50 ReinterpretPathForChroot(p) for p in self._overlays | |
51 ] | |
52 | |
53 def testParseRevisionString(self): | |
54 """Test whether _ParseRevisionString parses string correctly.""" | |
55 return_array = cbuildbot._ParseRevisionString(self._test_string, | |
56 self._test_dict) | |
57 self.assertEqual(len(return_array), 3) | |
58 self.assertTrue( | |
59 'chromeos-base/kernel', '12345test' in return_array) | |
60 self.assertTrue( | |
61 'dev-util/perf', '12345test' in return_array) | |
62 self.assertTrue( | |
63 'chromos-base/libcros', '12345test' in return_array) | |
64 | |
65 def testCreateDictionary(self): | |
66 self.mox.StubOutWithMock(cbuildbot, '_GetAllGitRepos') | |
67 self.mox.StubOutWithMock(cbuildbot, '_GetCrosWorkOnSrcPath') | |
68 cbuildbot._GetAllGitRepos(mox.IgnoreArg()).AndReturn(self._test_repos) | |
69 cbuildbot.RunCommand(mox.IgnoreArg(), | |
70 cwd='%s/src/scripts' % self._buildroot, | |
71 redirect_stdout=True, | |
72 redirect_stderr=True, | |
73 enter_chroot=True, | |
74 print_cmd=False).AndReturn( | |
75 self._test_cros_workon_packages) | |
76 cbuildbot._GetCrosWorkOnSrcPath(self._buildroot, self._test_board, | |
77 'chromeos-base/kernel').AndReturn( | |
78 '/home/test/third_party/kernel/files') | |
79 cbuildbot._GetCrosWorkOnSrcPath(self._buildroot, self._test_board, | |
80 'chromeos-base/chromeos-login').AndReturn( | |
81 '/home/test/platform/login_manager') | |
82 self.mox.ReplayAll() | |
83 repo_dict = cbuildbot._CreateRepoDictionary(self._buildroot, | |
84 self._test_board) | |
85 self.assertEqual(repo_dict['kernel'], ['chromeos-base/kernel']) | |
86 self.assertEqual(repo_dict['login_manager'], | |
87 ['chromeos-base/chromeos-login']) | |
88 self.mox.VerifyAll() | |
89 | |
90 # TODO(sosa): Re-add once we use cros_mark vs. cros_mark_all. | |
91 #def testUprevPackages(self): | |
92 # """Test if we get actual revisions in revisions.pfq.""" | |
93 # self.mox.StubOutWithMock(cbuildbot, '_CreateRepoDictionary') | |
94 # self.mox.StubOutWithMock(cbuildbot, '_ParseRevisionString') | |
95 # self.mox.StubOutWithMock(cbuildbot, '_UprevFromRevisionList') | |
96 # self.mox.StubOutWithMock(__builtin__, 'open') | |
97 | |
98 # # Mock out file interaction. | |
99 # m_file = self.mox.CreateMock(file) | |
100 # __builtin__.open(self._revision_file).AndReturn(m_file) | |
101 # m_file.read().AndReturn(self._test_string) | |
102 # m_file.close() | |
103 | |
104 # cbuildbot._CreateRepoDictionary(self._buildroot, | |
105 # self._test_board).AndReturn(self._test_dict
) | |
106 # cbuildbot._ParseRevisionString(self._test_string, | |
107 # self._test_dict).AndReturn( | |
108 # self._test_parsed_string_array) | |
109 # cbuildbot._UprevFromRevisionList(self._buildroot, | |
110 # self._test_parsed_string_array) | |
111 # self.mox.ReplayAll() | |
112 # cbuildbot._UprevPackages(self._buildroot, self._revision_file, | |
113 # self._test_board) | |
114 # self.mox.VerifyAll() | |
115 | |
116 def testArchiveTestResults(self): | |
117 """Test if we can archive the latest results dir to Google Storage.""" | |
118 # Set vars for call. | |
119 buildroot = '/fake_dir' | |
120 board = 'fake-board' | |
121 test_results_dir = 'fake_results_dir' | |
122 gsutil_path = '/fake/gsutil/path' | |
123 archive_dir = 1234 | |
124 acl = 'fake_acl' | |
125 num_retries = 5 | |
126 | |
127 # Convenience variables to make archive easier to understand. | |
128 path_to_results = os.path.join(buildroot, 'chroot', test_results_dir) | |
129 path_to_image = os.path.join(buildroot, 'src', 'build', 'images', board, | |
130 'latest', 'chromiumos_qemu_image.bin') | |
131 | |
132 cbuildbot.RunCommand(['sudo', 'chmod', '-R', '+r', path_to_results]) | |
133 cbuildbot.RunCommand([gsutil_path, 'cp', '-R', path_to_results, | |
134 archive_dir], num_retries=num_retries) | |
135 cbuildbot.RunCommand([gsutil_path, 'setacl', acl, archive_dir]) | |
136 cbuildbot.RunCommand(['gzip', '-f', '--fast', path_to_image]) | |
137 cbuildbot.RunCommand([gsutil_path, 'cp', path_to_image + '.gz', | |
138 archive_dir], num_retries=num_retries) | |
139 | |
140 self.mox.ReplayAll() | |
141 cbuildbot._ArchiveTestResults(buildroot, board, test_results_dir, | |
142 gsutil_path, archive_dir, acl) | |
143 self.mox.VerifyAll() | |
144 | |
145 # TODO(sosa): Remove once we un-comment above. | |
146 def testUprevPackages(self): | |
147 """Test if we get actual revisions in revisions.pfq.""" | |
148 self.mox.StubOutWithMock(__builtin__, 'open') | |
149 | |
150 # Mock out file interaction. | |
151 m_file = self.mox.CreateMock(file) | |
152 __builtin__.open(self._revision_file).AndReturn(m_file) | |
153 m_file.read().AndReturn(self._test_string) | |
154 m_file.close() | |
155 | |
156 drop_file = cbuildbot._PACKAGE_FILE % {'buildroot': self._buildroot} | |
157 cbuildbot.RunCommand(['./cros_mark_as_stable', '--all', | |
158 '--board=%s' % self._test_board, | |
159 '--overlays=%s' % ':'.join(self._chroot_overlays), | |
160 '--tracking_branch=cros/master', | |
161 '--drop_file=%s' % ReinterpretPathForChroot(drop_file), | |
162 'commit'], | |
163 cwd='%s/src/scripts' % self._buildroot, | |
164 enter_chroot=True) | |
165 | |
166 self.mox.ReplayAll() | |
167 cbuildbot._UprevPackages(self._buildroot, self.tracking_branch, | |
168 self._revision_file, self._test_board, | |
169 self._overlays) | |
170 self.mox.VerifyAll() | |
171 | |
172 def testUprevAllPackages(self): | |
173 """Test if we get None in revisions.pfq indicating Full Builds.""" | |
174 self.mox.StubOutWithMock(__builtin__, 'open') | |
175 | |
176 # Mock out file interaction. | |
177 m_file = self.mox.CreateMock(file) | |
178 __builtin__.open(self._revision_file).AndReturn(m_file) | |
179 m_file.read().AndReturn('None') | |
180 m_file.close() | |
181 | |
182 drop_file = cbuildbot._PACKAGE_FILE % {'buildroot': self._buildroot} | |
183 cbuildbot.RunCommand(['./cros_mark_as_stable', '--all', | |
184 '--board=%s' % self._test_board, | |
185 '--overlays=%s' % ':'.join(self._chroot_overlays), | |
186 '--tracking_branch=cros/master', | |
187 '--drop_file=%s' % ReinterpretPathForChroot(drop_file), | |
188 'commit'], | |
189 cwd='%s/src/scripts' % self._buildroot, | |
190 enter_chroot=True) | |
191 | |
192 self.mox.ReplayAll() | |
193 cbuildbot._UprevPackages(self._buildroot, self.tracking_branch, | |
194 self._revision_file, self._test_board, | |
195 self._overlays) | |
196 self.mox.VerifyAll() | |
197 | |
198 def testGetPortageEnvVar(self): | |
199 """Basic test case for _GetPortageEnvVar function.""" | |
200 envvar = 'EXAMPLE' | |
201 cbuildbot.RunCommand(mox.And(mox.IsA(list), mox.In(envvar)), | |
202 cwd='%s/src/scripts' % self._buildroot, | |
203 redirect_stdout=True, enter_chroot=True, | |
204 error_ok=True).AndReturn('RESULT\n') | |
205 self.mox.ReplayAll() | |
206 result = cbuildbot._GetPortageEnvVar(self._buildroot, self._test_board, | |
207 envvar) | |
208 self.mox.VerifyAll() | |
209 self.assertEqual(result, 'RESULT') | |
210 | |
211 def testUploadPublicPrebuilts(self): | |
212 """Test _UploadPrebuilts with a public location.""" | |
213 binhost = 'http://www.example.com' | |
214 binhosts = [binhost, None] | |
215 check = mox.And(mox.IsA(list), mox.In(binhost), mox.Not(mox.In(None)), | |
216 mox.In('gs://chromeos-prebuilt')) | |
217 cbuildbot.RunCommand(check, cwd='%s/src/scripts' % self._buildroot) | |
218 self.mox.ReplayAll() | |
219 cbuildbot._UploadPrebuilts(self._buildroot, self._test_board, 'public', | |
220 binhosts) | |
221 self.mox.VerifyAll() | |
222 | |
223 def testUploadPrivatePrebuilts(self): | |
224 """Test _UploadPrebuilts with a private location.""" | |
225 binhost = 'http://www.example.com' | |
226 binhosts = [binhost, None] | |
227 check = mox.And(mox.IsA(list), mox.In(binhost), mox.Not(mox.In(None)), | |
228 mox.In('chromeos-images:/var/www/prebuilt/')) | |
229 cbuildbot.RunCommand(check, cwd='%s/src/scripts' % self._buildroot) | |
230 self.mox.ReplayAll() | |
231 cbuildbot._UploadPrebuilts(self._buildroot, self._test_board, 'private', | |
232 binhosts) | |
233 self.mox.VerifyAll() | |
234 | |
235 | |
236 if __name__ == '__main__': | |
237 unittest.main() | |
OLD | NEW |