]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/test/test_util.py
more allmydata.util test coverage, rename the test case to be more correct
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / test / test_util.py
1
2 def foo(): pass # keep the line number constant
3
4 from twisted.trial import unittest
5
6 from allmydata.util import bencode, idlib, humanreadable
7
8
9 class IDLib(unittest.TestCase):
10     def test_b2a(self):
11         self.failUnlessEqual(idlib.b2a("\x12\x34"), "ci2a====")
12     def test_b2a_or_none(self):
13         self.failUnlessEqual(idlib.b2a_or_none(None), None)
14         self.failUnlessEqual(idlib.b2a_or_none("\x12\x34"), "ci2a====")
15     def test_a2b(self):
16         self.failUnlessEqual(idlib.a2b("ci2a===="), "\x12\x34")
17         self.failUnlessRaises(TypeError, idlib.a2b, "bogus")
18     def test_peerid(self):
19         # these are 160-bit numbers
20         peerid = "\x80" + "\x00" * 19
21         short = idlib.peerid_to_short_string(peerid)
22         self.failUnlessEqual(short, "qaaa")
23
24 class NoArgumentException(Exception):
25     def __init__(self):
26         pass
27
28 class HumanReadable(unittest.TestCase):
29     def test_repr(self):
30         hr = humanreadable.hr
31         self.failUnlessEqual(hr(foo), "<foo() at test_utils.py:2>")
32         self.failUnlessEqual(hr(self.test_repr),
33                              "<bound method HumanReadable.test_repr of <allmydata.test.test_utils.HumanReadable testMethod=test_repr>>")
34         self.failUnlessEqual(hr(1L), "1")
35         self.failUnlessEqual(hr(10**40),
36                              "100000000000000000...000000000000000000")
37         self.failUnlessEqual(hr(self), "<allmydata.test.test_utils.HumanReadable testMethod=test_repr>")
38         self.failUnlessEqual(hr([1,2]), "[1, 2]")
39         self.failUnlessEqual(hr({1:2}), "{1:2}")
40         try:
41             raise RuntimeError
42         except Exception, e:
43             self.failUnlessEqual(hr(e), "<RuntimeError: ()>")
44         try:
45             raise RuntimeError("oops")
46         except Exception, e:
47             self.failUnlessEqual(hr(e), "<RuntimeError: 'oops'>")
48         try:
49             raise NoArgumentException
50         except Exception, e:
51             self.failUnlessEqual(hr(e), "<NoArgumentException>")
52
53
54 class MyList(list):
55     pass
56
57 class Bencode(unittest.TestCase):
58     def test_bencode(self):
59         e = bencode.bencode
60         self.failUnlessEqual(e(4), "i4e")
61         self.failUnlessEqual(e([1,2]), "li1ei2ee")
62         self.failUnlessEqual(e(MyList([1,2])), "li1ei2ee")
63         self.failUnlessEqual(e({1:2}), "di1ei2ee")
64         self.failUnlessEqual(e(u"a"), "u1:a")
65         self.failUnlessEqual(e([True,False]), "lb1b0e")
66         self.failUnlessEqual(e(1.5), "f1.5e")
67         self.failUnlessEqual(e("foo"), "3:foo")
68         d = bencode.bdecode
69         self.failUnlessEqual(d("li1ei2ee"), [1,2])
70         self.failUnlessEqual(d("u1:a"), u"a")
71         self.failUnlessRaises(ValueError, d, "u10:short")
72         self.failUnlessEqual(d("lb1b0e"), [True,False])
73         self.failUnlessRaises(ValueError, d, "b2")
74         self.failUnlessEqual(d("f1.5e"), 1.5)
75         self.failUnlessEqual(d("3:foo"), "foo")
76         self.failUnlessRaises(ValueError, d,
77                               "38:When doing layout, always plan ah")
78         # ooh! fascinating! bdecode requires string keys! I think this ought
79         # to be changed
80         #self.failUnlessEqual(d("di1ei2ee"), {1:2})
81         self.failUnlessEqual(d("d1:ai2eu1:bi3ee"), {"a":2, u"b":3})
82         self.failUnlessRaises(ValueError, d, "di1ei2ee")
83         self.failUnlessRaises(ValueError, d, "d1:ai1e1:ai2ee")
84
85         self.failUnlessRaises(ValueError, d, "i1ei2e")
86
87         # now run all the module's builtin tests
88         bencode.test_decode_raw_string()
89         bencode.test_encode_and_decode_unicode_results_in_unicode_type()
90         bencode.test_encode_and_decode_unicode_at_least_preserves_the_content_even_if_it_flattens_the_type()
91         bencode.test_dict_forbids_non_string_key()
92         bencode.test_dict_forbids_key_repeat()
93         bencode.test_empty_dict()
94         bencode.test_dict_allows_unicode_keys()
95         bencode.test_ValueError_in_decode_unknown()
96         bencode.test_encode_and_decode_none()
97         bencode.test_encode_and_decode_long()
98         bencode.test_encode_and_decode_int()
99         bencode.test_encode_and_decode_float()
100         bencode.test_encode_and_decode_bool()
101         #bencode.test_decode_noncanonical_int()
102         bencode.test_encode_and_decode_dict()
103         bencode.test_encode_and_decode_list()
104         bencode.test_encode_and_decode_tuple()
105         bencode.test_encode_and_decode_empty_dict()
106         bencode.test_encode_and_decode_complex_object()
107         bencode.test_unfinished_list()
108         bencode.test_unfinished_dict()
109         bencode.test_unsupported_type()
110