test_streaming.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #
  2. # This file is part of pyasn1 software.
  3. #
  4. # Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
  5. # License: https://pyasn1.readthedocs.io/en/latest/license.html
  6. #
  7. import io
  8. import sys
  9. import unittest
  10. from __tests__.base import BaseTestCase
  11. from pyasn1.codec import streaming
  12. class CachingStreamWrapperTestCase(BaseTestCase):
  13. def setUp(self):
  14. self.shortText = b"abcdefghij"
  15. self.longText = self.shortText * (io.DEFAULT_BUFFER_SIZE * 5)
  16. self.shortStream = io.BytesIO(self.shortText)
  17. self.longStream = io.BytesIO(self.longText)
  18. def testReadJustFromCache(self):
  19. wrapper = streaming.CachingStreamWrapper(self.shortStream)
  20. wrapper.read(6)
  21. wrapper.seek(3)
  22. assert wrapper.read(1) == b"d"
  23. assert wrapper.read(1) == b"e"
  24. assert wrapper.tell() == 5
  25. def testReadFromCacheAndStream(self):
  26. wrapper = streaming.CachingStreamWrapper(self.shortStream)
  27. wrapper.read(6)
  28. wrapper.seek(3)
  29. assert wrapper.read(4) == b"defg"
  30. assert wrapper.tell() == 7
  31. def testReadJustFromStream(self):
  32. wrapper = streaming.CachingStreamWrapper(self.shortStream)
  33. assert wrapper.read(6) == b"abcdef"
  34. assert wrapper.tell() == 6
  35. def testPeek(self):
  36. wrapper = streaming.CachingStreamWrapper(self.longStream)
  37. read_bytes = wrapper.peek(io.DEFAULT_BUFFER_SIZE + 73)
  38. assert len(read_bytes) == io.DEFAULT_BUFFER_SIZE + 73
  39. assert read_bytes.startswith(b"abcdefg")
  40. assert wrapper.tell() == 0
  41. assert wrapper.read(4) == b"abcd"
  42. def testMarkedPositionResets(self):
  43. wrapper = streaming.CachingStreamWrapper(self.longStream)
  44. wrapper.read(10)
  45. wrapper.markedPosition = wrapper.tell()
  46. assert wrapper.markedPosition == 10
  47. # Reach the maximum capacity of cache
  48. wrapper.read(io.DEFAULT_BUFFER_SIZE)
  49. assert wrapper.tell() == 10 + io.DEFAULT_BUFFER_SIZE
  50. # The following should clear the cache
  51. wrapper.markedPosition = wrapper.tell()
  52. assert wrapper.markedPosition == 0
  53. assert len(wrapper._cache.getvalue()) == 0
  54. suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
  55. if __name__ == '__main__':
  56. unittest.TextTestRunner(verbosity=2).run(suite)