Apache/2.4.7 (Ubuntu) Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) safemode : OFF MySQL: ON | Perl: ON | cURL: OFF | WGet: ON > / usr / share / apport / testsuite / | server ip : 104.21.89.46 your ip : 172.70.179.73 H O M E |
Filename | /usr/share/apport/testsuite/test_rethread.py |
Size | 2.89 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 27-Apr-2025 09:55 |
Last modified | 04-Apr-2014 22:30 |
Last accessed | 06-Jul-2025 18:20 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
import unittest, time, traceback, sys
import apport.REThread
def idle(seconds):
'''Test thread to just wait a bit.'''
time.sleep(seconds)
def div(x, y):
'''Test thread to divide two numbers.'''
return x / y
class T(unittest.TestCase):
def test_return_value(self):
'''return value works properly.'''
t = apport.REThread.REThread(target=div, args=(42, 2))
t.start()
t.join()
# exc_raise() should be a no-op on successful functions
t.exc_raise()
self.assertEqual(t.return_value(), 21)
self.assertEqual(t.exc_info(), None)
def test_no_return_value(self):
'''apport.REThread.REThread works if run() does not return anything.'''
t = apport.REThread.REThread(target=idle, args=(0.5,))
t.start()
# thread must be joined first
self.assertRaises(AssertionError, t.return_value)
t.join()
self.assertEqual(t.return_value(), None)
self.assertEqual(t.exc_info(), None)
def test_exception(self):
'''exception in thread is caught and passed.'''
t = apport.REThread.REThread(target=div, args=(1, 0))
t.start()
t.join()
# thread did not terminate normally, no return value
self.assertRaises(AssertionError, t.return_value)
self.assertTrue(t.exc_info()[0] == ZeroDivisionError)
exc = traceback.format_exception(t.exc_info()[0], t.exc_info()[1],
t.exc_info()[2])
self.assertTrue(exc[-1].startswith('ZeroDivisionError'), 'not a ZeroDivisionError:' + str(exc))
self.assertTrue(exc[-2].endswith('return x / y\n'))
def test_exc_raise(self):
'''exc_raise() raises caught thread exception.'''
t = apport.REThread.REThread(target=div, args=(1, 0))
t.start()
t.join()
# thread did not terminate normally, no return value
self.assertRaises(AssertionError, t.return_value)
raised = False
try:
t.exc_raise()
except:
raised = True
e = sys.exc_info()
exc = traceback.format_exception(e[0], e[1], e[2])
self.assertTrue(exc[-1].startswith('ZeroDivisionError'), 'not a ZeroDivisionError:' + str(e))
self.assertTrue(exc[-2].endswith('return x / y\n'))
self.assertTrue(raised)
def test_exc_raise_complex(self):
'''exceptions that can't be simply created are reraised correctly
A unicode error takes several arguments on construction, so trying to
recreate it by just passing an instance to the class, as the Python 3
reraise expression did, will fail. See lp:1024836 for details.
'''
t = apport.REThread.REThread(target=str.encode, args=('\xff', 'ascii'))
t.start()
t.join()
self.assertRaises(UnicodeError, t.exc_raise)
if __name__ == "__main__":
unittest.main()
import apport.REThread
def idle(seconds):
'''Test thread to just wait a bit.'''
time.sleep(seconds)
def div(x, y):
'''Test thread to divide two numbers.'''
return x / y
class T(unittest.TestCase):
def test_return_value(self):
'''return value works properly.'''
t = apport.REThread.REThread(target=div, args=(42, 2))
t.start()
t.join()
# exc_raise() should be a no-op on successful functions
t.exc_raise()
self.assertEqual(t.return_value(), 21)
self.assertEqual(t.exc_info(), None)
def test_no_return_value(self):
'''apport.REThread.REThread works if run() does not return anything.'''
t = apport.REThread.REThread(target=idle, args=(0.5,))
t.start()
# thread must be joined first
self.assertRaises(AssertionError, t.return_value)
t.join()
self.assertEqual(t.return_value(), None)
self.assertEqual(t.exc_info(), None)
def test_exception(self):
'''exception in thread is caught and passed.'''
t = apport.REThread.REThread(target=div, args=(1, 0))
t.start()
t.join()
# thread did not terminate normally, no return value
self.assertRaises(AssertionError, t.return_value)
self.assertTrue(t.exc_info()[0] == ZeroDivisionError)
exc = traceback.format_exception(t.exc_info()[0], t.exc_info()[1],
t.exc_info()[2])
self.assertTrue(exc[-1].startswith('ZeroDivisionError'), 'not a ZeroDivisionError:' + str(exc))
self.assertTrue(exc[-2].endswith('return x / y\n'))
def test_exc_raise(self):
'''exc_raise() raises caught thread exception.'''
t = apport.REThread.REThread(target=div, args=(1, 0))
t.start()
t.join()
# thread did not terminate normally, no return value
self.assertRaises(AssertionError, t.return_value)
raised = False
try:
t.exc_raise()
except:
raised = True
e = sys.exc_info()
exc = traceback.format_exception(e[0], e[1], e[2])
self.assertTrue(exc[-1].startswith('ZeroDivisionError'), 'not a ZeroDivisionError:' + str(e))
self.assertTrue(exc[-2].endswith('return x / y\n'))
self.assertTrue(raised)
def test_exc_raise_complex(self):
'''exceptions that can't be simply created are reraised correctly
A unicode error takes several arguments on construction, so trying to
recreate it by just passing an instance to the class, as the Python 3
reraise expression did, will fail. See lp:1024836 for details.
'''
t = apport.REThread.REThread(target=str.encode, args=('\xff', 'ascii'))
t.start()
t.join()
self.assertRaises(UnicodeError, t.exc_raise)
if __name__ == "__main__":
unittest.main()