64 lines
2.2 KiB
C#
Raw Normal View History

// Copyright (c) Microsoft Corporation. All rights reserved.
// MessagingTestFixture.cs
using Microsoft.AutoGen.Contracts;
namespace Microsoft.AutoGen.Core.Tests;
public sealed class MessagingTestFixture
{
private Dictionary<Type, object> AgentsTypeMap { get; } = new();
public InProcessRuntime Runtime { get; private set; } = new();
public ValueTask<AgentType> RegisterFactoryMapInstances<TAgent>(AgentType type, Func<AgentId, IAgentRuntime, ValueTask<TAgent>> factory)
where TAgent : IHostableAgent
{
Func<AgentId, IAgentRuntime, ValueTask<TAgent>> wrappedFactory = async (id, runtime) =>
{
TAgent agent = await factory(id, runtime);
this.GetAgentInstances<TAgent>()[id] = agent;
return agent;
};
return this.Runtime.RegisterAgentFactoryAsync(type, wrappedFactory);
}
public ValueTask RegisterDefaultSubscriptions<TAgentType>(AgentType type) where TAgentType : IHostableAgent
{
return this.Runtime.RegisterImplicitAgentSubscriptionsAsync<TAgentType>(type);
}
public Dictionary<AgentId, TAgent> GetAgentInstances<TAgent>() where TAgent : IHostableAgent
{
if (!AgentsTypeMap.TryGetValue(typeof(TAgent), out object? maybeAgentMap) ||
maybeAgentMap is not Dictionary<AgentId, TAgent> result)
{
this.AgentsTypeMap[typeof(TAgent)] = result = new Dictionary<AgentId, TAgent>();
}
return result;
}
public async ValueTask<object?> RunSendTestAsync(AgentId sendTarget, object message, string? messageId = null)
{
messageId ??= Guid.NewGuid().ToString();
await this.Runtime.StartAsync();
object? result = await this.Runtime.SendMessageAsync(message, sendTarget, messageId: messageId);
await this.Runtime.RunUntilIdleAsync();
return result;
}
public async ValueTask RunPublishTestAsync(TopicId sendTarget, object message, string? messageId = null)
{
messageId ??= Guid.NewGuid().ToString();
await this.Runtime.StartAsync();
await this.Runtime.PublishMessageAsync(message, sendTarget, messageId: messageId);
await this.Runtime.RunUntilIdleAsync();
}
}