From dda71bf6853342660049d24f7ff791f1ccf11542 Mon Sep 17 00:00:00 2001 From: Toby Lorne Date: Tue, 27 Oct 2020 15:39:28 +0000 Subject: [PATCH] celery: add task for triggering link tests We want to periodically kick off some link tests, so that: - we are periodically communicating with the CBC Proxies - each CBC Proxy is periodically communicating with its CBC This simulation of traffic to the CBC will give us advance warning if something is going to break, or is broken, before someone tries to send a real live message Signed-off-by: Toby Lorne Co-authored-by: Richard Co-authored-by: Pea --- app/celery/scheduled_tasks.py | 22 ++++++++++++++++++++++ app/config.py | 5 +++++ tests/app/celery/test_scheduled_tasks.py | 19 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/app/celery/scheduled_tasks.py b/app/celery/scheduled_tasks.py index ccac190ac..eaf898ddf 100644 --- a/app/celery/scheduled_tasks.py +++ b/app/celery/scheduled_tasks.py @@ -301,3 +301,25 @@ def send_canary_to_cbc_proxy(): message = f"Sending a canary message to CBC proxy with ID {identifier}" current_app.logger.info(message) cbc_proxy_client.send_canary(identifier) + + +@notify_celery.task(name='trigger-link-tests') +def trigger_link_tests(): + """ + Currently we only have one hardcoded CBC Proxy, which corresponds to one + CBC, and so currently we do not specify the CBC Proxy name + + In future we will have multiple CBC proxies, each proxy corresponding to + one MNO's CBC + + This task should invoke other tasks which do the actual link tests, eg: + for cbc_name in app.config.ENABLED_CBCS: + send_link_test_for_cbc(cbc_name) + + Alternatively this task could be configured to be a Celery group + """ + for _ in range(1): + identifier = str(uuid.uuid4()) + message = f"Sending a link test to CBC proxy with ID {identifier}" + current_app.logger.info(message) + cbc_proxy_client.send_link_test(identifier) diff --git a/app/config.py b/app/config.py index 1ad9bcea7..f689e0201 100644 --- a/app/config.py +++ b/app/config.py @@ -308,6 +308,11 @@ class Config(object): 'schedule': timedelta(minutes=5), 'options': {'queue': QueueNames.PERIODIC} }, + 'trigger-link-tests': { + 'task': 'trigger-link-tests', + 'schedule': timedelta(minutes=5), + 'options': {'queue': QueueNames.PERIODIC} + }, } CELERY_QUEUES = [] diff --git a/tests/app/celery/test_scheduled_tasks.py b/tests/app/celery/test_scheduled_tasks.py index 2c6bf3750..c76632c2e 100644 --- a/tests/app/celery/test_scheduled_tasks.py +++ b/tests/app/celery/test_scheduled_tasks.py @@ -575,3 +575,22 @@ def test_send_canary_to_cbc_proxy_invokes_cbc_proxy_client( uuid.UUID(identifier) except BaseException: pytest.fail(f"{identifier} is not a valid uuid") + + +def test_trigger_link_tests_invokes_cbc_proxy_client( + mocker, +): + mock_send_link_test = mocker.patch( + 'app.cbc_proxy_client.send_link_test', + ) + + scheduled_tasks.trigger_link_tests() + + mock_send_link_test.assert_called + # the 0th argument of the call to send_link_test + identifier = mock_send_link_test.mock_calls[0][1][0] + + try: + uuid.UUID(identifier) + except BaseException: + pytest.fail(f"{identifier} is not a valid uuid")