From b46c4b406bfc55cf3665bfd7911bdca33d8e9031 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 12:19:34 -0500 Subject: [PATCH 1/7] Error message update --- src/AWS.Messaging/Serialization/EnvelopeSerializer.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs b/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs index ddc304d2..31c26980 100644 --- a/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs +++ b/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs @@ -144,8 +144,15 @@ public async ValueTask ConvertToEnvelopeAsync(Message s var subscriberMapping = _messageConfiguration.GetSubscriberMapping(messageTypeIdentifier); if (subscriberMapping is null) { - _logger.LogError("{MessageConfiguration} does not have a valid subscriber mapping for message ID '{MessageTypeIdentifier}'", nameof(_messageConfiguration), messageTypeIdentifier); - throw new InvalidDataException($"{nameof(_messageConfiguration)} does not have a valid subscriber mapping for {nameof(messageTypeIdentifier)} '{messageTypeIdentifier}'"); + var availableMappings = string.Join(", ", _messageConfiguration.SubscriberMappings.Select(m => m.MessageTypeIdentifier)); + _logger.LogError("'{MessageTypeIdentifier}' is not a valid subscriber mapping for message ID '{MessageId}'. Available mappings: {AvailableMappings}", + messageTypeIdentifier, + intermediateEnvelope.Id, + string.IsNullOrEmpty(availableMappings) ? "none" : availableMappings); + + throw new InvalidDataException( + $"'{messageTypeIdentifier}' is not a valid subscriber mapping for message ID {intermediateEnvelope.Id}. " + + $"Available mappings: {(string.IsNullOrEmpty(availableMappings) ? "none" : availableMappings)}"); } var messageType = subscriberMapping.MessageType; From f337392ff36016db24785e3cbc9428936d548996 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 12:52:18 -0500 Subject: [PATCH 2/7] add test case --- .../EnvelopeSerializerTests.cs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs b/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs index 254d9f6a..6bb42ad3 100644 --- a/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs +++ b/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Text; using System.Text.Json; using System.Threading.Tasks; @@ -564,6 +565,50 @@ public async Task ConvertToEnvelopeAsync_DataMessageLogging_WithError(bool dataM Assert.Null(exception.InnerException); } } + + [Fact] + public async Task ConvertToEnvelope_NullSubscriberMapping_ThrowsException() + { + // ARRANGE + var serviceProvider = _serviceCollection.BuildServiceProvider(); + var envelopeSerializer = serviceProvider.GetRequiredService(); + var messageEnvelope = new MessageEnvelope + { + Id = "66659d05-e4ff-462f-81c4-09e560e66a5c", + Source = new Uri("/aws/messaging", UriKind.Relative), + Version = "1.0", + MessageTypeIdentifier = "unknownMessageType", // Using an unknown message type + TimeStamp = _testdate, + Message = new AddressInfo + { + Street = "Prince St", + Unit = 123, + ZipCode = "00001" + } + }; + + var sqsMessage = new Message + { + Body = await envelopeSerializer.SerializeAsync(messageEnvelope), + ReceiptHandle = "receipt-handle" + }; + + // ACT & ASSERT + var exception = await Assert.ThrowsAsync( + async () => await envelopeSerializer.ConvertToEnvelopeAsync(sqsMessage) + ); + + // Verify the exception message + Assert.Equal("Failed to create MessageEnvelope", exception.Message); + + // Verify the inner exception type and message + Assert.IsType(exception.InnerException); + var innerException = exception.InnerException as InvalidDataException; + Assert.Contains("'unknownMessageType' is not a valid subscriber mapping for message ID", innerException.Message); + Assert.Contains("Available mappings:", innerException.Message); + Assert.Contains("addressInfo", innerException.Message); + } + } public class MockSerializationCallback : ISerializationCallback From 684c703f4a0afc6d6f835073ee0a659734e707ea Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 12:54:53 -0500 Subject: [PATCH 3/7] change file --- .../changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json diff --git a/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json b/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json new file mode 100644 index 00000000..ea626e04 --- /dev/null +++ b/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json @@ -0,0 +1,11 @@ +{ + "Projects": [ + { + "Name": "AWS.Messaging", + "Type": "Patch", + "ChangelogMessages": [ + "Update error message for handling scenario where subscribermapping does not exist." + ] + } + ] +} \ No newline at end of file From 7b2f8ead014ed52e570864195260b09231309cc5 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 13:03:50 -0500 Subject: [PATCH 4/7] remove message id from exception --- src/AWS.Messaging/Serialization/EnvelopeSerializer.cs | 5 ++--- .../SerializationTests/EnvelopeSerializerTests.cs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs b/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs index 31c26980..871c4288 100644 --- a/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs +++ b/src/AWS.Messaging/Serialization/EnvelopeSerializer.cs @@ -145,13 +145,12 @@ public async ValueTask ConvertToEnvelopeAsync(Message s if (subscriberMapping is null) { var availableMappings = string.Join(", ", _messageConfiguration.SubscriberMappings.Select(m => m.MessageTypeIdentifier)); - _logger.LogError("'{MessageTypeIdentifier}' is not a valid subscriber mapping for message ID '{MessageId}'. Available mappings: {AvailableMappings}", + _logger.LogError("'{MessageTypeIdentifier}' is not a valid subscriber mapping. Available mappings: {AvailableMappings}", messageTypeIdentifier, - intermediateEnvelope.Id, string.IsNullOrEmpty(availableMappings) ? "none" : availableMappings); throw new InvalidDataException( - $"'{messageTypeIdentifier}' is not a valid subscriber mapping for message ID {intermediateEnvelope.Id}. " + + $"'{messageTypeIdentifier}' is not a valid subscriber mapping. " + $"Available mappings: {(string.IsNullOrEmpty(availableMappings) ? "none" : availableMappings)}"); } diff --git a/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs b/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs index 6bb42ad3..3be68b92 100644 --- a/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs +++ b/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs @@ -604,7 +604,7 @@ public async Task ConvertToEnvelope_NullSubscriberMapping_ThrowsException() // Verify the inner exception type and message Assert.IsType(exception.InnerException); var innerException = exception.InnerException as InvalidDataException; - Assert.Contains("'unknownMessageType' is not a valid subscriber mapping for message ID", innerException.Message); + Assert.Contains("'unknownMessageType' is not a valid subscriber mapping.sr", innerException.Message); Assert.Contains("Available mappings:", innerException.Message); Assert.Contains("addressInfo", innerException.Message); } From 82c584952398057a94114f15f87e33758e44a628 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 13:11:45 -0500 Subject: [PATCH 5/7] fix error --- .../SerializationTests/EnvelopeSerializerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs b/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs index 3be68b92..7393e139 100644 --- a/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs +++ b/test/AWS.Messaging.UnitTests/SerializationTests/EnvelopeSerializerTests.cs @@ -604,7 +604,7 @@ public async Task ConvertToEnvelope_NullSubscriberMapping_ThrowsException() // Verify the inner exception type and message Assert.IsType(exception.InnerException); var innerException = exception.InnerException as InvalidDataException; - Assert.Contains("'unknownMessageType' is not a valid subscriber mapping.sr", innerException.Message); + Assert.Contains("'unknownMessageType' is not a valid subscriber mapping.", innerException.Message); Assert.Contains("Available mappings:", innerException.Message); Assert.Contains("addressInfo", innerException.Message); } From 6ab6c15dad4f5536b6a53a080eedcd5b3ce47943 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 13:34:18 -0500 Subject: [PATCH 6/7] fix other tests --- test/AWS.Messaging.IntegrationTests/FifoSubscriberTests.cs | 2 +- test/AWS.Messaging.IntegrationTests/SubscriberTests.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/AWS.Messaging.IntegrationTests/FifoSubscriberTests.cs b/test/AWS.Messaging.IntegrationTests/FifoSubscriberTests.cs index 0351bec9..cfa4f4fc 100644 --- a/test/AWS.Messaging.IntegrationTests/FifoSubscriberTests.cs +++ b/test/AWS.Messaging.IntegrationTests/FifoSubscriberTests.cs @@ -162,7 +162,7 @@ public async Task MessagesWithoutHandlers(int numberOfMessages) var timeElapsed = DateTime.UtcNow - processStartTime; var inMemoryLogger = serviceProvider.GetRequiredService(); - var errorMessages = inMemoryLogger.Logs.Where(x => x.Message.Equals("_messageConfiguration does not have a valid subscriber mapping for message ID 'AWS.Messaging.Tests.Common.Models.TransactionInfo'")); + var errorMessages = inMemoryLogger.Logs.Where(x => x.Message.StartsWith("'") && x.Message.Contains("is not a valid subscriber mapping")); Assert.NotEmpty(errorMessages); Assert.True(errorMessages.Count() >= numberOfMessages); Assert.True(timeElapsed.TotalSeconds > 29); diff --git a/test/AWS.Messaging.IntegrationTests/SubscriberTests.cs b/test/AWS.Messaging.IntegrationTests/SubscriberTests.cs index f62bc670..2982c048 100644 --- a/test/AWS.Messaging.IntegrationTests/SubscriberTests.cs +++ b/test/AWS.Messaging.IntegrationTests/SubscriberTests.cs @@ -316,7 +316,7 @@ await publisher.PublishAsync(new ChatMessage var timeElapsed = DateTime.UtcNow - processStartTime; var inMemoryLogger = serviceProvider.GetRequiredService(); - var errorMessages = inMemoryLogger.Logs.Where(x => x.Message.Equals("_messageConfiguration does not have a valid subscriber mapping for message ID 'AWS.Messaging.IntegrationTests.Models.ChatMessage'")); + var errorMessages = inMemoryLogger.Logs.Where(x => x.Message.StartsWith("'") && x.Message.Contains("is not a valid subscriber mapping")); Assert.NotEmpty(errorMessages); Assert.True(errorMessages.Count() >= numberOfMessages); Assert.True(timeElapsed.TotalSeconds > 59); From 5fdf83f3927843cec50525e60a822bc5d4aba9b1 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Thu, 6 Mar 2025 13:36:32 -0500 Subject: [PATCH 7/7] change file update --- .autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json b/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json index ea626e04..650908a1 100644 --- a/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json +++ b/.autover/changes/01370ae5-3537-4723-80b3-ee82e79e80b9.json @@ -4,7 +4,7 @@ "Name": "AWS.Messaging", "Type": "Patch", "ChangelogMessages": [ - "Update error message for handling scenario where subscribermapping does not exist." + "Update error message for handling scenario where subscriber mapping is not valid." ] } ]