mirror of
https://github.com/django-q2/django-q2.git
synced 2026-09-23 18:38:12 +08:00
Merge pull request #208 from ossobv/monkeypatch
Replace global Conf mangling with monkeypatch
This commit is contained in:
@@ -11,8 +11,8 @@ from django_q.signing import SignedPackage
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_admin_views(admin_client):
|
||||
Conf.ORM = 'default'
|
||||
def test_admin_views(admin_client, monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'ORM', 'default')
|
||||
s = schedule('schedule.test')
|
||||
tag = uuid()
|
||||
f = Task.objects.create(
|
||||
@@ -78,5 +78,3 @@ def test_admin_views(admin_client):
|
||||
data = {'post': 'yes'}
|
||||
response = admin_client.post(url, data)
|
||||
assert response.status_code == 302
|
||||
# cleanup
|
||||
Conf.ORM = None
|
||||
|
||||
@@ -9,7 +9,7 @@ from django_q.conf import Conf
|
||||
from django_q.humanhash import uuid
|
||||
|
||||
|
||||
def test_broker():
|
||||
def test_broker(monkeypatch):
|
||||
broker = Broker()
|
||||
broker.enqueue('test')
|
||||
broker.dequeue()
|
||||
@@ -27,39 +27,35 @@ def test_broker():
|
||||
assert broker.get_stat('test_1') == 'test'
|
||||
assert broker.get_stats('test:*')[0] == 'test'
|
||||
# stats with no cache
|
||||
Conf.CACHE = 'not_configured'
|
||||
monkeypatch.setattr(Conf, 'CACHE', 'not_configured')
|
||||
broker.cache = broker.get_cache()
|
||||
assert broker.get_stat('test_1') is None
|
||||
broker.set_stat('test_1', 'test', 3)
|
||||
assert broker.get_stat('test_1') is None
|
||||
assert broker.get_stats('test:*') is None
|
||||
Conf.CACHE = 'default'
|
||||
|
||||
|
||||
def test_redis():
|
||||
Conf.DJANGO_REDIS = None
|
||||
def test_redis(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'DJANGO_REDIS', None)
|
||||
broker = get_broker()
|
||||
assert broker.ping() is True
|
||||
assert broker.info() is not None
|
||||
Conf.REDIS = {'host': '127.0.0.1', 'port': 7799}
|
||||
monkeypatch.setattr(Conf, 'REDIS', {'host': '127.0.0.1', 'port': 7799})
|
||||
broker = get_broker()
|
||||
with pytest.raises(Exception):
|
||||
broker.ping()
|
||||
Conf.REDIS = None
|
||||
Conf.DJANGO_REDIS = 'default'
|
||||
|
||||
|
||||
def test_custom():
|
||||
Conf.BROKER_CLASS = 'brokers.redis_broker.Redis'
|
||||
def test_custom(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'BROKER_CLASS', 'brokers.redis_broker.Redis')
|
||||
broker = get_broker()
|
||||
assert broker.ping() is True
|
||||
assert broker.info() is not None
|
||||
assert broker.__class__.__name__ == 'Redis'
|
||||
Conf.BROKER_CLASS = None
|
||||
|
||||
|
||||
def test_disque():
|
||||
Conf.DISQUE_NODES = ['127.0.0.1:7711']
|
||||
def test_disque(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'DISQUE_NODES', ['127.0.0.1:7711'])
|
||||
# check broker
|
||||
broker = get_broker(list_key='disque_test')
|
||||
assert broker.ping() is True
|
||||
@@ -75,7 +71,7 @@ def test_disque():
|
||||
broker.acknowledge(task[0])
|
||||
assert broker.queue_size() == 0
|
||||
# Retry test
|
||||
Conf.RETRY = 1
|
||||
monkeypatch.setattr(Conf, 'RETRY', 1)
|
||||
broker.enqueue('test')
|
||||
assert broker.queue_size() == 1
|
||||
broker.dequeue()
|
||||
@@ -97,8 +93,8 @@ def test_disque():
|
||||
# bulk test
|
||||
for i in range(5):
|
||||
broker.enqueue('test')
|
||||
Conf.BULK = 5
|
||||
Conf.DISQUE_FASTACK = True
|
||||
monkeypatch.setattr(Conf, 'BULK', 5)
|
||||
monkeypatch.setattr(Conf, 'DISQUE_FASTACK', True)
|
||||
tasks = broker.dequeue()
|
||||
for task in tasks:
|
||||
assert task is not None
|
||||
@@ -111,21 +107,16 @@ def test_disque():
|
||||
broker.delete_queue()
|
||||
assert broker.queue_size() == 0
|
||||
# connection test
|
||||
Conf.DISQUE_NODES = ['127.0.0.1:7798', '127.0.0.1:7799']
|
||||
monkeypatch.setattr(Conf, 'DISQUE_NODES', ['127.0.0.1:7798', '127.0.0.1:7799'])
|
||||
with pytest.raises(redis.exceptions.ConnectionError):
|
||||
broker.get_connection()
|
||||
# back to django-redis
|
||||
Conf.DISQUE_NODES = None
|
||||
Conf.DISQUE_FASTACK = False
|
||||
|
||||
|
||||
@pytest.mark.skipif(not os.getenv('IRON_MQ_TOKEN'),
|
||||
reason="requires IronMQ credentials")
|
||||
def test_ironmq():
|
||||
Conf.DISQUE_NODES = None
|
||||
Conf.SQS = None
|
||||
Conf.IRON_MQ = {'token': os.getenv('IRON_MQ_TOKEN'),
|
||||
'project_id': os.getenv('IRON_MQ_PROJECT_ID')}
|
||||
def test_ironmq(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'IRON_MQ', {'token': os.getenv('IRON_MQ_TOKEN'),
|
||||
'project_id': os.getenv('IRON_MQ_PROJECT_ID')})
|
||||
# check broker
|
||||
broker = get_broker(list_key=uuid()[0])
|
||||
assert broker.ping() is True
|
||||
@@ -143,7 +134,7 @@ def test_ironmq():
|
||||
broker.acknowledge(task[0])
|
||||
assert broker.dequeue() is None
|
||||
# Retry test
|
||||
# Conf.RETRY = 1
|
||||
# monkeypatch.setattr(Conf, 'RETRY', 1)
|
||||
# broker.enqueue('test')
|
||||
# assert broker.dequeue() is not None
|
||||
# sleep(3)
|
||||
@@ -162,7 +153,7 @@ def test_ironmq():
|
||||
# bulk test
|
||||
for i in range(5):
|
||||
broker.enqueue('test')
|
||||
Conf.BULK = 5
|
||||
monkeypatch.setattr(Conf, 'BULK', 5)
|
||||
tasks = broker.dequeue()
|
||||
for task in tasks:
|
||||
assert task is not None
|
||||
@@ -175,19 +166,14 @@ def test_ironmq():
|
||||
broker.purge_queue()
|
||||
assert broker.dequeue() is None
|
||||
broker.delete_queue()
|
||||
# back to django-redis
|
||||
Conf.IRON_MQ = None
|
||||
Conf.DJANGO_REDIS = 'default'
|
||||
|
||||
|
||||
@pytest.mark.skipif(not os.getenv('AWS_ACCESS_KEY_ID'),
|
||||
reason="requires AWS credentials")
|
||||
def test_sqs():
|
||||
Conf.IRON_MQ = None
|
||||
Conf.DISQUE_NODES = None
|
||||
Conf.SQS = {'aws_region': os.getenv('AWS_REGION'),
|
||||
'aws_access_key_id': os.getenv('AWS_ACCESS_KEY_ID'),
|
||||
'aws_secret_access_key': os.getenv('AWS_SECRET_ACCESS_KEY')}
|
||||
def test_sqs(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'SQS', {'aws_region': os.getenv('AWS_REGION'),
|
||||
'aws_access_key_id': os.getenv('AWS_ACCESS_KEY_ID'),
|
||||
'aws_secret_access_key': os.getenv('AWS_SECRET_ACCESS_KEY')})
|
||||
# check broker
|
||||
broker = get_broker(list_key=uuid()[0])
|
||||
assert broker.ping() is True
|
||||
@@ -201,7 +187,7 @@ def test_sqs():
|
||||
broker.acknowledge(task[0])
|
||||
assert broker.dequeue() is None
|
||||
# Retry test
|
||||
Conf.RETRY = 1
|
||||
monkeypatch.setattr(Conf, 'RETRY', 1)
|
||||
broker.enqueue('test')
|
||||
assert broker.dequeue() is not None
|
||||
sleep(2)
|
||||
@@ -222,7 +208,7 @@ def test_sqs():
|
||||
# bulk test
|
||||
for i in range(10):
|
||||
broker.enqueue('test')
|
||||
Conf.BULK = 12
|
||||
monkeypatch.setattr(Conf, 'BULK', 12)
|
||||
tasks = broker.dequeue()
|
||||
for task in tasks:
|
||||
assert task is not None
|
||||
@@ -234,15 +220,11 @@ def test_sqs():
|
||||
broker.enqueue('test')
|
||||
broker.purge_queue()
|
||||
broker.delete_queue()
|
||||
# back to django-redis
|
||||
Conf.SQS = None
|
||||
Conf.BULK = 1
|
||||
Conf.DJANGO_REDIS = 'default'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_orm():
|
||||
Conf.ORM = 'default'
|
||||
def test_orm(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'ORM', 'default')
|
||||
# check broker
|
||||
broker = get_broker(list_key='orm_test')
|
||||
assert broker.ping() is True
|
||||
@@ -258,7 +240,7 @@ def test_orm():
|
||||
broker.acknowledge(task[0])
|
||||
assert broker.queue_size() == 0
|
||||
# Retry test
|
||||
Conf.RETRY = 1
|
||||
monkeypatch.setattr(Conf, 'RETRY', 1)
|
||||
broker.enqueue('test')
|
||||
assert broker.queue_size() == 1
|
||||
broker.dequeue()
|
||||
@@ -280,7 +262,7 @@ def test_orm():
|
||||
# bulk test
|
||||
for i in range(5):
|
||||
broker.enqueue('test')
|
||||
Conf.BULK = 5
|
||||
monkeypatch.setattr(Conf, 'BULK', 5)
|
||||
tasks = broker.dequeue()
|
||||
assert broker.lock_size() == Conf.BULK
|
||||
for task in tasks:
|
||||
@@ -295,13 +277,11 @@ def test_orm():
|
||||
broker.enqueue('test')
|
||||
broker.delete_queue()
|
||||
assert broker.queue_size() == 0
|
||||
# back to django-redis
|
||||
Conf.ORM = None
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_mongo():
|
||||
Conf.MONGO = {'host': '127.0.0.1', 'port': 27017}
|
||||
def test_mongo(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'MONGO', {'host': '127.0.0.1', 'port': 27017})
|
||||
# check broker
|
||||
broker = get_broker(list_key='mongo_test')
|
||||
assert broker.ping() is True
|
||||
@@ -317,7 +297,7 @@ def test_mongo():
|
||||
broker.acknowledge(task[0])
|
||||
assert broker.queue_size() == 0
|
||||
# Retry test
|
||||
Conf.RETRY = 1
|
||||
monkeypatch.setattr(Conf, 'RETRY', 1)
|
||||
broker.enqueue('test')
|
||||
assert broker.queue_size() == 1
|
||||
broker.dequeue()
|
||||
@@ -356,5 +336,3 @@ def test_mongo():
|
||||
broker.purge_queue()
|
||||
broker.delete_queue()
|
||||
assert broker.queue_size() == 0
|
||||
# back to django-redis
|
||||
Conf.ORM = None
|
||||
|
||||
@@ -10,13 +10,8 @@ from django_q.brokers import get_broker
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def broker():
|
||||
Conf.DISQUE_NODES = None
|
||||
Conf.IRON_MQ = None
|
||||
Conf.SQS = None
|
||||
Conf.ORM = None
|
||||
Conf.MONGO = None
|
||||
Conf.DJANGO_REDIS = 'default'
|
||||
def broker(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'DJANGO_REDIS', 'default')
|
||||
return get_broker()
|
||||
|
||||
|
||||
@@ -148,7 +143,7 @@ def test_chain(broker):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_async_class(broker):
|
||||
def test_async_class(broker, monkeypatch):
|
||||
broker.purge_queue()
|
||||
broker.cache.clear()
|
||||
a = Async('math.copysign')
|
||||
@@ -186,10 +181,8 @@ def test_async_class(broker):
|
||||
assert a.result_group() == [-1]
|
||||
assert a.fetch_group() == [a.fetch()]
|
||||
# global overrides
|
||||
Conf.SYNC = True
|
||||
Conf.CACHED = True
|
||||
monkeypatch.setattr(Conf, 'SYNC', True)
|
||||
monkeypatch.setattr(Conf, 'CACHED', True)
|
||||
a = Async('math.floor', 1.5)
|
||||
a.run()
|
||||
assert a.result() == 1
|
||||
Conf.SYNC = False
|
||||
Conf.CACHED = False
|
||||
|
||||
@@ -29,13 +29,8 @@ class WordClass(object):
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def broker():
|
||||
Conf.DISQUE_NODES = None
|
||||
Conf.IRON_MQ = None
|
||||
Conf.SQS = None
|
||||
Conf.ORM = None
|
||||
Conf.MONGO = None
|
||||
Conf.DJANGO_REDIS = 'default'
|
||||
def broker(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'DJANGO_REDIS', 'default')
|
||||
return get_broker()
|
||||
|
||||
|
||||
@@ -281,7 +276,7 @@ def test_timeout_override(broker):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_recycle(broker):
|
||||
def test_recycle(broker, monkeypatch):
|
||||
# set up the Sentinel
|
||||
broker.list_key = 'test_recycle_test:q'
|
||||
async('django_q.tests.tasks.multiply', 2, 2, broker=broker)
|
||||
@@ -290,8 +285,8 @@ def test_recycle(broker):
|
||||
start_event = Event()
|
||||
stop_event = Event()
|
||||
# override settings
|
||||
Conf.RECYCLE = 2
|
||||
Conf.WORKERS = 1
|
||||
monkeypatch.setattr(Conf, 'RECYCLE', 2)
|
||||
monkeypatch.setattr(Conf, 'WORKERS', 1)
|
||||
# set a timer to stop the Sentinel
|
||||
threading.Timer(3, stop_event.set).start()
|
||||
s = Sentinel(stop_event, start_event, broker=broker)
|
||||
@@ -310,7 +305,7 @@ def test_recycle(broker):
|
||||
# check if the work has been done
|
||||
assert result_queue.qsize() == 2
|
||||
# save_limit test
|
||||
Conf.SAVE_LIMIT = 1
|
||||
monkeypatch.setattr(Conf, 'SAVE_LIMIT', 1)
|
||||
result_queue.put('STOP')
|
||||
# run monitor
|
||||
monitor(result_queue)
|
||||
@@ -361,14 +356,14 @@ def test_update_failed(broker):
|
||||
sleep(0.5)
|
||||
# second save - no success
|
||||
old_stopped = task['stopped']
|
||||
task['stopped']=timezone.now()
|
||||
task['stopped'] = timezone.now()
|
||||
save_task(task, broker)
|
||||
saved_task = Task.objects.get(id=task['id'])
|
||||
assert saved_task.stopped > old_stopped
|
||||
# third save - success
|
||||
task['stopped']=timezone.now()
|
||||
task['result']='result'
|
||||
task['success']=True
|
||||
task['stopped'] = timezone.now()
|
||||
task['result'] = 'result'
|
||||
task['success'] = True
|
||||
save_task(task, broker)
|
||||
saved_task = Task.objects.get(id=task['id'])
|
||||
assert saved_task.success is True
|
||||
@@ -383,9 +378,6 @@ def test_update_failed(broker):
|
||||
assert saved_task.result == 'result'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def assert_result(task):
|
||||
assert task is not None
|
||||
|
||||
@@ -9,7 +9,7 @@ from django_q.conf import Conf
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_monitor():
|
||||
def test_monitor(monkeypatch):
|
||||
assert Stat.get(0).sentinel == 0
|
||||
c = Cluster()
|
||||
c.start()
|
||||
@@ -25,14 +25,13 @@ def test_monitor():
|
||||
break
|
||||
assert found_c is True
|
||||
# test lock size
|
||||
Conf.ORM = 'default'
|
||||
monkeypatch.setattr(Conf, 'ORM', 'default')
|
||||
b = get_broker('monitor_test')
|
||||
b.enqueue('test')
|
||||
b.dequeue()
|
||||
assert b.lock_size() == 1
|
||||
monitor(run_once=True, broker=b)
|
||||
b.delete_queue()
|
||||
Conf.ORM = None
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
||||
@@ -13,17 +13,13 @@ from django_q.tasks import Schedule, fetch, schedule as create_schedule
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def broker():
|
||||
Conf.DISQUE_NODES = None
|
||||
Conf.IRON_MQ = None
|
||||
Conf.SQS = None
|
||||
Conf.ORM = None
|
||||
Conf.DJANGO_REDIS = 'default'
|
||||
def broker(monkeypatch):
|
||||
monkeypatch.setattr(Conf, 'DJANGO_REDIS', 'default')
|
||||
return get_broker()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_scheduler(broker):
|
||||
def test_scheduler(broker, monkeypatch):
|
||||
broker.list_key = 'scheduler_test:q'
|
||||
broker.delete_queue()
|
||||
schedule = create_schedule('math.copysign',
|
||||
@@ -117,7 +113,7 @@ def test_scheduler(broker):
|
||||
# ONCE schedule should be deleted
|
||||
assert Schedule.objects.filter(pk=once_schedule.pk).exists() is False
|
||||
# Catch up On
|
||||
Conf.CATCH_UP = True
|
||||
monkeypatch.setattr(Conf, 'CATCH_UP', True)
|
||||
now = timezone.now()
|
||||
schedule = create_schedule('django_q.tests.tasks.word_multiply',
|
||||
2,
|
||||
@@ -130,7 +126,7 @@ def test_scheduler(broker):
|
||||
schedule = Schedule.objects.get(pk=schedule.pk)
|
||||
assert schedule.next_run < now
|
||||
# Catch up off
|
||||
Conf.CATCH_UP = False
|
||||
monkeypatch.setattr(Conf, 'CATCH_UP', False)
|
||||
scheduler(broker=broker)
|
||||
schedule = Schedule.objects.get(pk=schedule.pk)
|
||||
assert schedule.next_run > now
|
||||
|
||||
Reference in New Issue
Block a user