OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2015 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2015 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import codecs | 6 import codecs |
7 import copy | 7 import copy |
8 import json | 8 import json |
9 import os | 9 import os |
10 import sys | 10 import sys |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 def fake_git(*args, **kwargs): | 160 def fake_git(*args, **kwargs): |
161 return bot_update.call('git', *args, **kwargs) | 161 return bot_update.call('git', *args, **kwargs) |
162 | 162 |
163 | 163 |
164 class BotUpdateUnittests(unittest.TestCase): | 164 class BotUpdateUnittests(unittest.TestCase): |
165 def setUp(self): | 165 def setUp(self): |
166 sys.platform = 'linux2' # For consistency, ya know? | 166 sys.platform = 'linux2' # For consistency, ya know? |
167 self.filesystem = FakeFilesystem() | 167 self.filesystem = FakeFilesystem() |
168 self.call = MockedCall(self.filesystem) | 168 self.call = MockedCall(self.filesystem) |
169 self.gclient = MockedGclientSync(self.filesystem) | 169 self.gclient = MockedGclientSync(self.filesystem) |
170 self.call.expect(('gclient', 'sync')).returns(self.gclient) | 170 self.call.expect( |
| 171 (sys.executable, '-u', bot_update.GCLIENT_PATH, 'sync') |
| 172 ).returns(self.gclient) |
171 self.old_call = getattr(bot_update, 'call') | 173 self.old_call = getattr(bot_update, 'call') |
172 self.params = copy.deepcopy(DEFAULT_PARAMS) | 174 self.params = copy.deepcopy(DEFAULT_PARAMS) |
173 setattr(bot_update, 'call', self.call) | 175 setattr(bot_update, 'call', self.call) |
174 setattr(bot_update, 'git', fake_git) | 176 setattr(bot_update, 'git', fake_git) |
175 | 177 |
176 self.old_os_cwd = os.getcwd | 178 self.old_os_cwd = os.getcwd |
177 setattr(os, 'getcwd', lambda: '/b/build/slave/foo/build') | 179 setattr(os, 'getcwd', lambda: '/b/build/slave/foo/build') |
178 | 180 |
179 setattr(bot_update, 'open', self.filesystem.open) | 181 setattr(bot_update, 'open', self.filesystem.open) |
180 self.old_codecs_open = codecs.open | 182 self.old_codecs_open = codecs.open |
181 setattr(codecs, 'open', self.filesystem.open) | 183 setattr(codecs, 'open', self.filesystem.open) |
182 | 184 |
183 def tearDown(self): | 185 def tearDown(self): |
184 setattr(bot_update, 'call', self.old_call) | 186 setattr(bot_update, 'call', self.old_call) |
185 setattr(os, 'getcwd', self.old_os_cwd) | 187 setattr(os, 'getcwd', self.old_os_cwd) |
186 delattr(bot_update, 'open') | 188 delattr(bot_update, 'open') |
187 setattr(codecs, 'open', self.old_codecs_open) | 189 setattr(codecs, 'open', self.old_codecs_open) |
188 | 190 |
189 def overrideSetupForWindows(self): | 191 def overrideSetupForWindows(self): |
190 sys.platform = 'win' | 192 sys.platform = 'win' |
191 self.call.expect(('gclient.bat', 'sync')).returns(self.gclient) | 193 self.call.expect( |
| 194 (sys.executable, '-u', bot_update.GCLIENT_PATH, 'sync') |
| 195 ).returns(self.gclient) |
192 | 196 |
193 def testBasic(self): | 197 def testBasic(self): |
194 bot_update.ensure_checkout(**self.params) | 198 bot_update.ensure_checkout(**self.params) |
195 return self.call.records | 199 return self.call.records |
196 | 200 |
197 def testBasicShallow(self): | 201 def testBasicShallow(self): |
198 self.params['shallow'] = True | 202 self.params['shallow'] = True |
199 bot_update.ensure_checkout(**self.params) | 203 bot_update.ensure_checkout(**self.params) |
200 return self.call.records | 204 return self.call.records |
201 | 205 |
202 def testBreakLocks(self): | 206 def testBreakLocks(self): |
203 self.overrideSetupForWindows() | 207 self.overrideSetupForWindows() |
204 bot_update.ensure_checkout(**self.params) | 208 bot_update.ensure_checkout(**self.params) |
205 gclient_sync_cmd = None | 209 gclient_sync_cmd = None |
206 for record in self.call.records: | 210 for record in self.call.records: |
207 args = record[0] | 211 args = record[0] |
208 if args[0] == 'gclient.bat' and args[1] == 'sync': | 212 if args[:4] == (sys.executable, '-u', bot_update.GCLIENT_PATH, 'sync'): |
209 gclient_sync_cmd = args | 213 gclient_sync_cmd = args |
210 self.assertTrue('--break_repo_locks' in gclient_sync_cmd) | 214 self.assertTrue('--break_repo_locks' in gclient_sync_cmd) |
211 | 215 |
212 def testGitCheckoutBreaksLocks(self): | 216 def testGitCheckoutBreaksLocks(self): |
213 self.overrideSetupForWindows() | 217 self.overrideSetupForWindows() |
214 path = '/b/build/slave/foo/build/.git' | 218 path = '/b/build/slave/foo/build/.git' |
215 lockfile = 'index.lock' | 219 lockfile = 'index.lock' |
216 removed = [] | 220 removed = [] |
217 old_os_walk = os.walk | 221 old_os_walk = os.walk |
218 old_os_remove = os.remove | 222 old_os_remove = os.remove |
219 setattr(os, 'walk', lambda _: [(path, None, [lockfile])]) | 223 setattr(os, 'walk', lambda _: [(path, None, [lockfile])]) |
220 setattr(os, 'remove', removed.append) | 224 setattr(os, 'remove', removed.append) |
221 bot_update.ensure_checkout(**self.params) | 225 bot_update.ensure_checkout(**self.params) |
222 setattr(os, 'walk', old_os_walk) | 226 setattr(os, 'walk', old_os_walk) |
223 setattr(os, 'remove', old_os_remove) | 227 setattr(os, 'remove', old_os_remove) |
224 self.assertTrue(os.path.join(path, lockfile) in removed) | 228 self.assertTrue(os.path.join(path, lockfile) in removed) |
225 | 229 |
226 | 230 |
227 if __name__ == '__main__': | 231 if __name__ == '__main__': |
228 unittest.main() | 232 unittest.main() |
OLD | NEW |