Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
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
Esempio n. 4
0
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'
Esempio n. 5
0
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'
Esempio n. 6
0
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'
Esempio n. 7
0
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'
Esempio n. 8
0
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'
Esempio n. 9
0
    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'