]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - test_krpc.py
callbacks now return a dict now that has the _krpc_sender connection information
[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         self.noisy = 1
95         df = self.a.connectionForAddr(('127.0.0.1', 4043)).protocol.sendRequest('echo', {'msg' : "This is a test."})
96         df.addCallback(self.gotMsg)
97         reactor.iterate()
98         reactor.iterate()
99         reactor.iterate()
100         reactor.iterate()
101         self.assertEqual(self.msg, "This is a test.")
102
103     def gotMsg(self, dict):
104         _krpc_sender = dict['_krpc_sender']
105         msg = dict['rsp']
106         self.msg = msg
107
108 class MultiEchoTest(TestCase):
109     def setUp(self):
110         self.noisy = 0
111         self.msg = None
112         
113         self.af = Receiver()
114         self.bf = Receiver()        
115         self.a = listenAirhookStream(4048, self.af)
116         self.b = listenAirhookStream(4049, self.bf)
117         
118     def testMultiEcho(self):
119         self.noisy = 1
120         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is a test."})
121         df.addCallback(self.gotMsg)
122         reactor.iterate()
123         reactor.iterate()
124         reactor.iterate()
125         reactor.iterate()
126         self.assertEqual(self.msg, "This is a test.")
127
128         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is another test."})
129         df.addCallback(self.gotMsg)
130         reactor.iterate()
131         reactor.iterate()
132         reactor.iterate()
133         reactor.iterate()
134         self.assertEqual(self.msg, "This is another test.")
135
136         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is yet another test."})
137         df.addCallback(self.gotMsg)
138         reactor.iterate()
139         reactor.iterate()
140         reactor.iterate()
141         reactor.iterate()
142         self.assertEqual(self.msg, "This is yet another test.")
143
144     def gotMsg(self, dict):
145         _krpc_sender = dict['_krpc_sender']
146         msg = dict['rsp']
147         self.msg = msg
148
149 class EchoResetTest(TestCase):
150     def setUp(self):
151         self.noisy = 0
152         self.msg = None
153         
154         self.af = Receiver()
155         self.bf = Receiver()        
156         self.a = listenAirhookStream(4078, self.af)
157         self.b = listenAirhookStream(4079, self.bf)
158         
159     def testEchoReset(self):
160         self.noisy = 1
161         df = self.a.connectionForAddr(('127.0.0.1', 4079)).protocol.sendRequest('echo', {'msg' : "This is a test."})
162         df.addCallback(self.gotMsg)
163         reactor.iterate()
164         reactor.iterate()
165         reactor.iterate()
166         reactor.iterate()
167         self.assertEqual(self.msg, "This is a test.")
168
169         df = self.a.connectionForAddr(('127.0.0.1', 4079)).protocol.sendRequest('echo', {'msg' : "This is another test."})
170         df.addCallback(self.gotMsg)
171         reactor.iterate()
172         reactor.iterate()
173         reactor.iterate()
174         reactor.iterate()
175         self.assertEqual(self.msg, "This is another test.")
176
177         df = self.a.connectionForAddr(('127.0.0.1', 4079)).protocol.sendRequest('echo', {'msg' : "This is yet another test."})
178         df.addCallback(self.gotMsg)
179         reactor.iterate()
180         reactor.iterate()
181         reactor.iterate()
182         reactor.iterate()
183         self.assertEqual(self.msg, "This is yet another test.")
184
185     def gotMsg(self, dict):
186         _krpc_sender = dict['_krpc_sender']
187         msg = dict['rsp']
188         self.msg = msg
189
190 class UnknownMethErrTest(TestCase):
191     def setUp(self):
192         self.noisy = 0
193         self.err = None
194         self.af = Receiver()
195         self.bf = Receiver()        
196         self.a = listenAirhookStream(4044, self.af)
197         self.b = listenAirhookStream(4045, self.bf)
198         
199     def testUnknownMeth(self):
200         self.noisy = 1
201         df = self.a.connectionForAddr(('127.0.0.1', 4045)).protocol.sendRequest('blahblah', {'msg' : "This is a test."})
202         df.addErrback(self.gotErr)
203         reactor.iterate()
204         reactor.iterate()
205         reactor.iterate()
206         reactor.iterate()
207         self.assertEqual(self.err, KRPC_ERROR_METHOD_UNKNOWN)
208
209     def gotErr(self, err):
210         self.err = err.value
211