| 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 |