Skip to content

Commit 10863cf

Browse files
Add tests to verify protocol message size (#15030)
1 parent 666fe9b commit 10863cf

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTestsBase.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,50 @@ public void ReadCaseInsensitivePropertiesByDefault()
312312
}, streamItemMessage.Item);
313313
}
314314

315+
public static IDictionary<string, MessageSizeTestData> MessageSizeData => new[]
316+
{
317+
new MessageSizeTestData("InvocationMessage_WithoutInvocationId", new InvocationMessage("Target", new object[] { 1 }), 45),
318+
new MessageSizeTestData("InvocationMessage_WithInvocationId", new InvocationMessage("1", "Target", new object[] { 1 }), 64),
319+
new MessageSizeTestData("InvocationMessage_WithInvocationIdAndStreamId", new InvocationMessage("1", "Target", new object[] { 1 }, new string[] { "2" }), 82),
320+
321+
new MessageSizeTestData("CloseMessage_Empty", CloseMessage.Empty, 11),
322+
new MessageSizeTestData("CloseMessage_WithError", new CloseMessage("error"), 27),
323+
324+
new MessageSizeTestData("StreamItemMessage_WithNullItem", new StreamItemMessage("1", null), 42),
325+
new MessageSizeTestData("StreamItemMessage_WithItem", new StreamItemMessage("1", 1), 39),
326+
327+
new MessageSizeTestData("CompletionMessage_Empty", CompletionMessage.Empty("1"), 30),
328+
new MessageSizeTestData("CompletionMessage_WithResult", CompletionMessage.WithResult("1", 1), 41),
329+
new MessageSizeTestData("CompletionMessage_WithError", CompletionMessage.WithError("1", "error"), 46),
330+
331+
new MessageSizeTestData("StreamInvocationMessage", new StreamInvocationMessage("1", "target", Array.Empty<object>()), 63),
332+
new MessageSizeTestData("StreamInvocationMessage_WithStreamId", new StreamInvocationMessage("1", "target", Array.Empty<object>(), new [] { "2" }), 81),
333+
334+
new MessageSizeTestData("CancelInvocationMessage", new CancelInvocationMessage("1"), 30),
335+
336+
new MessageSizeTestData("PingMessage", PingMessage.Instance, 11),
337+
}.ToDictionary(t => t.Name);
338+
339+
public static IEnumerable<object[]> MessageSizeDataNames => MessageSizeData.Keys.Select(name => new object[] { name });
340+
341+
[Theory]
342+
[MemberData(nameof(MessageSizeDataNames))]
343+
public void VerifyMessageSize(string testDataName)
344+
{
345+
var testData = MessageSizeData[testDataName];
346+
347+
var writer = MemoryBufferWriter.Get();
348+
try
349+
{
350+
JsonHubProtocol.WriteMessage(testData.Message, writer);
351+
Assert.Equal(testData.Size, writer.Length);
352+
}
353+
finally
354+
{
355+
MemoryBufferWriter.Return(writer);
356+
}
357+
}
358+
315359
public static string Frame(string input)
316360
{
317361
var data = Encoding.UTF8.GetBytes(input);
@@ -345,5 +389,21 @@ public JsonProtocolTestData(string name, HubMessage message, bool useCamelCase,
345389

346390
public override string ToString() => Name;
347391
}
392+
393+
public class MessageSizeTestData
394+
{
395+
public string Name { get; }
396+
public HubMessage Message { get; }
397+
public int Size { get; }
398+
399+
public MessageSizeTestData(string name, HubMessage message, int size)
400+
{
401+
Name = name;
402+
Message = message;
403+
Size = size;
404+
}
405+
406+
public override string ToString() => Name;
407+
}
348408
}
349409
}

src/SignalR/common/SignalR.Common/test/Internal/Protocol/MessagePackHubProtocolTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,5 +195,55 @@ public void WriteMessages(string testDataName)
195195

196196
TestWriteMessages(testData);
197197
}
198+
199+
public static IDictionary<string, MessageSizeTestData> MessageSizeData => new[]
200+
{
201+
new MessageSizeTestData("InvocationMessage_WithoutInvocationId", new InvocationMessage("Target", new object[] { 1 }), 15),
202+
new MessageSizeTestData("InvocationMessage_WithInvocationId", new InvocationMessage("1", "Target", new object[] { 1 }), 16),
203+
new MessageSizeTestData("InvocationMessage_WithInvocationIdAndStreamId", new InvocationMessage("1", "Target", new object[] { 1 }, new string[] { "2" }), 18),
204+
205+
new MessageSizeTestData("CloseMessage_Empty", CloseMessage.Empty, 4),
206+
new MessageSizeTestData("CloseMessage_WithError", new CloseMessage("error"), 9),
207+
208+
new MessageSizeTestData("StreamItemMessage_WithNullItem", new StreamItemMessage("1", null), 7),
209+
new MessageSizeTestData("StreamItemMessage_WithItem", new StreamItemMessage("1", 1), 7),
210+
211+
new MessageSizeTestData("CompletionMessage_Empty", CompletionMessage.Empty("1"), 7),
212+
new MessageSizeTestData("CompletionMessage_WithResult", CompletionMessage.WithResult("1", 1), 8),
213+
new MessageSizeTestData("CompletionMessage_WithError", CompletionMessage.WithError("1", "error"), 13),
214+
215+
new MessageSizeTestData("StreamInvocationMessage", new StreamInvocationMessage("1", "target", Array.Empty<object>()), 15),
216+
new MessageSizeTestData("StreamInvocationMessage_WithStreamId", new StreamInvocationMessage("1", "target", Array.Empty<object>(), new [] { "2" }), 17),
217+
218+
new MessageSizeTestData("CancelInvocationMessage", new CancelInvocationMessage("1"), 6),
219+
220+
new MessageSizeTestData("PingMessage", PingMessage.Instance, 3),
221+
}.ToDictionary(t => t.Name);
222+
223+
public static IEnumerable<object[]> MessageSizeDataNames => MessageSizeData.Keys.Select(name => new object[] { name });
224+
225+
[Theory]
226+
[MemberData(nameof(MessageSizeDataNames))]
227+
public void VerifyMessageSize(string testDataName)
228+
{
229+
var testData = MessageSizeData[testDataName];
230+
Assert.Equal(testData.Size, Write(testData.Message).Length);
231+
}
232+
233+
public class MessageSizeTestData
234+
{
235+
public string Name { get; }
236+
public HubMessage Message { get; }
237+
public int Size { get; }
238+
239+
public MessageSizeTestData(string name, HubMessage message, int size)
240+
{
241+
Name = name;
242+
Message = message;
243+
Size = size;
244+
}
245+
246+
public override string ToString() => Name;
247+
}
198248
}
199249
}

0 commit comments

Comments
 (0)