File: call_error_test.py

package info (click to toggle)
python-mitogen 0.3.25~a2-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,220 kB
  • sloc: python: 21,989; sh: 183; makefile: 74; perl: 19; ansic: 18
file content (108 lines) | stat: -rw-r--r-- 3,503 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import pickle
import sys

import mitogen.core

import testlib
import plain_old_module


class ConstructorTest(testlib.TestCase):
    klass = mitogen.core.CallError

    def test_string_noargs(self):
        e = self.klass('%s%s')
        self.assertEqual(e.args[0], '%s%s')
        self.assertIsInstance(e.args[0], mitogen.core.UnicodeType)

    def test_string_args(self):
        e = self.klass('%s%s', 1, 1)
        self.assertEqual(e.args[0], '11')
        self.assertIsInstance(e.args[0], mitogen.core.UnicodeType)

    def test_from_exc(self):
        ve = plain_old_module.MyError('eek')
        e = self.klass(ve)
        self.assertEqual(e.args[0], 'plain_old_module.MyError: eek')
        self.assertIsInstance(e.args[0], mitogen.core.UnicodeType)

    def test_form_base_exc(self):
        ve = SystemExit('eek')
        e = self.klass(ve)
        cls = ve.__class__
        self.assertEqual(e.args[0],
            # varies across 2/3.
            '%s.%s: eek' % (cls.__module__, cls.__name__))
        self.assertIsInstance(e.args[0], mitogen.core.UnicodeType)

    def test_from_exc_tb(self):
        try:
            raise plain_old_module.MyError('eek')
        except plain_old_module.MyError:
            ve = sys.exc_info()[1]
            e = self.klass(ve)

        self.assertTrue(e.args[0].startswith('plain_old_module.MyError: eek'))
        self.assertIsInstance(e.args[0], mitogen.core.UnicodeType)
        self.assertIn('test_from_exc_tb', e.args[0])

    def test_bytestring_conversion(self):
        e = self.klass(mitogen.core.b('bytes'))
        self.assertEqual(u'bytes', e.args[0])
        self.assertIsInstance(e.args[0], mitogen.core.UnicodeType)

    def test_reduce(self):
        e = self.klass('eek')
        func, (arg,) = e.__reduce__()
        self.assertIs(func, mitogen.core._unpickle_call_error)
        self.assertEqual(arg, e.args[0])


class UnpickleCallErrorTest(testlib.TestCase):
    func = staticmethod(mitogen.core._unpickle_call_error)

    def test_not_unicode(self):
        self.assertRaises(TypeError,
            lambda: self.func(mitogen.core.b('bad')))

    def test_oversized(self):
        self.assertRaises(TypeError,
            lambda: self.func(mitogen.core.b('b'*10001)))

    def test_reify(self):
        e = self.func(u'some error')
        self.assertEqual(mitogen.core.CallError, e.__class__)
        self.assertEqual(1, len(e.args))
        self.assertEqual(mitogen.core.UnicodeType, type(e.args[0]))
        self.assertEqual(u'some error', e.args[0])


class PickleTest(testlib.TestCase):
    klass = mitogen.core.CallError

    def test_string_noargs(self):
        e = self.klass('%s%s')
        e2 = pickle.loads(pickle.dumps(e))
        self.assertEqual(e2.args[0], '%s%s')

    def test_string_args(self):
        e = self.klass('%s%s', 1, 1)
        e2 = pickle.loads(pickle.dumps(e))
        self.assertEqual(e2.args[0], '11')

    def test_from_exc(self):
        ve = plain_old_module.MyError('eek')
        e = self.klass(ve)
        e2 = pickle.loads(pickle.dumps(e))
        self.assertEqual(e2.args[0], 'plain_old_module.MyError: eek')

    def test_from_exc_tb(self):
        try:
            raise plain_old_module.MyError('eek')
        except plain_old_module.MyError:
            ve = sys.exc_info()[1]
            e = self.klass(ve)

        e2 = pickle.loads(pickle.dumps(e))
        self.assertTrue(e2.args[0].startswith('plain_old_module.MyError: eek'))
        self.assertIn('test_from_exc_tb', e2.args[0])