77 lines
2.5 KiB
C#
77 lines
2.5 KiB
C#
using MxGateway.Contracts.Proto;
|
|
using MxGateway.Server.Grpc;
|
|
|
|
namespace MxGateway.Tests.Gateway.Grpc;
|
|
|
|
public sealed class MxAccessGrpcMapperTests
|
|
{
|
|
[Fact]
|
|
public void MapCommand_ClonesMethodSpecificPayloadForWorkerBoundary()
|
|
{
|
|
MxAccessGrpcMapper mapper = new();
|
|
MxCommandRequest request = new()
|
|
{
|
|
SessionId = "session-1",
|
|
Command = new MxCommand
|
|
{
|
|
Kind = MxCommandKind.Write,
|
|
Write = new WriteCommand
|
|
{
|
|
ServerHandle = 10,
|
|
ItemHandle = 20,
|
|
UserId = 30,
|
|
Value = new MxValue
|
|
{
|
|
DataType = MxDataType.String,
|
|
StringValue = "value",
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
WorkerCommand workerCommand = mapper.MapCommand(request);
|
|
request.Command.Write.Value.StringValue = "changed";
|
|
|
|
Assert.Equal(MxCommandKind.Write, workerCommand.Command.Kind);
|
|
Assert.Equal("value", workerCommand.Command.Write.Value.StringValue);
|
|
Assert.NotNull(workerCommand.EnqueueTimestamp);
|
|
}
|
|
|
|
[Fact]
|
|
public void MapCommandReply_PreservesHresultStatusesAndPayload()
|
|
{
|
|
const int hresult = unchecked((int)0x80070005);
|
|
WorkerCommandReply workerReply = new()
|
|
{
|
|
Reply = new MxCommandReply
|
|
{
|
|
SessionId = "session-1",
|
|
Kind = MxCommandKind.Register,
|
|
ProtocolStatus = MxAccessGrpcMapper.Ok(),
|
|
Hresult = hresult,
|
|
Register = new RegisterReply { ServerHandle = 50 },
|
|
},
|
|
};
|
|
workerReply.Reply.Statuses.Add(new MxStatusProxy
|
|
{
|
|
Success = 0,
|
|
Category = MxStatusCategory.SecurityError,
|
|
DiagnosticText = "denied",
|
|
});
|
|
|
|
MxCommandReply publicReply = new MxAccessGrpcMapper().MapCommandReply(workerReply);
|
|
|
|
Assert.Equal(hresult, publicReply.Hresult);
|
|
Assert.Equal(50, publicReply.Register.ServerHandle);
|
|
Assert.Equal("denied", Assert.Single(publicReply.Statuses).DiagnosticText);
|
|
}
|
|
|
|
[Fact]
|
|
public void MapCommandReply_WhenWorkerReplyMissing_ReturnsProtocolViolationReply()
|
|
{
|
|
MxCommandReply publicReply = new MxAccessGrpcMapper().MapCommandReply(new WorkerCommandReply());
|
|
|
|
Assert.Equal(ProtocolStatusCode.ProtocolViolation, publicReply.ProtocolStatus.Code);
|
|
}
|
|
}
|