Esempio n. 1
0
 async def test_delete_file_during_reflector_upload(self):
     stop = asyncio.Event()
     incoming = asyncio.Event()
     not_incoming = asyncio.Event()
     reflector = ReflectorServer(self.server_blob_manager,
                                 response_chunk_size=50,
                                 stop_event=stop,
                                 incoming_event=incoming,
                                 not_incoming_event=not_incoming)
     reflector.start_server(5566, '127.0.0.1')
     await reflector.started_listening.wait()
     self.addCleanup(reflector.stop_server)
     self.assertEqual(0, self.stream.reflector_progress)
     reflect_task = asyncio.create_task(
         self.stream.upload_to_reflector('127.0.0.1', 5566))
     await incoming.wait()
     await not_incoming.wait()
     await incoming.wait()
     await self.stream_manager.delete(self.stream, delete_file=True)
     # this used to raise OSError when it can't read the deleted blob for the upload
     sent = await reflect_task
     self.assertListEqual([self.stream.sd_hash], sent)
     self.assertTrue(
         self.server_blob_manager.get_blob(
             self.stream.sd_hash).get_is_verified())
     self.assertFalse(
         self.server_blob_manager.get_blob(
             self.stream.descriptor.blobs[0].blob_hash).get_is_verified())
     self.assertFalse(self.stream.is_fully_reflected)
Esempio n. 2
0
 async def test_result_from_disconnect_mid_data_transfer(self):
     stop = asyncio.Event()
     incoming = asyncio.Event()
     not_incoming = asyncio.Event()
     reflector = ReflectorServer(self.server_blob_manager,
                                 response_chunk_size=50,
                                 stop_event=stop,
                                 incoming_event=incoming,
                                 not_incoming_event=not_incoming)
     reflector.start_server(5566, '127.0.0.1')
     await reflector.started_listening.wait()
     self.addCleanup(reflector.stop_server)
     self.assertEqual(0, self.stream.reflector_progress)
     reflect_task = asyncio.create_task(
         self.stream.upload_to_reflector('127.0.0.1', 5566))
     await incoming.wait()
     await not_incoming.wait()
     await incoming.wait()
     stop.set()
     self.assertListEqual(await reflect_task, [self.stream.sd_hash])
     self.assertTrue(
         self.server_blob_manager.get_blob(
             self.stream.sd_hash).get_is_verified())
     self.assertFalse(
         self.server_blob_manager.get_blob(
             self.stream.descriptor.blobs[0].blob_hash).get_is_verified())
     self.assertFalse(self.stream.is_fully_reflected)
Esempio n. 3
0
    async def asyncSetUp(self):
        await super().asyncSetUp()

        logging.getLogger('lbry.blob_exchange').setLevel(self.VERBOSITY)
        logging.getLogger('lbry.daemon').setLevel(self.VERBOSITY)
        logging.getLogger('lbry.stream').setLevel(self.VERBOSITY)
        logging.getLogger('lbry.wallet').setLevel(self.VERBOSITY)

        self.daemon = await self.add_daemon(self.wallet_node)

        await self.account.ensure_address_gap()
        address = (await self.account.receiving.get_addresses(limit=1, only_usable=True))[0]
        sendtxid = await self.blockchain.send_to_address(address, 10)
        await self.confirm_tx(sendtxid)
        await self.generate(5)

        server_tmp_dir = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, server_tmp_dir)
        self.server_config = Config()
        self.server_config.transaction_cache_size = 10000
        self.server_storage = SQLiteStorage(self.server_config, ':memory:')
        await self.server_storage.open()

        self.server_blob_manager = BlobManager(self.loop, server_tmp_dir, self.server_storage, self.server_config)
        self.server = BlobServer(self.loop, self.server_blob_manager, 'bQEaw42GXsgCAGio1nxFncJSyRmnztSCjP')
        self.server.start_server(5567, '127.0.0.1')
        await self.server.started_listening.wait()

        self.reflector = ReflectorServer(self.server_blob_manager)
        self.reflector.start_server(5566, '127.0.0.1')
        await self.reflector.started_listening.wait()
        self.addCleanup(self.reflector.stop_server)
Esempio n. 4
0
    async def _test_reflect_stream(self, response_chunk_size):
        reflector = ReflectorServer(self.server_blob_manager,
                                    response_chunk_size=response_chunk_size)
        reflector.start_server(5566, '127.0.0.1')
        await reflector.started_listening.wait()
        self.addCleanup(reflector.stop_server)
        self.assertEqual(0, self.stream.reflector_progress)
        sent = await self.stream.upload_to_reflector('127.0.0.1', 5566)
        self.assertEqual(100, self.stream.reflector_progress)
        self.assertSetEqual(
            set(sent),
            set(
                map(
                    lambda b: b.blob_hash, self.stream.descriptor.blobs[:-1] +
                    [self.blob_manager.get_blob(self.stream.sd_hash)])))
        self.assertTrue(self.stream.is_fully_reflected)
        server_sd_blob = self.server_blob_manager.get_blob(self.stream.sd_hash)
        self.assertTrue(server_sd_blob.get_is_verified())
        self.assertEqual(server_sd_blob.length, server_sd_blob.length)
        for blob in self.stream.descriptor.blobs[:-1]:
            server_blob = self.server_blob_manager.get_blob(blob.blob_hash)
            self.assertTrue(server_blob.get_is_verified())
            self.assertEqual(server_blob.length, blob.length)

        sent = await self.stream.upload_to_reflector('127.0.0.1', 5566)
        self.assertListEqual(sent, [])
Esempio n. 5
0
    async def _test_reflect_stream(self,
                                   response_chunk_size=50,
                                   partial_needs=False):
        reflector = ReflectorServer(self.server_blob_manager,
                                    response_chunk_size=response_chunk_size,
                                    partial_needs=partial_needs)
        reflector.start_server(5566, '127.0.0.1')
        if partial_needs:
            server_blob = self.server_blob_manager.get_blob(
                self.stream.sd_hash)
            client_blob = self.blob_manager.get_blob(self.stream.sd_hash)
            with client_blob.reader_context() as handle:
                server_blob.set_length(client_blob.get_length())
                writer = server_blob.get_blob_writer('nobody', 0)
                writer.write(handle.read())
            self.server_blob_manager.blob_completed(server_blob)
        await reflector.started_listening.wait()
        self.addCleanup(reflector.stop_server)
        self.assertEqual(0, self.stream.reflector_progress)
        sent = await self.stream.upload_to_reflector('127.0.0.1', 5566)
        self.assertEqual(100, self.stream.reflector_progress)
        if partial_needs:
            self.assertFalse(self.stream.is_fully_reflected)
            send_more = await self.stream.upload_to_reflector(
                '127.0.0.1', 5566)
            self.assertGreater(len(send_more), 0)
            sent.extend(send_more)
            sent.append(self.stream.sd_hash)
        self.assertSetEqual(
            set(sent),
            set(
                map(
                    lambda b: b.blob_hash, self.stream.descriptor.blobs[:-1] +
                    [self.blob_manager.get_blob(self.stream.sd_hash)])))
        send_more = await self.stream.upload_to_reflector('127.0.0.1', 5566)
        self.assertEqual(len(send_more), 0)
        self.assertTrue(self.stream.is_fully_reflected)
        server_sd_blob = self.server_blob_manager.get_blob(self.stream.sd_hash)
        self.assertTrue(server_sd_blob.get_is_verified())
        self.assertEqual(server_sd_blob.length, server_sd_blob.length)
        for blob in self.stream.descriptor.blobs[:-1]:
            server_blob = self.server_blob_manager.get_blob(blob.blob_hash)
            self.assertTrue(server_blob.get_is_verified())
            self.assertEqual(server_blob.length, blob.length)

        sent = await self.stream.upload_to_reflector('127.0.0.1', 5566)
        self.assertListEqual(sent, [])
Esempio n. 6
0
 async def test_result_from_disconnect_mid_sd_transfer(self):
     stop = asyncio.Event()
     incoming = asyncio.Event()
     reflector = ReflectorServer(self.server_blob_manager,
                                 response_chunk_size=50,
                                 stop_event=stop,
                                 incoming_event=incoming)
     reflector.start_server(5566, '127.0.0.1')
     await reflector.started_listening.wait()
     self.addCleanup(reflector.stop_server)
     self.assertEqual(0, self.stream.reflector_progress)
     reflect_task = asyncio.create_task(
         self.stream.upload_to_reflector('127.0.0.1', 5566))
     await incoming.wait()
     stop.set()
     # this used to raise (and then propagate) a CancelledError
     self.assertListEqual(await reflect_task, [])
     self.assertFalse(self.stream.is_fully_reflected)