mirror of
https://github.com/microsoft/autogen.git
synced 2025-09-06 06:47:03 +00:00
134 lines
5.4 KiB
C#
134 lines
5.4 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// MessageRegistryTests.cs
|
|
|
|
using Microsoft.AutoGen.Contracts;
|
|
using Microsoft.AutoGen.RuntimeGateway.Grpc.Abstractions;
|
|
using Microsoft.AutoGen.RuntimeGateway.Grpc.Tests.Helpers.Orleans;
|
|
|
|
namespace Microsoft.AutoGen.RuntimeGateway.Grpc.Tests;
|
|
public class MessageRegistryTests
|
|
{
|
|
public MessageRegistryTests() { }
|
|
|
|
[Fact]
|
|
public async Task Write_and_Remove_Messages()
|
|
{
|
|
// Arrange
|
|
var fixture = new ClusterFixture();
|
|
var cluster = fixture.Cluster;
|
|
var grain = cluster.GrainFactory.GetGrain<IMessageRegistryGrain>(0);
|
|
var topic = Guid.NewGuid().ToString(); // Random topic
|
|
var message = new CloudEvent { Id = Guid.NewGuid().ToString(), Source = "test-source", Type = "test-type" };
|
|
|
|
// Act
|
|
await grain.AddMessageToDeadLetterQueueAsync(topic, message);
|
|
|
|
// Assert
|
|
// attempt to remove the topic from the queue
|
|
var removedMessages = await grain.RemoveMessagesAsync(topic);
|
|
// attempt to compare the message with the removed message
|
|
Assert.Single(removedMessages);
|
|
Assert.Equal(message.Id, removedMessages[0].Id);
|
|
// ensure the queue is empty
|
|
removedMessages = await grain.RemoveMessagesAsync(topic);
|
|
Assert.Empty(removedMessages);
|
|
cluster.StopAllSilos();
|
|
}
|
|
/// <summary>
|
|
/// Test that messages are removed from the event buffer after the buffer time
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task Write_and_Remove_Messages_BufferTime()
|
|
{
|
|
// Arrange
|
|
var fixture = new ClusterFixture();
|
|
var cluster = fixture.Cluster;
|
|
var grain = cluster.GrainFactory.GetGrain<IMessageRegistryGrain>(0);
|
|
var topic = Guid.NewGuid().ToString(); // Random topic
|
|
var message = new CloudEvent { Id = Guid.NewGuid().ToString(), Source = "test-source", Type = "test-type" };
|
|
|
|
// Act
|
|
await grain.AddMessageToEventBufferAsync(topic, message);
|
|
// wait 5 seconds
|
|
await Task.Delay(5000);
|
|
// attempt to remove the topic from the queue
|
|
var removedMessages = await grain.RemoveMessagesAsync(topic);
|
|
Assert.Empty(removedMessages);
|
|
cluster.StopAllSilos();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Test that messages are still in the event buffer after 1 second
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task Write_and_Remove_Messages_BufferTime_StillInBuffer()
|
|
{
|
|
// Arrange
|
|
var fixture = new ClusterFixture();
|
|
var cluster = fixture.Cluster;
|
|
var grain = cluster.GrainFactory.GetGrain<IMessageRegistryGrain>(0);
|
|
var topic = Guid.NewGuid().ToString(); // Random topic
|
|
var message = new CloudEvent { Id = Guid.NewGuid().ToString(), Source = "test-source", Type = "test-type" };
|
|
|
|
// Act
|
|
await grain.AddMessageToEventBufferAsync(topic, message);
|
|
// wait 1 second
|
|
await Task.Delay(1000);
|
|
// attempt to remove the topic from the queue
|
|
var removedMessages = await grain.RemoveMessagesAsync(topic);
|
|
Assert.Single(removedMessages);
|
|
cluster.StopAllSilos();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Test that messages which exceed the mas message size are not written to the event buffer
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task Do_No_Buffer_If_Messages_Exceed_MaxMessageSize()
|
|
{
|
|
// Arrange
|
|
var fixture = new ClusterFixture();
|
|
var cluster = fixture.Cluster;
|
|
var grain = cluster.GrainFactory.GetGrain<IMessageRegistryGrain>(0);
|
|
var topic = Guid.NewGuid().ToString(); // Random topic
|
|
var maxMessageSize = 1024 * 1024 * 10; // 10MB
|
|
var message = new CloudEvent { Id = Guid.NewGuid().ToString(), Source = "test-source", Type = "test-type" };
|
|
|
|
// Act
|
|
await grain.AddMessageToDeadLetterQueueAsync(topic, message); // small message
|
|
message.BinaryData = Google.Protobuf.ByteString.CopyFrom(new byte[maxMessageSize + 1]);
|
|
await grain.AddMessageToDeadLetterQueueAsync(topic, message); // over the limit
|
|
// attempt to remove the topic from the queue
|
|
var removedMessages = await grain.RemoveMessagesAsync(topic);
|
|
Assert.Single(removedMessages); // only the small message should be in the buffer
|
|
cluster.StopAllSilos();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Test that the queue cannot grow past the max queue size
|
|
/// </summary>
|
|
[Fact]
|
|
public async Task Do_No_Buffer_If_Queue_Exceeds_MaxQueueSize()
|
|
{
|
|
// Arrange
|
|
var fixture = new ClusterFixture();
|
|
var cluster = fixture.Cluster;
|
|
var grain = cluster.GrainFactory.GetGrain<IMessageRegistryGrain>(0);
|
|
var topic = Guid.NewGuid().ToString(); // Random topic
|
|
var bigMessage = 1024 * 1024 * 1; // 1MB
|
|
var message = new CloudEvent { Id = Guid.NewGuid().ToString(), Source = "test-source", Type = "test-type" };
|
|
|
|
// Act
|
|
for (int i = 0; i < 11; i++)
|
|
{
|
|
message.BinaryData = Google.Protobuf.ByteString.CopyFrom(new byte[bigMessage]);
|
|
message.Source = i.ToString();
|
|
await grain.AddMessageToDeadLetterQueueAsync(topic, message);
|
|
}
|
|
// attempt to remove the topic from the queue
|
|
var removedMessages = await grain.RemoveMessagesAsync(topic);
|
|
Assert.Equal(9, removedMessages.Count); // only 3 messages should be in the buffer
|
|
cluster.StopAllSilos();
|
|
}
|
|
}
|