예제 #1
0
    def __init__(self, version_label, my_node, conf_path, routing_m_mod,
                 lookup_m_mod, experimental_m_mod, private_dht_name,
                 bootstrap_mode):
        self.bootstrapper = bootstrap.OverlayBootstrapper(conf_path)
        my_addr = my_node.addr
        self._my_id = my_node.id  # id indicated by user
        if not self._my_id:
            self._my_id = self._my_id = identifier.RandomId()  # random id
        self._my_node = Node(my_addr, self._my_id, version=version_label)
        self.msg_f = message.MsgFactory(version_label, self._my_id,
                                        private_dht_name)
        self._querier = Querier()
        self._routing_m = routing_m_mod.RoutingManager(self._my_node,
                                                       self.msg_f,
                                                       self.bootstrapper)

        self._responder = responder.Responder(self._my_id, self._routing_m,
                                              self.msg_f, bootstrap_mode)
        self._tracker = self._responder._tracker

        self._lookup_m = lookup_m_mod.LookupManager(self._my_id, self.msg_f,
                                                    self.bootstrapper)
        self._experimental_m = experimental_m_mod.ExperimentalManager(
            self._my_node.id, self.msg_f)

        current_ts = time.time()
        self._next_maintenance_ts = current_ts
        self._next_timeout_ts = current_ts
        self._next_main_loop_call_ts = current_ts
        self._cached_lookups = []
예제 #2
0
    def test_report_unreachable(self):
        b = bootstrap.OverlayBootstrapper(CONF_PATH)
        initial_unstable_len = b.unstable_len

        addrs = b.get_sample_unstable_addrs(50)
        # Off-line mode ON, addrs are NOT removed
        b.report_unreachable(addrs[0])
        assert b.unstable_len == initial_unstable_len
        assert b.is_hardcoded(addrs[0])
        # Off-line mode ON, addrs are NOT removed
        b.report_unreachable(addrs[1])
        assert b.unstable_len == initial_unstable_len
        assert b.is_hardcoded(addrs[1])
        # Off-line mode OFF, addrs ARE removed
        b.report_unreachable(addrs[6])
        assert b.unstable_len == initial_unstable_len - 1
        assert b.is_hardcoded(addrs[6])
        # Off-line mode OFF, addrs ARE removed.
        b.report_unreachable(addrs[3])
        assert b.unstable_len == initial_unstable_len - 2
        assert b.is_hardcoded(addrs[3])

        assert addrs[0] in b.get_sample_unstable_addrs(b.unstable_len)
        assert addrs[1] in b.get_sample_unstable_addrs(b.unstable_len)
        assert addrs[6] not in b.get_sample_unstable_addrs(b.unstable_len)
        assert addrs[3] not in b.get_sample_unstable_addrs(b.unstable_len)

        # Reporting a non-bootstrap addr has no effect
        assert b.unstable_len == initial_unstable_len - 2
        assert RANDOM_ADDR not in b.get_sample_unstable_addrs(b.unstable_len)
        b.report_unreachable(RANDOM_ADDR)
        assert b.unstable_len == initial_unstable_len - 2
        assert RANDOM_ADDR not in b.get_sample_unstable_addrs(b.unstable_len)
예제 #3
0
    def test_general(self):
        b = bootstrap.OverlayBootstrapper(CONF_PATH)
        eq_(len(b.get_sample_unstable_addrs(5)), 5)
        assert RANDOM_ADDR not in b.get_sample_unstable_addrs(2)
        assert STABLE_ADDR in b.get_shuffled_stable_addrs()
        assert RANDOM_ADDR not in b.get_shuffled_stable_addrs()

        initial_unstable_len = b.unstable_len
        b.report_reachable(RANDOM_ADDR, 0)
        # This addr should be added to the list
        assert b.unstable_len == initial_unstable_len + 1
        assert RANDOM_ADDR in b.get_sample_unstable_addrs(b.unstable_len)
        assert not b.is_hardcoded(RANDOM_ADDR)

        b.report_unreachable(RANDOM_ADDR)
        assert b.unstable_len == initial_unstable_len
        assert RANDOM_ADDR not in b.get_sample_unstable_addrs(b.unstable_len)
        assert not b.is_hardcoded(RANDOM_ADDR)
예제 #4
0
 def __init__(self, my_node, bootstrap_nodes, msg_f):
     self.my_node = my_node
     self.bootstrapper = bootstrap.OverlayBootstrapper(
         my_node.id, bootstrap_nodes, msg_f)
     self.msg_f = msg_f
     self.table = RoutingTable(my_node, NODES_PER_BUCKET)
     # maintenance variables
     self._next_stale_maintenance_index = 0
     self._maintenance_mode = BOOTSTRAP_MODE
     self._replacement_queue = _ReplacementQueue(self.table)
     self._query_received_queue = _QueryReceivedQueue(self.table)
     self._found_nodes_queue = _FoundNodesQueue(self.table)
     self._maintenance_tasks = [
         self._ping_a_staled_rnode,
         self._ping_a_query_received_node,
         self._ping_a_found_node,
         self._ping_a_replacement_node,
     ]
     self._num_pending_filling_lookups = NUM_FILLING_LOOKUPS
예제 #5
0
    def test_report_short(self):
        b = bootstrap.OverlayBootstrapper(CONF_PATH)
        initial_unstable_len = b.unstable_len

        b.report_reachable(RANDOM_ADDR)
        # Addr is added right away
        assert b.unstable_len == initial_unstable_len + 1
        assert RANDOM_ADDR in b.get_sample_unstable_addrs(b.unstable_len)

        b.report_reachable(SAME_SUBNET_ADDR)
        # Just one IP per subnet
        assert b.unstable_len == initial_unstable_len + 1
        assert SAME_SUBNET_ADDR not in b.get_sample_unstable_addrs(
            b.unstable_len)

        b.report_reachable(RANDOM_ADDR2)
        # Addr is added right away
        assert b.unstable_len == initial_unstable_len + 2
        assert RANDOM_ADDR2 in b.get_sample_unstable_addrs(b.unstable_len)
예제 #6
0
    def test_report_long(self):
        b = bootstrap.OverlayBootstrapper(CONF_PATH)
        initial_unstable_len = b.unstable_len

        b.report_reachable(RANDOM_ADDR, 1)
        # Addr's uptime is too short
        assert b.unstable_len == initial_unstable_len
        assert RANDOM_ADDR not in b.get_sample_unstable_addrs(b.unstable_len)

        b.report_reachable(RANDOM_ADDR, bootstrap.MIN_LONG_UPTIME)
        # Addr is added right away
        assert b.unstable_len == initial_unstable_len + 1
        assert RANDOM_ADDR in b.get_sample_unstable_addrs(b.unstable_len)

        b.report_reachable(RANDOM_ADDR2, bootstrap.MIN_LONG_UPTIME)
        # Just one addr per hour
        assert b.unstable_len == initial_unstable_len + 1
        assert RANDOM_ADDR2 not in b.get_sample_unstable_addrs(b.unstable_len)

        time.sleep(bootstrap.ADD_LONG_UPTIME_ADDR_EACH)
        b.report_reachable(RANDOM_ADDR2, bootstrap.MIN_LONG_UPTIME)
        # Addr is added now (after the sleep)
        assert b.unstable_len == initial_unstable_len + 2
        assert RANDOM_ADDR2 in b.get_sample_unstable_addrs(b.unstable_len)