|
3 | 3 |
|
4 | 4 | from __future__ import absolute_import |
5 | 5 |
|
6 | | -import os |
7 | 6 | import pika |
8 | 7 | import unittest |
9 | 8 | import mock |
10 | 9 | import threading |
11 | 10 | import time |
12 | 11 |
|
13 | | -from ..helpers import testenv |
14 | 12 | from instana.singletons import tracer |
15 | 13 |
|
16 | 14 |
|
@@ -375,3 +373,99 @@ def __consume(): |
375 | 373 | # A new span has been started |
376 | 374 | self.assertIsNotNone(rabbitmq_span.s) |
377 | 375 | self.assertNotEqual(rabbitmq_span.p, rabbitmq_span.s) |
| 376 | + |
| 377 | + |
| 378 | +class TestPikaBlockingChannelBlockingConnection(_TestPika): |
| 379 | + @mock.patch('pika.adapters.blocking_connection.BlockingConnection', autospec=True) |
| 380 | + def _create_connection(self, connection=None): |
| 381 | + connection._impl = mock.create_autospec(pika.connection.Connection) |
| 382 | + connection._impl.params = pika.connection.Parameters() |
| 383 | + return connection |
| 384 | + |
| 385 | + @mock.patch('pika.channel.Channel', spec=pika.channel.Channel) |
| 386 | + def _create_obj(self, channel_impl): |
| 387 | + self.impl = channel_impl() |
| 388 | + self.impl.channel_number = 1 |
| 389 | + |
| 390 | + return pika.adapters.blocking_connection.BlockingChannel(self.impl, self.connection) |
| 391 | + |
| 392 | + def _generate_delivery(self, method, properties, body): |
| 393 | + from pika.adapters.blocking_connection import _ConsumerDeliveryEvt |
| 394 | + evt = _ConsumerDeliveryEvt(method, properties, body) |
| 395 | + self.obj._add_pending_event(evt) |
| 396 | + self.obj._dispatch_events() |
| 397 | + |
| 398 | + def test_basic_consume(self): |
| 399 | + consumer_tag = "test.consumer" |
| 400 | + |
| 401 | + self.impl.basic_consume.return_value = consumer_tag |
| 402 | + self.impl._generate_consumer_tag.return_value = consumer_tag |
| 403 | + |
| 404 | + cb = mock.Mock() |
| 405 | + |
| 406 | + self.obj.basic_consume(queue="test.queue", on_message_callback=cb) |
| 407 | + |
| 408 | + body = "Hello!" |
| 409 | + properties = pika.BasicProperties() |
| 410 | + method = pika.spec.Basic.Deliver(consumer_tag) |
| 411 | + self._generate_delivery(method, properties, body) |
| 412 | + |
| 413 | + spans = self.recorder.queued_spans() |
| 414 | + self.assertEqual(1, len(spans)) |
| 415 | + |
| 416 | + rabbitmq_span = spans[0] |
| 417 | + |
| 418 | + self.assertIsNone(tracer.active_span) |
| 419 | + |
| 420 | + # A new span has been started |
| 421 | + self.assertIsNotNone(rabbitmq_span.t) |
| 422 | + self.assertIsNone(rabbitmq_span.p) |
| 423 | + self.assertIsNotNone(rabbitmq_span.s) |
| 424 | + |
| 425 | + # Error logging |
| 426 | + self.assertIsNone(rabbitmq_span.ec) |
| 427 | + |
| 428 | + # Span tags |
| 429 | + self.assertIsNone(rabbitmq_span.data["rabbitmq"]["exchange"]) |
| 430 | + self.assertEqual("consume", rabbitmq_span.data["rabbitmq"]["sort"]) |
| 431 | + self.assertIsNotNone(rabbitmq_span.data["rabbitmq"]["address"]) |
| 432 | + self.assertEqual("test.queue", rabbitmq_span.data["rabbitmq"]["queue"]) |
| 433 | + self.assertIsNotNone(rabbitmq_span.stack) |
| 434 | + self.assertTrue(type(rabbitmq_span.stack) is list) |
| 435 | + self.assertGreater(len(rabbitmq_span.stack), 0) |
| 436 | + |
| 437 | + cb.assert_called_once_with(self.obj, method, properties, body) |
| 438 | + |
| 439 | + def test_basic_consume_with_trace_context(self): |
| 440 | + consumer_tag = "test.consumer" |
| 441 | + |
| 442 | + self.impl.basic_consume.return_value = consumer_tag |
| 443 | + self.impl._generate_consumer_tag.return_value = consumer_tag |
| 444 | + |
| 445 | + cb = mock.Mock() |
| 446 | + |
| 447 | + self.obj.basic_consume(queue="test.queue", on_message_callback=cb) |
| 448 | + |
| 449 | + body = "Hello!" |
| 450 | + properties = pika.BasicProperties(headers={ |
| 451 | + "X-INSTANA-T": "0000000000000001", |
| 452 | + "X-INSTANA-S": "0000000000000002", |
| 453 | + "X-INSTANA-L": "1" |
| 454 | + }) |
| 455 | + method = pika.spec.Basic.Deliver(consumer_tag) |
| 456 | + self._generate_delivery(method, properties, body) |
| 457 | + |
| 458 | + spans = self.recorder.queued_spans() |
| 459 | + self.assertEqual(1, len(spans)) |
| 460 | + |
| 461 | + rabbitmq_span = spans[0] |
| 462 | + |
| 463 | + self.assertIsNone(tracer.active_span) |
| 464 | + |
| 465 | + # Trace context propagation |
| 466 | + self.assertEqual("0000000000000001", rabbitmq_span.t) |
| 467 | + self.assertEqual("0000000000000002", rabbitmq_span.p) |
| 468 | + |
| 469 | + # A new span has been started |
| 470 | + self.assertIsNotNone(rabbitmq_span.s) |
| 471 | + self.assertNotEqual(rabbitmq_span.p, rabbitmq_span.s) |
0 commit comments