msgpack-python/test/test_sequnpack.py

140 lines
3.7 KiB
Python
Raw Normal View History

2009-06-26 14:10:20 +09:00
#!/usr/bin/env python
# coding: utf-8
2014-02-15 22:16:01 +09:00
import io
2012-07-20 02:02:37 +09:00
from msgpack import Unpacker, BufferFull
2017-04-29 19:33:20 +02:00
from msgpack import pack
2013-10-20 23:06:02 +09:00
from msgpack.exceptions import OutOfData
2012-12-29 11:24:25 +09:00
from pytest import raises
2009-06-26 14:10:20 +09:00
def test_partialdata():
unpacker = Unpacker()
2019-12-05 18:51:45 +09:00
unpacker.feed(b"\xa5")
with raises(StopIteration):
next(iter(unpacker))
unpacker.feed(b"h")
with raises(StopIteration):
next(iter(unpacker))
unpacker.feed(b"a")
with raises(StopIteration):
next(iter(unpacker))
unpacker.feed(b"l")
with raises(StopIteration):
next(iter(unpacker))
unpacker.feed(b"l")
with raises(StopIteration):
next(iter(unpacker))
unpacker.feed(b"o")
assert next(iter(unpacker)) == "hallo"
2019-12-05 18:51:45 +09:00
2009-06-26 14:10:20 +09:00
def test_foobar():
2012-09-24 02:12:55 +09:00
unpacker = Unpacker(read_size=3, use_list=1)
2019-12-05 18:51:45 +09:00
unpacker.feed(b"foobar")
assert unpacker.unpack() == ord(b"f")
assert unpacker.unpack() == ord(b"o")
assert unpacker.unpack() == ord(b"o")
assert unpacker.unpack() == ord(b"b")
assert unpacker.unpack() == ord(b"a")
assert unpacker.unpack() == ord(b"r")
2012-12-29 11:24:25 +09:00
with raises(OutOfData):
unpacker.unpack()
2012-06-19 14:20:56 +09:00
2019-12-05 18:51:45 +09:00
unpacker.feed(b"foo")
unpacker.feed(b"bar")
2009-06-26 14:10:20 +09:00
k = 0
2019-12-05 18:51:45 +09:00
for o, e in zip(unpacker, "foobarbaz"):
2012-06-19 14:20:56 +09:00
assert o == ord(e)
2009-06-26 14:10:20 +09:00
k += 1
2019-12-05 18:51:45 +09:00
assert k == len(b"foobar")
2009-06-26 14:10:20 +09:00
2012-09-23 10:09:51 +09:00
def test_foobar_skip():
2012-09-24 02:12:55 +09:00
unpacker = Unpacker(read_size=3, use_list=1)
2019-12-05 18:51:45 +09:00
unpacker.feed(b"foobar")
assert unpacker.unpack() == ord(b"f")
2012-09-23 10:09:51 +09:00
unpacker.skip()
2019-12-05 18:51:45 +09:00
assert unpacker.unpack() == ord(b"o")
2012-09-23 10:09:51 +09:00
unpacker.skip()
2019-12-05 18:51:45 +09:00
assert unpacker.unpack() == ord(b"a")
2012-09-23 10:09:51 +09:00
unpacker.skip()
2012-12-29 11:24:25 +09:00
with raises(OutOfData):
unpacker.unpack()
2009-06-26 14:10:20 +09:00
2019-12-05 18:51:45 +09:00
2012-07-20 02:02:37 +09:00
def test_maxbuffersize():
2012-12-29 11:24:25 +09:00
with raises(ValueError):
Unpacker(read_size=5, max_buffer_size=3)
2012-09-24 02:12:55 +09:00
unpacker = Unpacker(read_size=3, max_buffer_size=3, use_list=1)
2019-12-05 18:51:45 +09:00
unpacker.feed(b"fo")
2012-12-29 11:24:25 +09:00
with raises(BufferFull):
2019-12-05 18:51:45 +09:00
unpacker.feed(b"ob")
unpacker.feed(b"o")
assert ord("f") == next(unpacker)
unpacker.feed(b"b")
assert ord("o") == next(unpacker)
assert ord("o") == next(unpacker)
assert ord("b") == next(unpacker)
2012-07-20 02:02:37 +09:00
def test_readbytes():
unpacker = Unpacker(read_size=3)
2019-12-05 18:51:45 +09:00
unpacker.feed(b"foobar")
assert unpacker.unpack() == ord(b"f")
assert unpacker.read_bytes(3) == b"oob"
assert unpacker.unpack() == ord(b"a")
assert unpacker.unpack() == ord(b"r")
# Test buffer refill
2019-12-05 18:51:45 +09:00
unpacker = Unpacker(io.BytesIO(b"foobar"), read_size=3)
assert unpacker.unpack() == ord(b"f")
assert unpacker.read_bytes(3) == b"oob"
assert unpacker.unpack() == ord(b"a")
assert unpacker.unpack() == ord(b"r")
# Issue 352
u = Unpacker()
u.feed(b"x")
assert bytes(u.read_bytes(1)) == b"x"
with raises(StopIteration):
next(u)
u.feed(b"\1")
assert next(u) == 1
2015-01-26 20:31:03 +01:00
def test_issue124():
unpacker = Unpacker()
2019-12-05 18:51:45 +09:00
unpacker.feed(b"\xa1?\xa1!")
assert tuple(unpacker) == ("?", "!")
2015-01-26 20:31:03 +01:00
assert tuple(unpacker) == ()
2015-01-26 20:55:23 +01:00
unpacker.feed(b"\xa1?\xa1")
assert tuple(unpacker) == ("?",)
2015-01-26 20:31:03 +01:00
assert tuple(unpacker) == ()
2015-01-26 20:55:23 +01:00
unpacker.feed(b"!")
assert tuple(unpacker) == ("!",)
2015-01-26 20:31:03 +01:00
assert tuple(unpacker) == ()
2017-04-29 19:33:20 +02:00
def test_unpack_tell():
stream = io.BytesIO()
2019-12-05 18:51:45 +09:00
messages = [2 ** i - 1 for i in range(65)]
messages += [-(2 ** i) for i in range(1, 64)]
messages += [
b"hello",
b"hello" * 1000,
list(range(20)),
{i: bytes(i) * i for i in range(10)},
{i: bytes(i) * i for i in range(32)},
]
2017-04-29 19:33:20 +02:00
offsets = []
for m in messages:
pack(m, stream)
offsets.append(stream.tell())
stream.seek(0)
unpacker = Unpacker(stream)
for m, o in zip(messages, offsets):
m2 = next(unpacker)
assert m == m2
assert o == unpacker.tell()