Use check_call() instead of Popen() for canned checks.

This removes a significant amount of code.

R=dpranke@chromium.org
BUG=
TEST=

Review URL: http://codereview.chromium.org/6693100

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@80616 0039d316-1c4b-4281-b951-d872f2087c98
experimental/szager/collated-output
maruel@chromium.org 14 years ago
parent 84f4fe3755
commit 0e766050d2

@ -448,11 +448,6 @@ def RunUnitTests(input_api, output_api, unit_tests, verbose=False):
else: else:
message_type = output_api.PresubmitPromptWarning message_type = output_api.PresubmitPromptWarning
if verbose:
pipe = None
else:
pipe = input_api.subprocess.PIPE
results = [] results = []
for unit_test in unit_tests: for unit_test in unit_tests:
cmd = [] cmd = []
@ -463,15 +458,13 @@ def RunUnitTests(input_api, output_api, unit_tests, verbose=False):
if verbose: if verbose:
print('Running %s' % unit_test) print('Running %s' % unit_test)
try: try:
proc = input_api.subprocess.Popen( if verbose:
cmd, cwd=input_api.PresubmitLocalPath(), stdout=pipe, stderr=pipe) input_api.subprocess.check_call(cmd, cwd=input_api.PresubmitLocalPath())
out = '\n'.join(filter(None, proc.communicate())) else:
if proc.returncode: input_api.subprocess.check_output(
results.append(message_type( cmd, cwd=input_api.PresubmitLocalPath())
'%s failed with return code %d\n%s' % ( except (OSError, input_api.subprocess.CalledProcessError), e:
unit_test, proc.returncode, out))) results.append(message_type('%s failed!\n%s' % (unit_test, e)))
except (OSError, input_api.subprocess.CalledProcessError):
results.append(message_type('%s failed' % unit_test))
return results return results
@ -486,7 +479,7 @@ def RunPythonUnitTests(input_api, output_api, unit_tests):
message_type = output_api.PresubmitError message_type = output_api.PresubmitError
else: else:
message_type = output_api.PresubmitNotifyResult message_type = output_api.PresubmitNotifyResult
outputs = [] results = []
for unit_test in unit_tests: for unit_test in unit_tests:
# Run the unit tests out of process. This is because some unit tests # Run the unit tests out of process. This is because some unit tests
# stub out base libraries and don't clean up their mess. It's too easy to # stub out base libraries and don't clean up their mess. It's too easy to
@ -510,26 +503,12 @@ def RunPythonUnitTests(input_api, output_api, unit_tests):
if env.get('PYTHONPATH'): if env.get('PYTHONPATH'):
backpath.append(env.get('PYTHONPATH')) backpath.append(env.get('PYTHONPATH'))
env['PYTHONPATH'] = input_api.os_path.pathsep.join((backpath)) env['PYTHONPATH'] = input_api.os_path.pathsep.join((backpath))
subproc = input_api.subprocess.Popen( cmd = [input_api.python_executable, '-m', '%s' % unit_test]
[ try:
input_api.python_executable, input_api.subprocess.check_output(cmd, cwd=cwd, env=env)
'-m', except (OSError, input_api.subprocess.CalledProcessError), e:
'%s' % unit_test results.append(message_type('%s failed!\n%s' % (unit_test_name, e)))
], return results
cwd=cwd,
env=env,
stdin=input_api.subprocess.PIPE,
stdout=input_api.subprocess.PIPE,
stderr=input_api.subprocess.PIPE)
stdoutdata, stderrdata = subproc.communicate()
# Discard the output if returncode == 0
if subproc.returncode:
outputs.append('Test \'%s\' failed with code %d\n%s\n%s\n' % (
unit_test_name, subproc.returncode, stdoutdata, stderrdata))
if outputs:
return [message_type('%d unit tests failed.' % len(outputs),
long_text='\n'.join(outputs))]
return []
def _FetchAllFiles(input_api, white_list, black_list): def _FetchAllFiles(input_api, white_list, black_list):

@ -6,7 +6,7 @@
"""Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" """Unit tests for presubmit_support.py and presubmit_canned_checks.py."""
# pylint is too confused. # pylint is too confused.
# pylint: disable=E1101,E1103,W0212,W0403 # pylint: disable=E1101,E1103,R0201,W0212,W0403
import StringIO import StringIO
import sys import sys
@ -1246,6 +1246,10 @@ class CannedChecksUnittest(PresubmitTestsBase):
input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2) input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2)
input_api.unittest = unittest input_api.unittest = unittest
input_api.subprocess = self.mox.CreateMock(presubmit.subprocess) input_api.subprocess = self.mox.CreateMock(presubmit.subprocess)
class fake_CalledProcessError(Exception):
def __str__(self):
return 'foo'
input_api.subprocess.CalledProcessError = fake_CalledProcessError
input_api.change = change input_api.change = change
input_api.host_url = 'http://localhost' input_api.host_url = 'http://localhost'
@ -1731,14 +1735,10 @@ class CannedChecksUnittest(PresubmitTestsBase):
def testRunPythonUnitTestsNonExistentUpload(self): def testRunPythonUnitTestsNonExistentUpload(self):
input_api = self.MockInputApi(None, False) input_api = self.MockInputApi(None, False)
process = self.mox.CreateMockAnything() input_api.subprocess.check_output(
process.returncode = 2 ['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None
input_api.subprocess.Popen( ).AndRaise(
['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None, input_api.subprocess.CalledProcessError())
stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
stdout=presubmit.subprocess.PIPE).AndReturn(process)
process.communicate().AndReturn(
('', 'pyyython: module _non_existent_module not found'))
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunPythonUnitTests( results = presubmit_canned_checks.RunPythonUnitTests(
@ -1749,15 +1749,12 @@ class CannedChecksUnittest(PresubmitTestsBase):
def testRunPythonUnitTestsNonExistentCommitting(self): def testRunPythonUnitTestsNonExistentCommitting(self):
input_api = self.MockInputApi(None, True) input_api = self.MockInputApi(None, True)
process = self.mox.CreateMockAnything() input_api.subprocess.check_output(
process.returncode = 2 ['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None
input_api.subprocess.Popen( ).AndRaise(
['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None, input_api.subprocess.CalledProcessError())
stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
stdout=presubmit.subprocess.PIPE).AndReturn(process)
process.communicate().AndReturn(
('', 'pyyython: module _non_existent_module not found'))
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunPythonUnitTests( results = presubmit_canned_checks.RunPythonUnitTests(
input_api, presubmit.OutputApi, ['_non_existent_module']) input_api, presubmit.OutputApi, ['_non_existent_module'])
self.assertEquals(len(results), 1) self.assertEquals(len(results), 1)
@ -1767,13 +1764,9 @@ class CannedChecksUnittest(PresubmitTestsBase):
input_api = self.MockInputApi(None, False) input_api = self.MockInputApi(None, False)
input_api.unittest = self.mox.CreateMock(unittest) input_api.unittest = self.mox.CreateMock(unittest)
input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO)
process = self.mox.CreateMockAnything() input_api.subprocess.check_output(
process.returncode = -1 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None).AndRaise(
input_api.subprocess.Popen( input_api.subprocess.CalledProcessError())
['pyyyyython', '-m', 'test_module'], cwd=None, env=None,
stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
stdout=presubmit.subprocess.PIPE).AndReturn(process)
process.communicate().AndReturn(('BOO HOO!', ''))
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunPythonUnitTests( results = presubmit_canned_checks.RunPythonUnitTests(
@ -1781,38 +1774,27 @@ class CannedChecksUnittest(PresubmitTestsBase):
self.assertEquals(len(results), 1) self.assertEquals(len(results), 1)
self.assertEquals(results[0].__class__, self.assertEquals(results[0].__class__,
presubmit.OutputApi.PresubmitNotifyResult) presubmit.OutputApi.PresubmitNotifyResult)
self.assertEquals(results[0]._long_text, self.assertEquals('test_module failed!\nfoo', results[0]._message)
"Test 'test_module' failed with code -1\nBOO HOO!")
def testRunPythonUnitTestsFailureCommitting(self): def testRunPythonUnitTestsFailureCommitting(self):
input_api = self.MockInputApi(None, True) input_api = self.MockInputApi(None, True)
process = self.mox.CreateMockAnything() input_api.subprocess.check_output(
process.returncode = 1 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None).AndRaise(
input_api.subprocess.Popen( input_api.subprocess.CalledProcessError())
['pyyyyython', '-m', 'test_module'], cwd=None, env=None,
stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
stdout=presubmit.subprocess.PIPE).AndReturn(process)
process.communicate().AndReturn(('BOO HOO!', ''))
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunPythonUnitTests( results = presubmit_canned_checks.RunPythonUnitTests(
input_api, presubmit.OutputApi, ['test_module']) input_api, presubmit.OutputApi, ['test_module'])
self.assertEquals(len(results), 1) self.assertEquals(len(results), 1)
self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError)
self.assertEquals(results[0]._long_text, self.assertEquals('test_module failed!\nfoo', results[0]._message)
"Test 'test_module' failed with code 1\nBOO HOO!")
def testRunPythonUnitTestsSuccess(self): def testRunPythonUnitTestsSuccess(self):
input_api = self.MockInputApi(None, False) input_api = self.MockInputApi(None, False)
input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO)
input_api.unittest = self.mox.CreateMock(unittest) input_api.unittest = self.mox.CreateMock(unittest)
process = self.mox.CreateMockAnything() input_api.subprocess.check_output(
process.returncode = 0 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None)
input_api.subprocess.Popen(
['pyyyyython', '-m', 'test_module'], cwd=None, env=None,
stderr=presubmit.subprocess.PIPE, stdin=presubmit.subprocess.PIPE,
stdout=presubmit.subprocess.PIPE).AndReturn(process)
process.communicate().AndReturn(('', ''))
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunPythonUnitTests( results = presubmit_canned_checks.RunPythonUnitTests(
@ -2022,16 +2004,11 @@ mac|success|blew
unit_tests = ['allo', 'bar.py'] unit_tests = ['allo', 'bar.py']
input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
proc1 = self.mox.CreateMockAnything() input_api.subprocess.check_call(
input_api.subprocess.Popen(['allo'], cwd=self.fake_root_dir, ['allo'], cwd=self.fake_root_dir)
stderr=None, stdout=None).AndReturn(proc1) input_api.subprocess.check_call(
proc1.returncode = 0 ['bar.py'], cwd=self.fake_root_dir).AndRaise(
proc1.communicate().AndReturn(['baz', None]) input_api.subprocess.CalledProcessError())
proc2 = self.mox.CreateMockAnything()
input_api.subprocess.Popen(['bar.py'], cwd=self.fake_root_dir,
stderr=None, stdout=None).AndReturn(proc2)
proc2.returncode = 1
proc2.communicate().AndReturn(['bouz', None])
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunUnitTests( results = presubmit_canned_checks.RunUnitTests(
@ -2053,11 +2030,8 @@ mac|success|blew
path = presubmit.os.path.join(self.fake_root_dir, 'random_directory') path = presubmit.os.path.join(self.fake_root_dir, 'random_directory')
input_api.os_listdir(path).AndReturn(['.', '..', 'a', 'b', 'c']) input_api.os_listdir(path).AndReturn(['.', '..', 'a', 'b', 'c'])
input_api.os_path.isfile = lambda x: not x.endswith('.') input_api.os_path.isfile = lambda x: not x.endswith('.')
proc1 = self.mox.CreateMockAnything() input_api.subprocess.check_call(
input_api.subprocess.Popen(['random_directory/b'], cwd=self.fake_root_dir, ['random_directory/b'], cwd=self.fake_root_dir)
stderr=None, stdout=None).AndReturn(proc1)
proc1.returncode = 0
proc1.communicate().AndReturn(['baz', None])
self.mox.ReplayAll() self.mox.ReplayAll()
results = presubmit_canned_checks.RunUnitTestsInDirectory( results = presubmit_canned_checks.RunUnitTestsInDirectory(

Loading…
Cancel
Save