Skip to content

Commit 9279b07

Browse files
Test rewrite (removing implementation dependency)
1 parent 8f5c60e commit 9279b07

File tree

2 files changed

+44
-17
lines changed

2 files changed

+44
-17
lines changed

src/ServiceControl.AcceptanceTests/Recoverability/When_edited_message_fails_to_process.cs

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
namespace ServiceControl.AcceptanceTests.Recoverability
22
{
3+
using System;
4+
using System.Collections.Generic;
35
using System.Linq;
46
using System.Text.Json;
57
using System.Threading.Tasks;
68
using AcceptanceTesting;
79
using AcceptanceTesting.EndpointTemplates;
810
using AcceptanceTests;
9-
using Infrastructure;
1011
using NServiceBus;
1112
using NServiceBus.AcceptanceTesting;
1213
using NServiceBus.Settings;
@@ -22,27 +23,40 @@ public async Task A_new_message_failure_is_created()
2223
var context = await Define<EditMessageFailureContext>()
2324
.WithEndpoint<FailingEditedMessageReceiver>(e => e
2425
.When(c => c.SendLocal(new FailingMessage()))
25-
.DoNotFailOnErrorMessages())
26+
.DoNotFailOnErrorMessages())
2627
.Done(async ctx =>
2728
{
28-
if (ctx.OriginalMessageFailureId == null)
29+
if (!ctx.OrignalMessageHandled)
2930
{
3031
return false;
3132
}
3233

3334
if (!ctx.EditedMessage)
3435
{
35-
var failedMessage = await this.TryGet<FailedMessage>($"/api/errors/{ctx.OriginalMessageFailureId}");
36-
if (!failedMessage.HasResult)
36+
var allFailedMessages = await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
37+
if (!allFailedMessages.HasResult)
38+
{
39+
return false;
40+
}
41+
42+
if (allFailedMessages.Item.Count != 1)
3743
{
3844
return false;
3945
}
4046

47+
ctx.OriginalMessageFailureId = allFailedMessages.Item.First().Id;
48+
4149
ctx.EditedMessage = true;
50+
var editedMessageInternalId = Guid.NewGuid().ToString();
51+
ctx.EditedMessageInternalId = editedMessageInternalId;
4252
var editedMessage = JsonSerializer.Serialize(new FailingMessage
4353
{
44-
HasBeenEdited = true
54+
HasBeenEdited = true,
55+
MessageInternalId = editedMessageInternalId
4556
});
57+
58+
var failedMessage = await this.TryGet<FailedMessage>($"/api/errors/{ctx.OriginalMessageFailureId}");
59+
4660
var editModel = new EditMessageModel
4761
{
4862
MessageBody = editedMessage,
@@ -53,23 +67,32 @@ public async Task A_new_message_failure_is_created()
5367
return false;
5468
}
5569

56-
if (ctx.EditedMessageFailureId == null)
70+
if (!ctx.EditedMessageHandled)
71+
{
72+
return false;
73+
}
74+
75+
var allFailedMessagesAfterEdit = await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
76+
if (!allFailedMessagesAfterEdit.HasResult)
5777
{
5878
return false;
5979
}
6080

61-
var failedEditedMessage = await this.TryGet<FailedMessage>($"/api/errors/{ctx.EditedMessageFailureId}");
62-
if (!failedEditedMessage.HasResult)
81+
if (allFailedMessagesAfterEdit.Item.Count != 1)
6382
{
6483
return false;
6584
}
6685

86+
ctx.EditedMessageFailureId = allFailedMessagesAfterEdit.Item.First().Id;
87+
6788
ctx.OriginalMessageFailure = (await this.TryGet<FailedMessage>($"/api/errors/{ctx.OriginalMessageFailureId}")).Item;
6889
ctx.EditedMessageFailure = (await this.TryGet<FailedMessage>($"/api/errors/{ctx.EditedMessageFailureId}")).Item;
6990
return true;
7091
})
7192
.Run();
7293

94+
var editedMessageBody = JsonSerializer.Deserialize<FailingMessage>(context.EditedMessageFailure.ProcessingAttempts.Last().MessageMetadata["MsgFullText"].ToString());
95+
7396
Assert.Multiple(() =>
7497
{
7598
Assert.That(context.OriginalMessageFailure.Id, Is.Not.EqualTo(context.EditedMessageFailure.Id));
@@ -79,16 +102,21 @@ public async Task A_new_message_failure_is_created()
79102
Assert.That(
80103
"FailedMessages/" + context.EditedMessageFailure.ProcessingAttempts.Last().Headers["ServiceControl.EditOf"],
81104
Is.EqualTo(context.OriginalMessageFailure.Id));
105+
Assert.That(editedMessageBody.MessageInternalId, Is.EqualTo(context.EditedMessageInternalId));
82106
});
83107
}
84108

85109
class EditMessageFailureContext : ScenarioContext
86110
{
87-
public string OriginalMessageFailureId { get; set; }
111+
public bool OrignalMessageHandled { get; set; }
88112
public bool EditedMessage { get; set; }
89-
public string EditedMessageFailureId { get; set; }
113+
public bool EditedMessageHandled { get; set; }
90114
public FailedMessage OriginalMessageFailure { get; set; }
91115
public FailedMessage EditedMessageFailure { get; set; }
116+
117+
public string OriginalMessageFailureId { get; set; }
118+
public string EditedMessageFailureId { get; set; }
119+
public string EditedMessageInternalId { get; set; }
92120
}
93121

94122
class FailingEditedMessageReceiver : EndpointConfigurationBuilder
@@ -102,11 +130,11 @@ public Task Handle(FailingMessage message, IMessageHandlerContext context)
102130
{
103131
if (message.HasBeenEdited)
104132
{
105-
testContext.EditedMessageFailureId = DeterministicGuid.MakeId(context.MessageId, settings.EndpointName()).ToString();
133+
testContext.EditedMessageHandled = true;
106134
}
107135
else
108136
{
109-
testContext.OriginalMessageFailureId = DeterministicGuid.MakeId(context.MessageId, settings.EndpointName()).ToString();
137+
testContext.OrignalMessageHandled = true;
110138
}
111139

112140
throw new SimulatedException();
@@ -116,7 +144,8 @@ public Task Handle(FailingMessage message, IMessageHandlerContext context)
116144

117145
class FailingMessage : IMessage
118146
{
119-
public bool HasBeenEdited { get; set; }
147+
public bool HasBeenEdited { get; init; }
148+
public string MessageInternalId { get; init; }
120149
}
121150
}
122151
}

src/ServiceControl.Persistence/Infrastructure/TransportMessageExtensions.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ public static string ProcessingEndpointName(this IReadOnlyDictionary<string, str
3838

3939
public static string UniqueId(this IReadOnlyDictionary<string, string> headers)
4040
{
41-
42-
return headers.TryGetValue("ServiceControl.Retry.UniqueMessageId", out var existingUniqueMessageId) &&
43-
headers.ContainsKey("ServiceControl.Retry.EditOf")
41+
return headers.TryGetValue("ServiceControl.Retry.UniqueMessageId", out var existingUniqueMessageId)
4442
? existingUniqueMessageId
4543
: DeterministicGuid.MakeId(headers.MessageId(), headers.ProcessingEndpointName()).ToString();
4644
}

0 commit comments

Comments
 (0)