]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - test_krpc.py
*** empty log message ***
[quix0rs-apt-p2p.git] / test_krpc.py
1 from unittest import *
2 from krpc import *
3 from airhook import *
4
5 KRPC.noisy = 0
6
7 import sys
8
9 if __name__ =="__main__":
10     tests = unittest.defaultTestLoader.loadTestsFromNames([sys.argv[0][:-3]])
11     result = unittest.TextTestRunner().run(tests)
12
13
14 def connectionForAddr(host, port):
15     return host
16     
17 class Receiver(protocol.Factory):
18     protocol = KRPC
19     def __init__(self):
20         self.buf = []
21     def krpc_store(self, msg, _krpc_sender):
22         self.buf += [msg]
23     def krpc_echo(self, msg, _krpc_sender):
24         return msg
25
26 class SimpleTest(TestCase):
27     def setUp(self):
28         self.noisy = 0
29         
30         self.af = Receiver()
31         self.bf = Receiver()        
32         self.a = listenAirhookStream(4040, self.af)
33         self.b = listenAirhookStream(4041, self.bf)
34         
35     def testSimpleMessage(self):
36         self.noisy = 0
37         self.a.connectionForAddr(('127.0.0.1', 4041)).protocol.sendRequest('store', {'msg' : "This is a test."})
38         reactor.iterate()
39         reactor.iterate()
40         reactor.iterate()
41         self.assertEqual(self.bf.buf, ["This is a test."])
42
43 class SimpleTest(TestCase):
44     def setUp(self):
45         self.noisy = 0
46         
47         self.af = Receiver()
48         self.bf = Receiver()        
49         self.a = listenAirhookStream(4050, self.af)
50         self.b = listenAirhookStream(4051, self.bf)
51         
52     def testSimpleMessage(self):
53         self.noisy = 0
54         self.a.connectionForAddr(('127.0.0.1', 4051)).protocol.sendRequest('store', {'msg' : "This is a test."})
55         reactor.iterate()
56         reactor.iterate()
57         reactor.iterate()
58         self.assertEqual(self.bf.buf, ["This is a test."])
59
60 class BlastTest(TestCase):
61     def setUp(self):
62         self.noisy = 0
63         
64         self.af = Receiver()
65         self.bf = Receiver()        
66         self.a = listenAirhookStream(4060, self.af)
67         self.b = listenAirhookStream(4061, self.bf)
68
69     def testMessageBlast(self):
70         self.a.connectionForAddr(('127.0.0.1', 4061)).protocol.sendRequest('store', {'msg' : "This is a test."})
71         reactor.iterate()
72         reactor.iterate()
73         reactor.iterate()
74         self.assertEqual(self.bf.buf, ["This is a test."])
75         self.bf.buf = []
76         
77         for i in range(100):
78             self.a.connectionForAddr(('127.0.0.1', 4061)).protocol.sendRequest('store', {'msg' : "This is a test."})
79             reactor.iterate()
80             #self.bf.buf = []
81         self.assertEqual(self.bf.buf, ["This is a test."] * 100)
82
83 class EchoTest(TestCase):
84     def setUp(self):
85         self.noisy = 0
86         self.msg = None
87         
88         self.af = Receiver()
89         self.bf = Receiver()        
90         self.a = listenAirhookStream(4042, self.af)
91         self.b = listenAirhookStream(4043, self.bf)
92         
93     def testEcho(self):
94         df = self.a.connectionForAddr(('127.0.0.1', 4043)).protocol.sendRequest('echo', {'msg' : "This is a test."})
95         df.addCallback(self.gotMsg)
96         reactor.iterate()
97         reactor.iterate()
98         reactor.iterate()
99         reactor.iterate()
100         self.assertEqual(self.msg, "This is a test.")
101
102     def gotMsg(self, dict):
103         _krpc_sender = dict['_krpc_sender']
104         msg = dict['rsp']
105         self.msg = msg
106
107 class ManyEchoTest(TestCase):
108     def setUp(self):
109         self.noisy = 0
110         self.msg = None
111         
112         self.af = Receiver()
113         self.bf = Receiver()        
114         self.a = listenAirhookStream(4588, self.af)
115         self.b = listenAirhookStream(4589, self.bf)
116         
117     def testManyEcho(self):
118         df = self.a.connectionForAddr(('127.0.0.1', 4589)).protocol.sendRequest('echo', {'msg' : "This is a test."})
119         df.addCallback(self.gotMsg)
120         reactor.iterate()
121         reactor.iterate()
122         reactor.iterate()
123         reactor.iterate()
124         self.assertEqual(self.msg, "This is a test.")
125         for i in xrange(100):
126             self.msg = None
127             df = self.a.connectionForAddr(('127.0.0.1', 4589)).protocol.sendRequest('echo', {'msg' : "This is a test."})
128             df.addCallback(self.gotMsg)
129             reactor.iterate()
130             reactor.iterate()
131             reactor.iterate()
132             reactor.iterate()
133             self.assertEqual(self.msg, "This is a test.")
134             
135     def gotMsg(self, dict):
136         _krpc_sender = dict['_krpc_sender']
137         msg = dict['rsp']
138         self.msg = msg
139
140 class MultiEchoTest(TestCase):
141     def setUp(self):
142         self.noisy = 0
143         self.msg = None
144         
145         self.af = Receiver()
146         self.bf = Receiver()        
147         self.a = listenAirhookStream(4048, self.af)
148         self.b = listenAirhookStream(4049, self.bf)
149         
150     def testMultiEcho(self):
151         self.noisy = 1
152         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is a test."})
153         df.addCallback(self.gotMsg)
154         reactor.iterate()
155         reactor.iterate()
156         reactor.iterate()
157         reactor.iterate()
158         self.assertEqual(self.msg, "This is a test.")
159
160         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is another test."})
161         df.addCallback(self.gotMsg)
162         reactor.iterate()
163         reactor.iterate()
164         reactor.iterate()
165         reactor.iterate()
166         self.assertEqual(self.msg, "This is another test.")
167
168         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is yet another test."})
169         df.addCallback(self.gotMsg)
170         reactor.iterate()
171         reactor.iterate()
172         reactor.iterate()
173         reactor.iterate()
174         self.assertEqual(self.msg, "This is yet another test.")
175
176     def gotMsg(self, dict):
177         _krpc_sender = dict['_krpc_sender']
178         msg = dict['rsp']
179         self.msg = msg
180
181 class EchoResetTest(TestCase):
182     def setUp(self):
183         self.noisy = 0
184         self.msg = None
185         
186         self.af = Receiver()
187         self.bf = Receiver()        
188         self.a = listenAirhookStream(4078, self.af)
189         self.b = listenAirhookStream(4079, self.bf)
190         
191     def testEchoReset(self):
192         self.noisy = 1
193         df = self.a.connectionForAddr(('127.0.0.1', 4079)).protocol.sendRequest('echo', {'msg' : "This is a test."})
194         df.addCallback(self.gotMsg)
195         reactor.iterate()
196         reactor.iterate()
197         reactor.iterate()
198         reactor.iterate()
199         self.assertEqual(self.msg, "This is a test.")
200
201         df = self.a.connectionForAddr(('127.0.0.1', 4079)).protocol.sendRequest('echo', {'msg' : "This is another test."})
202         df.addCallback(self.gotMsg)
203         reactor.iterate()
204         reactor.iterate()
205         reactor.iterate()
206         reactor.iterate()
207         self.assertEqual(self.msg, "This is another test.")
208
209         del(self.a.connections[('127.0.0.1', 4079)])
210         df = self.a.connectionForAddr(('127.0.0.1', 4079)).protocol.sendRequest('echo', {'msg' : "This is yet another test."})
211         df.addCallback(self.gotMsg)
212         reactor.iterate()
213         reactor.iterate()
214         reactor.iterate()
215         reactor.iterate()
216         self.assertEqual(self.msg, "This is yet another test.")
217
218     def testLotsofEchoReset(self):
219         for i in range(100):
220             self.testEchoReset()
221     def gotMsg(self, dict):
222         _krpc_sender = dict['_krpc_sender']
223         msg = dict['rsp']
224         self.msg = msg
225
226 class UnknownMethErrTest(TestCase):
227     def setUp(self):
228         self.noisy = 0
229         self.err = None
230         self.af = Receiver()
231         self.bf = Receiver()        
232         self.a = listenAirhookStream(4044, self.af)
233         self.b = listenAirhookStream(4045, self.bf)
234         
235     def testUnknownMeth(self):
236         self.noisy = 1
237         df = self.a.connectionForAddr(('127.0.0.1', 4045)).protocol.sendRequest('blahblah', {'msg' : "This is a test."})
238         df.addErrback(self.gotErr)
239         reactor.iterate()
240         reactor.iterate()
241         reactor.iterate()
242         reactor.iterate()
243         self.assertEqual(self.err, KRPC_ERROR_METHOD_UNKNOWN)
244
245     def gotErr(self, err):
246         self.err = err.value
247