From: Robert Collins Date: Sat, 24 Aug 2013 13:51:28 +0000 (+1200) Subject: * Clients of subunit did not expect memoryview objects in StreamResult events. X-Git-Url: http://git.samba.org/samba.git/?p=third_party%2Fsubunit;a=commitdiff_plain;h=273a4c27aba153af19925c0e7f293d2d696fad7b * Clients of subunit did not expect memoryview objects in StreamResult events. (Robert Collins) --- diff --git a/NEWS b/NEWS index 1e47c13..391a6c0 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,12 @@ subunit release notes NEXT (In development) --------------------- +BUG FIXES +~~~~~~~~~ + +* Clients of subunit did not expect memoryview objects in StreamResult events. + (Robert Collins) + 0.0.14 ------ diff --git a/python/subunit/tests/test_test_protocol2.py b/python/subunit/tests/test_test_protocol2.py index ded56b8..f88e0aa 100644 --- a/python/subunit/tests/test_test_protocol2.py +++ b/python/subunit/tests/test_test_protocol2.py @@ -303,6 +303,10 @@ class TestByteStreamToStreamResult(TestCase): source, non_subunit_name="stdout").run(result) self.assertEqual(b'', source.read()) self.assertEqual(events, result._events) + #- any file attachments should be byte contents [as users assume that]. + for event in result._events: + if event[5] is not None: + self.assertIsInstance(event[6], bytes) def check_event(self, source_bytes, test_status=None, test_id="foo", route_code=None, timestamp=None, tags=None, mime_type=None, diff --git a/python/subunit/v2.py b/python/subunit/v2.py index 0a7796f..1f5bfc1 100644 --- a/python/subunit/v2.py +++ b/python/subunit/v2.py @@ -385,8 +385,10 @@ class ByteStreamToStreamResult(object): % (crc, packet_crc)) if safe_hasattr(builtins, 'memoryview'): body = memoryview(packet[-1]) + view = True else: body = packet[-1] + view = False # Discard CRC-32 body = body[:-4] # One packet could have both file and status data; the Python API @@ -421,6 +423,8 @@ class ByteStreamToStreamResult(object): content_length, consumed = self._parse_varint(body, pos) pos += consumed file_bytes = body[pos:pos+content_length] + if view: + file_bytes = file_bytes.tobytes() if len(file_bytes) != content_length: raise ParseError('File content extends past end of packet: ' 'claimed %d bytes, %d available' % (