]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - test_khashmir.py
major cleanup, updated for twisted
[quix0rs-apt-p2p.git] / test_khashmir.py
1 from unittest import *
2 from khashmir import *
3 import khash
4
5 from whrandom import randrange
6
7 import os
8
9 if __name__ =="__main__":
10     tests = defaultTestLoader.loadTestsFromNames([sys.argv[0][:-3]])
11     result = TextTestRunner().run(tests)
12
13 class SimpleTests(TestCase):
14     def setUp(self):
15         self.a = Khashmir('127.0.0.1', 4044, '/tmp/a.test')
16         self.b = Khashmir('127.0.0.1', 4045, '/tmp/b.test')
17         
18     def tearDown(self):
19         self.a.listenport.stopListening()
20         self.b.listenport.stopListening()
21         os.unlink('/tmp/a.test')
22         os.unlink('/tmp/b.test')                
23         reactor.iterate()
24         reactor.iterate()
25
26     def addContacts(self):
27         self.a.addContact('127.0.0.1', 4045)
28         reactor.iterate()
29         reactor.iterate()
30         reactor.iterate()
31         reactor.iterate()
32
33     def testAddContact(self):
34         self.assertEqual(len(self.a.table.buckets), 1) 
35         self.assertEqual(len(self.a.table.buckets[0].l), 0)
36
37         self.assertEqual(len(self.b.table.buckets), 1) 
38         self.assertEqual(len(self.b.table.buckets[0].l), 0)
39
40         self.addContacts()
41
42         self.assertEqual(len(self.a.table.buckets), 1) 
43         self.assertEqual(len(self.a.table.buckets[0].l), 1)
44         self.assertEqual(len(self.b.table.buckets), 1) 
45         self.assertEqual(len(self.b.table.buckets[0].l), 1)
46
47     def testStoreRetrieve(self):
48         self.addContacts()
49         self.got = 0
50         self.a.storeValueForKey(sha('foo').digest(), 'foobar')
51         reactor.iterate()
52         reactor.iterate()
53         reactor.iterate()
54         reactor.iterate()
55         reactor.iterate()
56         reactor.iterate()
57         self.a.valueForKey(sha('foo').digest(), self._cb)
58         reactor.iterate()
59         reactor.iterate()
60         reactor.iterate()
61         reactor.iterate()
62         reactor.iterate()
63         reactor.iterate()
64         reactor.iterate()
65
66     def _cb(self, val):
67         if not val:
68             self.assertEqual(self.got, 1)
69         elif 'foobar' in val:
70             self.got = 1
71
72
73 class MultiTest(TestCase):
74     num = 30
75     def _done(self, val):
76         self.done = 1
77         
78     def setUp(self):
79         self.l = []
80         self.startport = 4044
81         for i in range(self.num):
82             self.l.append(Khashmir('127.0.0.1', self.startport + i, '/tmp/%s.test' % (self.startport + i)))
83         reactor.iterate()
84         reactor.iterate()
85         
86         for i in self.l:
87             i.addContact('127.0.0.1', self.l[randrange(0,self.num)].port)
88             i.addContact('127.0.0.1', self.l[randrange(0,self.num)].port)
89             i.addContact('127.0.0.1', self.l[randrange(0,self.num)].port)
90             reactor.iterate()
91             reactor.iterate()
92             reactor.iterate() 
93             
94         for i in self.l:
95             self.done = 0
96             i.findCloseNodes(self._done)
97             while not self.done:
98                 reactor.iterate()
99         for i in self.l:
100             self.done = 0
101             i.findCloseNodes(self._done)
102             while not self.done:
103                 reactor.iterate()
104
105     def tearDown(self):
106         for i in self.l:
107             i.listenport.stopListening()
108         for i in range(self.startport, self.startport+self.num):
109             os.unlink('/tmp/%s.test' % i)
110             
111         reactor.iterate()
112         
113     def testStoreRetrieve(self):
114         for i in range(10):
115             K = khash.newID()
116             V = khash.newID()
117             
118             self.done = 0
119             def _cb(val):
120                 self.done = 1
121             self.l[randrange(0, self.num)].storeValueForKey(K, V, _cb)
122             while not self.done:
123                 reactor.iterate()
124
125             self.got = 0
126             self.done = 0
127
128             def _cb(val):
129                 if not val:
130                     self.done = 1
131                     self.assertEqual(self.got, 1)
132                 elif V in val:
133                     self.got = 1
134                                     
135             self.l[randrange(0, self.num)].valueForKey(K, _cb)
136             while not self.done:
137                 reactor.iterate()