Files
django-q2/django_q/tests/test_q.py
T
2015-06-24 15:29:16 +02:00

143 lines
3.9 KiB
Python

import sys
import os
from time import sleep
from multiprocessing import Queue, Event
import pytest
myPath = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, myPath + '/../')
from django_q.core import Cluster, r, async, pusher, worker, monitor, Sentinel
from django_q.humanhash import DEFAULT_WORDLIST
from django_q import result, get_task
class WordClass(object):
def __init__(self):
self.word_list = DEFAULT_WORDLIST
def get_words(self):
return self.word_list
def test_admin_view(admin_client):
response = admin_client.get('/admin/django_q/')
assert response.status_code == 200
response = admin_client.get('/admin/django_q/failure/')
assert response.status_code == 200
response = admin_client.get('/admin/django_q/success/')
assert response.status_code == 200
def test_redis_connection():
assert r.ping() is True
def test_cluster_initial():
c = Cluster()
assert c.sentinel is None
assert c.is_idle
c.start()
while c.is_starting:
sleep(0.2)
assert c.sentinel.is_alive() is True
assert c.is_running
c.stop()
while c.is_stopping:
sleep(0.2)
assert c.sentinel.is_alive() is False
assert c.has_stopped
def test_sentinel():
start_event = Event()
stop_event = Event()
stop_event.set()
Sentinel(stop_event, start_event, list_key='sentinel_test:q')
assert start_event.is_set()
@pytest.mark.django_db
def test_cluster():
list_key = 'cluster_test:q'
r.delete(list_key)
task = async('django_q.tests.tasks.count_letters', DEFAULT_WORDLIST, list_key=list_key)
assert r.llen(list_key) == 1
task_queue = Queue()
assert task_queue.qsize() == 0
result_queue = Queue()
assert result_queue.qsize() == 0
event = Event()
event.set()
# Test push
pusher(task_queue, event, list_key=list_key)
assert task_queue.qsize() == 1
assert r.llen(list_key) == 0
# Test work
task_queue.put('STOP')
worker(task_queue, result_queue)
assert task_queue.qsize() == 0
assert result_queue.qsize() == 1
# Test monitor
result_queue.put('STOP')
monitor(result_queue)
assert result_queue.qsize() == 0
# check result
assert result(task) == 1506
r.delete(list_key)
@pytest.mark.django_db
def run_cluster():
list_key = 'run_test:q'
r.delete(list_key)
c = Cluster(list_key=list_key)
assert c.start() > 0
while not c.is_running:
sleep(0.5)
while c.stat.task_q_size > 0 and c.stat.done_q_size > 0:
sleep(0.5)
assert c.stop() is True
r.delete(list_key)
@pytest.mark.django_db
def blah_async():
a = async('django_q.tests.tasks.count_letters', DEFAULT_WORDLIST, hook='django_q.tests.test_q.assert_result')
b = async('django_q.tests.tasks.count_letters2', WordClass(), hook='django_q.tests.test_q.assert_result')
# unknown argument
c = async('django_q.tests.tasks.count_letters', DEFAULT_WORDLIST, 'oneargumentoomany',
hook='django_q.tests.test_q.assert_bad_result')
# unknown function
d = async('django_q.tests.tasks.does_not_exist', WordClass(), hook='django_q.tests.test_q.assert_bad_result')
assert isinstance(a, str)
assert isinstance(b, str)
assert isinstance(c, str)
assert isinstance(d, str)
run_cluster()
result_a = get_task(a)
assert result_a is not None
assert result_a.success is True
assert result(a) == 1506
result_b = get_task(b)
assert result_b is not None
assert result_b.success is True
assert result(b) == 1506
result_c = get_task(c)
assert result_c is not None
assert result_c.success is False
result_d = get_task(d)
assert result_d is not None
assert result_d.success is False
@pytest.mark.django_db
def assert_result(task):
assert task is not None
assert task.success is True
assert task.result == 1506
@pytest.mark.django_db
def assert_bad_result(task):
assert task is not None
assert task.success is False