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