Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions rsocket/extensions/tagging.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ def _serialize_tags(self) -> bytes:
serialized = b''

for tag in list(map(ensure_bytes, self.tags)):
if len(tag) > 256:
raise RSocketError('Tag length longer than 256 characters: "%s"' % tag)
if len(tag) > 255:
raise RSocketError('Tag length longer than 255 characters: "%s"' % tag)

serialized += struct.pack('>b', len(tag))
serialized += struct.pack('>B', len(tag))
serialized += tag

return serialized
Expand All @@ -38,7 +38,7 @@ def parse(self, buffer: bytes):
offset = 0

while offset < len(buffer):
tag_length = struct.unpack('>b', buffer[offset:offset + 1])[0]
tag_length = struct.unpack('>B', buffer[offset:offset + 1])[0]
offset += 1
self.tags.append(buffer[offset:offset + tag_length])
offset += tag_length
Expand Down
31 changes: 31 additions & 0 deletions tests/test_tagging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import struct
import unittest

from rsocket.exceptions import RSocketError
from rsocket.extensions.tagging import TaggingMetadata
from rsocket.extensions.mimetypes import WellKnownMimeTypes


class TestTaggingMetadata(unittest.TestCase):
def test_serialize_max_length(self):
tag = 's' * 255
meta = TaggingMetadata(WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING, [tag])
serialized = meta.serialize()
length = struct.pack('>B', len(tag))
self.assertEquals(length + bytes(tag, 'utf-8'), serialized)

def test_serialize_exception_length(self):
tag = 's' * 256
meta = TaggingMetadata(WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING, [tag])
with self.assertRaisesRegex(RSocketError, f'Tag length longer than 255 characters: "b\'{tag}\'"'):
meta.serialize()

def test_parse(self):
meta = TaggingMetadata(WellKnownMimeTypes.MESSAGE_RSOCKET_ROUTING)

tag = 's' * 255
length = struct.pack('>B', len(tag))

meta.parse(length + bytes(tag, 'utf-8'))

self.assertEquals(tag, meta.tags[0].decode())