1 ## Copyright 2002-2003 Andrew Loewenstern, All Rights Reserved
2 # see LICENSE.txt for license information
4 from unittest import defaultTestLoader, TestCase, TextTestRunner
7 from twisted.internet import protocol
8 from twisted.internet import reactor
10 from krpc import KRPC, hostbroker, KRPC_ERROR_METHOD_UNKNOWN
14 if __name__ =="__main__":
15 tests = defaultTestLoader.loadTestsFromNames([sys.argv[0][:-3]])
16 result = TextTestRunner().run(tests)
19 def connectionForAddr(host, port):
23 class Receiver(protocol.Factory):
27 def krpc_store(self, msg, _krpc_sender):
29 def krpc_echo(self, msg, _krpc_sender):
36 p = reactor.listenUDP(port, a)
39 class KRPCTests(TestCase):
42 self.af, self.a, self.ap = make(1180)
43 self.bf, self.b, self.bp = make(1181)
46 self.ap.stopListening()
47 self.bp.stopListening()
51 def testSimpleMessage(self):
53 self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."})
57 self.assertEqual(self.bf.buf, ["This is a test."])
59 def testMessageBlast(self):
60 self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."})
64 self.assertEqual(self.bf.buf, ["This is a test."])
68 self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."})
71 self.assertEqual(self.bf.buf, ["This is a test."] * 100)
74 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
75 df.addCallback(self.gotMsg)
80 self.assertEqual(self.msg, "This is a test.")
82 def gotMsg(self, dict):
83 _krpc_sender = dict['_krpc_sender']
87 def testManyEcho(self):
88 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
89 df.addCallback(self.gotMsg)
94 self.assertEqual(self.msg, "This is a test.")
97 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
98 df.addCallback(self.gotMsg)
103 self.assertEqual(self.msg, "This is a test.")
105 def testMultiEcho(self):
107 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
108 df.addCallback(self.gotMsg)
113 self.assertEqual(self.msg, "This is a test.")
115 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is another test."})
116 df.addCallback(self.gotMsg)
121 self.assertEqual(self.msg, "This is another test.")
123 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is yet another test."})
124 df.addCallback(self.gotMsg)
129 self.assertEqual(self.msg, "This is yet another test.")
131 def testEchoReset(self):
133 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."})
134 df.addCallback(self.gotMsg)
139 self.assertEqual(self.msg, "This is a test.")
141 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is another test."})
142 df.addCallback(self.gotMsg)
147 self.assertEqual(self.msg, "This is another test.")
149 del(self.a.connections[('127.0.0.1', 1181)])
150 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is yet another test."})
151 df.addCallback(self.gotMsg)
156 self.assertEqual(self.msg, "This is yet another test.")
158 def testLotsofEchoReset(self):
162 def testUnknownMeth(self):
164 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('blahblah', {'msg' : "This is a test."})
165 df.addErrback(self.gotErr)
170 self.assertEqual(self.err, KRPC_ERROR_METHOD_UNKNOWN)
172 def gotErr(self, err):