def test04_check_hash_table(self): call_stack = [] def call_node_simulator(nodeaddr, request, sync): call_stack.append((nodeaddr, sync, request)) return 0, 'ok' try: operator = DHTOperator('127.0.0.1:1987', home_dir=TEST_FS_RANGE_DIR) operator.ranges_table.append(0, 99, 'first_range_holder') operator.ranges_table.append(100, 149, 'second_range_holder') operator.ranges_table.append(300, 499, 'third_range_holder') operator.call_node = call_node_simulator operator.register_operation('CheckHashRangeTable', CheckHashRangeTableOperation) operator1 = DHTOperator('127.0.0.1:1986', home_dir=TEST_FS_RANGE_DIR) operator1.ranges_table.append(0, 99, 'first_range_holder') operator1.ranges_table.append(100, 149, 'second_range_holder') operator1.ranges_table.append(300, 499, 'third_range_holder') operator1.call_node = call_node_simulator operator1.register_operation('CheckHashRangeTable', CheckHashRangeTableOperation) mod_index = operator.ranges_table.get_mod_index() params = {'mod_index': mod_index} packet = FabnetPacketRequest(method='CheckHashRangeTable', sender=operator.self_address, parameters=params) resp = operator1.process(packet) self.assertEqual(resp.ret_code, 0) operator1.ranges_table.append(500, 599, 'forth_range_holder') packet = FabnetPacketRequest(method='CheckHashRangeTable', sender=operator.self_address, parameters=params) resp = operator1.process(packet) self.assertEqual(resp.ret_code, RC_NEED_UPDATE) callback_resp = resp mod_index = operator.ranges_table.get_mod_index() params = {'mod_index': mod_index} packet = FabnetPacketRequest(message_id=packet.message_id, method='CheckHashRangeTable', \ sender=operator1.self_address, parameters=params) resp = operator.process(packet) self.assertEqual(resp.ret_code, 0, resp.ret_message) operator.callback(callback_resp) self.assertEqual(len(call_stack), 1) self.assertEqual(call_stack[0][0], '127.0.0.1:1986') self.assertEqual(call_stack[0][2].method, 'GetRangesTable') print 'GENERATE EXCEPTION' packet = FabnetPacketRequest(method='CheckHashRangeTable', sender=operator.self_address) resp = operator.process(packet) self.assertNotEqual(resp.ret_code, 0) self.assertNotEqual(resp.ret_code, RC_NEED_UPDATE) finally: operator.stop() operator1.stop()
def run(self): address = '127.0.0.1:%s'%self.port operator = DHTOperator(address, self.home_dir, is_init_node=self.init_node, node_name=self.port) self.operator = operator operator.register_operation('ManageNeighbour', ManageNeighbour) operator.register_operation('DiscoveryOperation', DiscoveryOperation) operator.register_operation('TopologyCognition', TopologyCognition) operator.register_operation('GetRangeDataRequest', GetRangeDataRequestOperation) operator.register_operation('GetRangesTable', GetRangesTableOperation) operator.register_operation('PutDataBlock', PutDataBlockOperation) operator.register_operation('SplitRangeCancel', SplitRangeCancelOperation) operator.register_operation('SplitRangeRequest', SplitRangeRequestOperation) operator.register_operation('UpdateHashRangeTable', UpdateHashRangeTableOperation) operator.register_operation('CheckHashRangeTable', CheckHashRangeTableOperation) server = FriServer('0.0.0.0', self.port, operator, server_name='node_%s'%self.port) ret = server.start() if not ret: print 'ERROR: server does not started!' return self.stopped = False while not self.stopped: time.sleep(0.1) server.stop()