Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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())
Exemplo n.º 3
0
 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())
Exemplo n.º 4
0
 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())
Exemplo n.º 5
0
 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())
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
    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()))
Exemplo n.º 8
0
    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()))
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
 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)