示例#1
0
class PeerTest(AsyncioTestCase):
    def setUp(self):
        self.loop = asyncio.get_event_loop()
        self.peer_manager = PeerManager(self.loop)
        self.node_ids = [generate_id(), generate_id(), generate_id()]
        self.first_contact = make_kademlia_peer(self.node_ids[1], '1.0.0.1', udp_port=1000)
        self.second_contact = make_kademlia_peer(self.node_ids[0], '1.0.0.2', udp_port=1000)

    def test_peer_is_good_unknown_peer(self):
        # Scenario: peer replied, but caller doesn't know the node_id.
        # Outcome: We can't say it's good or bad.
        # (yes, we COULD tell the node id, but not here. It would be
        # a side effect and the caller is responsible to discover it)
        peer = make_kademlia_peer(None, '1.2.3.4', 4444)
        self.peer_manager.report_last_requested('1.2.3.4', 4444)
        self.peer_manager.report_last_replied('1.2.3.4', 4444)
        self.assertIsNone(self.peer_manager.peer_is_good(peer))

    def test_make_contact_error_cases(self):
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '1.2.3.4', 100000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '1.2.3.4.5', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], 'this is not an ip', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '1.2.3.4', -1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '1.2.3.4', 0)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '1.2.3.4', 70000)
        self.assertRaises(ValueError, make_kademlia_peer, b'not valid node id', '1.2.3.4', 1000)

        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '0.0.0.0', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '10.0.0.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '100.64.0.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '127.0.0.1', 1000)
        self.assertIsNotNone(make_kademlia_peer(self.node_ids[1], '127.0.0.1', 1000, allow_localhost=True))
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '192.168.0.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '172.16.0.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '169.254.1.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '192.0.0.2', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '192.0.2.2', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '192.88.99.2', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '198.18.1.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '198.51.100.2', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '198.51.100.2', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '203.0.113.4', 1000)
        for i in range(32):
            self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], f"{224 + i}.0.0.0", 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1], '255.255.255.255', 1000)

    def test_boolean(self):
        self.assertNotEqual(self.first_contact, self.second_contact)
        self.assertEqual(
            self.second_contact, make_kademlia_peer(self.node_ids[0], '1.0.0.2', udp_port=1000)
        )

    def test_compact_ip(self):
        self.assertEqual(b'\x01\x00\x00\x01', self.first_contact.compact_ip())
        self.assertEqual(b'\x01\x00\x00\x02', self.second_contact.compact_ip())
示例#2
0
class PeerTest(AsyncioTestCase):
    def setUp(self):
        self.loop = asyncio.get_event_loop()
        self.peer_manager = PeerManager(self.loop)
        self.node_ids = [generate_id(), generate_id(), generate_id()]
        self.first_contact = make_kademlia_peer(self.node_ids[1],
                                                '127.0.0.1',
                                                udp_port=1000)
        self.second_contact = make_kademlia_peer(self.node_ids[0],
                                                 '192.168.0.1',
                                                 udp_port=1000)

    def test_peer_is_good_unknown_peer(self):
        # Scenario: peer replied, but caller doesn't know the node_id.
        # Outcome: We can't say it's good or bad.
        # (yes, we COULD tell the node id, but not here. It would be
        # a side effect and the caller is responsible to discover it)
        peer = make_kademlia_peer(None, '1.2.3.4', 4444)
        self.peer_manager.report_last_requested('1.2.3.4', 4444)
        self.peer_manager.report_last_replied('1.2.3.4', 4444)
        self.assertIsNone(self.peer_manager.peer_is_good(peer))

    def test_make_contact_error_cases(self):
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1],
                          '192.168.1.20', 100000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1],
                          '192.168.1.20.1', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1],
                          'this is not an ip', 1000)
        self.assertRaises(ValueError, make_kademlia_peer, self.node_ids[1],
                          '192.168.1.20', -1000)
        self.assertRaises(ValueError, make_kademlia_peer, b'not valid node id',
                          '192.168.1.20', 1000)

    def test_boolean(self):
        self.assertNotEqual(self.first_contact, self.second_contact)
        self.assertEqual(
            self.second_contact,
            make_kademlia_peer(self.node_ids[0], '192.168.0.1', udp_port=1000))

    def test_compact_ip(self):
        self.assertEqual(self.first_contact.compact_ip(), b'\x7f\x00\x00\x01')
        self.assertEqual(self.second_contact.compact_ip(), b'\xc0\xa8\x00\x01')