class Network: def __init__(self, size=0, startport=5555, localip='127.0.0.1'): self.num = size self.startport = startport self.localip = localip def _done(self, val): self.done = 1 def simpleSetUp(self): #self.kfiles() d = dict([(x[0],x[1]) for x in common_options + rare_options]) self.r = RawServer(Event(), d) self.l = [] for i in range(self.num): self.l.append(UTKhashmir('', self.startport + i, 'kh%s.db' % (self.startport + i), self.r)) for i in self.l: i.addContact(self.localip, self.l[randrange(0,self.num)].port) i.addContact(self.localip, self.l[randrange(0,self.num)].port) i.addContact(self.localip, self.l[randrange(0,self.num)].port) self.r.listen_once(1) self.r.listen_once(1) self.r.listen_once(1) for i in self.l: self.done = 0 i.findCloseNodes(self._done) while not self.done: self.r.listen_once(1) for i in self.l: self.done = 0 i.findCloseNodes(self._done) while not self.done: self.r.listen_once(1) def tearDown(self): for i in self.l: i.rawserver.stop_listening_udp(i.socket) i.socket.close() #self.kfiles() def kfiles(self): for i in range(self.startport, self.startport+self.num): try: os.unlink('kh%s.db' % i) except: pass self.r.listen_once(1)
class SimpleTests(TestCase): def setUp(self): d = dict([(x[0], x[1]) for x in common_options + rare_options]) self.r = RawServer(d) self.a = self.r.create_udpsocket(8051, '127.0.0.1') self.b = self.r.create_udpsocket(8052, '127.0.0.1') def tearDown(self): self.a.close() self.b.close() def Handler(self, expected): class h(object): def __init__(self, expected, a=self.assertEqual): self.expected = expected self.a = a def data_came_in(self, connection, data): self.a(self.expected, data) return h(expected) def testFoo(self): self.r.start_listening_udp(self.a, self.Handler('')) self.r.start_listening_udp(self.b, self.Handler('foo')) self.a.sendto("foo", 0, ('127.0.0.1', 8052)) self.r.listen_once() def testBackForth(self): self.r.start_listening_udp(self.a, self.Handler('bar')) self.r.start_listening_udp(self.b, self.Handler('foo')) self.a.sendto("foo", 0, ('127.0.0.1', 8052)) self.r.listen_once() self.b.sendto("bar", 0, ('127.0.0.1', 8051)) self.r.listen_once()
class SimpleTests(TestCase): def setUp(self): d = dict([(x[0],x[1]) for x in common_options + rare_options]) self.r = RawServer(d) self.a = self.r.create_udpsocket(8051, '127.0.0.1') self.b = self.r.create_udpsocket(8052, '127.0.0.1') def tearDown(self): self.a.close() self.b.close() def Handler(self, expected): class h(object): def __init__(self, expected, a=self.assertEqual): self.expected = expected self.a = a def data_came_in(self, connection, data): self.a(self.expected, data) return h(expected) def testFoo(self): self.r.start_listening_udp(self.a, self.Handler('')) self.r.start_listening_udp(self.b, self.Handler('foo')) self.a.sendto("foo", 0, ('127.0.0.1', 8052)) self.r.listen_once() def testBackForth(self): self.r.start_listening_udp(self.a, self.Handler('bar')) self.r.start_listening_udp(self.b, self.Handler('foo')) self.a.sendto("foo", 0, ('127.0.0.1', 8052)) self.r.listen_once() self.b.sendto("bar", 0, ('127.0.0.1', 8051)) self.r.listen_once()
class KRPCTests(TestCase): def setUp(self): self.noisy = 0 d = dict([(x[0],x[1]) for x in common_options + rare_options]) self.r = RawServer(d) addr = ('127.0.0.1', 1180) self.as = self.r.create_udpsocket(addr[1], addr[0], True) self.af = Receiver(addr) self.a = hostbroker(self.af, addr, self.as, self.r.add_task) self.r.start_listening_udp(self.as, self.a) addr = ('127.0.0.1', 1181) self.bs = self.r.create_udpsocket(addr[1], addr[0], True) self.bf = Receiver(addr) self.b = hostbroker(self.bf, addr, self.bs, self.r.add_task) self.r.start_listening_udp(self.bs, self.b) def tearDown(self): self.as.close() self.bs.close() def testSimpleMessage(self): self.noisy = 0 self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."}) self.r.listen_once(0.01) self.assertEqual(self.bf.buf, ["This is a test."]) def testMessageBlast(self): self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."}) self.r.listen_once(0.01) self.assertEqual(self.bf.buf, ["This is a test."]) self.bf.buf = [] for i in range(100): self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('store', {'msg' : "This is a test."}) self.r.listen_once(0.01) #self.bf.buf = [] self.assertEqual(self.bf.buf, ["This is a test."] * 100) def testEcho(self): df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is a test.") def gotMsg(self, dict): _krpc_sender = dict['_krpc_sender'] msg = dict['rsp'] self.msg = msg def testManyEcho(self): df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is a test.") for i in xrange(100): self.msg = None df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is a test.") def testMultiEcho(self): self.noisy = 0 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is a test.") df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is another test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is another test.") df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is yet another test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is yet another test.") def testEchoReset(self): self.noisy = 0 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is a test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is a test.") df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is another test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is another test.") del(self.a.connections[('127.0.0.1', 1181)]) df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('echo', {'msg' : "This is yet another test."}) df.addCallback(self.gotMsg) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.msg, "This is yet another test.") def testLotsofEchoReset(self): for i in range(100): self.testEchoReset() def testUnknownMeth(self): self.noisy = 0 df = self.a.connectionForAddr(('127.0.0.1', 1181)).sendRequest('blahblah', {'msg' : "This is a test."}) df.addErrback(self.gotErr) self.r.listen_once(0.01) self.r.listen_once(0.01) self.assertEqual(self.err, KRPC_ERROR_METHOD_UNKNOWN) def gotErr(self, err): self.err = err