From 1b6ed33df9c3397c97796cf6a0e634d2ed418fc5 Mon Sep 17 00:00:00 2001 From: Cameron Dale Date: Sun, 13 Jan 2008 12:55:23 -0800 Subject: [PATCH] Changed bencode's test functions to trial unittests. --- apt_dht_Khashmir/bencode.py | 254 +++++++++++------------------------- 1 file changed, 78 insertions(+), 176 deletions(-) diff --git a/apt_dht_Khashmir/bencode.py b/apt_dht_Khashmir/bencode.py index 427af34..04b3c8e 100644 --- a/apt_dht_Khashmir/bencode.py +++ b/apt_dht_Khashmir/bencode.py @@ -20,9 +20,9 @@ try: from types import UnicodeType except ImportError: UnicodeType = None -from cStringIO import StringIO from twisted.python import log +from twisted.trial import unittest def decode_int(x, f): """Bdecode an integer. @@ -162,155 +162,11 @@ def bdecode(x, sloppy = 0): r, l = decode_func[x[0]](x, 0) # except (IndexError, KeyError): except (IndexError, KeyError, ValueError): - log.err() raise ValueError, "bad bencoded data" if not sloppy and l != len(x): raise ValueError, "bad bencoded data" return r -def test_bdecode(): - """A test routine for the bdecoding functions.""" - try: - bdecode('0:0:') - assert 0 - except ValueError: - pass - try: - bdecode('ie') - assert 0 - except ValueError: - pass - try: - bdecode('i341foo382e') - assert 0 - except ValueError: - pass - assert bdecode('i4e') == 4L - assert bdecode('i0e') == 0L - assert bdecode('i123456789e') == 123456789L - assert bdecode('i-10e') == -10L - try: - bdecode('i-0e') - assert 0 - except ValueError: - pass - try: - bdecode('i123') - assert 0 - except ValueError: - pass - try: - bdecode('') - assert 0 - except ValueError: - pass - try: - bdecode('i6easd') - assert 0 - except ValueError: - pass - try: - bdecode('35208734823ljdahflajhdf') - assert 0 - except ValueError: - pass - try: - bdecode('2:abfdjslhfld') - assert 0 - except ValueError: - pass - assert bdecode('0:') == '' - assert bdecode('3:abc') == 'abc' - assert bdecode('10:1234567890') == '1234567890' - try: - bdecode('02:xy') - assert 0 - except ValueError: - pass - try: - bdecode('l') - assert 0 - except ValueError: - pass - assert bdecode('le') == [] - try: - bdecode('leanfdldjfh') - assert 0 - except ValueError: - pass - assert bdecode('l0:0:0:e') == ['', '', ''] - try: - bdecode('relwjhrlewjh') - assert 0 - except ValueError: - pass - assert bdecode('li1ei2ei3ee') == [1, 2, 3] - assert bdecode('l3:asd2:xye') == ['asd', 'xy'] - assert bdecode('ll5:Alice3:Bobeli2ei3eee') == [['Alice', 'Bob'], [2, 3]] - try: - bdecode('d') - assert 0 - except ValueError: - pass - try: - bdecode('defoobar') - assert 0 - except ValueError: - pass - assert bdecode('de') == {} - assert bdecode('d3:agei25e4:eyes4:bluee') == {'age': 25, 'eyes': 'blue'} - assert bdecode('d8:spam.mp3d6:author5:Alice6:lengthi100000eee') == {'spam.mp3': {'author': 'Alice', 'length': 100000}} - try: - bdecode('d3:fooe') - assert 0 - except ValueError: - pass - try: - bdecode('di1e0:e') - assert 0 - except ValueError: - pass - try: - bdecode('d1:b0:1:a0:e') - assert 0 - except ValueError: - pass - try: - bdecode('d1:a0:1:a0:e') - assert 0 - except ValueError: - pass - try: - bdecode('i03e') - assert 0 - except ValueError: - pass - try: - bdecode('l01:ae') - assert 0 - except ValueError: - pass - try: - bdecode('9999:x') - assert 0 - except ValueError: - pass - try: - bdecode('l0:') - assert 0 - except ValueError: - pass - try: - bdecode('d0:0:') - assert 0 - except ValueError: - pass - try: - bdecode('d0:') - assert 0 - except ValueError: - pass - bencached_marker = [] class Bencached: @@ -446,8 +302,7 @@ encode_func[StringType] = encode_string encode_func[ListType] = encode_list encode_func[TupleType] = encode_list encode_func[DictType] = encode_dict -if BooleanType: - encode_func[BooleanType] = encode_bool +encode_func[BooleanType] = encode_bool if UnicodeType: encode_func[UnicodeType] = encode_unicode @@ -465,35 +320,82 @@ def bencode(x): try: encode_func[type(x)](x, r) except: - log.err() - assert 0 + raise ValueError, "failed to bencode the data" return ''.join(r) -def test_bencode(): - """A test routine for the bencoding functions.""" - assert bencode(4) == 'i4e' - assert bencode(0) == 'i0e' - assert bencode(-10) == 'i-10e' - assert bencode(12345678901234567890L) == 'i12345678901234567890e' - assert bencode('') == '0:' - assert bencode('abc') == '3:abc' - assert bencode('1234567890') == '10:1234567890' - assert bencode([]) == 'le' - assert bencode([1, 2, 3]) == 'li1ei2ei3ee' - assert bencode([['Alice', 'Bob'], [2, 3]]) == 'll5:Alice3:Bobeli2ei3eee' - assert bencode({}) == 'de' - assert bencode({'age': 25, 'eyes': 'blue'}) == 'd3:agei25e4:eyes4:bluee' - assert bencode({'spam.mp3': {'author': 'Alice', 'length': 100000}}) == 'd8:spam.mp3d6:author5:Alice6:lengthi100000eee' - try: - bencode({1: 'foo'}) - assert 0 - except AssertionError: - pass +class TestBencode(unittest.TestCase): + """Test the bencoding and bdecoding of data.""" - -try: - import psyco - psyco.bind(bdecode) - psyco.bind(bencode) -except ImportError: - pass + timeout = 2 + + def test_bdecode_string(self): + self.failUnlessRaises(ValueError, bdecode, '0:0:') + self.failUnlessRaises(ValueError, bdecode, '') + self.failUnlessRaises(ValueError, bdecode, '35208734823ljdahflajhdf') + self.failUnlessRaises(ValueError, bdecode, '2:abfdjslhfld') + self.failUnlessEqual(bdecode('0:'), '') + self.failUnlessEqual(bdecode('3:abc'), 'abc') + self.failUnlessEqual(bdecode('10:1234567890'), '1234567890') + self.failUnlessRaises(ValueError, bdecode, '02:xy') + self.failUnlessRaises(ValueError, bdecode, '9999:x') + + def test_bdecode_int(self): + self.failUnlessRaises(ValueError, bdecode, 'ie') + self.failUnlessRaises(ValueError, bdecode, 'i341foo382e') + self.failUnlessEqual(bdecode('i4e'), 4L) + self.failUnlessEqual(bdecode('i0e'), 0L) + self.failUnlessEqual(bdecode('i123456789e'), 123456789L) + self.failUnlessEqual(bdecode('i-10e'), -10L) + self.failUnlessRaises(ValueError, bdecode, 'i-0e') + self.failUnlessRaises(ValueError, bdecode, 'i123') + self.failUnlessRaises(ValueError, bdecode, 'i6easd') + self.failUnlessRaises(ValueError, bdecode, 'i03e') + + def test_bdecode_list(self): + self.failUnlessRaises(ValueError, bdecode, 'l') + self.failUnlessEqual(bdecode('le'), []) + self.failUnlessRaises(ValueError, bdecode, 'leanfdldjfh') + self.failUnlessEqual(bdecode('l0:0:0:e'), ['', '', '']) + self.failUnlessRaises(ValueError, bdecode, 'relwjhrlewjh') + self.failUnlessEqual(bdecode('li1ei2ei3ee'), [1, 2, 3]) + self.failUnlessEqual(bdecode('l3:asd2:xye'), ['asd', 'xy']) + self.failUnlessEqual(bdecode('ll5:Alice3:Bobeli2ei3eee'), [['Alice', 'Bob'], [2, 3]]) + self.failUnlessRaises(ValueError, bdecode, 'l01:ae') + self.failUnlessRaises(ValueError, bdecode, 'l0:') + + def test_bdecode_dict(self): + self.failUnlessRaises(ValueError, bdecode, 'd') + self.failUnlessRaises(ValueError, bdecode, 'defoobar') + self.failUnlessEqual(bdecode('de'), {}) + self.failUnlessEqual(bdecode('d3:agei25e4:eyes4:bluee'), {'age': 25, 'eyes': 'blue'}) + self.failUnlessEqual(bdecode('d8:spam.mp3d6:author5:Alice6:lengthi100000eee'), + {'spam.mp3': {'author': 'Alice', 'length': 100000}}) + self.failUnlessRaises(ValueError, bdecode, 'd3:fooe') + self.failUnlessRaises(ValueError, bdecode, 'di1e0:e') + self.failUnlessRaises(ValueError, bdecode, 'd1:b0:1:a0:e') + self.failUnlessRaises(ValueError, bdecode, 'd1:a0:1:a0:e') + self.failUnlessRaises(ValueError, bdecode, 'd0:0:') + self.failUnlessRaises(ValueError, bdecode, 'd0:') + + def test_bencode_int(self): + self.failUnlessEqual(bencode(4), 'i4e') + self.failUnlessEqual(bencode(0), 'i0e') + self.failUnlessEqual(bencode(-10), 'i-10e') + self.failUnlessEqual(bencode(12345678901234567890L), 'i12345678901234567890e') + + def test_bencode_string(self): + self.failUnlessEqual(bencode(''), '0:') + self.failUnlessEqual(bencode('abc'), '3:abc') + self.failUnlessEqual(bencode('1234567890'), '10:1234567890') + + def test_bencode_list(self): + self.failUnlessEqual(bencode([]), 'le') + self.failUnlessEqual(bencode([1, 2, 3]), 'li1ei2ei3ee') + self.failUnlessEqual(bencode([['Alice', 'Bob'], [2, 3]]), 'll5:Alice3:Bobeli2ei3eee') + + def test_bencode_dict(self): + self.failUnlessEqual(bencode({}), 'de') + self.failUnlessEqual(bencode({'age': 25, 'eyes': 'blue'}), 'd3:agei25e4:eyes4:bluee') + self.failUnlessEqual(bencode({'spam.mp3': {'author': 'Alice', 'length': 100000}}), + 'd8:spam.mp3d6:author5:Alice6:lengthi100000eee') + self.failUnlessRaises(ValueError, bencode, {1: 'foo'}) -- 2.39.5