From a8380fc3b1b324d4dfec2dbf91ca50daede4e09a Mon Sep 17 00:00:00 2001 From: Ludvig Falck Date: Wed, 13 Mar 2019 09:52:06 +0100 Subject: [PATCH 1/2] Added extension methods for working with attachments without registering plugin. --- ....AzureStorageAttachmentPlugin.approved.txt | 5 +++ .../When_using_message_extensions.cs | 35 +++++++++++++++++++ .../MessageExtensions.cs | 29 +++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs create mode 100644 src/ServiceBus.AttachmentPlugin/MessageExtensions.cs diff --git a/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt b/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt index d859adf..663ccfa 100644 --- a/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt +++ b/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt @@ -23,6 +23,11 @@ namespace Microsoft.Azure.ServiceBus { System.Threading.Tasks.Task GetConnectionString(); } + public class static MessageExtensions + { + public static System.Threading.Tasks.Task DownloadAzureStorageAttachment(this Microsoft.Azure.ServiceBus.Message message, Microsoft.Azure.ServiceBus.AzureStorageAttachmentConfiguration configuration) { } + public static System.Threading.Tasks.Task UploadAzureStorageAttachment(this Microsoft.Azure.ServiceBus.Message message, Microsoft.Azure.ServiceBus.AzureStorageAttachmentConfiguration configuration) { } + } public class PlainTextConnectionStringProvider : Microsoft.Azure.ServiceBus.IProvideStorageConnectionString { public PlainTextConnectionStringProvider(string connectionString) { } diff --git a/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs b/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs new file mode 100644 index 0000000..c891f64 --- /dev/null +++ b/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs @@ -0,0 +1,35 @@ +namespace ServiceBus.AttachmentPlugin.Tests +{ + using System.Text; + using System.Threading.Tasks; + using Microsoft.Azure.ServiceBus; + using Xunit; + + public class When_using_message_extensions : IClassFixture + { + readonly AzureStorageEmulatorFixture fixture; + + public When_using_message_extensions(AzureStorageEmulatorFixture fixture) + { + this.fixture = fixture; + } + + [Fact] + public async Task Should_send_and_receive() + { + var payload = "payload"; + var bytes = Encoding.UTF8.GetBytes(payload); + var message = new Message(bytes); + var configuration = new AzureStorageAttachmentConfiguration( + connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); + + await message.UploadAzureStorageAttachment(configuration); + + Assert.Null(message.Body); + + var receivedMessage = await message.DownloadAzureStorageAttachment(configuration); + + Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); + } + } +} \ No newline at end of file diff --git a/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs b/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs new file mode 100644 index 0000000..354178b --- /dev/null +++ b/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs @@ -0,0 +1,29 @@ +namespace Microsoft.Azure.ServiceBus +{ + using global::ServiceBus.AttachmentPlugin; + using System.Threading.Tasks; + + /// Extension methods for working with attachments without registering plugin. + public static class MessageExtensions + { + /// Upload attachment to Azure Storage blob without registering plugin. + /// + /// object. + /// with body uploaded to Azure Storage blob. + public static async Task UploadAzureStorageAttachment(this Message message, AzureStorageAttachmentConfiguration configuration) + { + var plugin = new AzureStorageAttachment(configuration); + return await plugin.BeforeMessageSend(message).ConfigureAwait(false); + } + + /// Download attachment from Azure Storage blob without registering plugin. + /// + /// object. + /// with body downloaded from Azure Storage blob. + public static async Task DownloadAzureStorageAttachment(this Message message, AzureStorageAttachmentConfiguration configuration) + { + var plugin = new AzureStorageAttachment(configuration); + return await plugin.AfterMessageReceive(message).ConfigureAwait(false); + } + } +} \ No newline at end of file From 9d4821aac7837548e19effbcff7334ff3aeedd11 Mon Sep 17 00:00:00 2001 From: Ludvig Falck Date: Thu, 14 Mar 2019 22:36:10 +0100 Subject: [PATCH 2/2] Added two extension methods which use ReceiveOnlyAzureStorageAttachment. --- ....AzureStorageAttachmentPlugin.approved.txt | 2 + .../When_using_message_extensions.cs | 41 ++++++++++++++++++- .../MessageExtensions.cs | 22 +++++++++- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt b/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt index 663ccfa..5511dee 100644 --- a/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt +++ b/src/ServiceBus.AttachmentPlugin.Tests/ApprovalFiles/ApiApprovals.AzureStorageAttachmentPlugin.approved.txt @@ -26,6 +26,8 @@ namespace Microsoft.Azure.ServiceBus public class static MessageExtensions { public static System.Threading.Tasks.Task DownloadAzureStorageAttachment(this Microsoft.Azure.ServiceBus.Message message, Microsoft.Azure.ServiceBus.AzureStorageAttachmentConfiguration configuration) { } + public static System.Threading.Tasks.Task DownloadAzureStorageAttachment(this Microsoft.Azure.ServiceBus.Message message) { } + public static System.Threading.Tasks.Task DownloadAzureStorageAttachment(this Microsoft.Azure.ServiceBus.Message message, string messagePropertyToIdentifySasUri) { } public static System.Threading.Tasks.Task UploadAzureStorageAttachment(this Microsoft.Azure.ServiceBus.Message message, Microsoft.Azure.ServiceBus.AzureStorageAttachmentConfiguration configuration) { } } public class PlainTextConnectionStringProvider : Microsoft.Azure.ServiceBus.IProvideStorageConnectionString diff --git a/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs b/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs index c891f64..9dc7df5 100644 --- a/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs +++ b/src/ServiceBus.AttachmentPlugin.Tests/When_using_message_extensions.cs @@ -15,7 +15,7 @@ public When_using_message_extensions(AzureStorageEmulatorFixture fixture) } [Fact] - public async Task Should_send_and_receive() + public async Task Should_send_and_receive_with_configuration() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); @@ -31,5 +31,44 @@ public async Task Should_send_and_receive() Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); } + + [Fact] + public async Task Should_send_and_receive_with_default_sas_uri_property() + { + var payload = "payload"; + var bytes = Encoding.UTF8.GetBytes(payload); + var message = new Message(bytes); + var configuration = new AzureStorageAttachmentConfiguration( + connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id") + .WithBlobSasUri(); + + await message.UploadAzureStorageAttachment(configuration); + + Assert.Null(message.Body); + + var receivedMessage = await message.DownloadAzureStorageAttachment(); + + Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); + } + + [Fact] + public async Task Should_send_and_receive_with_custom_sas_uri_property() + { + var payload = "payload"; + var bytes = Encoding.UTF8.GetBytes(payload); + var message = new Message(bytes); + string customSasUri = "$custom-attachment.sas.uri"; + var configuration = new AzureStorageAttachmentConfiguration( + connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id") + .WithBlobSasUri(customSasUri); + + await message.UploadAzureStorageAttachment(configuration); + + Assert.Null(message.Body); + + var receivedMessage = await message.DownloadAzureStorageAttachment(customSasUri); + + Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); + } } } \ No newline at end of file diff --git a/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs b/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs index 354178b..3fd9095 100644 --- a/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs +++ b/src/ServiceBus.AttachmentPlugin/MessageExtensions.cs @@ -16,7 +16,7 @@ public static async Task UploadAzureStorageAttachment(this Message mess return await plugin.BeforeMessageSend(message).ConfigureAwait(false); } - /// Download attachment from Azure Storage blob without registering plugin. + /// Download attachment from Azure Storage blob without registering plugin, using configuration object. /// /// object. /// with body downloaded from Azure Storage blob. @@ -25,5 +25,25 @@ public static async Task DownloadAzureStorageAttachment(this Message me var plugin = new AzureStorageAttachment(configuration); return await plugin.AfterMessageReceive(message).ConfigureAwait(false); } + + /// Download attachment from Azure Storage blob without registering plugin, using default message property to identify SAS URI. + /// + /// with body downloaded from Azure Storage blob. + public static async Task DownloadAzureStorageAttachment(this Message message) + { + var plugin = new ReceiveOnlyAzureStorageAttachment(AzureStorageAttachmentConfigurationExtensions.DefaultMessagePropertyToIdentitySasUri); + return await plugin.AfterMessageReceive(message).ConfigureAwait(false); + } + + + /// Download attachment from Azure Storage blob without registering plugin, with custom message property to identify SAS URI. + /// + /// Message property which contains the SAS URI used to fetch message body from blob. + /// with body downloaded from Azure Storage blob. + public static async Task DownloadAzureStorageAttachment(this Message message, string messagePropertyToIdentifySasUri) + { + var plugin = new ReceiveOnlyAzureStorageAttachment(messagePropertyToIdentifySasUri); + return await plugin.AfterMessageReceive(message).ConfigureAwait(false); + } } } \ No newline at end of file