| 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 subprocess |
| 10 import sys | 11 import sys |
| 11 import unittest | 12 import unittest |
| 12 | 13 |
| 13 #import test_env # pylint: disable=W0403,W0611 | 14 #import test_env # pylint: disable=W0403,W0611 |
| 14 | 15 |
| 15 sys.path.insert(0, os.path.join( | 16 sys.path.insert(0, os.path.join( |
| 16 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 17 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), |
| 17 'recipe_modules', 'bot_update', 'resources')) | 18 'recipe_modules', 'bot_update', 'resources')) |
| 18 sys.platform = 'linux2' # For consistency, ya know? | 19 sys.platform = 'linux2' # For consistency, ya know? |
| 19 import bot_update | 20 import bot_update |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 if 'w' in mode: | 156 if 'w' in mode: |
| 156 self.files[target] = FakeFile() | 157 self.files[target] = FakeFile() |
| 157 return self.files[target] | 158 return self.files[target] |
| 158 return self.files[target] | 159 return self.files[target] |
| 159 | 160 |
| 160 | 161 |
| 161 def fake_git(*args, **kwargs): | 162 def fake_git(*args, **kwargs): |
| 162 return bot_update.call('git', *args, **kwargs) | 163 return bot_update.call('git', *args, **kwargs) |
| 163 | 164 |
| 164 | 165 |
| 166 class MockSubprocess(): |
| 167 def __init__(self): |
| 168 self.calls = [] |
| 169 |
| 170 def call(self, command): |
| 171 self.calls.append(command) |
| 172 return 0 |
| 173 |
| 174 |
| 165 class BotUpdateUnittests(unittest.TestCase): | 175 class BotUpdateUnittests(unittest.TestCase): |
| 166 def setUp(self): | 176 def setUp(self): |
| 167 self.filesystem = FakeFilesystem() | 177 self.filesystem = FakeFilesystem() |
| 168 self.call = MockedCall(self.filesystem) | 178 self.call = MockedCall(self.filesystem) |
| 169 self.gclient = MockedGclientSync(self.filesystem) | 179 self.gclient = MockedGclientSync(self.filesystem) |
| 170 self.call.expect(('gclient', 'sync')).returns(self.gclient) | 180 self.call.expect(('gclient', 'sync')).returns(self.gclient) |
| 171 self.old_call = getattr(bot_update, 'call') | 181 self.old_call = getattr(bot_update, 'call') |
| 172 self.params = copy.deepcopy(DEFAULT_PARAMS) | 182 self.params = copy.deepcopy(DEFAULT_PARAMS) |
| 173 setattr(bot_update, 'call', self.call) | 183 setattr(bot_update, 'call', self.call) |
| 174 setattr(bot_update, 'git', fake_git) | 184 setattr(bot_update, 'git', fake_git) |
| 175 | 185 |
| 176 self.old_os_cwd = os.getcwd | 186 self.old_os_cwd = os.getcwd |
| 177 setattr(os, 'getcwd', lambda: '/b/build/slave/foo/build') | 187 setattr(os, 'getcwd', lambda: '/b/build/slave/foo/build') |
| 178 | 188 |
| 179 setattr(bot_update, 'open', self.filesystem.open) | 189 setattr(bot_update, 'open', self.filesystem.open) |
| 180 self.old_codecs_open = codecs.open | 190 self.old_codecs_open = codecs.open |
| 181 setattr(codecs, 'open', self.filesystem.open) | 191 setattr(codecs, 'open', self.filesystem.open) |
| 182 | 192 |
| 193 self.subprocess = MockSubprocess() |
| 194 self.old_sp_call = subprocess.call |
| 195 setattr(subprocess, 'call', self.subprocess.call) |
| 196 |
| 183 def tearDown(self): | 197 def tearDown(self): |
| 184 setattr(bot_update, 'call', self.old_call) | 198 setattr(bot_update, 'call', self.old_call) |
| 185 setattr(os, 'getcwd', self.old_os_cwd) | 199 setattr(os, 'getcwd', self.old_os_cwd) |
| 186 delattr(bot_update, 'open') | 200 delattr(bot_update, 'open') |
| 187 setattr(codecs, 'open', self.old_codecs_open) | 201 setattr(codecs, 'open', self.old_codecs_open) |
| 202 delattr(subprocess, 'call') |
| 203 setattr(subprocess, 'call', self.old_sp_call) |
| 188 | 204 |
| 189 def testBasic(self): | 205 def testBasic(self): |
| 190 bot_update.ensure_checkout(**self.params) | 206 bot_update.ensure_checkout(**self.params) |
| 191 return self.call.records | 207 return self.call.records |
| 192 | 208 |
| 193 def testBasicShallow(self): | 209 def testBasicShallow(self): |
| 194 self.params['shallow'] = True | 210 self.params['shallow'] = True |
| 195 bot_update.ensure_checkout(**self.params) | 211 bot_update.ensure_checkout(**self.params) |
| 196 return self.call.records | 212 return self.call.records |
| 197 | 213 |
| 214 def testMaybeRemoveWinLockfile(self): |
| 215 git_lockfile_err = ''' |
| 216 fatal: Unable to create 'E:/b/c/b/win/src/.git/index.lock': File exists. |
| 217 ''' |
| 218 bot_update.maybe_remove_win_lockfile('win32', git_lockfile_err) |
| 219 self.assertEqual( |
| 220 self.subprocess.calls, |
| 221 [['cmd.exe', '/c', 'del', '/f', |
| 222 '/q', 'E:/b/c/b/win/src/.git/index.lock']]) |
| 223 |
| 198 | 224 |
| 199 if __name__ == '__main__': | 225 if __name__ == '__main__': |
| 200 unittest.main() | 226 unittest.main() |
| OLD | NEW |