Skip to content

Commit 5cd2af4

Browse files
author
Christian
committed
More tests passing
1 parent 26893e8 commit 5cd2af4

File tree

2 files changed

+58
-46
lines changed

2 files changed

+58
-46
lines changed

src/ServiceControl.Persistence.Tests/Recoverability/EditMessageTestsCopy.cs

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -103,56 +103,68 @@ public async Task Should_discard_edit_when_different_edit_already_exists()
103103
Assert.That(dispatcher.DispatchedMessages, Is.Empty);
104104
}
105105

106-
//[Test]
107-
//public async Task Should_dispatch_edited_message_when_first_edit()
108-
//{
109-
// var failedMessage = await CreateAndStoreFailedMessage();
106+
[Test]
107+
public async Task Should_dispatch_edited_message_when_first_edit()
108+
{
109+
var failedMessage = await CreateAndStoreFailedMessage();
110110

111-
// var newBodyContent = Encoding.UTF8.GetBytes("new body content");
112-
// var newHeaders = new Dictionary<string, string> { { "someKey", "someValue" } };
113-
// var message = CreateEditMessage(failedMessage.UniqueMessageId, newBodyContent, newHeaders);
111+
var newBodyContent = Encoding.UTF8.GetBytes("new body content");
112+
var newHeaders = new Dictionary<string, string> { { "someKey", "someValue" } };
113+
var message = CreateEditMessage(failedMessage.UniqueMessageId, newBodyContent, newHeaders);
114114

115-
// var handlerContent = message.FailedMessageId;
116-
// await handler.Handle(message, handlerContent);
115+
await handler.Handle(message, message.FailedMessageId);
117116

118-
// var dispatchedMessage = dispatcher.DispatchedMessages.Single();
119-
// Assert.Multiple(() =>
120-
// {
121-
// Assert.That(
122-
// dispatchedMessage.Item1.Destination,
123-
// Is.EqualTo(failedMessage.ProcessingAttempts.Last().FailureDetails.AddressOfFailingEndpoint));
124-
// Assert.That(dispatchedMessage.Item1.Message.Body.ToArray(), Is.EqualTo(newBodyContent));
125-
// Assert.That(dispatchedMessage.Item1.Message.Headers["someKey"], Is.EqualTo("someValue"));
126-
// });
117+
var dispatchedMessage = dispatcher.DispatchedMessages.Single();
118+
Assert.Multiple(() =>
119+
{
120+
Assert.That(
121+
dispatchedMessage.Item1.Destination,
122+
Is.EqualTo(failedMessage.ProcessingAttempts.Last().FailureDetails.AddressOfFailingEndpoint));
123+
Assert.That(dispatchedMessage.Item1.Message.Body.ToArray(), Is.EqualTo(newBodyContent));
124+
Assert.That(dispatchedMessage.Item1.Message.Headers["someKey"], Is.EqualTo("someValue"));
125+
});
127126

128-
// using (var x = await ErrorMessageDataStore.CreateEditFailedMessageManager())
129-
// {
130-
// var failedMessage2 = await x.GetFailedMessage(failedMessage.UniqueMessageId);
131-
// Assert.That(failedMessage2, Is.Not.Null, "Edited failed message");
127+
using (var x = await ErrorMessageDataStore.CreateEditFailedMessageManager())
128+
{
129+
var failedMessage2 = await x.GetFailedMessage(failedMessage.UniqueMessageId);
130+
Assert.That(failedMessage2, Is.Not.Null, "Edited failed message");
132131

133-
// var editId = await x.GetCurrentEditingMessageId(failedMessage2.UniqueMessageId);
132+
var editId = await x.GetCurrentEditingMessageId(failedMessage2.UniqueMessageId);
134133

135-
// Assert.Multiple(() =>
136-
// {
137-
// Assert.That(failedMessage2.Status, Is.EqualTo(FailedMessageStatus.Resolved), "Failed message status");
138-
// Assert.That(editId, Is.EqualTo(handlerContent.MessageId), "MessageId");
139-
// });
140-
// }
141-
//}
134+
Assert.Multiple(() =>
135+
{
136+
Assert.That(failedMessage2.Status, Is.EqualTo(FailedMessageStatus.Resolved), "Failed message status");
137+
Assert.That(editId, Is.EqualTo(message.FailedMessageId), "MessageId");
138+
});
139+
}
140+
}
142141

143-
//[Test]
144-
//public async Task Should_dispatch_edited_message_when_retrying()
145-
//{
146-
// var failedMessageId = Guid.NewGuid().ToString();
147-
// await CreateAndStoreFailedMessage(failedMessageId);
142+
[Test]
143+
public async Task Should_dispatch_edited_message_when_retrying()
144+
{
145+
var failedMessageId = Guid.NewGuid().ToString();
146+
var controlMessageId = Guid.NewGuid().ToString();
147+
await CreateAndStoreFailedMessage(failedMessageId);
148148

149-
// var handlerContext = new TestableMessageHandlerContext();
150-
// var message = CreateEditMessage(failedMessageId);
151-
// await handler.Handle(message, handlerContext);
152-
// await handler.Handle(message, handlerContext);
149+
var message = CreateEditMessage(failedMessageId);
150+
await handler.Handle(message, controlMessageId);
151+
await handler.Handle(message, controlMessageId);
153152

154-
// Assert.That(dispatcher.DispatchedMessages, Has.Count.EqualTo(2), "Dispatched message count");
155-
//}
153+
Assert.That(dispatcher.DispatchedMessages, Has.Count.EqualTo(2), "Dispatched message count");
154+
}
155+
156+
[Test]
157+
public async Task Simulate_Two_Tabs_dispatching_two_control_messages_for_the_same_failed_message()
158+
{
159+
var failedMessageId = Guid.NewGuid().ToString();
160+
await CreateAndStoreFailedMessage(failedMessageId);
161+
162+
var message = CreateEditMessage(failedMessageId);
163+
await handler.Handle(message, Guid.NewGuid().ToString());
164+
await handler.Handle(message, Guid.NewGuid().ToString());
165+
166+
Assert.That(dispatcher.DispatchedMessages, Has.Count.EqualTo(1), "Dispatched message count");
167+
}
156168

157169
//[Test]
158170
//public async Task Should_dispatch_message_using_incoming_transaction()

src/ServiceControl/Recoverability/Editing/EditHandlerCopy.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public EditHandlerCopy(IErrorMessageDataStore store, IMessageRedirectsDataStore
2626

2727
}
2828

29-
public async Task Handle(EditAndSend message, string messageId)
29+
public async Task Handle(EditAndSend message, string retryAttemptId)
3030
{
3131
FailedMessage failedMessage;
3232
using (var session = await store.CreateEditFailedMessageManager())
@@ -35,7 +35,7 @@ public async Task Handle(EditAndSend message, string messageId)
3535

3636
if (failedMessage == null)
3737
{
38-
logger.LogWarning("Discarding edit {MessageId} because no message failure for id {FailedMessageId} has been found", messageId, message.FailedMessageId);
38+
logger.LogWarning("Discarding edit {MessageId} because no message failure for id {FailedMessageId} has been found", retryAttemptId, message.FailedMessageId);
3939
return;
4040
}
4141

@@ -44,14 +44,14 @@ public async Task Handle(EditAndSend message, string messageId)
4444
{
4545
if (failedMessage.Status != FailedMessageStatus.Unresolved)
4646
{
47-
logger.LogWarning("Discarding edit {MessageId} because message failure {FailedMessageId} doesn't have state 'Unresolved'", messageId, message.FailedMessageId);
47+
logger.LogWarning("Discarding edit {MessageId} because message failure {FailedMessageId} doesn't have state 'Unresolved'", retryAttemptId, message.FailedMessageId);
4848
return;
4949
}
5050

5151
// create a retries document to prevent concurrent edits
52-
await session.SetCurrentEditingMessageId(messageId);
52+
await session.SetCurrentEditingMessageId(retryAttemptId);
5353
}
54-
else if (editId != messageId)
54+
else if (editId != retryAttemptId)
5555
{
5656
logger.LogWarning("Discarding edit & retry request because the failed message id {FailedMessageId} has already been edited by Message ID {EditedMessageId}", message.FailedMessageId, editId);
5757
return;

0 commit comments

Comments
 (0)