Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: tests/presubmit_unittest.py

Issue 147035: Change RunPythonUnitTests() to run the unit tests in a separate process. (Closed)
Patch Set: Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« presubmit_canned_checks.py ('K') | « presubmit_support.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2006-2009 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 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py."""
7 7
8 import exceptions 8 import exceptions
9 import os 9 import os
10 import StringIO 10 import StringIO
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 """Tests presubmit.InputApi.""" 487 """Tests presubmit.InputApi."""
488 def testMembersChanged(self): 488 def testMembersChanged(self):
489 self.mox.ReplayAll() 489 self.mox.ReplayAll()
490 members = [ 490 members = [
491 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedSourceFiles', 491 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedSourceFiles',
492 'AffectedTextFiles', 492 'AffectedTextFiles',
493 'DEFAULT_BLACK_LIST', 'DEFAULT_WHITE_LIST', 493 'DEFAULT_BLACK_LIST', 'DEFAULT_WHITE_LIST',
494 'DepotToLocalPath', 'FilterSourceFile', 'LocalPaths', 494 'DepotToLocalPath', 'FilterSourceFile', 'LocalPaths',
495 'LocalToDepotPath', 495 'LocalToDepotPath',
496 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths', 496 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths',
497 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', 497 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', 'environ',
498 'is_committing', 'marshal', 'os_path', 'pickle', 'platform', 498 'is_committing', 'marshal', 'os_path', 'pickle', 'platform',
499 'python_executable',
499 're', 'subprocess', 'tempfile', 'traceback', 'unittest', 'urllib2', 500 're', 'subprocess', 'tempfile', 'traceback', 'unittest', 'urllib2',
500 'version', 501 'version',
501 ] 502 ]
502 # If this test fails, you should add the relevant test. 503 # If this test fails, you should add the relevant test.
503 self.compareMembers(presubmit.InputApi(None, './.', False), members) 504 self.compareMembers(presubmit.InputApi(None, './.', False), members)
504 505
505 def testDepotToLocalPath(self): 506 def testDepotToLocalPath(self):
506 presubmit.gclient.CaptureSVNInfo('svn://foo/smurf').AndReturn( 507 presubmit.gclient.CaptureSVNInfo('svn://foo/smurf').AndReturn(
507 {'Path': 'prout'}) 508 {'Path': 'prout'})
508 presubmit.gclient.CaptureSVNInfo('svn:/foo/notfound/burp').AndReturn({}) 509 presubmit.gclient.CaptureSVNInfo('svn:/foo/notfound/burp').AndReturn({})
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')], 969 change = presubmit.Change('foo', 'foo', self.fake_root_dir, [('M', 'AA')],
969 0, 0) 970 0, 0)
970 self.compareMembers(change, members) 971 self.compareMembers(change, members)
971 972
972 973
973 class CannedChecksUnittest(PresubmitTestsBase): 974 class CannedChecksUnittest(PresubmitTestsBase):
974 """Tests presubmit_canned_checks.py.""" 975 """Tests presubmit_canned_checks.py."""
975 976
976 def setUp(self): 977 def setUp(self):
977 PresubmitTestsBase.setUp(self) 978 PresubmitTestsBase.setUp(self)
978 self.mox.StubOutWithMock(presubmit_canned_checks,
979 '_RunPythonUnitTests_LoadTests')
980 979
981 def MockInputApi(self, change, committing): 980 def MockInputApi(self, change, committing):
982 input_api = self.mox.CreateMock(presubmit.InputApi) 981 input_api = self.mox.CreateMock(presubmit.InputApi)
983 input_api.cStringIO = presubmit.cStringIO 982 input_api.cStringIO = presubmit.cStringIO
984 input_api.re = presubmit.re 983 input_api.re = presubmit.re
985 input_api.traceback = presubmit.traceback 984 input_api.traceback = presubmit.traceback
986 input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2) 985 input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2)
987 input_api.unittest = unittest 986 input_api.unittest = unittest
987 input_api.subprocess = self.mox.CreateMock(presubmit.subprocess)
988
988 input_api.change = change 989 input_api.change = change
989 input_api.is_committing = committing 990 input_api.is_committing = committing
991 input_api.python_executable = 'pyyyyython'
990 return input_api 992 return input_api
991 993
992 def testMembersChanged(self): 994 def testMembersChanged(self):
993 self.mox.ReplayAll() 995 self.mox.ReplayAll()
994 members = [ 996 members = [
995 'CheckChangeHasBugField', 'CheckChangeHasDescription', 997 'CheckChangeHasBugField', 'CheckChangeHasDescription',
996 'CheckChangeHasNoStrayWhitespace', 998 'CheckChangeHasNoStrayWhitespace',
997 'CheckChangeHasOnlyOneEol', 'CheckChangeHasNoCR', 999 'CheckChangeHasOnlyOneEol', 'CheckChangeHasNoCR',
998 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs', 1000 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs',
999 'CheckChangeHasQaField', 'CheckChangeHasTestedField', 1001 'CheckChangeHasQaField', 'CheckChangeHasTestedField',
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 1266
1265 def testRunPythonUnitTestsNoTest(self): 1267 def testRunPythonUnitTestsNoTest(self):
1266 input_api = self.MockInputApi(None, False) 1268 input_api = self.MockInputApi(None, False)
1267 self.mox.ReplayAll() 1269 self.mox.ReplayAll()
1268 results = presubmit_canned_checks.RunPythonUnitTests( 1270 results = presubmit_canned_checks.RunPythonUnitTests(
1269 input_api, presubmit.OutputApi, []) 1271 input_api, presubmit.OutputApi, [])
1270 self.assertEquals(results, []) 1272 self.assertEquals(results, [])
1271 1273
1272 def testRunPythonUnitTestsNonExistentUpload(self): 1274 def testRunPythonUnitTestsNonExistentUpload(self):
1273 input_api = self.MockInputApi(None, False) 1275 input_api = self.MockInputApi(None, False)
1274 presubmit_canned_checks._RunPythonUnitTests_LoadTests( 1276 process = self.mox.CreateMockAnything()
1275 input_api, '_non_existent_module').AndRaise( 1277 process.returncode = 2
1276 exceptions.ImportError('Blehh')) 1278 input_api.subprocess.Popen(
1279 ['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None,
1280 stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
1281 stdout=presubmit.subprocess.PIPE).AndReturn(process)
1282 process.communicate().AndReturn(
1283 ('', 'pyyython: module _non_existent_module not found'))
1277 self.mox.ReplayAll() 1284 self.mox.ReplayAll()
1278 1285
1279 results = presubmit_canned_checks.RunPythonUnitTests( 1286 results = presubmit_canned_checks.RunPythonUnitTests(
1280 input_api, presubmit.OutputApi, ['_non_existent_module']) 1287 input_api, presubmit.OutputApi, ['_non_existent_module'])
1281 self.assertEquals(len(results), 1) 1288 self.assertEquals(len(results), 1)
1282 self.assertEquals(results[0].__class__, 1289 self.assertEquals(results[0].__class__,
1283 presubmit.OutputApi.PresubmitNotifyResult) 1290 presubmit.OutputApi.PresubmitNotifyResult)
1284 1291
1285 def testRunPythonUnitTestsNonExistentCommitting(self): 1292 def testRunPythonUnitTestsNonExistentCommitting(self):
1286 input_api = self.MockInputApi(None, True) 1293 input_api = self.MockInputApi(None, True)
1287 presubmit_canned_checks._RunPythonUnitTests_LoadTests( 1294 process = self.mox.CreateMockAnything()
1288 input_api, '_non_existent_module').AndRaise( 1295 process.returncode = 2
1289 exceptions.ImportError('Blehh')) 1296 input_api.subprocess.Popen(
1297 ['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None,
1298 stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
1299 stdout=presubmit.subprocess.PIPE).AndReturn(process)
1300 process.communicate().AndReturn(
1301 ('', 'pyyython: module _non_existent_module not found'))
1290 self.mox.ReplayAll() 1302 self.mox.ReplayAll()
1291 results = presubmit_canned_checks.RunPythonUnitTests( 1303 results = presubmit_canned_checks.RunPythonUnitTests(
1292 input_api, presubmit.OutputApi, ['_non_existent_module']) 1304 input_api, presubmit.OutputApi, ['_non_existent_module'])
1293 self.assertEquals(len(results), 1) 1305 self.assertEquals(len(results), 1)
1294 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) 1306 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError)
1295 1307
1296 def testRunPythonUnitTestsEmptyUpload(self):
1297 input_api = self.MockInputApi(None, False)
1298 test_module = self.mox.CreateMockAnything()
1299 presubmit_canned_checks._RunPythonUnitTests_LoadTests(
1300 input_api, 'test_module').AndReturn([])
1301 self.mox.ReplayAll()
1302
1303 results = presubmit_canned_checks.RunPythonUnitTests(
1304 input_api, presubmit.OutputApi, ['test_module'])
1305 self.assertEquals(results, [])
1306
1307 def testRunPythonUnitTestsEmptyCommitting(self):
1308 input_api = self.MockInputApi(None, True)
1309 test_module = self.mox.CreateMockAnything()
1310 presubmit_canned_checks._RunPythonUnitTests_LoadTests(
1311 input_api, 'test_module').AndReturn([])
1312 self.mox.ReplayAll()
1313
1314 results = presubmit_canned_checks.RunPythonUnitTests(
1315 input_api, presubmit.OutputApi, ['test_module'])
1316 self.assertEquals(results, [])
1317
1318 def testRunPythonUnitTestsFailureUpload(self): 1308 def testRunPythonUnitTestsFailureUpload(self):
1319 input_api = self.MockInputApi(None, False) 1309 input_api = self.MockInputApi(None, False)
1320 input_api.unittest = self.mox.CreateMock(unittest) 1310 input_api.unittest = self.mox.CreateMock(unittest)
1321 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) 1311 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO)
1322 test = self.mox.CreateMockAnything() 1312 process = self.mox.CreateMockAnything()
1323 presubmit_canned_checks._RunPythonUnitTests_LoadTests( 1313 process.returncode = -1
1324 input_api, 'test_module').AndReturn([test]) 1314 input_api.subprocess.Popen(
1325 runner = self.mox.CreateMockAnything() 1315 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None,
1326 buffer = self.mox.CreateMockAnything() 1316 stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
1327 input_api.cStringIO.StringIO().AndReturn(buffer) 1317 stdout=presubmit.subprocess.PIPE).AndReturn(process)
1328 buffer.getvalue().AndReturn('BOO HOO!') 1318 process.communicate().AndReturn(('BOO HOO!', ''))
1329 input_api.unittest.TextTestRunner(stream=buffer, verbosity=0
1330 ).AndReturn(runner)
1331 suite = self.mox.CreateMockAnything()
1332 input_api.unittest.TestSuite([test]).AndReturn(suite)
1333 test_result = self.mox.CreateMockAnything()
1334 runner.run(suite).AndReturn(test_result)
1335 test_result.wasSuccessful().AndReturn(False)
1336 test_result.failures = [None, None]
1337 test_result.errors = [None, None, None]
1338 self.mox.ReplayAll() 1319 self.mox.ReplayAll()
1339 1320
1340 results = presubmit_canned_checks.RunPythonUnitTests( 1321 results = presubmit_canned_checks.RunPythonUnitTests(
1341 input_api, presubmit.OutputApi, ['test_module']) 1322 input_api, presubmit.OutputApi, ['test_module'])
1342 self.assertEquals(len(results), 1) 1323 self.assertEquals(len(results), 1)
1343 self.assertEquals(results[0].__class__, 1324 self.assertEquals(results[0].__class__,
1344 presubmit.OutputApi.PresubmitNotifyResult) 1325 presubmit.OutputApi.PresubmitNotifyResult)
1345 self.assertEquals(results[0]._long_text, 'BOO HOO!') 1326 self.assertEquals(results[0]._long_text,
1327 "Test 'test_module' failed with code -1\nBOO HOO!")
1346 1328
1347 def testRunPythonUnitTestsFailureCommitting(self): 1329 def testRunPythonUnitTestsFailureCommitting(self):
1348 input_api = self.MockInputApi(None, True) 1330 input_api = self.MockInputApi(None, True)
1349 input_api.unittest = self.mox.CreateMock(unittest) 1331 process = self.mox.CreateMockAnything()
1350 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) 1332 process.returncode = 1
1351 test = self.mox.CreateMockAnything() 1333 input_api.subprocess.Popen(
1352 presubmit_canned_checks._RunPythonUnitTests_LoadTests( 1334 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None,
1353 input_api, 'test_module').AndReturn([test]) 1335 stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
1354 runner = self.mox.CreateMockAnything() 1336 stdout=presubmit.subprocess.PIPE).AndReturn(process)
1355 buffer = self.mox.CreateMockAnything() 1337 process.communicate().AndReturn(('BOO HOO!', ''))
1356 input_api.cStringIO.StringIO().AndReturn(buffer)
1357 buffer.getvalue().AndReturn('BOO HOO!')
1358 input_api.unittest.TextTestRunner(stream=buffer, verbosity=0
1359 ).AndReturn(runner)
1360 suite = self.mox.CreateMockAnything()
1361 input_api.unittest.TestSuite([test]).AndReturn(suite)
1362 test_result = self.mox.CreateMockAnything()
1363 runner.run(suite).AndReturn(test_result)
1364 test_result.wasSuccessful().AndReturn(False)
1365 test_result.failures = [None, None]
1366 test_result.errors = [None, None, None]
1367 self.mox.ReplayAll() 1338 self.mox.ReplayAll()
1368 1339
1369 results = presubmit_canned_checks.RunPythonUnitTests( 1340 results = presubmit_canned_checks.RunPythonUnitTests(
1370 input_api, presubmit.OutputApi, ['test_module']) 1341 input_api, presubmit.OutputApi, ['test_module'])
1371 self.assertEquals(len(results), 1) 1342 self.assertEquals(len(results), 1)
1372 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) 1343 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError)
1373 self.assertEquals(results[0]._long_text, 'BOO HOO!') 1344 self.assertEquals(results[0]._long_text,
1345 "Test 'test_module' failed with code 1\nBOO HOO!")
1374 1346
1375 def testRunPythonUnitTestsSuccess(self): 1347 def testRunPythonUnitTestsSuccess(self):
1376 input_api = self.MockInputApi(None, False) 1348 input_api = self.MockInputApi(None, False)
1377 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) 1349 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO)
1378 input_api.unittest = self.mox.CreateMock(unittest) 1350 input_api.unittest = self.mox.CreateMock(unittest)
1379 test = self.mox.CreateMockAnything() 1351 process = self.mox.CreateMockAnything()
1380 presubmit_canned_checks._RunPythonUnitTests_LoadTests( 1352 process.returncode = 0
1381 input_api, 'test_module').AndReturn([test]) 1353 input_api.subprocess.Popen(
1382 runner = self.mox.CreateMockAnything() 1354 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None,
1383 buffer = self.mox.CreateMockAnything() 1355 stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
1384 input_api.cStringIO.StringIO().AndReturn(buffer) 1356 stdout=presubmit.subprocess.PIPE).AndReturn(process)
1385 input_api.unittest.TextTestRunner(stream=buffer, verbosity=0 1357 process.communicate().AndReturn(('', ''))
1386 ).AndReturn(runner)
1387 suite = self.mox.CreateMockAnything()
1388 input_api.unittest.TestSuite([test]).AndReturn(suite)
1389 test_result = self.mox.CreateMockAnything()
1390 runner.run(suite).AndReturn(test_result)
1391 test_result.wasSuccessful().AndReturn(True)
1392 test_result.failures = 0
1393 test_result.errors = 0
1394 self.mox.ReplayAll() 1358 self.mox.ReplayAll()
1395 1359
1396 results = presubmit_canned_checks.RunPythonUnitTests( 1360 results = presubmit_canned_checks.RunPythonUnitTests(
1397 input_api, presubmit.OutputApi, ['test_module']) 1361 input_api, presubmit.OutputApi, ['test_module'])
1398 self.assertEquals(len(results), 0) 1362 self.assertEquals(len(results), 0)
1399 1363
1400 1364
1401 if __name__ == '__main__': 1365 if __name__ == '__main__':
1402 unittest.main() 1366 unittest.main()
OLDNEW
« presubmit_canned_checks.py ('K') | « presubmit_support.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698