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 = []
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)
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)
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
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)
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)