def setUp(self): ports = tuple([random.randint(10000, 30000) for _ in range(3)]) self.nodes = ['localhost:%s'%port for port in ports] self.dirs = [tempfile.mkdtemp() for _ in range(len(ports))] self.size = len(ports) for i in range(self.size): setattr(self, 'rpc_server%s'%i, ColaRPCServer(('localhost', ports[i]))) setattr(self, 'mq%s'%i, MessageQueue(self.dirs[i], getattr(self, 'rpc_server%s'%i), self.nodes[i], self.nodes[:]) ) thd = threading.Thread(target=getattr(self, 'rpc_server%s'%i).serve_forever) thd.setDaemon(True) thd.start() self.client = MessageQueueClient(self.nodes)
class Test(unittest.TestCase): def setUp(self): ports = tuple([random.randint(10000, 30000) for _ in range(3)]) self.nodes = ['localhost:%s' % port for port in ports] self.dirs = [tempfile.mkdtemp() for _ in range(len(ports))] self.size = len(ports) for i in range(self.size): setattr(self, 'rpc_server%s' % i, ColaRPCServer(('localhost', ports[i]))) setattr( self, 'mq%s' % i, MessageQueue(self.dirs[i], getattr(self, 'rpc_server%s' % i), self.nodes[i], self.nodes[:])) thd = threading.Thread(target=getattr(self, 'rpc_server%s' % i).serve_forever) thd.setDaemon(True) thd.start() self.client = MessageQueueClient(self.nodes) def tearDown(self): try: for i in range(self.size): getattr(self, 'rpc_server%s' % i).shutdown() getattr(self, 'mq%s' % i).shutdown() finally: for d in self.dirs: shutil.rmtree(d) def testMQ(self): mq = self.mq0 data = [str(random.randint(10000, 50000)) for _ in range(20)] c = Clock() mq.put(data, flush=True) gets = [] while True: get = mq.get() if get is None: break gets.append(get) self.assertEqual(sorted(data), sorted(gets)) print(c.clock()) # test mq client data = str(random.randint(10000, 50000)) self.client.put(data) get = self.client.get() self.assertEqual(data, get) self.client.put(Url('http://qinxuye.me', priority=1)) get = self.client.get(priority=1) self.assertEqual(get.url, 'http://qinxuye.me') # test put into different priorities self.client.put(Url('http://qinxuye.me', priority=0)) self.client.put(Url('http://qinxuye.me/about', priority=1)) self.client.put(u'三星') self.assertEqual( self.client.get(priority=1).url, 'http://qinxuye.me/about') self.assertEqual(self.client.get(priority=0).url, 'http://qinxuye.me') print(c.clock()) def testRemoveNode(self): mq = self.mq0 data = [str(i) for i in range(100)] # test remove node mq.put(data) self.mq2.shutdown() self.mq0.remove_node(self.nodes[2]) self.mq1.remove_node(self.nodes[2]) gets = [] while True: get = mq.get() if get is None: break gets.append(get) self.assertEqual(sorted(data), sorted(gets)) def testAddNode(self): data = range(100) new_port = random.randint(10000, 30000) new_node = 'localhost:%s' % new_port new_rpc_server = ColaRPCServer(('localhost', new_port)) thd = threading.Thread(target=new_rpc_server.serve_forever) thd.setDaemon(True) thd.start() new_dir = tempfile.mkdtemp() ns = list(self.nodes) ns.append(new_node) new_mq = MessageQueue(new_dir, new_rpc_server, new_node, ns) try: self.mq0.add_node(new_node) self.mq1.add_node(new_node) self.mq2.add_node(new_node) self.mq0.put(data) self.assertEqual(data, sorted(self.mq0.get(size=100))) finally: try: new_rpc_server.shutdown() new_mq.shutdown() finally: shutil.rmtree(new_dir)
class Test(unittest.TestCase): def setUp(self): ports = tuple([random.randint(10000, 30000) for _ in range(3)]) self.nodes = ['localhost:%s'%port for port in ports] self.dirs = [tempfile.mkdtemp() for _ in range(len(ports))] self.size = len(ports) for i in range(self.size): setattr(self, 'rpc_server%s'%i, ColaRPCServer(('localhost', ports[i]))) setattr(self, 'mq%s'%i, MessageQueue(self.dirs[i], getattr(self, 'rpc_server%s'%i), self.nodes[i], self.nodes[:]) ) thd = threading.Thread(target=getattr(self, 'rpc_server%s'%i).serve_forever) thd.setDaemon(True) thd.start() self.client = MessageQueueClient(self.nodes) def tearDown(self): try: for i in range(self.size): getattr(self, 'rpc_server%s'%i).shutdown() getattr(self, 'mq%s'%i).shutdown() finally: for d in self.dirs: shutil.rmtree(d) def testMQ(self): mq = self.mq0 data = [str(random.randint(10000, 50000)) for _ in range(20)] mq.put(data, flush=True) gets = [] while True: get = mq.get() if get is None: break gets.append(get) self.assertEqual(sorted(data), sorted(gets)) # test mq client data = str(random.randint(10000, 50000)) self.client.put(data) get = self.client.get() self.assertEqual(data, get) self.client.put(Url('http://qinxuye.me', priority=1)) get = self.client.get(priority=1) self.assertEqual(get.url, 'http://qinxuye.me') # test put into different priorities self.client.put(Url('http://qinxuye.me', priority=0)) self.client.put(Url('http://qinxuye.me/about', priority=1)) self.assertEqual(self.client.get(priority=1).url, 'http://qinxuye.me/about') self.assertEqual(self.client.get(priority=0).url, 'http://qinxuye.me') def testRemoveNode(self): mq = self.mq0 data = [str(i) for i in range(100)] # test remove node mq.put(data) self.mq2.shutdown() self.mq0.remove_node(self.nodes[2]) self.mq1.remove_node(self.nodes[2]) gets = [] while True: get = mq.get() if get is None: break gets.append(get) self.assertEqual(sorted(data), sorted(gets)) def testAddNode(self): data = range(100) new_port = random.randint(10000, 30000) new_node = 'localhost:%s' % new_port new_rpc_server = ColaRPCServer(('localhost', new_port)) thd = threading.Thread(target=new_rpc_server.serve_forever) thd.setDaemon(True) thd.start() new_dir = tempfile.mkdtemp() ns = list(self.nodes) ns.append(new_node) new_mq = MessageQueue(new_dir, new_rpc_server, new_node, ns) try: self.mq0.add_node(new_node) self.mq1.add_node(new_node) self.mq2.add_node(new_node) self.mq0.put(data) self.assertEqual(data, sorted(self.mq0.get(size=100))) finally: try: new_rpc_server.shutdown() new_mq.shutdown() finally: shutil.rmtree(new_dir)