tests: add a few extra service tests.

new-serialization
David Wilson 5 years ago
parent 26a9fed396
commit 5d6e20bc21

@ -3600,6 +3600,8 @@ class Dispatcher(object):
mode, any exception that occurs is recorded, and causes all subsequent mode, any exception that occurs is recorded, and causes all subsequent
calls with the same `chain_id` to fail with the same exception. calls with the same `chain_id` to fail with the same exception.
""" """
_service_recv = None
def __repr__(self): def __repr__(self):
return 'Dispatcher' return 'Dispatcher'

@ -80,7 +80,7 @@ def get_or_create_pool(size=None, router=None):
global _pool_pid global _pool_pid
my_pid = os.getpid() my_pid = os.getpid()
if _pool is None or my_pid != _pool_pid: if _pool is None or _pool.closed or my_pid != _pool_pid:
# Avoid acquiring heavily contended lock if possible. # Avoid acquiring heavily contended lock if possible.
_pool_lock.acquire() _pool_lock.acquire()
try: try:

@ -15,6 +15,13 @@ class MyService(mitogen.service.Service):
self._counter += 1 self._counter += 1
return self._counter, id(self) return self._counter, id(self)
@mitogen.service.expose(policy=mitogen.service.AllowParents())
@mitogen.service.arg_spec({
'foo': int
})
def test_arg_spec(self, foo):
return foo
@mitogen.service.expose(policy=mitogen.service.AllowParents()) @mitogen.service.expose(policy=mitogen.service.AllowParents())
def privileged_op(self): def privileged_op(self):
return 'privileged!' return 'privileged!'
@ -24,7 +31,6 @@ class MyService(mitogen.service.Service):
return 'unprivileged!' return 'unprivileged!'
class MyService2(MyService): class MyService2(MyService):
""" """
A uniquely named service that lets us test framework activation and class A uniquely named service that lets us test framework activation and class
@ -36,6 +42,44 @@ def call_service_in(context, service_name, method_name):
return context.call_service(service_name, method_name) return context.call_service(service_name, method_name)
class CallTest(testlib.RouterMixin, testlib.TestCase):
def test_local(self):
pool = mitogen.service.get_or_create_pool(router=self.router)
self.assertEquals(
'privileged!',
mitogen.service.call(MyService, 'privileged_op')
)
pool.stop()
def test_remote_bad_arg(self):
c1 = self.router.local()
self.assertRaises(
mitogen.core.CallError,
lambda: mitogen.service.call(
MyService.name(),
'test_arg_spec',
foo='x',
call_context=c1
)
)
def test_local_unicode(self):
pool = mitogen.service.get_or_create_pool(router=self.router)
self.assertEquals(
'privileged!',
mitogen.service.call(MyService.name(), 'privileged_op')
)
pool.stop()
def test_remote(self):
c1 = self.router.local()
self.assertEquals(
'privileged!',
mitogen.service.call(MyService, 'privileged_op',
call_context=c1)
)
class ActivationTest(testlib.RouterMixin, testlib.TestCase): class ActivationTest(testlib.RouterMixin, testlib.TestCase):
def test_parent_can_activate(self): def test_parent_can_activate(self):
l1 = self.router.local() l1 = self.router.local()

Loading…
Cancel
Save