Skip to content

Commit b8cf6c2

Browse files
Merge pull request #5203 from Particular/ResolvedByEdit-nosub
Adding MessageFailed handling to a test
2 parents 29bfb39 + d44ee94 commit b8cf6c2

File tree

1 file changed

+35
-6
lines changed

1 file changed

+35
-6
lines changed

src/ServiceControl.AcceptanceTests/Recoverability/When_edited_message_fails_to_process.cs

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
namespace ServiceControl.AcceptanceTests.Recoverability
22
{
33
using System;
4-
using System.Collections.Generic;
54
using System.Linq;
65
using System.Text.Json;
76
using System.Threading.Tasks;
87
using AcceptanceTesting;
98
using AcceptanceTesting.EndpointTemplates;
109
using AcceptanceTests;
11-
using ExternalIntegration;
10+
using Contracts.MessageFailures;
1211
using NServiceBus;
1312
using NServiceBus.AcceptanceTesting;
1413
using NUnit.Framework;
@@ -20,9 +19,21 @@ class When_edited_message_fails_to_process : AcceptanceTest
2019
[Test]
2120
public async Task A_new_message_failure_is_created()
2221
{
22+
CustomConfiguration = config => config.OnEndpointSubscribed<EditMessageFailureContext>((s, ctx) =>
23+
{
24+
ctx.ExternalProcessorSubscribed = s.SubscriberReturnAddress.Contains(nameof(FailingEditedMessageReceiver));
25+
});
26+
2327
var context = await Define<EditMessageFailureContext>()
24-
.WithEndpoint<FailingEditedMessageReceiver>(e => e
25-
.When(c => c.SendLocal(new FailingMessage()))
28+
.WithEndpoint<FailingEditedMessageReceiver>(b => b.When(async (bus, c) =>
29+
{
30+
await bus.Subscribe<ServiceControl.Contracts.MessageFailed>();
31+
32+
if (c.HasNativePubSubSupport)
33+
{
34+
c.ExternalProcessorSubscribed = true;
35+
}
36+
}).When(c => c.SendLocal(new FailingMessage()))
2637
.DoNotFailOnErrorMessages())
2738
.Done(async ctx =>
2839
{
@@ -62,7 +73,7 @@ public async Task A_new_message_failure_is_created()
6273
return false;
6374
}
6475

65-
if (!ctx.EditedMessageHandled)
76+
if (!ctx.EditedMessageHandled || !ctx.MessageFailedHandled)
6677
{
6778
return false;
6879
}
@@ -112,14 +123,18 @@ class EditMessageFailureContext : ScenarioContext
112123
public string OriginalMessageFailureId { get; set; }
113124
public string EditedMessageFailureId { get; set; }
114125
public string EditedMessageInternalId { get; set; }
126+
public bool ExternalProcessorSubscribed { get; set; }
127+
public string FirstMessageFailedId { get; set; }
128+
public string SecondMessageFailedId { get; set; }
129+
public bool MessageFailedHandled { get; set; }
115130
}
116131

117132
class FailingEditedMessageReceiver : EndpointConfigurationBuilder
118133
{
119134
public FailingEditedMessageReceiver() => EndpointSetup<DefaultServerWithoutAudit>(c => { c.NoRetries(); });
120135

121136
class FailingMessageHandler(EditMessageFailureContext testContext)
122-
: IHandleMessages<FailingMessage>
137+
: IHandleMessages<FailingMessage>, IHandleMessages<ServiceControl.Contracts.MessageFailed>
123138
{
124139
public Task Handle(FailingMessage message, IMessageHandlerContext context)
125140
{
@@ -134,6 +149,20 @@ public Task Handle(FailingMessage message, IMessageHandlerContext context)
134149

135150
throw new SimulatedException();
136151
}
152+
153+
public Task Handle(ServiceControl.Contracts.MessageFailed message, IMessageHandlerContext context)
154+
{
155+
if (testContext.FirstMessageFailedId == null)
156+
{
157+
testContext.FirstMessageFailedId = message.FailedMessageId;
158+
}
159+
else
160+
{
161+
testContext.SecondMessageFailedId = message.FailedMessageId;
162+
testContext.MessageFailedHandled = true;
163+
}
164+
return Task.CompletedTask;
165+
}
137166
}
138167
}
139168

0 commit comments

Comments
 (0)