From 3bf4c12ed0d8a3b3f1b61663e04cba2eff272065 Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Thu, 25 Apr 2024 14:46:42 +0200 Subject: [PATCH] test(celery): Test that Celery queue only set for default exchange This test checks that `messaging.destination.name` is only set for the default exchange. Other exchanges should not set this value, since the routing key may be different from the queue name. --- tests/integrations/celery/test_celery.py | 26 +++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/integrations/celery/test_celery.py b/tests/integrations/celery/test_celery.py index 17d308d0a1..e115f381d9 100644 --- a/tests/integrations/celery/test_celery.py +++ b/tests/integrations/celery/test_celery.py @@ -620,7 +620,7 @@ def example_task(): @pytest.mark.parametrize("routing_key", ("celery", "custom")) @mock.patch("celery.app.task.Task.request") -def test_messaging_destination_name( +def test_messaging_destination_name_default_exchange( mock_request, routing_key, init_celery, capture_events ): celery_app = init_celery(enable_tracing=True) @@ -635,3 +635,27 @@ def task(): ... (event,) = events (span,) = event["spans"] assert span["data"]["messaging.destination.name"] == routing_key + + +@mock.patch("celery.app.task.Task.request") +def test_messaging_destination_name_nondefault_exchange( + mock_request, init_celery, capture_events +): + """ + Currently, we only capture the routing key as the messaging.destination.name when + we are using the default exchange (""). This is because the default exchange ensures + that the routing key is the queue name. Other exchanges may not guarantee this + behavior. + """ + celery_app = init_celery(enable_tracing=True) + events = capture_events() + mock_request.delivery_info = {"routing_key": "celery", "exchange": "custom"} + + @celery_app.task() + def task(): ... + + task.apply_async() + + (event,) = events + (span,) = event["spans"] + assert "messaging.destination.name" not in span["data"]