test_limits.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # coding: utf-8
  2. from __future__ import (
  3. absolute_import, division, print_function, unicode_literals)
  4. import pytest
  5. from pandas.io.msgpack import ExtType, Packer, Unpacker, packb, unpackb
  6. class TestLimits(object):
  7. def test_integer(self):
  8. x = -(2 ** 63)
  9. assert unpackb(packb(x)) == x
  10. msg = (r"((long |Python )?(int )?too (big|large) to convert"
  11. r"( to C (unsigned )?long))?")
  12. with pytest.raises((OverflowError, ValueError), match=msg):
  13. packb(x - 1)
  14. x = 2 ** 64 - 1
  15. assert unpackb(packb(x)) == x
  16. with pytest.raises((OverflowError, ValueError), match=msg):
  17. packb(x + 1)
  18. def test_array_header(self):
  19. packer = Packer()
  20. packer.pack_array_header(2 ** 32 - 1)
  21. with pytest.raises((OverflowError, ValueError)):
  22. packer.pack_array_header(2 ** 32)
  23. def test_map_header(self):
  24. packer = Packer()
  25. packer.pack_map_header(2 ** 32 - 1)
  26. with pytest.raises((OverflowError, ValueError)):
  27. packer.pack_array_header(2 ** 32)
  28. def test_max_str_len(self):
  29. d = 'x' * 3
  30. packed = packb(d)
  31. unpacker = Unpacker(max_str_len=3, encoding='utf-8')
  32. unpacker.feed(packed)
  33. assert unpacker.unpack() == d
  34. unpacker = Unpacker(max_str_len=2, encoding='utf-8')
  35. unpacker.feed(packed)
  36. msg = "3 exceeds max_str_len"
  37. with pytest.raises(ValueError, match=msg):
  38. unpacker.unpack()
  39. def test_max_bin_len(self):
  40. d = b'x' * 3
  41. packed = packb(d, use_bin_type=True)
  42. unpacker = Unpacker(max_bin_len=3)
  43. unpacker.feed(packed)
  44. assert unpacker.unpack() == d
  45. unpacker = Unpacker(max_bin_len=2)
  46. unpacker.feed(packed)
  47. msg = "3 exceeds max_bin_len"
  48. with pytest.raises(ValueError, match=msg):
  49. unpacker.unpack()
  50. def test_max_array_len(self):
  51. d = [1, 2, 3]
  52. packed = packb(d)
  53. unpacker = Unpacker(max_array_len=3)
  54. unpacker.feed(packed)
  55. assert unpacker.unpack() == d
  56. unpacker = Unpacker(max_array_len=2)
  57. unpacker.feed(packed)
  58. msg = "3 exceeds max_array_len"
  59. with pytest.raises(ValueError, match=msg):
  60. unpacker.unpack()
  61. def test_max_map_len(self):
  62. d = {1: 2, 3: 4, 5: 6}
  63. packed = packb(d)
  64. unpacker = Unpacker(max_map_len=3)
  65. unpacker.feed(packed)
  66. assert unpacker.unpack() == d
  67. unpacker = Unpacker(max_map_len=2)
  68. unpacker.feed(packed)
  69. msg = "3 exceeds max_map_len"
  70. with pytest.raises(ValueError, match=msg):
  71. unpacker.unpack()
  72. def test_max_ext_len(self):
  73. d = ExtType(42, b"abc")
  74. packed = packb(d)
  75. unpacker = Unpacker(max_ext_len=3)
  76. unpacker.feed(packed)
  77. assert unpacker.unpack() == d
  78. unpacker = Unpacker(max_ext_len=2)
  79. unpacker.feed(packed)
  80. msg = "4 exceeds max_ext_len"
  81. with pytest.raises(ValueError, match=msg):
  82. unpacker.unpack()