blob: 24ea50f1f6d5a6c8cd4eb005c7fc33ac07c780c3 [file] [log] [blame]
Yesudeep Mangalapillyb5bab222011-08-24 16:53:39 +05301'''Tests varblock operations.'''
Sybren A. Stüvel3200f892011-07-31 20:47:49 +02002
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +05303
Yesudeep Mangalapilly58024312011-08-11 01:48:25 +05304try:
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +05305 from StringIO import StringIO as BytesIO
Yesudeep Mangalapilly58024312011-08-11 01:48:25 +05306except ImportError:
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +05307 from io import BytesIO
Sybren A. Stüvel3200f892011-07-31 20:47:49 +02008import unittest
9
10import rsa
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053011from rsa._compat import b
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020012from rsa import varblock
13
14class VarintTest(unittest.TestCase):
15
16 def test_read_varint(self):
17
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053018 encoded = b('\xac\x02crummy')
19 infile = BytesIO(encoded)
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020020
21 (decoded, read) = varblock.read_varint(infile)
22
23 # Test the returned values
24 self.assertEqual(300, decoded)
25 self.assertEqual(2, read)
26
27 # The rest of the file should be untouched
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053028 self.assertEqual(b('crummy'), infile.read())
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020029
30 def test_read_zero(self):
31
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053032 encoded = b('\x00crummy')
33 infile = BytesIO(encoded)
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020034
35 (decoded, read) = varblock.read_varint(infile)
36
37 # Test the returned values
38 self.assertEqual(0, decoded)
39 self.assertEqual(1, read)
40
41 # The rest of the file should be untouched
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053042 self.assertEqual(b('crummy'), infile.read())
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020043
44 def test_write_varint(self):
45
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053046 expected = b('\xac\x02')
47 outfile = BytesIO()
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020048
49 written = varblock.write_varint(outfile, 300)
50
51 # Test the returned values
52 self.assertEqual(expected, outfile.getvalue())
53 self.assertEqual(2, written)
54
55
56 def test_write_zero(self):
57
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053058 outfile = BytesIO()
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020059 written = varblock.write_varint(outfile, 0)
60
61 # Test the returned values
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053062 self.assertEqual(b('\x00'), outfile.getvalue())
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020063 self.assertEqual(1, written)
64
65
66class VarblockTest(unittest.TestCase):
67
68 def test_yield_varblock(self):
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053069 infile = BytesIO(b('\x01\x0512345\x06Sybren'))
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020070
71 varblocks = list(varblock.yield_varblocks(infile))
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053072 self.assertEqual([b('12345'), b('Sybren')], varblocks)
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020073
74class FixedblockTest(unittest.TestCase):
75
76 def test_yield_fixedblock(self):
77
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053078 infile = BytesIO(b('123456Sybren'))
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020079
80 fixedblocks = list(varblock.yield_fixedblocks(infile, 6))
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053081 self.assertEqual([b('123456'), b('Sybren')], fixedblocks)
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020082