]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - test_krpc.py
check responses and fail if they don't come from the peer we were
[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 = 1
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 EchoTest(TestCase):
61     def setUp(self):
62         self.noisy = 0
63         self.msg = None
64         
65         self.af = Receiver()
66         self.bf = Receiver()        
67         self.a = listenAirhookStream(4042, self.af)
68         self.b = listenAirhookStream(4043, self.bf)
69         
70     def testEcho(self):
71         self.noisy = 1
72         df = self.a.connectionForAddr(('127.0.0.1', 4043)).protocol.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, msg):
81         self.msg = msg
82
83 class MultiEchoTest(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(4048, self.af)
91         self.b = listenAirhookStream(4049, self.bf)
92         
93     def testMultiEcho(self):
94         self.noisy = 1
95         df = self.a.connectionForAddr(('127.0.0.1', 4049)).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         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is another test."})
104         df.addCallback(self.gotMsg)
105         reactor.iterate()
106         reactor.iterate()
107         reactor.iterate()
108         reactor.iterate()
109         self.assertEqual(self.msg, "This is another test.")
110
111         df = self.a.connectionForAddr(('127.0.0.1', 4049)).protocol.sendRequest('echo', {'msg' : "This is yet another test."})
112         df.addCallback(self.gotMsg)
113         reactor.iterate()
114         reactor.iterate()
115         reactor.iterate()
116         reactor.iterate()
117         self.assertEqual(self.msg, "This is yet another test.")
118
119     def gotMsg(self, msg):
120         self.msg = msg
121
122 class UnknownMethErrTest(TestCase):
123     def setUp(self):
124         self.noisy = 0
125         self.err = None
126         self.af = Receiver()
127         self.bf = Receiver()        
128         self.a = listenAirhookStream(4044, self.af)
129         self.b = listenAirhookStream(4045, self.bf)
130         
131     def testUnknownMeth(self):
132         self.noisy = 1
133         df = self.a.connectionForAddr(('127.0.0.1', 4045)).protocol.sendRequest('blahblah', {'msg' : "This is a test."})
134         df.addErrback(self.gotErr)
135         reactor.iterate()
136         reactor.iterate()
137         reactor.iterate()
138         reactor.iterate()
139         self.assertEqual(self.err, KRPC_ERROR_METHOD_UNKNOWN)
140
141     def gotErr(self, err):
142         self.err = err.value