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