def test_server_can_proxy_another_server(self): """ Client1 --> Server1.string.lower() Client2 --> Server2(Server1.string.lower()) """ from pseud.interfaces import ServiceNotFoundError from pseud.utils import get_rpc_callable, register_rpc server1 = self.make_one_server(b'server1') server2 = self.make_one_server(b'server2', proxy_to=server1) client1 = self.make_one_client(b'server1') client2 = self.make_one_client(b'server2') server1.bind(b'inproc://server1') server2.bind(b'inproc://server2') client1.connect(b'inproc://server1') client2.connect(b'inproc://server2') yield server1.start() yield server2.start() # Local registration server1.register_rpc(name='str.lower')(str.lower) # Global registration register_rpc(name='str.upper')(str.upper) # local registration only to proxy server2.register_rpc(name='bla.lower')(str.lower) with pytest.raises(ServiceNotFoundError): get_rpc_callable('str.lower', registry=server2.registry) with pytest.raises(ServiceNotFoundError): get_rpc_callable('bla.lower', registry=server1.registry) with pytest.raises(ServiceNotFoundError): get_rpc_callable('bla.lower') with pytest.raises(ServiceNotFoundError): assert get_rpc_callable('str.lower') assert get_rpc_callable('str.lower', registry=server1.registry)('L') == 'l' result1 = yield client1.str.lower('SCREAM') result2 = yield client2.str.lower('SCREAM') result3 = yield client1.str.upper('whisper') result4 = yield client2.str.upper('whisper') result5 = yield client2.bla.lower('SCREAM') assert result1 == 'scream' assert result2 == 'scream' assert result3 == 'WHISPER' assert result4 == 'WHISPER' assert result5 == 'scream' client1.stop() client2.stop() server1.stop() server2.stop()
def test_rpc_simple_registration(): from pseud.interfaces import ServiceNotFoundError from pseud.utils import (get_rpc_callable, register_rpc, RPCCallable, ) @register_rpc def callme(*args, **kw): return args, kw assert isinstance(get_rpc_callable('callme'), RPCCallable) assert get_rpc_callable('callme')() == ((), {}) assert get_rpc_callable('callme')('a', foo='goo') == (('a',), {'foo': 'goo'}) @register_rpc(name='totally.something.else') def callme2(*args, **kw): return args, kw with pytest.raises(ServiceNotFoundError): get_rpc_callable('callme2') assert isinstance(get_rpc_callable('totally.something.else'), RPCCallable) def call_me_again(): return True register_rpc(functools.partial(call_me_again), name='call_me_again') assert get_rpc_callable('call_me_again')() is True
def test_rpc_restricted_registration(): from pseud.interfaces import ServiceNotFoundError from pseud.utils import (get_rpc_callable, register_rpc, ) @register_rpc(name='try_to_call_me') def callme(*args, **kw): return 'small power' @register_rpc(name='try_to_call_me', domain='restricted') def callme_admin(*args, **kw): return 'great power' @register_rpc(name='on.admin.can.call.me', domain='restricted') def callme_admin2(*args, **kw): return 'great power' class User(object): def __init__(self, allowed): self.allowed = allowed def has_permission(self, perm): return self.allowed guest = User(False) admin = User(True) assert get_rpc_callable('try_to_call_me', user=guest)() ==\ 'small power' assert get_rpc_callable('try_to_call_me', user=admin)() ==\ 'great power' with pytest.raises(ServiceNotFoundError): get_rpc_callable('on.admin.can.call.me', user=guest) assert get_rpc_callable('on.admin.can.call.me', user=admin)() ==\ 'great power'
def test_client_registry(): from pseud.utils import create_local_registry, get_rpc_callable identity = 'client0' peer_identity = 'echo' registry = create_local_registry(identity) client = make_one_client(peer_identity, registry=registry) @client.register_rpc def foo(): return 'bar' assert get_rpc_callable(name='foo', registry=client.registry)() == 'bar'
def test_registration_with_custom_registry(): from pseud.utils import (get_rpc_callable, registry, register_rpc, ) local_registry = Components(name='local', bases=(registry,)) @register_rpc(name='try_to_call_me') def callme(*args, **kw): return 'global' @register_rpc(name='try_to_call_me', registry=local_registry) def callme2(*args, **kw): return 'local' assert get_rpc_callable('try_to_call_me')() == 'global' assert get_rpc_callable('try_to_call_me', registry=local_registry)() == 'local'
def test_client_registry(): from pseud.utils import create_local_registry, get_rpc_callable user_id = b'client' peer_routing_id = b'echo' registry = create_local_registry(user_id) client = make_one_client(peer_routing_id, user_id=user_id, registry=registry) @client.register_rpc def foo(): return 'bar' assert get_rpc_callable(name='foo', registry=client.registry)() == 'bar'
def test_client_registry(self): from pseud.utils import create_local_registry, get_rpc_callable user_id = b'client' peer_routing_id = b'echo' registry = create_local_registry(user_id) client = self.make_one_client(peer_routing_id, user_id=user_id, registry=registry) @client.register_rpc def foo(): return 'bar' assert get_rpc_callable(name='foo', registry=client.registry)() == 'bar'