async def setup_stream_manager(self,
                                balance=10.0,
                                fee=None,
                                old_sort=False):
     file_path = os.path.join(self.server_dir, "test_file")
     with open(file_path, 'wb') as f:
         f.write(os.urandom(20000000))
     descriptor = await StreamDescriptor.create_stream(
         self.loop,
         self.server_blob_manager.blob_dir,
         file_path,
         old_sort=old_sort)
     self.sd_hash = descriptor.sd_hash
     self.mock_wallet, self.uri = await get_mock_wallet(
         self.sd_hash, self.client_storage, self.client_wallet_dir, balance,
         fee)
     analytics_manager = AnalyticsManager(
         self.client_config,
         binascii.hexlify(generate_id()).decode(),
         binascii.hexlify(generate_id()).decode())
     self.stream_manager = StreamManager(
         self.loop, self.client_config, self.client_blob_manager,
         self.mock_wallet, self.client_storage,
         get_mock_node(self.server_from_client), analytics_manager)
     self.file_manager = FileManager(self.loop, self.client_config,
                                     self.mock_wallet, self.client_storage,
                                     analytics_manager)
     self.file_manager.source_managers['stream'] = self.stream_manager
     self.exchange_rate_manager = get_fake_exchange_rate_manager()
Exemple #2
0
 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 = self.peer_manager.get_kademlia_peer(
         self.node_ids[1], '127.0.0.1', udp_port=1000)
     self.second_contact = self.peer_manager.get_kademlia_peer(
         self.node_ids[0], '192.168.0.1', udp_port=1000)
Exemple #3
0
    def test_add_peer(self):
        peer = make_kademlia_peer(constants.generate_id(2),
                                  "1.2.3.4",
                                  udp_port=4444)
        peer_update2 = make_kademlia_peer(constants.generate_id(2),
                                          "1.2.3.4",
                                          udp_port=4445)

        self.assertListEqual([], self.kbucket.peers)

        # add the peer
        self.kbucket.add_peer(peer)
        self.assertListEqual([peer], self.kbucket.peers)

        # re-add it
        self.kbucket.add_peer(peer)
        self.assertListEqual([peer], self.kbucket.peers)
        self.assertEqual(self.kbucket.peers[0].udp_port, 4444)

        # add a new peer object with the same id and address but a different port
        self.kbucket.add_peer(peer_update2)
        self.assertListEqual([peer_update2], self.kbucket.peers)
        self.assertEqual(self.kbucket.peers[0].udp_port, 4445)

        # modify the peer object to have a different port
        peer_update2.udp_port = 4444
        self.kbucket.add_peer(peer_update2)
        self.assertListEqual([peer_update2], self.kbucket.peers)
        self.assertEqual(self.kbucket.peers[0].udp_port, 4444)

        self.kbucket.peers.clear()

        # Test if contacts can be added to empty list
        # Add k contacts to bucket
        for i in range(constants.k):
            peer = make_kademlia_peer(generate_id(),
                                      next(self.address_generator), 4444)
            self.assertTrue(self.kbucket.add_peer(peer))
            self.assertEqual(peer, self.kbucket.peers[i])

        # Test if contact is not added to full list
        peer = make_kademlia_peer(generate_id(), next(self.address_generator),
                                  4444)
        self.assertFalse(self.kbucket.add_peer(peer))

        # Test if an existing contact is updated correctly if added again
        existing_peer = self.kbucket.peers[0]
        self.assertTrue(self.kbucket.add_peer(existing_peer))
        self.assertEqual(existing_peer, self.kbucket.peers[-1])
Exemple #4
0
    def __init__(self,
                 loop: asyncio.AbstractEventLoop,
                 config: 'Config',
                 storage: 'SQLiteStorage',
                 identifier: str,
                 file_name: Optional[str] = None,
                 download_directory: Optional[str] = None,
                 status: Optional[str] = STATUS_STOPPED,
                 claim: Optional[StoredContentClaim] = None,
                 download_id: Optional[str] = None,
                 rowid: Optional[int] = None,
                 content_fee: Optional['Transaction'] = None,
                 analytics_manager: Optional['AnalyticsManager'] = None,
                 added_on: Optional[int] = None):
        self.loop = loop
        self.storage = storage
        self.config = config
        self.identifier = identifier
        self.download_directory = download_directory
        self._file_name = file_name
        self._status = status
        self.stream_claim_info = claim
        self.download_id = download_id or binascii.hexlify(
            generate_id()).decode()
        self.rowid = rowid
        self.content_fee = content_fee
        self.purchase_receipt = None
        self._added_on = added_on
        self.analytics_manager = analytics_manager

        self.saving = asyncio.Event(loop=self.loop)
        self.finished_writing = asyncio.Event(loop=self.loop)
        self.started_writing = asyncio.Event(loop=self.loop)
        self.finished_write_attempt = asyncio.Event(loop=self.loop)
Exemple #5
0
 def setUp(self):
     self.clock = task.Clock()
     self.contact_manager = ContactManager(self.clock.seconds)
     self.contact = self.contact_manager.make_contact(
         generate_id(), "127.0.0.1", 4444, None)
     self.clock.advance(3600)
     self.assertIsNone(self.contact.contact_is_good)
Exemple #6
0
    def __init__(self, loop: asyncio.AbstractEventLoop, config: 'Config', blob_manager: 'BlobManager',
                 sd_hash: str, download_directory: typing.Optional[str] = None, file_name: typing.Optional[str] = None,
                 status: typing.Optional[str] = STATUS_STOPPED, claim: typing.Optional[StoredContentClaim] = None,
                 download_id: typing.Optional[str] = None, rowid: typing.Optional[int] = None,
                 descriptor: typing.Optional[StreamDescriptor] = None,
                 content_fee: typing.Optional['Transaction'] = None,
                 analytics_manager: typing.Optional['AnalyticsManager'] = None,
                 added_on: typing.Optional[int] = None):
        self.loop = loop
        self.config = config
        self.blob_manager = blob_manager
        self.sd_hash = sd_hash
        self.download_directory = download_directory
        self._file_name = file_name
        self._status = status
        self.stream_claim_info = claim
        self.download_id = download_id or binascii.hexlify(generate_id()).decode()
        self.rowid = rowid
        self.content_fee = content_fee
        self.purchase_receipt = None
        self._added_on = added_on
        self.downloader = StreamDownloader(self.loop, self.config, self.blob_manager, sd_hash, descriptor)
        self.analytics_manager = analytics_manager

        self.fully_reflected = asyncio.Event(loop=self.loop)
        self.file_output_task: typing.Optional[asyncio.Task] = None
        self.delayed_stop_task: typing.Optional[asyncio.Task] = None
        self.streaming_responses: typing.List[typing.Tuple[Request, StreamResponse]] = []
        self.streaming = asyncio.Event(loop=self.loop)
        self._running = asyncio.Event(loop=self.loop)
        self.saving = asyncio.Event(loop=self.loop)
        self.finished_writing = asyncio.Event(loop=self.loop)
        self.started_writing = asyncio.Event(loop=self.loop)
        self.finished_write_attempt = asyncio.Event(loop=self.loop)
Exemple #7
0
    def test_remove_peer(self):
        # try remove contact from empty list
        peer = self.peer_manager.get_kademlia_peer(generate_id(), next(self.address_generator), 4444)
        self.assertRaises(ValueError, self.kbucket.remove_peer, peer)

        added = []
        # Add couple contacts
        for i in range(constants.k-2):
            peer = self.peer_manager.get_kademlia_peer(generate_id(), next(self.address_generator), 4444)
            self.assertTrue(self.kbucket.add_peer(peer))
            added.append(peer)

        while added:
            peer = added.pop()
            self.assertIn(peer, self.kbucket.peers)
            self.kbucket.remove_peer(peer)
            self.assertNotIn(peer, self.kbucket.peers)
Exemple #8
0
 def get_node_id(self):
     node_id_filename = os.path.join(self.conf.data_dir, "node_id")
     if os.path.isfile(node_id_filename):
         with open(node_id_filename, "r") as node_id_file:
             return base58.b58decode(str(node_id_file.read()).strip())
     node_id = utils.generate_id()
     with open(node_id_filename, "w") as node_id_file:
         node_id_file.write(base58.b58encode(node_id).decode())
     return node_id
Exemple #9
0
 def setUp(self):
     self.loop = asyncio.get_event_loop()
     self.address_generator = address_generator()
     self.peer_manager = PeerManager(self.loop)
     self.kbucket = KBucket(self.peer_manager, 0, 2**constants.hash_bits, generate_id())