def test_sync_empty(alter_xmlrpc): alter_xmlrpc(set()) redis.delete(POLL_SIMPLE_THROTTLE) Package.query.delete() db.session.commit() assert '302 FOUND' == current_app.test_client().get('/pypi/sync').status assert [] == db.session.query(Package.name, Package.summary, Package.latest_version).all()
def test_sync_unhandled_exception(): old_throttle = pypi.THROTTLE pypi.THROTTLE = 'nan' redis.delete(POLL_SIMPLE_THROTTLE) with pytest.raises(ValueError): current_app.test_client().get('/pypi/sync').status() pypi.THROTTLE = old_throttle
def test_sync_few(alter_xmlrpc): alter_xmlrpc([dict(name='packageB', summary='Test package.', version='3.0.0'), ]) redis.delete(POLL_SIMPLE_THROTTLE) assert '302 FOUND' == current_app.test_client().get('/pypi/sync').status expected = [('packageB', 'Test package.', '3.0.0'), ] actual = db.session.query(Package.name, Package.summary, Package.latest_version).all() assert expected == actual
def test_sync_timeout(): old_delay = pypi.update_package_list.delay pypi.update_package_list.delay = FakeDelay redis.delete(POLL_SIMPLE_THROTTLE) assert '302 FOUND' == current_app.test_client().get('/pypi/sync').status expected = [ ('packageB', 'Test package.', '3.0.0'), ('packageB1', 'Test package.', '3.0.0'), ('packageB2', 'Test package.', '3.0.0'), ('packageB3', 'Test package.', '3.0.0'), ('packageB4', 'Test package.', '3.0.0'), ('packageB5', 'Test package.', '3.0.0'), ] actual = db.session.query(Package.name, Package.summary, Package.latest_version).all() assert sorted(expected) == sorted(actual) pypi.update_package_list.delay = old_delay
def test_sync_parallel(alter_xmlrpc): alter_xmlrpc([dict(name='packageD', summary='Test package.', version='3.0.0'), ]) redis.delete(POLL_SIMPLE_THROTTLE) redis_key = CELERY_LOCK.format(task_name='imp_flask.tasks.pypi.update_package_list') lock = redis.lock(redis_key, timeout=1) assert lock.acquire(blocking=False) assert '302 FOUND' == current_app.test_client().get('/pypi/sync').status expected = [('packageB', 'Test package.', '3.0.0'), ] actual = db.session.query(Package.name, Package.summary, Package.latest_version).all() assert expected == actual try: lock.release() except LockError: pass