|
8 | 8 | Celery runner thread will not have the configuration set. |
9 | 9 | """ |
10 | 10 | import logging |
| 11 | +import sys |
| 12 | +import weakref |
11 | 13 | from unittest import mock |
12 | 14 |
|
13 | 15 | import pytest |
| 16 | +from celery.signals import task_prerun |
14 | 17 |
|
15 | 18 | from taskbadger.mug import Badger, Settings |
16 | 19 | from taskbadger.systems.celery import CelerySystemIntegration |
@@ -77,3 +80,36 @@ def add_normal(self, a, b): |
77 | 80 | def test_task_name_matching(include, exclude, expected: bool): |
78 | 81 | integration = CelerySystemIntegration(includes=include, excludes=exclude) |
79 | 82 | assert integration.track_task("myapp.tasks.export_data") is expected |
| 83 | + |
| 84 | + |
| 85 | +def test_celery_system_integration_connects_signals(): |
| 86 | + # clean the slate |
| 87 | + _disconnect_signals() |
| 88 | + if "taskbadger.celery" in sys.modules: |
| 89 | + del sys.modules["taskbadger.celery"] |
| 90 | + assert "taskbadger.celery" not in sys.modules |
| 91 | + |
| 92 | + # this should result in the signals being connected |
| 93 | + CelerySystemIntegration() |
| 94 | + |
| 95 | + assert "taskbadger.celery" in sys.modules |
| 96 | + _assert_signals() |
| 97 | + |
| 98 | + |
| 99 | +def _assert_signals(check_is_connected=True): |
| 100 | + # test that signals are actually connected |
| 101 | + receivers = [rcv[1] for rcv in task_prerun.receivers] |
| 102 | + receiver_names = set() |
| 103 | + for receiver in receivers: |
| 104 | + if isinstance(receiver, weakref.ReferenceType): |
| 105 | + receiver = receiver() |
| 106 | + receiver_names.add(f"{receiver.__module__}.{receiver.__name__}") |
| 107 | + is_connected = "taskbadger.celery.task_prerun_handler" in receiver_names |
| 108 | + assert check_is_connected == is_connected |
| 109 | + |
| 110 | + |
| 111 | +def _disconnect_signals(): |
| 112 | + from taskbadger.celery import task_prerun_handler |
| 113 | + |
| 114 | + task_prerun.disconnect(task_prerun_handler) |
| 115 | + _assert_signals(check_is_connected=False) |
0 commit comments