48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
|
|
using Grpc.Net.Client;
|
||
|
|
using Robotico.Result.Errors;
|
||
|
|
using Xunit;
|
||
|
|
|
||
|
|
namespace Robotico.Nexus.Client.Tests;
|
||
|
|
|
||
|
|
public class NexusGrpcChannelFactoryTests
|
||
|
|
{
|
||
|
|
[Fact]
|
||
|
|
public void ResolveAddress_UsesHttps_WhenRequested()
|
||
|
|
{
|
||
|
|
NexusConnectionUriParts parsed = new(NexusUriSchemes.Graph, "myhost", 50051, null);
|
||
|
|
|
||
|
|
Assert.Equal("https://myhost:50051", NexusGrpcChannelFactory.ResolveAddress(parsed, useHttps: true));
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveAddress_UsesHttp_WhenPlaintext()
|
||
|
|
{
|
||
|
|
NexusConnectionUriParts parsed = new(NexusUriSchemes.Graph, "myhost", 50051, null);
|
||
|
|
|
||
|
|
Assert.Equal("http://myhost:50051", NexusGrpcChannelFactory.ResolveAddress(parsed, useHttps: false));
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void CreateChannel_Succeeds_ForPlaintextLoopback()
|
||
|
|
{
|
||
|
|
NexusConnectionUriParts parsed = new(NexusUriSchemes.Graph, "127.0.0.1", 50051, null);
|
||
|
|
|
||
|
|
Robotico.Result.Result<GrpcChannel> result = NexusGrpcChannelFactory.CreateChannel(parsed, material: null, useHttps: false);
|
||
|
|
|
||
|
|
Assert.True(result.IsSuccess(out GrpcChannel? channel, out _));
|
||
|
|
channel!.Dispose();
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void CreateChannel_Fails_WhenTlsMaterialFilesAreMissing()
|
||
|
|
{
|
||
|
|
NexusConnectionUriParts parsed = new(NexusUriSchemes.Graph, "127.0.0.1", 50051, null);
|
||
|
|
NexusTlsMaterial material = new("/nonexistent/ca.pem", "/nonexistent/cert.pem", "/nonexistent/key.pem");
|
||
|
|
|
||
|
|
Robotico.Result.Result<GrpcChannel> result = NexusGrpcChannelFactory.CreateChannel(parsed, material, useHttps: true);
|
||
|
|
|
||
|
|
Assert.True(result.IsError(out IError? error));
|
||
|
|
Assert.Equal(NexusErrors.TlsRejected, error!.Code);
|
||
|
|
}
|
||
|
|
}
|