| Index: tests/gclient_utils_test.py
|
| diff --git a/tests/gclient_utils_test.py b/tests/gclient_utils_test.py
|
| index 39a3d772d816a0d3eeda577ba6f70a42cbed2866..582fbba133065926a2888acb1e4e44abbdf1c3f4 100755
|
| --- a/tests/gclient_utils_test.py
|
| +++ b/tests/gclient_utils_test.py
|
| @@ -6,6 +6,7 @@
|
| import os
|
| import StringIO
|
| import sys
|
| +import threading
|
|
|
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
| @@ -81,6 +82,62 @@ class CheckCallAndFilterTestCase(GclientUtilBase):
|
| 'ahah\naccb\nallo\naddb\n'
|
| '________ running \'boo foo bar\' in \'bleh\'\nahah\naccb\nallo\naddb')
|
|
|
| + def _checkKillTimeout(self, output_block_for=0, kill_raises=False):
|
| + cv = threading.Condition()
|
| + order = []
|
| +
|
| + output = list(reversed('output'))
|
| + def kid_stdout_read(_):
|
| + if output:
|
| + return output.pop()
|
| + else:
|
| + with cv:
|
| + cv.wait(timeout=output_block_for)
|
| + order.append('unblock')
|
| + return ''
|
| + def kid_kill():
|
| + with cv:
|
| + order.append('killed')
|
| + cv.notify()
|
| + if kill_raises:
|
| + raise OSError('somethign went wrong')
|
| +
|
| + kid = self.ProcessIdMock('')
|
| + kid.stdout.read = kid_stdout_read
|
| + kid.kill = kid_kill # pylint: disable=W0201
|
| + cwd = 'bleh'
|
| + args = ['ar', 'gs']
|
| + gclient_utils.sys.stdout.write(
|
| + '\n________ running \'ar gs\' in \'bleh\'\noutput')
|
| + os.getcwd()
|
| + subprocess2.Popen(
|
| + args, cwd=cwd,
|
| + stdout=subprocess2.PIPE,
|
| + stderr=subprocess2.STDOUT,
|
| + bufsize=0).AndReturn(kid)
|
| + self.mox.ReplayAll()
|
| +
|
| + # This test relies on the testing machine's ability to process 1 char
|
| + # of output in <0.01 seconds set in kill_timeout.
|
| + gclient_utils.CheckCallAndFilterAndHeader(
|
| + args, cwd=cwd, always=True, kill_timeout=0.01)
|
| + self.checkstdout(
|
| + '\n________ running \'ar gs\' in \'bleh\'\noutput\n'
|
| + '________ running \'ar gs\' in \'bleh\'\noutput')
|
| + return order
|
| +
|
| + def testKillTimeout(self):
|
| + order = self._checkKillTimeout(output_block_for=1.0)
|
| + self.assertEquals(order, ['killed', 'unblock'])
|
| +
|
| + def testKillRaise(self):
|
| + order = self._checkKillTimeout(output_block_for=1.0, kill_raises=True)
|
| + self.assertEquals(order, ['killed', 'unblock'])
|
| +
|
| + def testNoKill(self):
|
| + order = self._checkKillTimeout(output_block_for=0.0)
|
| + self.assertEquals(order, ['unblock'])
|
| +
|
|
|
| class SplitUrlRevisionTestCase(GclientUtilBase):
|
| def testSSHUrl(self):
|
| @@ -203,6 +260,12 @@ class GClientUtilsTest(trial_dir.TestCase):
|
|
|
| if __name__ == '__main__':
|
| import unittest
|
| + import logging
|
| + level = logging.DEBUG if '-v' in sys.argv else logging.FATAL
|
| + logging.basicConfig(
|
| + level=level,
|
| + format='%(asctime).19s %(levelname)s %(filename)s:'
|
| + '%(lineno)s %(message)s')
|
| unittest.main()
|
|
|
| # vim: ts=2:sw=2:tw=80:et:
|
|
|