OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 """Smoke tests for gclient.py. | 6 """Smoke tests for gclient.py. |
7 | 7 |
8 Shell out 'gclient' and run basic conformance tests. | 8 Shell out 'gclient' and run basic conformance tests. |
9 | 9 |
10 This test assumes GClientSmokeBase.URL_BASE is valid. | 10 This test assumes GClientSmokeBase.URL_BASE is valid. |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 p = join(self.root_dir, '.gclient') | 198 p = join(self.root_dir, '.gclient') |
199 def test(cmd, expected): | 199 def test(cmd, expected): |
200 if os.path.exists(p): | 200 if os.path.exists(p): |
201 os.remove(p) | 201 os.remove(p) |
202 results = self.gclient(cmd) | 202 results = self.gclient(cmd) |
203 self.check(('', '', 0), results) | 203 self.check(('', '', 0), results) |
204 self.checkString(expected, open(p, 'rU').read()) | 204 self.checkString(expected, open(p, 'rU').read()) |
205 | 205 |
206 test(['config', self.svn_base + 'trunk/src/'], | 206 test(['config', self.svn_base + 'trunk/src/'], |
207 ('solutions = [\n' | 207 ('solutions = [\n' |
208 ' {\n' | 208 ' { "name" : "src",\n' |
209 ' "name" : "src",\n' | |
210 ' "url" : "%strunk/src",\n' | 209 ' "url" : "%strunk/src",\n' |
211 ' "deps_file" : "DEPS",\n' | 210 ' "deps_file" : "DEPS",\n' |
212 ' "managed" : False,\n' | 211 ' "managed" : True,\n' |
213 ' "custom_deps" : {},\n' | 212 ' "custom_deps" : {\n' |
| 213 ' },\n' |
| 214 ' "safesync_url": "",\n' |
214 ' },\n' | 215 ' },\n' |
215 ']\n' | 216 ']\n' |
216 'cache_dir = None\n') % self.svn_base) | 217 'cache_dir = None\n') % self.svn_base) |
217 | 218 |
218 test(['config', self.git_base + 'repo_1', '--name', 'src'], | 219 test(['config', self.git_base + 'repo_1', '--name', 'src'], |
219 ('solutions = [\n' | 220 ('solutions = [\n' |
220 ' {\n' | 221 ' { "name" : "src",\n' |
221 ' "name" : "src",\n' | |
222 ' "url" : "%srepo_1",\n' | 222 ' "url" : "%srepo_1",\n' |
223 ' "deps_file" : "DEPS",\n' | 223 ' "deps_file" : "DEPS",\n' |
224 ' "managed" : False,\n' | 224 ' "managed" : True,\n' |
225 ' "custom_deps" : {},\n' | 225 ' "custom_deps" : {\n' |
| 226 ' },\n' |
| 227 ' "safesync_url": "",\n' |
226 ' },\n' | 228 ' },\n' |
227 ']\n' | 229 ']\n' |
228 'cache_dir = None\n') % self.git_base) | 230 'cache_dir = None\n') % self.git_base) |
229 | 231 |
230 test(['config', 'foo', '--deps', 'blah'], | 232 test(['config', 'foo', 'faa'], |
231 'solutions = [\n' | 233 'solutions = [\n' |
232 ' {\n' | 234 ' { "name" : "foo",\n' |
233 ' "name" : "foo",\n' | |
234 ' "url" : "foo",\n' | 235 ' "url" : "foo",\n' |
235 ' "deps_file" : "blah",\n' | 236 ' "deps_file" : "DEPS",\n' |
236 ' "managed" : False,\n' | 237 ' "managed" : True,\n' |
237 ' "custom_deps" : {},\n' | 238 ' "custom_deps" : {\n' |
| 239 ' },\n' |
| 240 ' "safesync_url": "faa",\n' |
238 ' },\n' | 241 ' },\n' |
239 ']\n' | 242 ']\n' |
240 'cache_dir = None\n') | 243 'cache_dir = None\n') |
| 244 |
| 245 test(['config', 'foo', '--deps', 'blah'], |
| 246 'solutions = [\n' |
| 247 ' { "name" : "foo",\n' |
| 248 ' "url" : "foo",\n' |
| 249 ' "deps_file" : "blah",\n' |
| 250 ' "managed" : True,\n' |
| 251 ' "custom_deps" : {\n' |
| 252 ' },\n' |
| 253 ' "safesync_url": "",\n' |
| 254 ' },\n' |
| 255 ']\n' |
| 256 'cache_dir = None\n') |
241 | 257 |
242 test(['config', '--spec', '["blah blah"]'], '["blah blah"]') | 258 test(['config', '--spec', '["blah blah"]'], '["blah blah"]') |
243 | 259 |
244 os.remove(p) | 260 os.remove(p) |
245 results = self.gclient(['config', 'foo', 'faa', 'fuu']) | 261 results = self.gclient(['config', 'foo', 'faa', 'fuu']) |
246 err = ('Usage: gclient.py config [options] [url]\n\n' | 262 err = ('Usage: gclient.py config [options] [url] [safesync url]\n\n' |
247 'gclient.py: error: Inconsistent arguments. Use either --spec or one' | 263 'gclient.py: error: Inconsistent arguments. Use either --spec or one' |
248 ' or 2 args\n') | 264 ' or 2 args\n') |
249 self.check(('', err, 2), results) | 265 self.check(('', err, 2), results) |
250 self.assertFalse(os.path.exists(join(self.root_dir, '.gclient'))) | 266 self.assertFalse(os.path.exists(join(self.root_dir, '.gclient'))) |
251 | 267 |
252 def testSolutionNone(self): | 268 def testSolutionNone(self): |
253 results = self.gclient(['config', '--spec', | 269 results = self.gclient(['config', '--spec', |
254 'solutions=[{"name": "./", "url": None}]']) | 270 'solutions=[{"name": "./", "url": None}]']) |
255 self.check(('', '', 0), results) | 271 self.check(('', '', 0), results) |
256 results = self.gclient(['sync']) | 272 results = self.gclient(['sync']) |
(...skipping 23 matching lines...) Expand all Loading... |
280 os.mkdir(src) | 296 os.mkdir(src) |
281 res = self.gclient(['status', '--jobs', '1'], src) | 297 res = self.gclient(['status', '--jobs', '1'], src) |
282 self.checkBlock(res[0], [('running', deps), ('running', src)]) | 298 self.checkBlock(res[0], [('running', deps), ('running', src)]) |
283 | 299 |
284 | 300 |
285 class GClientSmokeGIT(GClientSmokeBase): | 301 class GClientSmokeGIT(GClientSmokeBase): |
286 def setUp(self): | 302 def setUp(self): |
287 super(GClientSmokeGIT, self).setUp() | 303 super(GClientSmokeGIT, self).setUp() |
288 self.enabled = self.FAKE_REPOS.set_up_git() | 304 self.enabled = self.FAKE_REPOS.set_up_git() |
289 | 305 |
290 def testSyncManaged(self): | 306 def testSync(self): |
291 if not self.enabled: | 307 if not self.enabled: |
292 return | 308 return |
293 self.gclient([ | 309 # TODO(maruel): safesync. |
294 'config', self.git_base + 'repo_1', '--name', 'src', '--managed']) | 310 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
295 # Test unversioned checkout. | 311 # Test unversioned checkout. |
296 self.parseGclient( | 312 self.parseGclient( |
297 ['sync', '--deps', 'mac', '--jobs', '8'], | 313 ['sync', '--deps', 'mac', '--jobs', '1'], |
298 ['running', 'running']) | 314 ['running', 'running']) |
299 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must | 315 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must |
300 # add sync parsing to get the list of updated files. | 316 # add sync parsing to get the list of updated files. |
301 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 317 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
302 ('repo_2@1', 'src/repo2'), | 318 ('repo_2@1', 'src/repo2'), |
303 ('repo_3@2', 'src/repo2/repo_renamed')) | 319 ('repo_3@2', 'src/repo2/repo_renamed')) |
304 tree['src/git_hooked1'] = 'git_hooked1' | 320 tree['src/git_hooked1'] = 'git_hooked1' |
305 tree['src/git_hooked2'] = 'git_hooked2' | 321 tree['src/git_hooked2'] = 'git_hooked2' |
306 self.assertTree(tree) | 322 self.assertTree(tree) |
307 | 323 |
308 # Manually remove git_hooked1 before synching to make sure it's not | 324 # Manually remove git_hooked1 before synching to make sure it's not |
309 # recreated. | 325 # recreated. |
310 os.remove(join(self.root_dir, 'src', 'git_hooked1')) | 326 os.remove(join(self.root_dir, 'src', 'git_hooked1')) |
311 | 327 |
312 # Test incremental versioned sync: sync backward. | 328 # Test incremental versioned sync: sync backward. |
313 self.parseGclient( | 329 self.parseGclient( |
314 ['sync', '--jobs', '1', '--revision', | 330 ['sync', '--jobs', '1', '--revision', |
315 'src@' + self.githash('repo_1', 1), '--jobs', '1', | 331 'src@' + self.githash('repo_1', 1), |
316 '--deps', 'mac', '--delete_unversioned_trees'], | 332 '--deps', 'mac', '--delete_unversioned_trees'], |
317 ['deleting']) | 333 ['deleting']) |
318 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 334 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
319 ('repo_2@2', 'src/repo2'), | 335 ('repo_2@2', 'src/repo2'), |
320 ('repo_3@1', 'src/repo2/repo3'), | 336 ('repo_3@1', 'src/repo2/repo3'), |
321 ('repo_4@2', 'src/repo4')) | 337 ('repo_4@2', 'src/repo4')) |
322 tree['src/git_hooked2'] = 'git_hooked2' | 338 tree['src/git_hooked2'] = 'git_hooked2' |
323 self.assertTree(tree) | 339 self.assertTree(tree) |
324 # Test incremental sync: delete-unversioned_trees isn't there. | 340 # Test incremental sync: delete-unversioned_trees isn't there. |
325 self.parseGclient( | 341 self.parseGclient( |
326 ['sync', '--deps', 'mac', '--jobs', '8'], | 342 ['sync', '--deps', 'mac', '--jobs', '1'], |
327 ['running', 'running']) | 343 ['running', 'running']) |
328 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 344 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
329 ('repo_2@1', 'src/repo2'), | 345 ('repo_2@1', 'src/repo2'), |
330 ('repo_3@1', 'src/repo2/repo3'), | 346 ('repo_3@1', 'src/repo2/repo3'), |
331 ('repo_3@2', 'src/repo2/repo_renamed'), | 347 ('repo_3@2', 'src/repo2/repo_renamed'), |
332 ('repo_4@2', 'src/repo4')) | 348 ('repo_4@2', 'src/repo4')) |
333 tree['src/git_hooked1'] = 'git_hooked1' | 349 tree['src/git_hooked1'] = 'git_hooked1' |
334 tree['src/git_hooked2'] = 'git_hooked2' | 350 tree['src/git_hooked2'] = 'git_hooked2' |
335 self.assertTree(tree) | 351 self.assertTree(tree) |
336 | 352 |
(...skipping 23 matching lines...) Expand all Loading... |
360 self.parseGclient( | 376 self.parseGclient( |
361 ['sync', '--deps', 'mac', '--jobs', '1', | 377 ['sync', '--deps', 'mac', '--jobs', '1', |
362 '--revision', self.githash('repo_1', 1)], | 378 '--revision', self.githash('repo_1', 1)], |
363 []) | 379 []) |
364 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 380 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
365 ('repo_2@2', 'src/repo2'), | 381 ('repo_2@2', 'src/repo2'), |
366 ('repo_3@1', 'src/repo2/repo3'), | 382 ('repo_3@1', 'src/repo2/repo3'), |
367 ('repo_4@2', 'src/repo4')) | 383 ('repo_4@2', 'src/repo4')) |
368 self.assertTree(tree) | 384 self.assertTree(tree) |
369 | 385 |
| 386 def testSyncJobs(self): |
| 387 if not self.enabled: |
| 388 return |
| 389 # TODO(maruel): safesync. |
| 390 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
| 391 # Test unversioned checkout. |
| 392 self.parseGclient( |
| 393 ['sync', '--deps', 'mac', '--jobs', '8'], |
| 394 ['running', 'running'], |
| 395 untangle=True) |
| 396 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must |
| 397 # add sync parsing to get the list of updated files. |
| 398 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
| 399 ('repo_2@1', 'src/repo2'), |
| 400 ('repo_3@2', 'src/repo2/repo_renamed')) |
| 401 tree['src/git_hooked1'] = 'git_hooked1' |
| 402 tree['src/git_hooked2'] = 'git_hooked2' |
| 403 self.assertTree(tree) |
| 404 |
| 405 # Manually remove git_hooked1 before synching to make sure it's not |
| 406 # recreated. |
| 407 os.remove(join(self.root_dir, 'src', 'git_hooked1')) |
| 408 |
| 409 # Test incremental versioned sync: sync backward. |
| 410 # Use --jobs 1 otherwise the order is not deterministic. |
| 411 self.parseGclient( |
| 412 ['sync', '--revision', 'src@' + self.githash('repo_1', 1), |
| 413 '--deps', 'mac', '--delete_unversioned_trees', '--jobs', '1'], |
| 414 ['deleting'], |
| 415 untangle=True) |
| 416 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
| 417 ('repo_2@2', 'src/repo2'), |
| 418 ('repo_3@1', 'src/repo2/repo3'), |
| 419 ('repo_4@2', 'src/repo4')) |
| 420 tree['src/git_hooked2'] = 'git_hooked2' |
| 421 self.assertTree(tree) |
| 422 # Test incremental sync: delete-unversioned_trees isn't there. |
| 423 self.parseGclient( |
| 424 ['sync', '--deps', 'mac', '--jobs', '8'], |
| 425 ['running', 'running'], |
| 426 untangle=True) |
| 427 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
| 428 ('repo_2@1', 'src/repo2'), |
| 429 ('repo_3@1', 'src/repo2/repo3'), |
| 430 ('repo_3@2', 'src/repo2/repo_renamed'), |
| 431 ('repo_4@2', 'src/repo4')) |
| 432 tree['src/git_hooked1'] = 'git_hooked1' |
| 433 tree['src/git_hooked2'] = 'git_hooked2' |
| 434 self.assertTree(tree) |
| 435 |
370 def testRunHooks(self): | 436 def testRunHooks(self): |
371 if not self.enabled: | 437 if not self.enabled: |
372 return | 438 return |
373 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 439 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
374 self.gclient(['sync', '--deps', 'mac']) | 440 self.gclient(['sync', '--deps', 'mac']) |
375 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 441 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
376 ('repo_2@1', 'src/repo2'), | 442 ('repo_2@1', 'src/repo2'), |
377 ('repo_3@2', 'src/repo2/repo_renamed')) | 443 ('repo_3@2', 'src/repo2/repo_renamed')) |
378 tree['src/git_hooked1'] = 'git_hooked1' | 444 tree['src/git_hooked1'] = 'git_hooked1' |
379 tree['src/git_hooked2'] = 'git_hooked2' | 445 tree['src/git_hooked2'] = 'git_hooked2' |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 | 906 |
841 if '-c' in sys.argv: | 907 if '-c' in sys.argv: |
842 COVERAGE = True | 908 COVERAGE = True |
843 sys.argv.remove('-c') | 909 sys.argv.remove('-c') |
844 if os.path.exists('.coverage'): | 910 if os.path.exists('.coverage'): |
845 os.remove('.coverage') | 911 os.remove('.coverage') |
846 os.environ['COVERAGE_FILE'] = os.path.join( | 912 os.environ['COVERAGE_FILE'] = os.path.join( |
847 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 913 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), |
848 '.coverage') | 914 '.coverage') |
849 unittest.main() | 915 unittest.main() |
OLD | NEW |