summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatus Valo <matusvalo@gmail.com>2020-10-09 10:37:49 +0200
committerAsif Saif Uddin <auvipy@gmail.com>2020-10-13 14:43:58 +0600
commit61164474b7fa79c4589b0661fb27c187d33be0a0 (patch)
treefccaf37517685e39a0559630a026d0a78c87e40d
parent0c838416a92722646c7aef7607dbfb0678654bde (diff)
downloadpy-amqp-61164474b7fa79c4589b0661fb27c187d33be0a0.tar.gz
Cosmetic improvements to read_frame()
-rw-r--r--amqp/transport.py16
-rw-r--r--t/unit/test_transport.py5
2 files changed, 17 insertions, 4 deletions
diff --git a/amqp/transport.py b/amqp/transport.py
index 0818709..3eec88f 100644
--- a/amqp/transport.py
+++ b/amqp/transport.py
@@ -253,6 +253,15 @@ class _AbstractTransport:
self.connected = False
def read_frame(self, unpack=unpack):
+ """Parse AMQP frame.
+
+ Frame has following format:
+ 0 1 3 7 size+7 size+8
+ +------+---------+---------+ +-------------+ +-----------+
+ | type | channel | size | | payload | | frame-end |
+ +------+---------+---------+ +-------------+ +-----------+
+ octet short long 'size' octets octet
+ """
read = self._read
read_frame_buffer = EMPTY_BUFFER
try:
@@ -276,7 +285,7 @@ class _AbstractTransport:
else:
payload = read(size)
read_frame_buffer += payload
- ch = ord(read(1))
+ frame_end = ord(read(1))
except socket.timeout:
self._read_buffer = read_frame_buffer + self._read_buffer
raise
@@ -300,11 +309,12 @@ class _AbstractTransport:
if exc.errno not in _UNAVAIL:
self.connected = False
raise
- if ch == 206: # '\xce'
+ # frame-end octet must contain '\xce' value
+ if frame_end == 206:
return frame_type, channel, payload
else:
raise UnexpectedFrame(
- f'Received {ch:#04x} while expecting 0xce')
+ f'Received frame_end {frame_end:#04x} while expecting 0xce')
def write(self, s):
try:
diff --git a/t/unit/test_transport.py b/t/unit/test_transport.py
index fdb07b6..d94a520 100644
--- a/t/unit/test_transport.py
+++ b/t/unit/test_transport.py
@@ -333,8 +333,11 @@ class test_AbstractTransport:
self.t._read.return_value = pack('>BHI', 1, 1, 16)
self.t._read.side_effect = on_read1
checksum[0] = b'\x13'
- with pytest.raises(UnexpectedFrame):
+ with pytest.raises(UnexpectedFrame) as ex:
self.t.read_frame()
+ assert ex.value.code == 505
+ assert ex.value.message == \
+ 'Received frame_end 0x13 while expecting 0xce'
def test_read_frame__long(self):
self.t._read = Mock()