tests run locally
Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
@ -7,6 +7,7 @@ from sys import platform
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from dacite.core import from_dict
|
from dacite.core import from_dict
|
||||||
|
from django.conf import settings
|
||||||
from django.db import DatabaseError, InternalError, ProgrammingError
|
from django.db import DatabaseError, InternalError, ProgrammingError
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
@ -68,7 +69,8 @@ class BlueprintWatcherMiddleware(Middleware):
|
|||||||
observer.start()
|
observer.start()
|
||||||
|
|
||||||
def after_worker_boot(self, broker, worker):
|
def after_worker_boot(self, broker, worker):
|
||||||
self.start_blueprint_watcher()
|
if not settings.TEST:
|
||||||
|
self.start_blueprint_watcher()
|
||||||
|
|
||||||
|
|
||||||
class BlueprintEventHandler(FileSystemEventHandler):
|
class BlueprintEventHandler(FileSystemEventHandler):
|
||||||
|
|||||||
@ -17,6 +17,7 @@ from authentik.events.context_processors.geoip import GEOIP_CONTEXT_PROCESSOR
|
|||||||
from authentik.lib.config import CONFIG
|
from authentik.lib.config import CONFIG
|
||||||
from authentik.lib.sentry import sentry_init
|
from authentik.lib.sentry import sentry_init
|
||||||
from authentik.root.signals import post_startup, pre_startup, startup
|
from authentik.root.signals import post_startup, pre_startup, startup
|
||||||
|
from authentik.tasks.test import use_test_broker
|
||||||
|
|
||||||
# globally set maxDiff to none to show full assert error
|
# globally set maxDiff to none to show full assert error
|
||||||
TestCase.maxDiff = None
|
TestCase.maxDiff = None
|
||||||
@ -61,6 +62,7 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover
|
|||||||
def _setup_test_environment(self):
|
def _setup_test_environment(self):
|
||||||
"""Configure test environment settings"""
|
"""Configure test environment settings"""
|
||||||
settings.TEST = True
|
settings.TEST = True
|
||||||
|
settings.DRAMATIQ["test"] = True
|
||||||
|
|
||||||
# Test-specific configuration
|
# Test-specific configuration
|
||||||
test_config = {
|
test_config = {
|
||||||
@ -84,7 +86,7 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover
|
|||||||
sentry_init()
|
sentry_init()
|
||||||
self.logger.debug("Test environment configured")
|
self.logger.debug("Test environment configured")
|
||||||
|
|
||||||
apps.get_app_config("authentik_tasks").use_test_broker()
|
use_test_broker()
|
||||||
|
|
||||||
# Send startup signals
|
# Send startup signals
|
||||||
pre_startup.send(sender=self, mode="test")
|
pre_startup.send(sender=self, mode="test")
|
||||||
|
|||||||
@ -9,18 +9,6 @@ class AuthentikTasksConfig(ManagedAppConfig):
|
|||||||
verbose_name = "authentik Tasks"
|
verbose_name = "authentik Tasks"
|
||||||
default = True
|
default = True
|
||||||
|
|
||||||
# def use_test_broker(self) -> None:
|
|
||||||
# from authentik.tasks.test import TestBroker
|
|
||||||
#
|
|
||||||
# old_broker = get_broker()
|
|
||||||
# broker = TestBroker(middleware=[])
|
|
||||||
# self._set_dramatiq_middlewares(broker, max_retries=0)
|
|
||||||
# dramatiq.set_broker(broker)
|
|
||||||
# for actor_name in old_broker.get_declared_actors():
|
|
||||||
# actor = old_broker.get_actor(actor_name)
|
|
||||||
# actor.broker = broker
|
|
||||||
# actor.broker.declare_actor(actor)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def global_schedule_specs(self) -> list[ScheduleSpec]:
|
def global_schedule_specs(self) -> list[ScheduleSpec]:
|
||||||
from authentik.tasks.tasks import clean_worker_statuses
|
from authentik.tasks.tasks import clean_worker_statuses
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import os
|
import os
|
||||||
from os import getpid
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from signal import pause
|
from signal import pause
|
||||||
from socket import gethostname
|
from socket import gethostname
|
||||||
@ -9,6 +8,7 @@ from typing import Any
|
|||||||
|
|
||||||
import pglock
|
import pglock
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
from django.conf import settings
|
||||||
from dramatiq.broker import Broker
|
from dramatiq.broker import Broker
|
||||||
from dramatiq.common import current_millis
|
from dramatiq.common import current_millis
|
||||||
from dramatiq.message import Message
|
from dramatiq.message import Message
|
||||||
@ -186,6 +186,9 @@ class MetricsMiddleware(Middleware):
|
|||||||
return [worker_metrics]
|
return [worker_metrics]
|
||||||
|
|
||||||
def before_worker_boot(self, broker: Broker, worker):
|
def before_worker_boot(self, broker: Broker, worker):
|
||||||
|
if settings.TEST:
|
||||||
|
return
|
||||||
|
|
||||||
from prometheus_client import Counter, Gauge, Histogram
|
from prometheus_client import Counter, Gauge, Histogram
|
||||||
|
|
||||||
self.total_messages = Counter(
|
self.total_messages = Counter(
|
||||||
@ -252,7 +255,7 @@ class MetricsMiddleware(Middleware):
|
|||||||
from prometheus_client import multiprocess
|
from prometheus_client import multiprocess
|
||||||
|
|
||||||
# TODO: worker_id
|
# TODO: worker_id
|
||||||
multiprocess.mark_process_dead(getpid())
|
multiprocess.mark_process_dead(os.getpid())
|
||||||
|
|
||||||
def _make_labels(self, message: Message) -> tuple[str, str]:
|
def _make_labels(self, message: Message) -> tuple[str, str]:
|
||||||
return (message.queue_name, message.actor_name)
|
return (message.queue_name, message.actor_name)
|
||||||
|
|||||||
@ -1,9 +1,15 @@
|
|||||||
from queue import PriorityQueue
|
from queue import PriorityQueue
|
||||||
|
|
||||||
from dramatiq.broker import Broker, MessageProxy
|
from django.utils.module_loading import import_string
|
||||||
|
from django_dramatiq_postgres.conf import Conf
|
||||||
|
import dramatiq
|
||||||
|
from dramatiq.broker import Broker, MessageProxy, get_broker
|
||||||
|
from dramatiq.middleware.retries import Retries
|
||||||
|
from dramatiq.results.middleware import Results
|
||||||
from dramatiq.worker import Worker, _ConsumerThread, _WorkerThread
|
from dramatiq.worker import Worker, _ConsumerThread, _WorkerThread
|
||||||
|
|
||||||
from authentik.tasks.broker import PostgresBroker
|
from authentik.tasks.broker import PostgresBroker
|
||||||
|
from authentik.tasks.middleware import MetricsMiddleware
|
||||||
|
|
||||||
|
|
||||||
class TestWorker(Worker):
|
class TestWorker(Worker):
|
||||||
@ -46,3 +52,31 @@ class TestBroker(PostgresBroker):
|
|||||||
worker = TestWorker(message.queue_name, broker=self)
|
worker = TestWorker(message.queue_name, broker=self)
|
||||||
worker.process_message(MessageProxy(message))
|
worker.process_message(MessageProxy(message))
|
||||||
return message
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
def use_test_broker():
|
||||||
|
old_broker = get_broker()
|
||||||
|
|
||||||
|
broker = TestBroker()
|
||||||
|
|
||||||
|
for actor_name in old_broker.get_declared_actors():
|
||||||
|
actor = old_broker.get_actor(actor_name)
|
||||||
|
actor.broker = broker
|
||||||
|
actor.broker.declare_actor(actor)
|
||||||
|
|
||||||
|
for middleware_class, middleware_kwargs in Conf().middlewares:
|
||||||
|
middleware: dramatiq.middleware.middleware.Middleware = import_string(middleware_class)(
|
||||||
|
**middleware_kwargs,
|
||||||
|
)
|
||||||
|
if isinstance(middleware, MetricsMiddleware):
|
||||||
|
continue
|
||||||
|
if isinstance(middleware, Retries):
|
||||||
|
middleware.max_retries = 0
|
||||||
|
if isinstance(middleware, Results):
|
||||||
|
middleware.backend = import_string(Conf().result_backend)(
|
||||||
|
*Conf().result_backend_args,
|
||||||
|
**Conf().result_backend_kwargs,
|
||||||
|
)
|
||||||
|
broker.add_middleware(middleware)
|
||||||
|
|
||||||
|
dramatiq.set_broker(broker)
|
||||||
|
|||||||
Reference in New Issue
Block a user