예제 #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'
예제 #2
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
예제 #3
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
예제 #4
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
예제 #5
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'
예제 #6
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
예제 #7
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
예제 #8
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
예제 #9
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
예제 #10
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
예제 #11
0
 def _parse_composite_metadata(self, metadata: bytes) -> CompositeMetadata:
     composite_metadata = CompositeMetadata()
     composite_metadata.parse(metadata)
     return composite_metadata