Ejemplo n.º 1
0
async def test_authentication_helper_bearer():
    metadata = composite(authenticate_bearer('token'))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(metadata)

    assert composite_metadata.items[0].authentication.token == b'token'
Ejemplo n.º 2
0
def test_tag_composite_metadata_too_long():
    routing = RoutingMetadata(tags=[('some data too long %s' %
                                     ''.join(['x'] * 256)).encode()])
    composite_metadata = CompositeMetadata()
    composite_metadata.items.append(routing)

    with pytest.raises(RSocketError):
        composite_metadata.serialize()
Ejemplo n.º 3
0
def test_data_mime_type_composite_metadata():
    data = composite(data_mime_type(WellKnownMimeTypes.APPLICATION_JSON))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(data)

    assert len(composite_metadata.items) == 1
    assert composite_metadata.items[0].data_encoding == b'application/json'

    assert composite_metadata.serialize() == data
Ejemplo n.º 4
0
def test_data_mime_types_composite_metadata():
    data = composite(
        data_mime_types(WellKnownMimeTypes.APPLICATION_JSON,
                        WellKnownMimeTypes.TEXT_XML))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(data)

    assert len(composite_metadata.items) == 1
    assert composite_metadata.items[0].data_encodings[0] == b'application/json'
    assert composite_metadata.items[0].data_encodings[1] == b'text/xml'

    assert composite_metadata.serialize() == data
Ejemplo n.º 5
0
def test_basic_composite_metadata_item():
    data = build_frame(
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.TEXT_PLAIN.value.id, 'Mime ID'),
        bits(24, 9, 'Metadata length'), data_bits(b'some data'))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(data)

    assert composite_metadata.items[0].content == b'some data'

    serialized = composite_metadata.serialize()

    assert data == serialized
Ejemplo n.º 6
0
async def test_decode_spring_demo_auth():
    metadata = bytearray(
        b'\xfe\x00\x00\r\x0cshell-client"message/x.rsocket.authentication.v0\x00\x00\x0b\x80\x00\x04userpass'
    )

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(metadata)

    assert len(composite_metadata.items) == 2

    composite_item = cast(AuthenticationContent, composite_metadata.items[1])
    authentication = cast(AuthenticationSimple, composite_item.authentication)
    assert authentication.username == b'user'
    assert authentication.password == b'pass'
Ejemplo n.º 7
0
async def test_composite_metadata_multiple_items():
    data = build_frame(
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING.value.id,
             'Mime ID'), bits(24, 12, 'Metadata length'),
        bits(8, 11, 'Tag Length'), data_bits(b'target.path'),
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_MIMETYPE.value.id,
             'Mime ID'), bits(24, 1, 'Metadata length'),
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.TEXT_CSS.value.id, 'Mime ID'),
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_MIMETYPE.value.id,
             'Mime ID'), bits(24, 26, 'Metadata length'),
        bits(1, 0, 'Not well known metadata type'),
        bits(7, 24, 'Encoding length'),
        data_bits(b'some-custom-encoding/type'),
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_AUTHENTICATION.value.id,
             'Mime ID'), bits(24, 19, 'Metadata length'),
        bits(1, 1, 'Well known authentication type'),
        bits(7, WellKnownAuthenticationTypes.SIMPLE.value.id,
             'Authentication ID'), bits(16, 8, 'Username length'),
        data_bits(b'username'), data_bits(b'password'))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(data)

    assert composite_metadata.items[
        0].encoding == b'message/x.rsocket.routing.v0'
    assert composite_metadata.items[0].tags == [b'target.path']

    assert composite_metadata.items[
        1].encoding == b'message/x.rsocket.mime-type.v0'
    assert composite_metadata.items[1].data_encoding == b'text/css'

    assert composite_metadata.items[
        2].encoding == b'message/x.rsocket.mime-type.v0'
    assert composite_metadata.items[
        2].data_encoding == b'some-custom-encoding/type'

    assert composite_metadata.items[
        3].encoding == b'message/x.rsocket.authentication.v0'
    assert composite_metadata.items[3].authentication.username == b'username'
    assert composite_metadata.items[3].authentication.password == b'password'

    assert composite_metadata.serialize() == data
Ejemplo n.º 8
0
async def test_request_channel_frame(frame_parser, follows, complete):
    data = build_frame(
        bits(24, 32, 'Frame size'),
        bits(1, 0, 'Padding'),
        bits(31, 15, 'Stream id'),
        bits(6, FrameType.REQUEST_CHANNEL.value, 'Frame type'),
        # Flags
        bits(1, 0, 'Ignore'),
        bits(1, 1, 'Metadata'),
        bits(1, follows, 'Follows'),
        bits(1, complete, 'Complete'),
        bits(6, 0, 'Empty flags'),
        bits(1, 0, 'Padding'),
        bits(31, 10, 'Initial request N'),
        # Metadata
        bits(24, 16, 'Metadata length'),
        # Composite metadata
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING.value.id,
             'Mime ID'),
        bits(24, 12, 'Metadata length'),
        bits(8, 11, 'Tag Length'),
        data_bits(b'target.path'),

        # Payload
        data_bits(b'\x01\x02\x03'),
    )

    frames = await asyncstdlib.builtins.list(frame_parser.receive_data(data))
    frame = frames[0]
    assert isinstance(frame, RequestChannelFrame)
    assert serialize_with_frame_size_header(frame) == data

    assert frame.data == b'\x01\x02\x03'
    assert frame.flags_follows == bool(follows)
    assert frame.flags_complete == bool(complete)
    assert frame.stream_id == 15
    assert frame.frame_type is FrameType.REQUEST_CHANNEL

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(frame.metadata)

    assert composite_metadata.items[
        0].encoding == b'message/x.rsocket.routing.v0'
    assert composite_metadata.items[0].tags == [b'target.path']

    assert composite_metadata.serialize() == frame.metadata
Ejemplo n.º 9
0
async def test_authentication_frame_bearer():
    data = build_frame(
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_AUTHENTICATION.value.id,
             'Mime ID'), bits(24, 9, 'Metadata length'),
        bits(1, 1, 'Well known authentication type'),
        bits(7, WellKnownAuthenticationTypes.BEARER.value.id,
             'Authentication ID'), data_bits(b'abcd1234'))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(data)

    auth = composite_metadata.items[0].authentication
    assert auth.token == b'abcd1234'

    serialized_data = composite_metadata.serialize()

    assert serialized_data == data
Ejemplo n.º 10
0
async def main(server_port):
    completion_event = Event()

    class Subscriber(DefaultSubscriber):
        def __init__(self):
            super().__init__()
            self.values = []
            self.subscription: Optional[Subscription] = None

        def on_next(self, value, is_complete=False):
            self.values.append(value)
            self.subscription.request(1)

        def on_complete(self):
            completion_event.set()

        def on_error(self, exception: Exception):
            completion_event.set()

    connection = await asyncio.open_connection('localhost', server_port)

    async with RSocketClient(single_transport_provider(
            TransportTCP(*connection)),
                             metadata_encoding=WellKnownMimeTypes.
                             MESSAGE_RSOCKET_COMPOSITE_METADATA.value.name,
                             data_encoding=WellKnownMimeTypes.APPLICATION_JSON.
                             value.name) as client:
        metadata = CompositeMetadata()
        metadata.append(
            RoutingMetadata(['investigation.getInvestigationByContext']))

        body = json.dumps({'active': True}).encode()

        request = Payload(body, metadata.serialize())

        subscriber = Subscriber()
        client.request_stream(request).subscribe(subscriber)
        await completion_event.wait()

        await asyncio.sleep(4)  # Used to show keepalive is working

        assert len(subscriber.values) == 2
Ejemplo n.º 11
0
async def test_authentication_frame_simple():
    data = build_frame(
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_AUTHENTICATION.value.id,
             'Mime ID'), bits(24, 19, 'Metadata length'),
        bits(1, 1, 'Well known authentication type'),
        bits(7, WellKnownAuthenticationTypes.SIMPLE.value.id,
             'Authentication ID'), bits(16, 8, 'Username length'),
        data_bits(b'username'), data_bits(b'password'))

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(data)

    auth = composite_metadata.items[0].authentication
    assert auth.username == b'username'
    assert auth.password == b'password'

    serialized_data = composite_metadata.serialize()

    assert serialized_data == data
Ejemplo n.º 12
0
def test_metadata_authentication_bearer():
    metadata = build_frame(
        bits(1, 1, 'Well known metadata type'),
        bits(7, WellKnownMimeTypes.MESSAGE_RSOCKET_AUTHENTICATION.value.id,
             'Mime ID'),
        bits(24, 6, 'Metadata length'),
        bits(1, 1, 'Well known authentication type'),
        bits(7, WellKnownAuthenticationTypes.BEARER.value.id,
             'Authentication ID'),
        data_bits(b'12345'),
    )

    composite_metadata = CompositeMetadata()
    composite_metadata.parse(metadata)

    assert composite_metadata.items[0].authentication.token == b'12345'

    assert composite_metadata.serialize() == metadata

    metadata_from_helper = composite(authenticate_bearer('12345'))

    assert metadata_from_helper == metadata
Ejemplo n.º 13
0
def composite(*items) -> bytes:
    metadata = CompositeMetadata()
    metadata.extend(*items)
    return metadata.serialize()
Ejemplo n.º 14
0
 def _parse_composite_metadata(self, metadata: bytes) -> CompositeMetadata:
     composite_metadata = CompositeMetadata()
     composite_metadata.parse(metadata)
     return composite_metadata