diff --git a/src/ServiceControl.AcceptanceTests/Recoverability/When_edited_message_fails_to_process.cs b/src/ServiceControl.AcceptanceTests/Recoverability/When_edited_message_fails_to_process.cs index 5ed8d19098..8b7f768ae3 100644 --- a/src/ServiceControl.AcceptanceTests/Recoverability/When_edited_message_fails_to_process.cs +++ b/src/ServiceControl.AcceptanceTests/Recoverability/When_edited_message_fails_to_process.cs @@ -1,14 +1,13 @@ namespace ServiceControl.AcceptanceTests.Recoverability { using System; - using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using AcceptanceTesting; using AcceptanceTesting.EndpointTemplates; using AcceptanceTests; - using ExternalIntegration; + using Contracts.MessageFailures; using NServiceBus; using NServiceBus.AcceptanceTesting; using NUnit.Framework; @@ -20,9 +19,21 @@ class When_edited_message_fails_to_process : AcceptanceTest [Test] public async Task A_new_message_failure_is_created() { + CustomConfiguration = config => config.OnEndpointSubscribed((s, ctx) => + { + ctx.ExternalProcessorSubscribed = s.SubscriberReturnAddress.Contains(nameof(FailingEditedMessageReceiver)); + }); + var context = await Define() - .WithEndpoint(e => e - .When(c => c.SendLocal(new FailingMessage())) + .WithEndpoint(b => b.When(async (bus, c) => + { + await bus.Subscribe(); + + if (c.HasNativePubSubSupport) + { + c.ExternalProcessorSubscribed = true; + } + }).When(c => c.SendLocal(new FailingMessage())) .DoNotFailOnErrorMessages()) .Done(async ctx => { @@ -62,7 +73,7 @@ public async Task A_new_message_failure_is_created() return false; } - if (!ctx.EditedMessageHandled) + if (!ctx.EditedMessageHandled || !ctx.MessageFailedHandled) { return false; } @@ -112,6 +123,10 @@ class EditMessageFailureContext : ScenarioContext public string OriginalMessageFailureId { get; set; } public string EditedMessageFailureId { get; set; } public string EditedMessageInternalId { get; set; } + public bool ExternalProcessorSubscribed { get; set; } + public string FirstMessageFailedId { get; set; } + public string SecondMessageFailedId { get; set; } + public bool MessageFailedHandled { get; set; } } class FailingEditedMessageReceiver : EndpointConfigurationBuilder @@ -119,7 +134,7 @@ class FailingEditedMessageReceiver : EndpointConfigurationBuilder public FailingEditedMessageReceiver() => EndpointSetup(c => { c.NoRetries(); }); class FailingMessageHandler(EditMessageFailureContext testContext) - : IHandleMessages + : IHandleMessages, IHandleMessages { public Task Handle(FailingMessage message, IMessageHandlerContext context) { @@ -134,6 +149,20 @@ public Task Handle(FailingMessage message, IMessageHandlerContext context) throw new SimulatedException(); } + + public Task Handle(ServiceControl.Contracts.MessageFailed message, IMessageHandlerContext context) + { + if (testContext.FirstMessageFailedId == null) + { + testContext.FirstMessageFailedId = message.FailedMessageId; + } + else + { + testContext.SecondMessageFailedId = message.FailedMessageId; + testContext.MessageFailedHandled = true; + } + return Task.CompletedTask; + } } }