Exemplo n.º 1
0
        public async Task CorrectlyHandlesOriginalExchangeAsync()
        {
            const string originalExchange   = "original-exchange";
            const string originalRoutingKey = "original-routing-key";

            var msg       = new MyIntegrationEvent();
            var mqMessage = new MqMessage(JsonConvert.SerializeObject(msg), "Type", "1.0", "1.0", "myApp");

            var args = new BasicDeliverEventArgs
            {
                RoutingKey      = "some-key",
                Exchange        = "some-exchange",
                BasicProperties = new FakeOptions
                {
                    Headers = new Dictionary <string, object>
                    {
                        [RetryExtensions.ORIGINAL_EXCHANGE_HEADER]    = Encoding.UTF8.GetBytes(originalExchange),
                        [RetryExtensions.ORIGINAL_ROUTING_KEY_HEADER] = Encoding.UTF8.GetBytes(originalRoutingKey)
                    },
                    ContentType     = "application/json",
                    ContentEncoding = "UTF8"
                },
                Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(mqMessage))
            };

            var subscriberSettingsDto = new SubscriberSettingsDto("MySubscriberName")
            {
                TracingSettings = new TracingSettingsDto
                {
                    LogWhenMessageIncome = true
                }
            };

            var(_, ctx) = await _subscriber.HandleMessageAsync <MyIntegrationEvent>(
                args,
                x => Task.FromResult <Acknowledgement>(Ack.Ok),
                subscriberSettingsDto.Create(null !)
                );

            Assert.Multiple(() =>
            {
                Assert.AreEqual(originalExchange, ctx.MessageData.Exchange, "Оригинальный обменник не установлен.");
                Assert.AreEqual(originalRoutingKey, ctx.MessageData.RoutingKey, "Оригинальный ключ роутинга не установлен.");
            });
        }
Exemplo n.º 2
0
        public async Task CorrectlyCreatesTraceContextAsync(
            bool setToCorrelationId,
            bool setTraceIdToHeader,
            bool setToEvent,
            bool tracesShouldMatch = true
            )
        {
            #region Arrange

            var expectedTraceId = Guid.Parse("35bb4d03-0af2-4e95-b865-572c2e5daee5");

            var integrationEvent = new MyIntegrationEvent();
            if (setToEvent)
            {
                integrationEvent.TraceId = expectedTraceId;
            }

            var headers = new Dictionary <string, object>();
            if (setTraceIdToHeader)
            {
                headers[TracingExtensions.TRACE_ID_KEY] = Encoding.UTF8.GetBytes(expectedTraceId.ToString());
            }

            var args = new BasicDeliverEventArgs
            {
                RoutingKey      = "some-key",
                Exchange        = "some-exchange",
                BasicProperties = new FakeOptions
                {
                    CorrelationId   = setToCorrelationId ? expectedTraceId.ToString() : null,
                    Headers         = headers,
                    ContentType     = "application/json",
                    ContentEncoding = "UTF8"
                },
                Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(
                                                  new MqMessage(JsonConvert.SerializeObject(integrationEvent), "Type", "1.0", "1.0", "myApp"))
                                              )
            };

            Assert.IsNull(TraceContext.Current.TraceId, "TraceId is not null");
            Guid?actualTraceIdFromContext = default;

            var subscriberSettingsDto = new SubscriberSettingsDto("MySubscriberName");

            #endregion Arrange

            #region Act

            var(_, ctx) = await _subscriber.HandleMessageAsync <MyIntegrationEvent>(
                args,
                x =>
            {
                actualTraceIdFromContext = TraceContext.Current.TraceId;

                return(Task.FromResult <Acknowledgement>(Ack.Ok));
            },
                subscriberSettingsDto.Create(null !)
                );

            #endregion Act

            #region Assert

            Assert.Multiple(() =>
            {
                if (tracesShouldMatch)
                {
                    Assert.AreEqual(expectedTraceId, ctx.MessageData.TraceId, "TraceId в MessageContext не установлен.");
                    Assert.AreEqual(expectedTraceId, actualTraceIdFromContext, "TraceContext не установлен.");
                }
                else
                {
                    Assert.AreEqual(actualTraceIdFromContext, ctx.MessageData.TraceId, "TraceId в мете и контексте не совпадают.");
                }
            });

            #endregion Assert
        }