def test_encode_validGetPeersResponseWithNodes(self): r = Response() r._transaction_id = 1903890316316 r._from = 169031860931900138093217073128059 r.token = 90831 r.nodes = [ Node(2**158, ("127.0.0.1", 890)), Node(2**15, ("127.0.0.1", 8890)), Node(2**128, ("127.0.0.1", 1890)), Node(2**59, ("127.0.0.1", 7890)), Node(2**153, ("127.0.0.1", 5830)) ] expected_encoding = ( 'd1:rd2:id20:\x00\x00\x00\x00\x00\x00\x08' + 'U{fDA\xb0\x88\xe6\x8a\xec\xf8\xe2{5:nodes130:@\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x7f\x00\x00\x01\x03z\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x7f' + '\x00\x00\x01"\xba\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01' + '\x07b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08' + '\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x01\x1e\xd2\x02' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x7f\x00\x00\x01\x16\xc65:token' + '3:\x01b\xcfe1:t6:\x01\xbbH\xb4\xbc\x1c1:y1:re') encoding = encode(r) self.assertEquals(expected_encoding, encoding)
def test_get_stalest_node(self): k = KBucket(range_min=0, range_max=2**160, maxsize=10) n1 = Node(11, ("127.0.0.1", 11)) n2 = Node(21, ("127.0.0.1", 21)) n3 = Node(31, ("127.0.0.1", 31)) n2.last_updated -= 10 k.offer_node(n1) k.offer_node(n2) k.offer_node(n3) self.assertEquals(n2, k.get_stalest_node())
def test_split_normalWideRange(self): k = KBucket(range_min=0, range_max=2**160, maxsize=8) for node_num in range(4): n = Node(node_num, ("127.0.0.1", node_num + 1)) k.offer_node(n) for node_num in range(2**159, 2**159 + 4): n = Node(node_num, ("127.0.0.1", 55)) k.offer_node(n) (kleft, kright) = k.split() self.assertEquals(4, len(kleft.get_nodes())) self.assertEquals(4, len(kright.get_nodes())) self.assertTrue(k.empty())
def test_full(self): k = KBucket(range_min=0, range_max=2**160, maxsize=10) # Make 16 nodes and insert them into a size 10 KBucket # 2**160 in 2**154 increments is 2**160/2**156 == 2**4 == 16 for node_id in range(0, 2**160, 2**156): n = Node(node_id, ("127.0.0.1", 55)) k.offer_node(n) self.assertTrue(k.full())
def test_split_normal(self): k = KBucket(range_min=0, range_max=8, maxsize=10) for node_num in range(8): n = Node(node_num, ("127.0.0.1", node_num + 1)) k.offer_node(n) (kleft, kright) = k.split() self.assertEquals(4, len(kleft.get_nodes())) self.assertEquals(4, len(kright.get_nodes())) self.assertTrue(k.empty())
def test_remove_node(self): k = KBucket(range_min=0, range_max=5, maxsize=1) n = Node(1, ("127.0.0.1", 1)) k.offer_node(n) node_removed = k.remove_node(n) self.assertTrue(node_removed) self.assertEquals(0, len(k.get_nodes())) node_removed = k.remove_node(n) self.assertFalse(node_removed)
def test_offer_node_staleReplacement(self): k = KBucket(range_min=0, range_max=60, maxsize=1) nfresh = Node(11, ("127.0.0.1", 11)) nstale = Node(22, ("127.0.0.1", 22)) nstale.last_updated -= constants.node_timeout + 2 # Insert stale accepted_node = k.offer_node(nstale) self.assertTrue(accepted_node) self.assertEquals(1, len(k.get_nodes())) # Replace with fresh accepted_node = k.offer_node(nfresh) self.assertTrue(accepted_node) self.assertEquals(1, len(k.get_nodes())) # Try (and fail to) replace with the stale accepted_node = k.offer_node(nstale) self.assertFalse(accepted_node) self.assertEquals(1, len(k.get_nodes()))
def test_offer_node_overflowAllFresh(self): k = KBucket(range_min=0, range_max=60, maxsize=1) n1 = Node(11, ("127.0.0.1", 11)) n2 = Node(22, ("127.0.0.1", 22)) n3 = Node(33, ("127.0.0.1", 33)) n4 = Node(44, ("127.0.0.1", 44)) # Accept only first node and none others accepted_node = k.offer_node(n1) self.assertTrue(accepted_node) self.assertEquals(1, len(k.get_nodes())) accepted_node = k.offer_node(n2) self.assertFalse(accepted_node) self.assertEquals(1, len(k.get_nodes())) accepted_node = k.offer_node(n3) self.assertFalse(accepted_node) self.assertEquals(1, len(k.get_nodes())) accepted_node = k.offer_node(n4) self.assertFalse(accepted_node) self.assertEquals(1, len(k.get_nodes()))
def test_offer_node_invalidRange(self): k = KBucket(range_min=0, range_max=5, maxsize=1) n_invalid = Node(11, ("127.0.0.1", 11)) self.assertRaises(kbucket.KBucketError, k.offer_node, n_invalid)
def test_offer_node_singleNode(self): k = KBucket(range_min=0, range_max=60, maxsize=1) n = Node(25, ("127.0.0.1", 50)) accepted_node = k.offer_node(n) self.assertTrue(accepted_node)