OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 | 2 |
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 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 | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Unittests for cbuildbot. Needs to be run inside of chroot for mox.""" | 7 """Unittests for cbuildbot. Needs to be run inside of chroot for mox.""" |
8 | 8 |
9 import __builtin__ | 9 import __builtin__ |
10 import mox | 10 import mox |
| 11 import os |
| 12 import posix |
| 13 import shutil |
11 import unittest | 14 import unittest |
12 | 15 |
13 # Fixes circular dependency error. | 16 # Fixes circular dependency error. |
14 import cbuildbot_comm | 17 import cbuildbot_comm |
15 import cbuildbot | 18 import cbuildbot |
16 | 19 |
17 class CBuildBotTest(mox.MoxTestBase): | 20 class CBuildBotTest(mox.MoxTestBase): |
18 | 21 |
19 def setUp(self): | 22 def setUp(self): |
20 mox.MoxTestBase.setUp(self) | 23 mox.MoxTestBase.setUp(self) |
21 # Always stub RunCommmand out as we use it in every method. | 24 # Always stub RunCommmand out as we use it in every method. |
22 self.mox.StubOutWithMock(cbuildbot, 'RunCommand') | 25 self.mox.StubOutWithMock(cbuildbot, 'RunCommand') |
| 26 self.tracking_branch = 'cros/master' |
23 self._test_repos = [['kernel', 'third_party/kernel/files'], | 27 self._test_repos = [['kernel', 'third_party/kernel/files'], |
24 ['login_manager', 'platform/login_manager'] | 28 ['login_manager', 'platform/login_manager'] |
25 ] | 29 ] |
26 self._test_cros_workon_packages = \ | 30 self._test_cros_workon_packages = \ |
27 'chromeos-base/kernel\nchromeos-base/chromeos-login\n' | 31 'chromeos-base/kernel\nchromeos-base/chromeos-login\n' |
28 self._test_board = 'test-board' | 32 self._test_board = 'test-board' |
29 self._buildroot = '.' | 33 self._buildroot = '.' |
30 self._test_dict = {'kernel' : ['chromos-base/kernel', 'dev-util/perf'], | 34 self._test_dict = {'kernel' : ['chromos-base/kernel', 'dev-util/perf'], |
31 'cros' : ['chromos-base/libcros'] | 35 'cros' : ['chromos-base/libcros'] |
32 } | 36 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 # cbuildbot._ParseRevisionString(self._test_string, | 99 # cbuildbot._ParseRevisionString(self._test_string, |
96 # self._test_dict).AndReturn( | 100 # self._test_dict).AndReturn( |
97 # self._test_parsed_string_array) | 101 # self._test_parsed_string_array) |
98 # cbuildbot._UprevFromRevisionList(self._buildroot, | 102 # cbuildbot._UprevFromRevisionList(self._buildroot, |
99 # self._test_parsed_string_array) | 103 # self._test_parsed_string_array) |
100 # self.mox.ReplayAll() | 104 # self.mox.ReplayAll() |
101 # cbuildbot._UprevPackages(self._buildroot, self._revision_file, | 105 # cbuildbot._UprevPackages(self._buildroot, self._revision_file, |
102 # self._test_board) | 106 # self._test_board) |
103 # self.mox.VerifyAll() | 107 # self.mox.VerifyAll() |
104 | 108 |
| 109 def testArchiveTestResults(self): |
| 110 """Test if we can archive the latest results dir as well as clean up.""" |
| 111 self.mox.StubOutWithMock(os.path, 'exists') |
| 112 self.mox.StubOutWithMock(os, 'listdir') |
| 113 self.mox.StubOutWithMock(os, 'stat') |
| 114 self.mox.StubOutWithMock(shutil, 'rmtree') |
| 115 self.mox.StubOutWithMock(shutil, 'copytree') |
| 116 self.mox.StubOutWithMock(shutil, 'copyfile') |
| 117 |
| 118 # Create mock stats so that file2 is older than file1. |
| 119 dir_listing = ['file1', 'file2'] |
| 120 stat1 = self.mox.CreateMock(posix.stat_result) |
| 121 stat2 = self.mox.CreateMock(posix.stat_result) |
| 122 stat1.st_mtime = 99999 |
| 123 stat2.st_mtime = 10000 |
| 124 |
| 125 # Set vars for call. |
| 126 buildroot = '/fake_dir' |
| 127 test_results_dir = 'fake_results_dir' |
| 128 archive_dir = 1234 |
| 129 board = 'fake-board' |
| 130 |
| 131 # Expected calls. |
| 132 os.path.exists(cbuildbot.ARCHIVE_BASE).AndReturn(True) |
| 133 os.listdir(os.path.join(cbuildbot.ARCHIVE_BASE)).AndReturn(dir_listing) |
| 134 os.stat('file1').AndReturn(stat1) |
| 135 os.stat('file2').AndReturn(stat2) |
| 136 # Should remove the oldest path. |
| 137 shutil.rmtree(os.path.join(cbuildbot.ARCHIVE_BASE, 'file2')) |
| 138 |
| 139 # Convenience variables to make archive easier to understand. |
| 140 path_to_results = os.path.join(buildroot, 'chroot', test_results_dir) |
| 141 path_to_archive_dir = os.path.join(cbuildbot.ARCHIVE_BASE, str(archive_dir)) |
| 142 path_to_image = os.path.join(buildroot, 'src', 'build', 'images', board, |
| 143 'latest', 'chromiumos_qemu_image.bin') |
| 144 # Archive logic |
| 145 os.path.exists(path_to_archive_dir).AndReturn(False) |
| 146 cbuildbot.RunCommand(['sudo', 'chmod', '-R', '+r', path_to_results]) |
| 147 shutil.copytree(path_to_results, path_to_archive_dir) |
| 148 cbuildbot.RunCommand(['gzip', '-f', path_to_image]) |
| 149 shutil.copyfile(path_to_image + '.gz', os.path.join( |
| 150 path_to_archive_dir, 'chromiumos_qemu_image.bin.gz')) |
| 151 |
| 152 self.mox.ReplayAll() |
| 153 cbuildbot.ARCHIVE_COUNT = 2 # Set equal to list size so we force clean up. |
| 154 cbuildbot._ArchiveTestResults(buildroot, board, archive_dir, |
| 155 test_results_dir) |
| 156 self.mox.VerifyAll() |
| 157 |
105 # TODO(sosa): Remove once we un-comment above. | 158 # TODO(sosa): Remove once we un-comment above. |
106 def testUprevPackages(self): | 159 def testUprevPackages(self): |
107 """Test if we get actual revisions in revisions.pfq.""" | 160 """Test if we get actual revisions in revisions.pfq.""" |
108 self.mox.StubOutWithMock(__builtin__, 'open') | 161 self.mox.StubOutWithMock(__builtin__, 'open') |
109 | 162 |
110 # Mock out file interaction. | 163 # Mock out file interaction. |
111 m_file = self.mox.CreateMock(file) | 164 m_file = self.mox.CreateMock(file) |
112 __builtin__.open(self._revision_file).AndReturn(m_file) | 165 __builtin__.open(self._revision_file).AndReturn(m_file) |
113 m_file.read().AndReturn(self._test_string) | 166 m_file.read().AndReturn(self._test_string) |
114 m_file.close() | 167 m_file.close() |
115 | 168 |
116 cbuildbot.RunCommand(['./cros_mark_as_stable', '--all', | 169 cbuildbot.RunCommand(['./cros_mark_as_stable', '--all', |
| 170 '--board=%s' % self._test_board, |
117 '--tracking_branch="cros/master"', 'commit'], | 171 '--tracking_branch="cros/master"', 'commit'], |
118 cwd='%s/src/scripts' % self._buildroot, | 172 cwd='%s/src/scripts' % self._buildroot, |
119 enter_chroot=True) | 173 enter_chroot=True) |
120 | 174 |
121 self.mox.ReplayAll() | 175 self.mox.ReplayAll() |
122 cbuildbot._UprevPackages(self._buildroot, self._revision_file, | 176 cbuildbot._UprevPackages(self._buildroot, self.tracking_branch, |
123 self._test_board) | 177 self._revision_file, self._test_board) |
124 self.mox.VerifyAll() | 178 self.mox.VerifyAll() |
125 | 179 |
126 def testUprevAllPackages(self): | 180 def testUprevAllPackages(self): |
127 """Test if we get None in revisions.pfq indicating Full Builds.""" | 181 """Test if we get None in revisions.pfq indicating Full Builds.""" |
128 self.mox.StubOutWithMock(__builtin__, 'open') | 182 self.mox.StubOutWithMock(__builtin__, 'open') |
129 | 183 |
130 # Mock out file interaction. | 184 # Mock out file interaction. |
131 m_file = self.mox.CreateMock(file) | 185 m_file = self.mox.CreateMock(file) |
132 __builtin__.open(self._revision_file).AndReturn(m_file) | 186 __builtin__.open(self._revision_file).AndReturn(m_file) |
133 m_file.read().AndReturn('None') | 187 m_file.read().AndReturn('None') |
134 m_file.close() | 188 m_file.close() |
135 | 189 |
136 cbuildbot.RunCommand(['./cros_mark_as_stable', '--all', | 190 cbuildbot.RunCommand(['./cros_mark_as_stable', '--all', |
| 191 '--board=%s' % self._test_board, |
137 '--tracking_branch="cros/master"', 'commit'], | 192 '--tracking_branch="cros/master"', 'commit'], |
138 cwd='%s/src/scripts' % self._buildroot, | 193 cwd='%s/src/scripts' % self._buildroot, |
139 enter_chroot=True) | 194 enter_chroot=True) |
140 | 195 |
141 self.mox.ReplayAll() | 196 self.mox.ReplayAll() |
142 cbuildbot._UprevPackages(self._buildroot, self._revision_file, | 197 cbuildbot._UprevPackages(self._buildroot, self.tracking_branch, |
143 self._test_board) | 198 self._revision_file, self._test_board) |
144 self.mox.VerifyAll() | 199 self.mox.VerifyAll() |
145 | 200 |
146 | 201 |
147 if __name__ == '__main__': | 202 if __name__ == '__main__': |
148 unittest.main() | 203 unittest.main() |
OLD | NEW |