mirror of
https://github.com/microsoft/autogen.git
synced 2025-11-10 23:05:02 +00:00
Unlike with the InProcessRuntime, there is a two-phase initialization, first when AgentsApp is built (when initial agents are registered) and when it StartAsync()s and connects to the Gateway. Unfortunately, it is possible to attempt to send direct RPC calls to the Gateway before the message channel is opened; in this case, the Gateway has no connected client corresponding to the RPC's clientId, and falls over. The fix is to defer registering agents and subscriptions with the gateway until after the connection is established after .StartAsync() is called.
51 lines
2.0 KiB
C#
51 lines
2.0 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// GrpcAgentRuntimeTests.cs
|
|
|
|
using FluentAssertions;
|
|
using Microsoft.AutoGen.Contracts;
|
|
using Microsoft.Extensions.Logging;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.AutoGen.Core.Grpc.Tests;
|
|
|
|
[Trait("Category", "GRPC")]
|
|
public class GrpcAgentRuntimeTests : TestBase
|
|
{
|
|
[Fact]
|
|
public async Task GatewayShouldNotReceiveRegistrationsUntilRuntimeStart()
|
|
{
|
|
var fixture = new GrpcAgentRuntimeFixture();
|
|
var runtime = (GrpcAgentRuntime)await fixture.StartAsync(startRuntime: false, registerDefaultAgent: false);
|
|
|
|
Logger<BaseAgent> logger = new(new LoggerFactory());
|
|
|
|
await runtime.RegisterAgentFactoryAsync("MyAgent", async (id, runtime) =>
|
|
{
|
|
return await ValueTask.FromResult(new SubscribedProtobufAgent(id, runtime, logger));
|
|
});
|
|
await runtime.RegisterImplicitAgentSubscriptionsAsync<SubscribedProtobufAgent>("MyAgent");
|
|
|
|
fixture.GrpcRequestCollector.RegisterAgentTypeRequests.Should().BeEmpty();
|
|
fixture.GrpcRequestCollector.AddSubscriptionRequests.Should().BeEmpty();
|
|
|
|
await fixture.AgentsApp!.StartAsync().ConfigureAwait(true);
|
|
|
|
fixture.GrpcRequestCollector.RegisterAgentTypeRequests.Should().NotBeEmpty();
|
|
fixture.GrpcRequestCollector.RegisterAgentTypeRequests.Single().Type.Should().Be("MyAgent");
|
|
fixture.GrpcRequestCollector.AddSubscriptionRequests.Should().NotBeEmpty();
|
|
|
|
fixture.GrpcRequestCollector.Clear();
|
|
|
|
await runtime.RegisterAgentFactoryAsync("MyAgent2", async (id, runtime) =>
|
|
{
|
|
return await ValueTask.FromResult(new TestProtobufAgent(id, runtime, logger));
|
|
});
|
|
|
|
fixture.GrpcRequestCollector.RegisterAgentTypeRequests.Should().NotBeEmpty();
|
|
fixture.GrpcRequestCollector.RegisterAgentTypeRequests.Single().Type.Should().Be("MyAgent2");
|
|
fixture.GrpcRequestCollector.AddSubscriptionRequests.Should().BeEmpty();
|
|
|
|
fixture.Dispose();
|
|
}
|
|
}
|