]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - test_krpc.py
Remove all the airhook stuff.
[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
7 KRPC.noisy = 0
8
9 import sys
10
11 if __name__ =="__main__":
12     tests = defaultTestLoader.loadTestsFromNames([sys.argv[0][:-3]])
13     result = TextTestRunner().run(tests)
14
15
16 def connectionForAddr(host, port):
17     return host
18     
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 def make(port):
30     af = Receiver()
31     a = hostbroker(af)
32     a.protocol = KRPC
33     p = reactor.listenUDP(port, a)
34     return af, a, p
35     
36 class KRPCTests(TestCase):
37     def setUp(self):
38         self.noisy = 0
39         self.af, self.a, self.ap = make(1180)
40         self.bf, self.b, self.bp = make(1181)
41
42     def tearDown(self):
43         self.ap.stopListening()
44         self.bp.stopListening()
45         reactor.iterate()
46         reactor.iterate()
47
48     def testSimpleMessage(self):
49         self.noisy = 0
50         self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."})
51         reactor.iterate()
52         reactor.iterate()
53         reactor.iterate()
54         self.assertEqual(self.bf.buf, ["This is a test."])
55
56     def testMessageBlast(self):
57         self.a.connectionForAddr(('127.0.0.1', 1181)).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         self.bf.buf = []
63         
64         for i in range(100):
65             self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."})
66             reactor.iterate()
67             #self.bf.buf = []
68         self.assertEqual(self.bf.buf, ["This is a test."] * 100)
69
70     def testEcho(self):
71         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
72         df.addCallback(self.gotMsg)
73         reactor.iterate()
74         reactor.iterate()
75         reactor.iterate()
76         reactor.iterate()
77         self.assertEqual(self.msg, "This is a test.")
78
79     def gotMsg(self, dict):
80         _krpc_sender = dict['_krpc_sender']
81         msg = dict['rsp']
82         self.msg = msg
83
84     def testManyEcho(self):
85         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
86         df.addCallback(self.gotMsg)
87         reactor.iterate()
88         reactor.iterate()
89         reactor.iterate()
90         reactor.iterate()
91         self.assertEqual(self.msg, "This is a test.")
92         for i in xrange(100):
93             self.msg = None
94             df = self.a.connectionForAddr(('127.0.0.1', 1181)).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 testMultiEcho(self):
103         self.noisy = 1
104         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
105         df.addCallback(self.gotMsg)
106         reactor.iterate()
107         reactor.iterate()
108         reactor.iterate()
109         reactor.iterate()
110         self.assertEqual(self.msg, "This is a test.")
111
112         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is another test."})
113         df.addCallback(self.gotMsg)
114         reactor.iterate()
115         reactor.iterate()
116         reactor.iterate()
117         reactor.iterate()
118         self.assertEqual(self.msg, "This is another test.")
119
120         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is yet another 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 yet another test.")
127
128     def testEchoReset(self):
129         self.noisy = 1
130         df = self.a.connectionForAddr(('127.0.0.1', 1181)).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         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is another test."})
139         df.addCallback(self.gotMsg)
140         reactor.iterate()
141         reactor.iterate()
142         reactor.iterate()
143         reactor.iterate()
144         self.assertEqual(self.msg, "This is another test.")
145
146         del(self.a.connections[('127.0.0.1', 1181)])
147         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is yet another test."})
148         df.addCallback(self.gotMsg)
149         reactor.iterate()
150         reactor.iterate()
151         reactor.iterate()
152         reactor.iterate()
153         self.assertEqual(self.msg, "This is yet another test.")
154
155     def testLotsofEchoReset(self):
156         for i in range(100):
157             self.testEchoReset()
158             
159     def testUnknownMeth(self):
160         self.noisy = 1
161         df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('blahblah', {'msg' : "This is a test."})
162         df.addErrback(self.gotErr)
163         reactor.iterate()
164         reactor.iterate()
165         reactor.iterate()
166         reactor.iterate()
167         self.assertEqual(self.err, KRPC_ERROR_METHOD_UNKNOWN)
168
169     def gotErr(self, err):
170         self.err = err.value
171