def _split_datagrams(value): sio = StringIO.StringIO(value) while sio.pos < sio.len: size_prefix, _ = varint.read_uvarint(sio) data = sio.read(size_prefix) if len(data) != size_prefix: raise ValueError('Expected %d bytes, but only got %d' % ( size_prefix, len(data))) yield data
def interpret(self): data = StringIO.StringIO(self.buffer.getvalue()) magic = data.read(len(stream.BUTLER_MAGIC)) if magic != stream.BUTLER_MAGIC: raise ValueError('Invalid magic value ([%s] != [%s])' % ( magic, stream.BUTLER_MAGIC)) length, _ = varint.read_uvarint(data) header = data.read(length) return json.loads(header), data.read()
def testVarintEncodeDecode(self): seed = (b'\x00', b'\x01', b'\x55', b'\x7F', b'\x80', b'\x81', b'\xff') for perm in itertools.permutations(seed): perm = ''.join(perm).encode('hex') while len(perm) > 0: exp = int(perm.encode('hex'), 16) sio = StringIO.StringIO() count = varint.write_uvarint(sio, exp) sio.seek(0) act, count = varint.read_uvarint(sio) self.assertEqual(act, exp, "Decoded %r (%d) doesn't match expected (%d)" % ( sio.getvalue().encode('hex'), act, exp)) self.assertEqual(count, len(sio.getvalue()), "Decoded length (%d) doesn't match expected (%d)" % ( count, len(sio.getvalue()))) if perm == 0: break perm = perm[1:]