Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()