87 lines
2.7 KiB
C#
87 lines
2.7 KiB
C#
using Grpc.Core;
|
|
using MxGateway.Contracts.Proto;
|
|
|
|
namespace MxGateway.Client.Tests;
|
|
|
|
internal sealed class FakeGatewayTransport(MxGatewayClientOptions options) : IMxGatewayClientTransport
|
|
{
|
|
private readonly Queue<MxCommandReply> _invokeReplies = new();
|
|
private readonly List<MxEvent> _events = [];
|
|
|
|
public MxGatewayClientOptions Options { get; } = options;
|
|
|
|
public MxAccessGateway.MxAccessGatewayClient? RawClient => null;
|
|
|
|
public List<(OpenSessionRequest Request, CallOptions CallOptions)> OpenSessionCalls { get; } = [];
|
|
|
|
public List<(CloseSessionRequest Request, CallOptions CallOptions)> CloseSessionCalls { get; } = [];
|
|
|
|
public List<(MxCommandRequest Request, CallOptions CallOptions)> InvokeCalls { get; } = [];
|
|
|
|
public List<(StreamEventsRequest Request, CallOptions CallOptions)> StreamEventsCalls { get; } = [];
|
|
|
|
public OpenSessionReply OpenSessionReply { get; set; } = new()
|
|
{
|
|
SessionId = "session-fixture",
|
|
BackendName = "mxaccess-worker",
|
|
GatewayProtocolVersion = 1,
|
|
WorkerProtocolVersion = 1,
|
|
ProtocolStatus = new ProtocolStatus { Code = ProtocolStatusCode.Ok },
|
|
};
|
|
|
|
public CloseSessionReply CloseSessionReply { get; set; } = new()
|
|
{
|
|
SessionId = "session-fixture",
|
|
FinalState = SessionState.Closed,
|
|
ProtocolStatus = new ProtocolStatus { Code = ProtocolStatusCode.Ok },
|
|
};
|
|
|
|
public Task<OpenSessionReply> OpenSessionAsync(
|
|
OpenSessionRequest request,
|
|
CallOptions callOptions)
|
|
{
|
|
OpenSessionCalls.Add((request, callOptions));
|
|
return Task.FromResult(OpenSessionReply);
|
|
}
|
|
|
|
public Task<CloseSessionReply> CloseSessionAsync(
|
|
CloseSessionRequest request,
|
|
CallOptions callOptions)
|
|
{
|
|
CloseSessionCalls.Add((request, callOptions));
|
|
return Task.FromResult(CloseSessionReply);
|
|
}
|
|
|
|
public Task<MxCommandReply> InvokeAsync(
|
|
MxCommandRequest request,
|
|
CallOptions callOptions)
|
|
{
|
|
InvokeCalls.Add((request, callOptions));
|
|
return Task.FromResult(_invokeReplies.Dequeue());
|
|
}
|
|
|
|
public async IAsyncEnumerable<MxEvent> StreamEventsAsync(
|
|
StreamEventsRequest request,
|
|
CallOptions callOptions)
|
|
{
|
|
StreamEventsCalls.Add((request, callOptions));
|
|
|
|
foreach (MxEvent gatewayEvent in _events)
|
|
{
|
|
callOptions.CancellationToken.ThrowIfCancellationRequested();
|
|
await Task.Yield();
|
|
yield return gatewayEvent;
|
|
}
|
|
}
|
|
|
|
public void AddInvokeReply(MxCommandReply reply)
|
|
{
|
|
_invokeReplies.Enqueue(reply);
|
|
}
|
|
|
|
public void AddEvent(MxEvent gatewayEvent)
|
|
{
|
|
_events.Add(gatewayEvent);
|
|
}
|
|
}
|