Merge pull request #208 from ossobv/monkeypatch

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