Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<EditMessageFailureContext>((s, ctx) =>
{
ctx.ExternalProcessorSubscribed = s.SubscriberReturnAddress.Contains(nameof(FailingEditedMessageReceiver));
});

var context = await Define<EditMessageFailureContext>()
.WithEndpoint<FailingEditedMessageReceiver>(e => e
.When(c => c.SendLocal(new FailingMessage()))
.WithEndpoint<FailingEditedMessageReceiver>(b => b.When(async (bus, c) =>
{
await bus.Subscribe<ServiceControl.Contracts.MessageFailed>();

if (c.HasNativePubSubSupport)
{
c.ExternalProcessorSubscribed = true;
}
}).When(c => c.SendLocal(new FailingMessage()))
.DoNotFailOnErrorMessages())
.Done(async ctx =>
{
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -112,14 +123,18 @@ 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
{
public FailingEditedMessageReceiver() => EndpointSetup<DefaultServerWithoutAudit>(c => { c.NoRetries(); });

class FailingMessageHandler(EditMessageFailureContext testContext)
: IHandleMessages<FailingMessage>
: IHandleMessages<FailingMessage>, IHandleMessages<ServiceControl.Contracts.MessageFailed>
{
public Task Handle(FailingMessage message, IMessageHandlerContext context)
{
Expand All @@ -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;
}
}
}

Expand Down