Skip to content

Commit

Permalink
Re-submit a single message with binary content created with Azure.Mes…
Browse files Browse the repository at this point in the history
…saging.ServiceBus nuget package (#722)

* - add test to show that the error is caused because of AzureMessagingServiceBus;

* - add menu item to resubmit message and deadletter message without repairing;

* - add menu item to resubmit message and deadletter message without repairing;

* - add menu item to resubmit message without repairing;

* add tool tips for submit (deadletter) message
  • Loading branch information
KinNeko-De committed Jun 13, 2023
1 parent fd1e6d9 commit 095239b
Show file tree
Hide file tree
Showing 12 changed files with 324 additions and 39 deletions.
157 changes: 157 additions & 0 deletions src/ServiceBusExplorer.Tests/Helpers/ServiceBusHelperTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
using ServiceBusExplorer;
using System;
using NUnit.Framework;
using Microsoft.ServiceBus.Messaging;
using System.IO;

#endregion

Expand Down Expand Up @@ -138,5 +140,160 @@ public void GetAddressRelativeToNamespace_Whitespace_ReturnsWhitespace()

Assert.That(helper.GetAddressRelativeToNamespace(" "), Is.EqualTo(" "));
}

[Test]
public void GetMessageText_ProtobufMessage_WindowsAzureServiceApi_ByteArray()
{
var expectedBodyType = BodyType.ByteArray;

var helper = new ServiceBusHelper((_, _) => { });

var message = CreateProtobufTestMessage();
var brokeredMessage = new BrokeredMessage(message);
var actualMessageText = helper.GetMessageText(brokeredMessage, false, out var actualBodyType);

Assert.AreEqual(expectedBodyType, actualBodyType);
Assert.NotNull(actualMessageText);
Assert.IsFalse(string.IsNullOrWhiteSpace(actualMessageText));
}

[Test]
public void GetMessageText_ProtobufMessage_WindowsAzureServiceApi_ReadonlyMemoryByte()
{
var expectedBodyType = BodyType.Stream;

var helper = new ServiceBusHelper((_, _) => { });

ReadOnlyMemory<byte> message = CreateProtobufTestMessage();
var brokeredMessage = new BrokeredMessage(message);
var actualMessageText = helper.GetMessageText(brokeredMessage, false, out var actualBodyType);

Assert.AreEqual(expectedBodyType, actualBodyType);
Assert.NotNull(actualMessageText);
Assert.IsFalse(string.IsNullOrWhiteSpace(actualMessageText));
}

/// <summary>
/// AzureMessagingServiceBus only allows byte[] and BinaryData as content of the message.
/// This test somehow try to emulate the behavior of the new nuget package.
/// The exception is the same unspecified exception that occurs in test with the real service bus
/// Inside of the package you would do something like
/// Body = BinaryData.FromBytes(myByteArray)
///
/// The actual message text in real test are like the output of <see cref="GetMessageText_ProtobufMessage_WindowsAzureServiceApi_ByteArray"/>
///
/// ������&
/// a string that a human can read 
/// readable string" fffff�(@
/// </summary>
[Test]
public void GetMessageText_ProtobufMessage_AzureMessagingServiceBus()
{
var expectedBodyType = BodyType.Stream;

var helper = new ServiceBusHelper((_, _) => { });

var message = CreateProtobufTestMessage();
var brokeredMessage = new BrokeredMessage(new MemoryStream(message));
var actualMessageText = helper.GetMessageText(brokeredMessage, false, out var actualBodyType);

Assert.AreEqual(expectedBodyType, actualBodyType);
Assert.NotNull(actualMessageText);
Assert.IsFalse(string.IsNullOrWhiteSpace(actualMessageText));
}

static byte[] CreateProtobufTestMessage()
{
// Due to incompatibility with .net 462 it is not possible to generate a protobuf message inside the code.
return new byte[]
{
10,
12,
8,
154,
239,
224,
160,
6,
16,
172,
239,
162,
196,
1,
18,
38,
10,
30,
97,
32,
115,
116,
114,
105,
110,
103,
32,
116,
104,
97,
116,
32,
97,
32,
104,
117,
109,
97,
110,
32,
99,
97,
110,
32,
114,
101,
97,
100,
16,
1,
26,
2,
8,
12,
18,
30,
10,
15,
114,
101,
97,
100,
97,
98,
108,
101,
32,
115,
116,
114,
105,
110,
103,
16,
2,
34,
9,
9,
102,
102,
102,
102,
102,
230,
40,
64
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2" />
<PackageReference Include="WindowsAzure.ServiceBus" Version="6.2.2" />
</ItemGroup>
</Project>
3 changes: 2 additions & 1 deletion src/ServiceBusExplorer.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -605,4 +605,5 @@ II.2.12 &lt;HandlesEvent /&gt;&#xD;


<s:String x:Key="/Default/FilterSettingsManager/AttributeFilterXml/@EntryValue">&lt;data /&gt;</s:String>
<s:String x:Key="/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue">&lt;data&gt;&lt;IncludeFilters /&gt;&lt;ExcludeFilters /&gt;&lt;/data&gt;</s:String></wpf:ResourceDictionary>
<s:String x:Key="/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue">&lt;data&gt;&lt;IncludeFilters /&gt;&lt;ExcludeFilters /&gt;&lt;/data&gt;</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Protobuf/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
26 changes: 24 additions & 2 deletions src/ServiceBusExplorer/Controls/HandleQueueControl.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 26 additions & 2 deletions src/ServiceBusExplorer/Controls/HandleQueueControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3317,6 +3317,7 @@ private void messagesDataGridView_CellMouseDown(object sender, DataGridViewCellM
messagesDataGridView.Rows[e.RowIndex].Selected = true;
var multipleSelectedRows = messagesDataGridView.SelectedRows.Count > 1;
repairAndResubmitMessageToolStripMenuItem.Visible = !multipleSelectedRows;
resubmitMessageToolStripMenuItem.Visible = !multipleSelectedRows;
saveSelectedMessageToolStripMenuItem.Visible = !multipleSelectedRows;
saveSelectedMessageBodyAsFileToolStripMenuItem.Visible = !multipleSelectedRows;
resubmitSelectedMessagesInBatchModeToolStripMenuItem.Visible = multipleSelectedRows;
Expand All @@ -3331,16 +3332,27 @@ private void repairAndResubmitMessageToolStripMenuItem_Click(object sender, Even
new DataGridViewCellEventArgs(0, currentMessageRowIndex));
}

private void resubmitMessageToolStripMenuItem_Click(object sender, EventArgs e)
{
ResubmitSelectedMessages();
}

private void resubmitSelectedMessagesInBatchModeToolStripMenuItem_Click(object sender, EventArgs e)
{
ResubmitSelectedMessages();
}

private void ResubmitSelectedMessages()
{
try
{
if (messagesDataGridView.SelectedRows.Count <= 0)
{
return;
}

using (var form = new MessageForm(queueDescription, messagesDataGridView.SelectedRows.Cast<DataGridViewRow>()
.Select(r => (BrokeredMessage)r.DataBoundItem), serviceBusHelper, writeToLog))
.Select(r => (BrokeredMessage)r.DataBoundItem), serviceBusHelper, writeToLog))
{
form.ShowDialog();
}
Expand Down Expand Up @@ -3433,6 +3445,7 @@ private void deadletterDataGridView_CellMouseDown(object sender, DataGridViewCel
var multipleSelectedRows = deadletterDataGridView.SelectedRows.Count > 1;

repairAndResubmitDeadletterToolStripMenuItem.Visible = !multipleSelectedRows;
resubmitDeadletterToolStripMenuItem.Visible = !multipleSelectedRows;
saveSelectedDeadletteredMessageToolStripMenuItem.Visible = !multipleSelectedRows;
saveSelectedDeadletteredMessageBodyAsFileToolStripMenuItem.Visible = !multipleSelectedRows;
deleteSelectedMessageToolStripMenuItem.Visible = !multipleSelectedRows;
Expand Down Expand Up @@ -3468,17 +3481,28 @@ private void repairAndResubmitDeadletterMessageToolStripMenuItem_Click(object se
new DataGridViewCellEventArgs(0, currentDeadletterMessageRowIndex));
}

private async void resubmitDeadletterMessageToolStripMenuItem_Click(object sender, EventArgs e)
{
await ResubmitSelectedDeadletterMessages();
}

private async void resubmitSelectedDeadletterMessagesInBatchModeToolStripMenuItem_Click(object sender,
EventArgs e)
{
await ResubmitSelectedDeadletterMessages();
}

async Task ResubmitSelectedDeadletterMessages()
{
try
{
if (deadletterDataGridView.SelectedRows.Count <= 0)
{
return;
}

using (var form = new MessageForm(queueDescription, deadletterDataGridView.SelectedRows.Cast<DataGridViewRow>()
.Select(r => (BrokeredMessage)r.DataBoundItem), serviceBusHelper, writeToLog))
.Select(r => (BrokeredMessage)r.DataBoundItem), serviceBusHelper, writeToLog))
{
form.ShowDialog();
if (form.RemovedSequenceNumbers != null && form.RemovedSequenceNumbers.Any())
Expand Down
8 changes: 4 additions & 4 deletions src/ServiceBusExplorer/Controls/HandleQueueControl.resx
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
<data name="pictFindMessages.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EQAACxEBf2RfkQAAAAd0SU1FB90LGg8kOha4XJIAAAMOSURBVDhPrdHrS1NxGMDx/ohehVnWi4gKur4I
DAAACwwBP0AiyAAAAAd0SU1FB90LGg8kOha4XJIAAAMOSURBVDhPrdHrS1NxGMDx/ohehVnWi4gKur4I
e5ck0cSiTMWE0HI6dWq7oGLTOfO2edyW052zzc3LtKl43TlnNzRteEvNzbMp5aUsE+dlXpIi0l9HCLcO
QwWFL+fV83w4PL9jsN52mCoNhHFo1vF17bAQmQKzt/fNHAFEhuhtPqAaM1GgG77GQS+ltQfxjQzYKmkZ
rjUTKtxOmfSOClUaxp6VWQMSUZqQeCqfCxLMBGZN3Ejvv5vXVdQ4vIf1H0Qqj4Rvz7O6Mxs2s3QgUQno
Expand Down Expand Up @@ -161,7 +161,7 @@
<data name="pictFindDeadletter.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EQAACxEBf2RfkQAAAAd0SU1FB90LGg8kOha4XJIAAAMOSURBVDhPrdHrS1NxGMDx/ohehVnWi4gKur4I
DAAACwwBP0AiyAAAAAd0SU1FB90LGg8kOha4XJIAAAMOSURBVDhPrdHrS1NxGMDx/ohehVnWi4gKur4I
e5ck0cSiTMWE0HI6dWq7oGLTOfO2edyW052zzc3LtKl43TlnNzRteEvNzbMp5aUsE+dlXpIi0l9HCLcO
QwWFL+fV83w4PL9jsN52mCoNhHFo1vF17bAQmQKzt/fNHAFEhuhtPqAaM1GgG77GQS+ltQfxjQzYKmkZ
rjUTKtxOmfSOClUaxp6VWQMSUZqQeCqfCxLMBGZN3Ejvv5vXVdQ4vIf1H0Qqj4Rvz7O6Mxs2s3QgUQno
Expand Down Expand Up @@ -198,7 +198,7 @@
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EQAACxEBf2RfkQAAAAd0SU1FB90LGg8kOha4XJIAAAMOSURBVDhPrdHrS1NxGMDx/ohehVnWi4gKur4I
DAAACwwBP0AiyAAAAAd0SU1FB90LGg8kOha4XJIAAAMOSURBVDhPrdHrS1NxGMDx/ohehVnWi4gKur4I
e5ck0cSiTMWE0HI6dWq7oGLTOfO2edyW052zzc3LtKl43TlnNzRteEvNzbMp5aUsE+dlXpIi0l9HCLcO
QwWFL+fV83w4PL9jsN52mCoNhHFo1vF17bAQmQKzt/fNHAFEhuhtPqAaM1GgG77GQS+ltQfxjQzYKmkZ
rjUTKtxOmfSOClUaxp6VWQMSUZqQeCqfCxLMBGZN3Ejvv5vXVdQ4vIf1H0Qqj4Rvz7O6Mxs2s3QgUQno
Expand Down Expand Up @@ -260,6 +260,6 @@
<value>390, 57</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>47</value>
<value>116</value>
</metadata>
</root>
Loading

0 comments on commit 095239b

Please sign in to comment.