blob: 00e6137e5ab3a63572741d7edea8a1dbf1ff8fc5 [file] [log] [blame]
Eli Benderskydb51f262013-03-23 06:33:09 -07001#-------------------------------------------------------------------------------
2# elftools tests
3#
4# Eli Bendersky (eliben@gmail.com)
5# This code is in the public domain
6#-------------------------------------------------------------------------------
Eli Bendersky62ae3282011-12-24 06:55:59 +02007try:
8 import unittest2 as unittest
9except ImportError:
10 import unittest
Eli Benderskya1d61402011-11-28 06:25:52 +020011from random import randint
12
Eli Benderskyd32d7112013-04-06 07:00:00 -070013from test.utils import setup_syspath; setup_syspath()
Eli Bendersky79271e92012-01-27 10:25:47 +020014from elftools.common.py3compat import int2byte, BytesIO
Eli Benderskya1d61402011-11-28 06:25:52 +020015from elftools.common.utils import (parse_cstring_from_stream,
16 preserve_stream_pos)
17
18
19class Test_parse_cstring_from_stream(unittest.TestCase):
Eli Bendersky79271e92012-01-27 10:25:47 +020020 def _make_random_bytes(self, n):
21 return b''.join(int2byte(randint(32, 127)) for i in range(n))
Eli Benderskydb51f262013-03-23 06:33:09 -070022
Eli Benderskya1d61402011-11-28 06:25:52 +020023 def test_small1(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020024 sio = BytesIO(b'abcdefgh\x0012345')
25 self.assertEqual(parse_cstring_from_stream(sio), b'abcdefgh')
26 self.assertEqual(parse_cstring_from_stream(sio, 2), b'cdefgh')
27 self.assertEqual(parse_cstring_from_stream(sio, 8), b'')
Eli Benderskya1d61402011-11-28 06:25:52 +020028
29 def test_small2(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020030 sio = BytesIO(b'12345\x006789\x00abcdefg\x00iii')
31 self.assertEqual(parse_cstring_from_stream(sio), b'12345')
32 self.assertEqual(parse_cstring_from_stream(sio, 5), b'')
33 self.assertEqual(parse_cstring_from_stream(sio, 6), b'6789')
Eli Benderskya1d61402011-11-28 06:25:52 +020034
35 def test_large1(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020036 text = b'i' * 400 + b'\x00' + b'bb'
37 sio = BytesIO(text)
38 self.assertEqual(parse_cstring_from_stream(sio), b'i' * 400)
39 self.assertEqual(parse_cstring_from_stream(sio, 150), b'i' * 250)
Eli Benderskya1d61402011-11-28 06:25:52 +020040
41 def test_large2(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020042 text = self._make_random_bytes(5000) + b'\x00' + b'jujajaja'
43 sio = BytesIO(text)
Eli Benderskya1d61402011-11-28 06:25:52 +020044 self.assertEqual(parse_cstring_from_stream(sio), text[:5000])
45 self.assertEqual(parse_cstring_from_stream(sio, 2348), text[2348:5000])
46
47
48class Test_preserve_stream_pos(object):
49 def test_basic(self):
Eli Bendersky79271e92012-01-27 10:25:47 +020050 sio = BytesIO('abcdef')
Eli Benderskya1d61402011-11-28 06:25:52 +020051 with preserve_stream_pos(sio):
52 sio.seek(4)
53 self.assertEqual(stream.tell(), 0)
54
55 sio.seek(5)
56 with preserve_stream_pos(sio):
57 sio.seek(0)
58 self.assertEqual(stream.tell(), 5)
59
60
61if __name__ == '__main__':
62 unittest.main()
63
64
65