def test_stop(self): dl = pyloader.Loader(daemon=True) dummy1 = pyloader.DLable(resources['1GB'], target, 'dummy1.zip') dummy2 = pyloader.DLable(resources['1GB'], target, 'dummy2.zip') dl.queue(dummy1) dl.queue(dummy2) self.assertTrue(dl.is_active) self.assertIs(dl.active, 0) dl.start() # Make sure the download started time.sleep(1.0) self.assertIs(dl.active, 2) dl.stop(dummy1.uid) # Make sure the stop triggered time.sleep(1.0) self.assertIs(dl.active, 1) dl.stop(dummy2.uid) # Make sure the stop triggered time.sleep(1.0) self.assertIs(dl.active, 0) self.assertFalse(dl.is_active) dl.exit()
def test_url_headers_list(self): dl = pyloader.Loader(daemon=True) dummy = pyloader.DLable( [resources['5MB'], resources['5MB'], resources['5MB']], target, 'dummy.zip', headers=[ { 'Range': 'bytes=0-1048576' }, { 'Range': 'bytes=0-2097152' }, { 'Range': 'bytes=0-3145728' }, ], content_length=6291456, ) dl.download(dummy) dl.start() while dl.is_active(): time.sleep(0.25) target_file = os.path.join(target, 'dummy.zip') with open(target_file, 'rb') as f: self.assertEqual( hashlib.md5(f.read()).hexdigest(), '037aabe7a96bc84c16c337da159b171b') dl.exit()
def test_access_writable(self): try: pyloader.DLable('http://url.doesnt.matter', paths['writable']) self.assertTrue(True) except IOError: self.assertTrue(False)
def test_clear_queued(self): dl = pyloader.Loader(daemon=True) dummy1 = pyloader.DLable(resources['1GB'], target, 'dummy1.zip') dummy2 = pyloader.DLable(resources['1GB'], target, 'dummy2.zip') dl.queue(dummy1) dl.queue(dummy2) self.assertEqual(2, dl.queued) dl.clear_queued() self.assertEqual(0, dl.queued) dl.exit()
def test_callback_overwrite(self): def _progress_cb(progress): return False def _url_resolve_cb(item): return item dl = pyloader.Loader(daemon=True) dummy1 = pyloader.DLable(resources['5MB'], target, 'dummy1.zip') dl.queue(dummy1) dl.start() with self.assertRaises(RuntimeError): dl.progress_cb = _progress_cb with self.assertRaises(RuntimeError): dl.url_resolve_cb = _url_resolve_cb while dl.is_active(): time.sleep(0.25) dl.progress_cb = _progress_cb dl.url_resolve_cb = _url_resolve_cb dl.exit()
def test_access_writable_none_existant(self): try: pyloader.DLable('http://url.doesnt.matter', os.path.join(paths['writable'], 'sub')) self.assertTrue(True) except IOError: self.assertTrue(False)
def test_header_list_url_list_uneven_args(self): with self.assertRaises(ValueError): pyloader.DLable( [resources['5MB']], target, 'dummy.zip', headers=[{}, {}], )
def test_header_list_url_str(self): with self.assertRaises(TypeError): pyloader.DLable( resources['5MB'], target, 'dummy.zip', headers=[{}], )
def test_serialize_missing_required(self): item = pyloader.DLable('http://url.doesnt.matter', paths['writable']) data = item.to_json() # Remove a required argument data = json.loads(data) del data['target_dir'] data = json.dumps(data) self.assertRaises(TypeError, pyloader.DLable.from_json, data)
def test_serialize_proper(self): item = pyloader.DLable('http://url.doesnt.matter', paths['writable']) try: data = item.to_json() pyloader.DLable.from_json(data) self.assertTrue(True) except Exception: self.assertTrue(False)
def test_url_resolve_cb(self): _url_resolved = threading.Event() def _url_resolver(url): _url_resolved.set() return resources['1GB'] dl = pyloader.Loader(update_interval=1, daemon=True, url_resolve_cb=_url_resolver) dl.start() # Use normal url and not call the resolve callback dummy = pyloader.DLable(resources['1GB'], target, resolve_url=False) dl.download(dummy) time.sleep(1.0) dl.stop(dummy.uid) self.assertTrue(not _url_resolved.is_set()) _url_resolved.clear() # Use "something-else" as url and let the callback resolve it dummy = pyloader.DLable('prot://some.url?id=123', target, resolve_url=True) dl.download(dummy) time.sleep(1.0) dl.stop(dummy.uid) self.assertTrue(_url_resolved.is_set()) _url_resolved.clear() # Wait for all downloads to end while dl.is_active: time.sleep(0.25) dl.exit()
def test_callback_cancel(self): mock = Mock(return_value=True) dummy1 = pyloader.DLable(resources['5MB'], target, 'dummy1.zip') dl = pyloader.Loader(progress_cb=mock, update_interval=1, daemon=True) dl.start() dl.download(dummy1) # Wait for all downloads to end while dl.is_active(): time.sleep(0.25) dl.exit() mock.assert_called_once()
def test_download_success(self): mock = Mock(return_value=False) dummy1 = pyloader.DLable(resources['5MB'], target, 'dummy1.zip') dl = pyloader.Loader(progress_cb=mock, update_interval=1, daemon=True) dl.start() dl.download(dummy1) # Wait for all downloads to end while dl.is_active(): time.sleep(0.25) dl.exit() progress = mock.mock_calls[-1][1][0] self.assertEqual(progress.status, pyloader.Status.FINISHED)
def test_url_list(self): dl = pyloader.Loader(daemon=True) dummy = pyloader.DLable( [resources['5MB'], resources['5MB'], resources['5MB']], target, 'dummy.zip', content_length=15728640, ) dl.download(dummy) dl.start() while dl.is_active(): time.sleep(0.25) target_file = os.path.join(target, 'dummy.zip') with open(target_file, 'rb') as f: self.assertEqual( hashlib.md5(f.read()).hexdigest(), 'd7197443eb84599f02a36830a33f917f') dl.exit()
resources = { '5MB': 'http://download.thinkbroadband.com/5MB.zip', '10MB': 'http://download.thinkbroadband.com/10MB.zip', '20MB': 'http://download.thinkbroadband.com/20MB.zip', '50MB': 'http://download.thinkbroadband.com/50MB.zip', '100MB': 'http://download.thinkbroadband.com/100MB.zip', '200MB': 'http://download.thinkbroadband.com/200MB.zip', '512MB': 'http://download.thinkbroadband.com/512MB.zip', '1GB': 'http://download.thinkbroadband.com/1GB.zip' } headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36' } dummy = pyloader.DLable(resources['1GB'], target, headers=headers) class TestLoader(unittest.TestCase): def test_properties(self): dl = pyloader.Loader(daemon=True) self.assertFalse(dl.is_active) self.assertFalse(dl.is_alive) self.assertIs(dl.queued, 0) self.assertIs(dl.active, 0) dl.queue(dummy) self.assertIs(dl.queued, 1)