diff options
author | Matus Valo <matusvalo@gmail.com> | 2020-10-09 10:37:49 +0200 |
---|---|---|
committer | Asif Saif Uddin <auvipy@gmail.com> | 2020-10-13 14:43:58 +0600 |
commit | 61164474b7fa79c4589b0661fb27c187d33be0a0 (patch) | |
tree | fccaf37517685e39a0559630a026d0a78c87e40d | |
parent | 0c838416a92722646c7aef7607dbfb0678654bde (diff) | |
download | py-amqp-61164474b7fa79c4589b0661fb27c187d33be0a0.tar.gz |
Cosmetic improvements to read_frame()
-rw-r--r-- | amqp/transport.py | 16 | ||||
-rw-r--r-- | t/unit/test_transport.py | 5 |
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() |