def test_bucket_ordering(): first = kademlia.KBucket(0, 50) second = kademlia.KBucket(51, 100) third = random_node() assert first < second with pytest.raises(TypeError): assert first > third
def test_kbucket_remove(): bucket = kademlia.KBucket(0, 100) bucket.k = 25 nodes = NodeFactory.create_batch(bucket.k) for node in nodes: bucket.add(node) assert bucket.nodes == nodes assert bucket.replacement_cache == [] replacement_count = 10 replacement_nodes = NodeFactory.create_batch(replacement_count) for replacement_node in replacement_nodes: bucket.add(replacement_node) assert bucket.nodes == nodes assert bucket.replacement_cache == replacement_nodes for node in nodes: bucket.remove_node(node) assert bucket.nodes == list(reversed(replacement_nodes)) assert bucket.replacement_cache == [] for replacement_node in replacement_nodes: bucket.remove_node(replacement_node) assert bucket.nodes == [] assert bucket.replacement_cache == []
def test_kbucket_remove(): bucket = kademlia.KBucket(0, 100) bucket.k = 25 nodes = [random_node() for _ in range(bucket.k)] for node in nodes: bucket.add(node) assert bucket.nodes == nodes assert bucket.replacement_cache == [] replacement_count = 10 replacement_nodes = [random_node() for _ in range(replacement_count)] for replacement_node in replacement_nodes: bucket.add(replacement_node) assert bucket.nodes == nodes assert bucket.replacement_cache == replacement_nodes for node in nodes: bucket.remove_node(node) assert bucket.nodes == list(reversed(replacement_nodes)) assert bucket.replacement_cache == [] for replacement_node in replacement_nodes: bucket.remove_node(replacement_node) assert bucket.nodes == [] assert bucket.replacement_cache == []
def test_kbucket_split(): bucket = kademlia.KBucket(0, 100) for i in range(1, bucket.k + 1): node = random_node() # Set the IDs of half the nodes below the midpoint, so when we split we should end up with # two buckets containing k/2 nodes. if i % 2 == 0: node.id = bucket.midpoint + i else: node.id = bucket.midpoint - i bucket.add(node) assert bucket.is_full bucket1, bucket2 = bucket.split() assert bucket1.start == 0 assert bucket1.end == 50 assert bucket2.start == 51 assert bucket2.end == 100 assert len(bucket1) == bucket.k / 2 assert len(bucket2) == bucket.k / 2
def test_kbucket_add(): bucket = kademlia.KBucket(0, 100) node = random_node() assert bucket.add(node) is None assert bucket.nodes == [node] node2 = random_node() assert bucket.add(node2) is None assert bucket.nodes == [node, node2] assert bucket.head == node assert bucket.add(node) is None assert bucket.nodes == [node2, node] assert bucket.head == node2 bucket.k = 2 node3 = random_node() assert bucket.add(node3) == node2 assert bucket.nodes == [node2, node] assert bucket.head == node2
def test_bucket_ordering(): first = kademlia.KBucket(0, 50) second = kademlia.KBucket(51, 100) third = random_node() assert first < second with pytest.raises(TypeError): assert first > third @pytest.mark.parametrize( "bucket_list, node_id", ( (list([]), 5), # test for node.id < bucket.end (list([kademlia.KBucket(0, 4)]), 5), # test for node.id > bucket.start (list([kademlia.KBucket(6, 10)]), 5), # test multiple buckets that don't contain node.id (list([ kademlia.KBucket(1, 5), kademlia.KBucket(6, 49), kademlia.KBucket(50, 100), ]), 0), )) def test_binary_get_bucket_for_node_error(bucket_list, node_id): node = random_node(nodeid=node_id) with pytest.raises(ValueError): kademlia.binary_get_bucket_for_node(bucket_list, node)