// Copyright (c) Microsoft Corporation. All rights reserved. // GrpcAgentServiceFixture.cs using Grpc.Core; using Microsoft.AutoGen.Protobuf; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AutoGen.Core.Grpc.Tests; public sealed class GrpcAgentServiceCollector { public List AddSubscriptionRequests { get; } = new(); public List RemoveSubscriptionRequests { get; } = new(); public List RegisterAgentTypeRequests { get; } = new(); internal void Clear() { this.AddSubscriptionRequests.Clear(); this.RemoveSubscriptionRequests.Clear(); this.RegisterAgentTypeRequests.Clear(); } } /// /// This fixture is largely just a loopback as we are testing the client side logic of the GrpcAgentRuntime in isolation from the rest of the system. /// public class GrpcAgentServiceFixture : AgentRpc.AgentRpcBase { private GrpcAgentServiceCollector requestCollector; public GrpcAgentServiceFixture(IServiceProvider serviceProvider) { this.requestCollector = serviceProvider.GetService() ?? new(); } public override async Task OpenChannel(IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context) { try { var workerProcess = new TestGrpcWorkerConnection(requestStream, responseStream, context); await workerProcess.Connect().ConfigureAwait(true); } catch { if (context.CancellationToken.IsCancellationRequested) { return; } throw; } } public List AddSubscriptionRequests => this.requestCollector.AddSubscriptionRequests; public override async Task AddSubscription(AddSubscriptionRequest request, ServerCallContext context) { this.AddSubscriptionRequests.Add(request); return new AddSubscriptionResponse(); } public List RemoveSubscriptionRequests => this.requestCollector.RemoveSubscriptionRequests; public override async Task RemoveSubscription(RemoveSubscriptionRequest request, ServerCallContext context) { this.RemoveSubscriptionRequests.Add(request); return new RemoveSubscriptionResponse(); } public override async Task GetSubscriptions(GetSubscriptionsRequest request, ServerCallContext context) => new GetSubscriptionsResponse { }; public List RegisterAgentTypeRequests => this.requestCollector.RegisterAgentTypeRequests; public override async Task RegisterAgent(RegisterAgentTypeRequest request, ServerCallContext context) { this.RegisterAgentTypeRequests.Add(request); return new RegisterAgentTypeResponse(); } }