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'
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
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
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
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'
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
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
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
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
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
def _parse_composite_metadata(self, metadata: bytes) -> CompositeMetadata: composite_metadata = CompositeMetadata() composite_metadata.parse(metadata) return composite_metadata