本文整理汇总了Python中drogulus.dht.routingtable.RoutingTable.add_contact方法的典型用法代码示例。如果您正苦于以下问题:Python RoutingTable.add_contact方法的具体用法?Python RoutingTable.add_contact怎么用?Python RoutingTable.add_contact使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类drogulus.dht.routingtable.RoutingTable
的用法示例。
在下文中一共展示了RoutingTable.add_contact方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_remove_contact_with_cached_replacement
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_remove_contact_with_cached_replacement(self):
"""
Ensures that the removed contact is replaced by the most up-to-date
contact in the affected k-bucket's cache.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
contact1 = Contact('a', '192.168.0.1', 9999, self.version, 0)
contact2 = Contact('b', '192.168.0.2', 9999, self.version, 0)
r.add_contact(contact1)
# Contact 2 will have the wrong number of failedRPCs
r.add_contact(contact2)
contact2.failed_RPCs = constants.ALLOWED_RPC_FAILS
# Add something into the cache.
contact3 = Contact('c', '192.168.0.3', 9999, self.version, 0)
r._replacement_cache[0] = [contact3, ]
# Sanity check
self.assertEqual(len(r._buckets[0]), 2)
self.assertEqual(len(r._replacement_cache[0]), 1)
r.remove_contact('b')
self.assertEqual(len(r._buckets[0]), 2)
self.assertEqual(contact1, r._buckets[0]._contacts[0])
self.assertEqual(contact3, r._buckets[0]._contacts[1])
self.assertEqual(len(r._replacement_cache[0]), 0)
示例2: test_add_contact_with_full_replacement_cache
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_add_contact_with_full_replacement_cache(self):
"""
Ensures that if the replacement cache is full (length = k) then the
oldest contact within the cache is replaced with the new contact that
was just seen.
"""
parent_node_id = hex((2 ** 512) + 1)[2:]
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(40):
uri = 'netstring://192.168.0.%d:9999/' % i
contact = PeerNode(PUBLIC_KEY, self.version, uri, 0)
contact.network_id = hex(i)
r.add_contact(contact)
# Sanity check of the replacement cache.
cache_key = (r._buckets[0].range_min, r._buckets[0].range_max)
self.assertEqual(len(r._replacement_cache[cache_key]), 20)
self.assertEqual(hex(20),
r._replacement_cache[cache_key][0].network_id)
# Create a new contact that will be added to the replacement cache.
new_contact = PeerNode(PUBLIC_KEY, self.version,
'netstring://192.168.0.20:9999/', 0)
new_contact.network_id = hex(40)
r.add_contact(new_contact)
self.assertEqual(len(r._replacement_cache[cache_key]), 20)
self.assertEqual(new_contact, r._replacement_cache[cache_key][19])
self.assertEqual(hex(21),
r._replacement_cache[cache_key][0].network_id)
示例3: test_find_close_nodes_in_correct_order
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_find_close_nodes_in_correct_order(self):
"""
Ensures that the nearest nodes are returned in the correct order: from
the node closest to the target key to the node furthest away.
"""
parent_node_id = 'deadbeef'
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(512):
uri = 'netstring://192.168.0.%d:9999/' % i
contact = PeerNode(PUBLIC_KEY, self.version, uri, 0)
contact.network_id = hex(2 ** i)
r.add_contact(contact)
target_key = hex(2 ** 256)
result = r.find_close_nodes(target_key)
self.assertEqual(constants.K, len(result))
# Ensure results are in the correct order.
def key(node):
return distance(node.network_id, target_key)
sorted_nodes = sorted(result, key=key)
self.assertEqual(sorted_nodes, result)
# Ensure the order is from lowest to highest in terms of distance
distances = [distance(x.network_id, target_key) for x in result]
self.assertEqual(sorted(distances), distances)
示例4: test_add_contact_with_existing_contact_in_replacement_cache
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_add_contact_with_existing_contact_in_replacement_cache(self):
"""
Ensures that if the contact to be put in the replacement cache already
exists in the replacement cache then it is bumped to the most recent
position.
"""
parent_node_id = hex((2 ** 512) + 1)[2:]
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(40):
uri = 'netstring://192.168.0.%d:9999/' % i
contact = PeerNode(PUBLIC_KEY, self.version, uri, 0)
contact.network_id = hex(i)
r.add_contact(contact)
# Sanity check of the replacement cache.
cache_key = (r._buckets[0].range_min, r._buckets[0].range_max)
self.assertEqual(len(r._replacement_cache[cache_key]), 20)
self.assertEqual(hex(20),
r._replacement_cache[cache_key][0].network_id)
# Create a new contact that will be added to the replacement cache.
new_contact = PeerNode(PUBLIC_KEY, self.version,
'netstring://192.168.0.41:9999/', 0)
new_contact.network_id = hex(20)
r.add_contact(new_contact)
self.assertEqual(len(r._replacement_cache[cache_key]), 20)
self.assertEqual(new_contact, r._replacement_cache[cache_key][19])
self.assertEqual(hex(21),
r._replacement_cache[cache_key][0].network_id)
示例5: test_remove_contact_with_cached_replacement
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_remove_contact_with_cached_replacement(self):
"""
Ensures that the removed contact is replaced by the most up-to-date
contact in the affected k-bucket's cache.
"""
parent_node_id = hex((2 ** 512) + 1)[2:]
r = RoutingTable(parent_node_id)
cache_key = (r._buckets[0].range_min, r._buckets[0].range_max)
contact1 = PeerNode(PUBLIC_KEY, self.version,
'netstring://192.168.0.1:9999/', 0)
contact2 = PeerNode(BAD_PUBLIC_KEY, self.version,
'netstring://192.168.0.1:9999/', 0)
r.add_contact(contact1)
r.add_contact(contact2)
contact2.failed_RPCs = constants.ALLOWED_RPC_FAILS
# Add something into the cache.
contact3 = PeerNode(PUBLIC_KEY + 'foo', self.version,
'netstring://192.168.0.1:9999/', 0)
contact3.network_id = '3'
r._replacement_cache[cache_key] = [contact3, ]
# Sanity check
self.assertEqual(len(r._buckets[0]), 2)
self.assertEqual(len(r._replacement_cache[cache_key]), 1)
r.remove_contact(BAD_PUBLIC_KEY)
self.assertEqual(len(r._buckets[0]), 2)
self.assertEqual(contact1, r._buckets[0]._contacts[0])
self.assertEqual(contact3, r._buckets[0]._contacts[1])
self.assertEqual(len(r._replacement_cache[cache_key]), 0)
示例6: test_add_contact_with_parent_node_id
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_add_contact_with_parent_node_id(self):
"""
If the newly discovered contact is, in fact, this node then it's not
added to the routing table.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
contact = Contact('abc', '192.168.0.1', 9999, 0)
r.add_contact(contact)
self.assertEqual(len(r._buckets[0]), 0)
示例7: test_get_contact_does_not_exist
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_get_contact_does_not_exist(self):
"""
Ensures that a ValueError is returned if the referenced contact does
not exist in the routing table.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
contact1 = Contact('a', '192.168.0.1', 9999, self.version, 0)
r.add_contact(contact1)
self.assertRaises(ValueError, r.get_contact, 'b')
示例8: test_get_contact
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_get_contact(self):
"""
Ensures that the correct contact is returned.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
contact1 = Contact('a', '192.168.0.1', 9999, self.version, 0)
r.add_contact(contact1)
result = r.get_contact('a')
self.assertEqual(contact1, result)
示例9: test_get_contact_does_not_exist
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_get_contact_does_not_exist(self):
"""
Ensures that a ValueError is returned if the referenced contact does
not exist in the routing table.
"""
parent_node_id = 'deadbeef'
r = RoutingTable(parent_node_id)
contact1 = PeerNode(PUBLIC_KEY, self.version,
'netstring://192.168.0.1:9999/', 0)
r.add_contact(contact1)
self.assertRaises(ValueError, r.get_contact, 'b')
示例10: test_add_contact_with_parent_node_id
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_add_contact_with_parent_node_id(self):
"""
If the newly discovered contact is, in fact, this node then it's not
added to the routing table.
"""
parent_node_id = 'deadbeef'
r = RoutingTable(parent_node_id)
contact = PeerNode(PUBLIC_KEY, '192.168.0.1', 9999, 0)
contact.network_id = parent_node_id
r.add_contact(contact)
self.assertEqual(len(r._buckets[0]), 0)
示例11: test_find_close_nodes_fewer_than_K
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_find_close_nodes_fewer_than_K(self):
"""
Ensures that all close nodes are returned if their number is < K.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(10):
contact = Contact(i, "192.168.0.%d" % i, self.version, 0)
r.add_contact(contact)
result = r.find_close_nodes(1)
self.assertEqual(10, len(result))
示例12: test_find_close_nodes_single_kbucket
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_find_close_nodes_single_kbucket(self):
"""
Ensures K number of closest nodes get returned.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(40):
contact = Contact(i, "192.168.0.%d" % i, self.version, 0)
r.add_contact(contact)
result = r.find_close_nodes(1)
self.assertEqual(20, len(result))
示例13: test_get_contact
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_get_contact(self):
"""
Ensures that the correct contact is returned.
"""
parent_node_id = 'deadbeef'
r = RoutingTable(parent_node_id)
contact1 = PeerNode(PUBLIC_KEY, self.version,
'netstring://192.168.0.1:9999/', 0)
contact1.network_id = 'a'
r.add_contact(contact1)
result = r.get_contact('a')
self.assertEqual(contact1, result)
示例14: test_find_close_nodes_exclude_contact
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_find_close_nodes_exclude_contact(self):
"""
Ensure that nearest nodes are returned except for the specified
excluded node.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(20):
contact = Contact(str(i), "192.168.0.%d" % i, self.version, 0)
r.add_contact(contact)
result = r.find_close_nodes("1", rpc_node_id=contact)
self.assertEqual(19, len(result))
示例15: test_find_close_nodes_multiple_buckets
# 需要导入模块: from drogulus.dht.routingtable import RoutingTable [as 别名]
# 或者: from drogulus.dht.routingtable.RoutingTable import add_contact [as 别名]
def test_find_close_nodes_multiple_buckets(self):
"""
Ensures that nodes are returned from neighbouring k-buckets if the
k-bucket containing the referenced ID doesn't contain K entries.
"""
parent_node_id = 'abc'
r = RoutingTable(parent_node_id)
# Fill up the bucket and replacement cache
for i in range(512):
contact = Contact(2 ** i, "192.168.0.%d" % i, self.version, 0)
r.add_contact(contact)
result = r.find_close_nodes(2 ** 256)
self.assertEqual(20, len(result))