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, "Оригинальный ключ роутинга не установлен."); }); }
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 }