File: test_context_managers.py

package info (click to toggle)
rpyc 6.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,324 kB
  • sloc: python: 6,442; makefile: 122
file content (64 lines) | stat: -rw-r--r-- 1,724 bytes parent folder | download | duplicates (3)
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
from __future__ import with_statement
import rpyc
import unittest

from contextlib import contextmanager


class MyService(rpyc.Service):

    on_context_enter = False
    on_context_exit = False
    on_context_exc = False

    @contextmanager
    def exposed_context(self, y):
        self.on_context_enter = True
        try:
            yield 17 + y
        except Exception:
            self.on_context_exc = True
            raise
        finally:
            self.on_context_exit = True


class TestContextManagers(unittest.TestCase):
    def setUp(self):
        self.service = MyService()
        self.conn = rpyc.connect_thread(remote_service=self.service)

    def tearDown(self):
        self.conn.close()

    def test_context(self):
        service = self.service
        with self.conn.root.context(3) as x:
            self.assertTrue(service.on_context_enter)
            self.assertFalse(service.on_context_exc)
            self.assertFalse(service.on_context_exit)
            self.assertEqual(x, 20)
        self.assertFalse(service.on_context_exc)
        self.assertTrue(service.on_context_exit)

    def test_context_exception(self):
        class MyException(Exception):
            pass

        service = self.service

        def use_context():
            with self.conn.root.context(3):
                self.assertTrue(service.on_context_enter)
                self.assertFalse(service.on_context_exc)
                self.assertFalse(service.on_context_exit)
                raise MyException()

        self.assertRaises(MyException, use_context)

        self.assertTrue(service.on_context_exc)
        self.assertTrue(service.on_context_exit)


if __name__ == "__main__":
    unittest.main()