mirror of
https://github.com/django-q2/django-q2.git
synced 2026-10-07 13:58:11 +08:00
Remove arrow dependency, update packages, set up testing with compose (#17)
This commit is contained in:
@@ -106,11 +106,16 @@ LOGGING = {
|
||||
|
||||
STATIC_URL = "/static/"
|
||||
|
||||
REDIS_HOST = os.environ.get("REDIS_HOST", "redis")
|
||||
|
||||
MONGO_HOST = os.environ.get("MONGO_HOST", "mongo")
|
||||
|
||||
|
||||
# Django Redis
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": "redis://127.0.0.1:6379/0",
|
||||
"LOCATION": f"redis://{REDIS_HOST}:6379/0",
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
"PARSER_CLASS": "redis.connection.HiredisParser",
|
||||
@@ -125,4 +130,5 @@ Q_CLUSTER = {
|
||||
"testing": True,
|
||||
"log_level": "DEBUG",
|
||||
"django_redis": "default",
|
||||
"redis": f"redis://{REDIS_HOST}:6379/0"
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import redis
|
||||
from django_q.brokers import Broker, get_broker
|
||||
from django_q.conf import Conf
|
||||
from django_q.humanhash import uuid
|
||||
from django_q.tests.settings import REDIS_HOST, MONGO_HOST
|
||||
|
||||
|
||||
def test_broker(monkeypatch):
|
||||
@@ -40,11 +41,11 @@ def test_redis(monkeypatch):
|
||||
broker = get_broker()
|
||||
assert broker.ping() is True
|
||||
assert broker.info() is not None
|
||||
monkeypatch.setattr(Conf, "REDIS", {"host": "127.0.0.1", "port": 7799})
|
||||
monkeypatch.setattr(Conf, "REDIS", {"host": REDIS_HOST, "port": 7799})
|
||||
broker = get_broker()
|
||||
with pytest.raises(Exception):
|
||||
broker.ping()
|
||||
monkeypatch.setattr(Conf, "REDIS", "redis://127.0.0.1:7799")
|
||||
monkeypatch.setattr(Conf, "REDIS", f"redis://{REDIS_HOST}:7799")
|
||||
broker = get_broker()
|
||||
with pytest.raises(Exception):
|
||||
broker.ping()
|
||||
@@ -58,68 +59,6 @@ def test_custom(monkeypatch):
|
||||
assert broker.__class__.__name__ == "Redis"
|
||||
|
||||
|
||||
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
|
||||
assert broker.info() is not None
|
||||
# clear before we start
|
||||
broker.delete_queue()
|
||||
# async_task
|
||||
broker.enqueue("test")
|
||||
assert broker.queue_size() == 1
|
||||
# dequeue
|
||||
task = broker.dequeue()[0]
|
||||
assert task[1] == "test"
|
||||
broker.acknowledge(task[0])
|
||||
assert broker.queue_size() == 0
|
||||
# Retry test
|
||||
monkeypatch.setattr(Conf, "RETRY", 1)
|
||||
broker.enqueue("test")
|
||||
assert broker.queue_size() == 1
|
||||
broker.dequeue()
|
||||
assert broker.queue_size() == 0
|
||||
sleep(1.5)
|
||||
assert broker.queue_size() == 1
|
||||
task = broker.dequeue()[0]
|
||||
assert broker.queue_size() == 0
|
||||
broker.acknowledge(task[0])
|
||||
sleep(1.5)
|
||||
assert broker.queue_size() == 0
|
||||
# delete job
|
||||
task_id = broker.enqueue("test")
|
||||
broker.delete(task_id)
|
||||
assert broker.dequeue() is None
|
||||
# fail
|
||||
task_id = broker.enqueue("test")
|
||||
broker.fail(task_id)
|
||||
# bulk test
|
||||
for _ in range(5):
|
||||
broker.enqueue("test")
|
||||
monkeypatch.setattr(Conf, "BULK", 5)
|
||||
monkeypatch.setattr(Conf, "DISQUE_FASTACK", True)
|
||||
tasks = broker.dequeue()
|
||||
for task in tasks:
|
||||
assert task is not None
|
||||
broker.acknowledge(task[0])
|
||||
# test duplicate acknowledge
|
||||
broker.acknowledge(task[0])
|
||||
# delete queue
|
||||
broker.enqueue("test")
|
||||
broker.enqueue("test")
|
||||
broker.delete_queue()
|
||||
assert broker.queue_size() == 0
|
||||
# connection test
|
||||
monkeypatch.setattr(Conf, "DISQUE_NODES", ["127.0.0.1:7798", "127.0.0.1:7799"])
|
||||
with pytest.raises(redis.exceptions.ConnectionError):
|
||||
broker.get_connection()
|
||||
# connection test with no nodes
|
||||
monkeypatch.setattr(Conf, "DISQUE_NODES", None)
|
||||
with pytest.raises(redis.exceptions.ConnectionError):
|
||||
broker.get_connection()
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
not os.getenv("IRON_MQ_TOKEN"), reason="requires IronMQ credentials"
|
||||
)
|
||||
@@ -312,7 +251,7 @@ def test_orm(monkeypatch):
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_mongo(monkeypatch):
|
||||
monkeypatch.setattr(Conf, "MONGO", {"host": "127.0.0.1", "port": 27017})
|
||||
monkeypatch.setattr(Conf, "MONGO", {"host": MONGO_HOST, "port": 27017})
|
||||
# check broker
|
||||
broker = get_broker(list_key="mongo_test")
|
||||
assert broker.ping() is True
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from datetime import datetime
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
@@ -32,6 +33,7 @@ from django_q.tasks import (
|
||||
result_group,
|
||||
)
|
||||
from django_q.tests.tasks import TaskError, multiply
|
||||
from django_q.utils import add_months, add_years
|
||||
|
||||
|
||||
class WordClass:
|
||||
@@ -743,3 +745,43 @@ def assert_result(task):
|
||||
def assert_bad_result(task):
|
||||
assert task is not None
|
||||
assert task.success is False
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_add_months():
|
||||
# add some months
|
||||
initial_date = datetime(2020, 2, 2)
|
||||
new_date = add_months(initial_date, 3)
|
||||
assert new_date.year == 2020
|
||||
assert new_date.month == 5
|
||||
assert new_date.day == 2
|
||||
|
||||
# push to next year
|
||||
initial_date = datetime(2020, 11, 2)
|
||||
new_date = add_months(initial_date, 3)
|
||||
assert new_date.year == 2021
|
||||
assert new_date.month == 2
|
||||
assert new_date.day == 2
|
||||
|
||||
# last day of the month
|
||||
initial_date = datetime(2020, 1, 31)
|
||||
new_date = add_months(initial_date, 1)
|
||||
assert new_date.year == 2020
|
||||
assert new_date.month == 2
|
||||
assert new_date.day == 29
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_add_years():
|
||||
# add some months
|
||||
initial_date = datetime(2020, 2, 2)
|
||||
new_date = add_years(initial_date, 1)
|
||||
assert new_date.year == 2021
|
||||
assert new_date.month == 2
|
||||
assert new_date.day == 2
|
||||
|
||||
# test leap year
|
||||
initial_date = datetime(2020, 2, 29)
|
||||
new_date = add_years(initial_date, 1)
|
||||
assert new_date.year == 2021
|
||||
assert new_date.month == 2
|
||||
assert new_date.day == 28
|
||||
|
||||
@@ -3,7 +3,6 @@ from datetime import timedelta
|
||||
from multiprocessing import Event, Value
|
||||
from unittest import mock
|
||||
|
||||
import arrow
|
||||
import pytest
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import IntegrityError
|
||||
@@ -128,7 +127,7 @@ def test_scheduler(broker, monkeypatch):
|
||||
assert schedule.repeats == 0
|
||||
assert schedule.last_run() is not None
|
||||
assert schedule.success() is True
|
||||
assert schedule.next_run < arrow.get(timezone.now()).shift(hours=+1)
|
||||
assert schedule.next_run < timezone.now() + timedelta(hours=1)
|
||||
task = fetch(schedule.task)
|
||||
assert task is not None
|
||||
assert task.success is True
|
||||
|
||||
Reference in New Issue
Block a user