Skip to content

Commit f198f77

Browse files
committed
adding test for ReadyMessagesDequeProxy
1 parent 497190e commit f198f77

File tree

1 file changed

+117
-0
lines changed
  • instrumentation/opentelemetry-instrumentation-pika/tests

1 file changed

+117
-0
lines changed

instrumentation/opentelemetry-instrumentation-pika/tests/test_utils.py

+117
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,14 @@
1111
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
14+
import collections
1415
from unittest import TestCase, mock
1516

17+
from pika.adapters.blocking_connection import (
18+
_ConsumerCancellationEvt,
19+
_ConsumerDeliveryEvt,
20+
_QueueConsumerGeneratorInfo,
21+
)
1622
from pika.channel import Channel
1723
from pika.spec import Basic, BasicProperties
1824

@@ -448,3 +454,114 @@ def test_decorate_basic_publish_when_span_is_not_recording(
448454
exchange_name, routing_key, mock_body, properties, False
449455
)
450456
self.assertEqual(retval, callback.return_value)
457+
458+
@mock.patch("opentelemetry.instrumentation.pika.utils._get_span")
459+
@mock.patch("opentelemetry.propagate.extract")
460+
@mock.patch("opentelemetry.context.detach")
461+
@mock.patch("opentelemetry.context.attach")
462+
@mock.patch("opentelemetry.context.get_current")
463+
def test_decorate_deque_proxy(
464+
self,
465+
context_get_current: mock.MagicMock,
466+
context_attach: mock.MagicMock,
467+
context_detach: mock.MagicMock,
468+
extract: mock.MagicMock,
469+
get_span: mock.MagicMock,
470+
) -> None:
471+
returned_span = mock.MagicMock()
472+
get_span.return_value = returned_span
473+
consume_hook = mock.MagicMock()
474+
mock_task_name = "mock_task_name"
475+
tracer = mock.MagicMock()
476+
generator_info = mock.MagicMock(
477+
spec=_QueueConsumerGeneratorInfo,
478+
pending_events=mock.MagicMock(spec=collections.deque),
479+
consumer_tag=mock_task_name,
480+
)
481+
method = mock.MagicMock(spec=Basic.Deliver)
482+
method.exchange = "test_exchange"
483+
properties = mock.MagicMock()
484+
mock_body = b"mock_body"
485+
evt = _ConsumerDeliveryEvt(method, properties, mock_body)
486+
generator_info.pending_events.popleft.return_value = evt
487+
proxy = utils.ReadyMessagesDequeProxy(
488+
generator_info.pending_events, generator_info, tracer, consume_hook
489+
)
490+
491+
# First call (no detach cleanup)
492+
res = proxy.popleft()
493+
self.assertEqual(res, evt)
494+
generator_info.pending_events.popleft.assert_called_once()
495+
extract.assert_called_once_with(
496+
properties.headers, getter=utils._pika_getter
497+
)
498+
context_get_current.assert_called_once()
499+
self.assertEqual(context_attach.call_count, 2)
500+
self.assertEqual(context_detach.call_count, 1)
501+
get_span.assert_called_once_with(
502+
tracer,
503+
None,
504+
properties,
505+
destination=method.exchange,
506+
span_kind=SpanKind.CONSUMER,
507+
task_name=mock_task_name,
508+
operation=MessagingOperationValues.RECEIVE,
509+
)
510+
consume_hook.assert_called_once()
511+
returned_span.end.assert_called_once()
512+
513+
generator_info.pending_events.reset_mock()
514+
extract.reset_mock()
515+
context_get_current.reset_mock()
516+
get_span.reset_mock()
517+
context_attach.reset_mock()
518+
context_detach.reset_mock()
519+
returned_span.end.reset_mock()
520+
consume_hook.reset_mock()
521+
522+
# Second call (has detach cleanup)
523+
res = proxy.popleft()
524+
self.assertEqual(res, evt)
525+
generator_info.pending_events.popleft.assert_called_once()
526+
extract.assert_called_once_with(
527+
properties.headers, getter=utils._pika_getter
528+
)
529+
context_get_current.assert_called_once()
530+
self.assertEqual(context_attach.call_count, 2)
531+
self.assertEqual(context_detach.call_count, 2)
532+
get_span.assert_called_once_with(
533+
tracer,
534+
None,
535+
properties,
536+
destination=method.exchange,
537+
span_kind=SpanKind.CONSUMER,
538+
task_name=mock_task_name,
539+
operation=MessagingOperationValues.RECEIVE,
540+
)
541+
consume_hook.assert_called_once()
542+
returned_span.end.assert_called_once()
543+
generator_info.pending_events.reset_mock()
544+
545+
extract.reset_mock()
546+
context_get_current.reset_mock()
547+
get_span.reset_mock()
548+
context_attach.reset_mock()
549+
context_detach.reset_mock()
550+
returned_span.end.reset_mock()
551+
consume_hook.reset_mock()
552+
553+
# Third call (cancellation event)
554+
evt = _ConsumerCancellationEvt("")
555+
generator_info.pending_events.popleft.return_value = evt
556+
557+
res = proxy.popleft()
558+
559+
self.assertEqual(res, evt)
560+
generator_info.pending_events.popleft.assert_called_once()
561+
extract.assert_not_called()
562+
context_get_current.not_called()
563+
context_detach.assert_called_once()
564+
context_attach.assert_not_called()
565+
get_span.assert_not_called()
566+
consume_hook.assert_not_called()
567+
returned_span.end.assert_not_called()

0 commit comments

Comments
 (0)