Exemplo n.º 1
0
    def test_guid_in_range(self):
        range_min, range_max = 2, 16
        bucket = self.kbucket_class(range_min, range_max)
        low_out, low_in, mid, high_in, high_out = (
            range_min - 1, range_min, range_min + (range_max - range_min) // 2,
            range_max - 1, range_max)

        for num in (low_in, mid, high_in):
            self.assertTrue(bucket.guid_in_range(util.num_to_guid(num)))

        for num in (low_out, high_out):
            self.assertFalse(bucket.guid_in_range(util.num_to_guid(num)))
Exemplo n.º 2
0
    def test_guid_in_range(self):
        range_min, range_max = 2, 16
        bucket = self.kbucket_class(range_min, range_max)
        low_out, low_in, mid, high_in, high_out = (
            range_min - 1,
            range_min,
            range_min + (range_max - range_min) // 2,
            range_max - 1,
            range_max
        )

        for num in (low_in, mid, high_in):
            self.assertTrue(bucket.guid_in_range(util.num_to_guid(num)))

        for num in (low_out, high_out):
            self.assertFalse(bucket.guid_in_range(util.num_to_guid(num)))
Exemplo n.º 3
0
 def test_remove_absent_guid(self):
     absent_guid = util.num_to_guid(self.range_max - 1)
     # Removing an absent guid shouldn't raise an error.
     try:
         self.rt.remove_guid(absent_guid)
     except Exception:
         self.fail('RoutingTable crashed on removing absent contact.')
Exemplo n.º 4
0
 def setUpClass(cls):
     cls.range_min = 0
     cls.range_max = 2**constants.BIT_NODE_ID_LEN
     cls.own_num_guid = 1
     cls.own_guid = util.num_to_guid(cls.own_num_guid)
     cls.bad_guid = 'f' * (constants.HEX_NODE_ID_LEN + 1)
     cls.bad_contact = contact.Contact('123.45.67.89', 12345, cls.bad_guid)
Exemplo n.º 5
0
    def test_num_to_guid(self):
        test_tuples = ((0, '0000000000000000000000000000000000000000'),
                       (42, '000000000000000000000000000000000000002a'),
                       (2**constants.BIT_NODE_ID_LEN - 1,
                        'ffffffffffffffffffffffffffffffffffffffff'))

        for num, guid in test_tuples:
            self.assertEqual(util.num_to_guid(num), guid)
Exemplo n.º 6
0
 def test_get_contacts_excluding_absent(self):
     bucket = self._make_kbucket(constants.K)
     absent_guid = util.num_to_guid(self.range_max - 1)
     try:
         rest_contacts = bucket.get_contacts(excluded_guid=absent_guid)
     except Exception:
         self.fail('Crashed while excluding contact absent from bucket.')
     else:
         self.assertEqual(len(rest_contacts), len(bucket))
Exemplo n.º 7
0
 def test_get_contacts_excluding_absent(self):
     bucket = self._make_kbucket(constants.K)
     absent_guid = util.num_to_guid(self.range_max - 1)
     try:
         rest_contacts = bucket.get_contacts(excluded_guid=absent_guid)
     except Exception:
         self.fail('Crashed while excluding contact absent from bucket.')
     else:
         self.assertEqual(len(rest_contacts), len(bucket))
Exemplo n.º 8
0
    def test_num_to_guid(self):
        test_tuples = (
            (0, '0000000000000000000000000000000000000000'),
            (42, '000000000000000000000000000000000000002a'),
            (
                2**constants.BIT_NODE_ID_LEN - 1,
                'ffffffffffffffffffffffffffffffffffffffff'
            )
        )

        for num, guid in test_tuples:
            self.assertEqual(util.num_to_guid(num), guid)
Exemplo n.º 9
0
    def test_find_close_nodes_except_sender_guid(self):
        rt = self._make_rt_with_n_buckets(3)
        sender_num_guid = rt[0].range_min
        sender_contact = self._make_contact_from_num(sender_num_guid)
        rt.add_contact(sender_contact)
        self.assertIn(sender_contact, rt[0])

        r_guid = util.num_to_guid(sender_num_guid + 1)
        node_list = rt.find_close_nodes(
            r_guid,
            sender_guid=sender_contact.guid
        )
        self.assertEqual(len(node_list), constants.K)
        self.assertNotIn(sender_contact, node_list)
Exemplo n.º 10
0
    def test_add_new_contact_and_cache(self):
        # Add K + 1 contacts to initial KBucket, to force a split.
        base = util.guid_to_num(self.own_guid) + 1
        for i in range(constants.K):
            self.rt.add_contact(
                self._make_contact_from_num(base + i)
            )
        self.rt.add_contact(self._make_contact_from_num(self.range_max - 1))

        # Create a guid that is at maximal distance from own_guid,
        # thus must be at a different bucket.
        self.assertEqual(len(self.rt), 2)
        max_base = (2**constants.BIT_NODE_ID_LEN - 1) ^ self.own_num_guid
        self.assertTrue(self.rt[0].guid_in_range(self.own_guid))
        self.assertTrue(self.rt[1].guid_in_range(util.num_to_guid(max_base)))

        # Add contacts to the other KBucket, until it is full.
        for i in range(constants.K):
            if len(self.rt[1]) == constants.K:
                break
            self.rt.add_contact(
                self._make_contact_from_num(max_base - i)
            )

        # Create and add a contact that is in the range of the other
        # KBucket.
        new_contact = self._make_contact_from_num(max_base - constants.K)
        self.rt.add_contact(new_contact)

        self.assertEqual(
            len(self.rt),
            2,
            'A KBucket not containing own_guid was split.'
        )

        # Assert the new contact was cached properly.
        self.assertNotIn(new_contact, self.rt[0])
        self.assertNotIn(new_contact, self.rt[1])
        self.assertEqual([], self.rt[0].get_cached_contacts())
        self.assertEqual([new_contact], self.rt[1].get_cached_contacts())
Exemplo n.º 11
0
 def test_get_contact_updates_timestamp(self):
     self.bucket.last_accessed = 1
     self.bucket.get_contact(util.num_to_guid(self.range_min))
     self.assertFalse(self.bucket.is_stale())
Exemplo n.º 12
0
 def _make_contact_from_num(i):
     return contact.Contact('123.45.67.89', 12345, util.num_to_guid(i))
Exemplo n.º 13
0
 def test_remove_guid_updates_timestamp(self):
     self.bucket.last_accessed = 1
     self.bucket.remove_guid(util.num_to_guid(self.range_min))
     self.assertFalse(self.bucket.is_stale())
Exemplo n.º 14
0
 def test_get_absent_contact(self):
     new_guid = util.num_to_guid(self.range_max - 1)
     self.assertIsNone(self.rt.get_contact(new_guid))
Exemplo n.º 15
0
 def test_get_contact_updates_timestamp(self):
     self.bucket.last_accessed = 1
     self.bucket.get_contact(util.num_to_guid(self.range_min))
     self.assertFalse(self.bucket.is_stale())
Exemplo n.º 16
0
 def test_get_absent_contact(self):
     absent_guid = util.num_to_guid(self.range_max - 2)
     self.assertIsNone(self.bucket.get_contact(absent_guid),
                       'Nonexistent contact found.')
Exemplo n.º 17
0
 def test_get_absent_contact(self):
     absent_guid = util.num_to_guid(self.range_max - 2)
     self.assertIsNone(
         self.bucket.get_contact(absent_guid),
         'Nonexistent contact found.'
     )
Exemplo n.º 18
0
 def test_remove_guid_updates_timestamp(self):
     self.bucket.last_accessed = 1
     self.bucket.remove_guid(util.num_to_guid(self.range_min))
     self.assertFalse(self.bucket.is_stale())