mishima-nexus-client-csharp/tests/Robotico.Nexus.Client.Tests/Relational/NexusRelationalClientTests.cs

71 lines
2.7 KiB
C#

using Robotico.Nexus.Client.Relational;
using Robotico.Nexus.Client.Tests.TestSupport;
using Robotico.Result.Errors;
using Xunit;
namespace Robotico.Nexus.Client.Tests.Relational;
public class NexusRelationalClientTests : IAsyncLifetime
{
private NexusTestHost _host = null!;
private NexusClient _client = null!;
private NexusRelationalClient _relationalClient = null!;
public async Task InitializeAsync()
{
_host = await NexusTestHost.StartAsync();
Robotico.Result.Result<NexusClient> connected = NexusClient.Connect(_host.ConnectionUri(NexusUriSchemes.Relational));
Assert.True(connected.IsSuccess(out NexusClient? client, out _));
_client = client!;
Robotico.Result.Result<NexusRelationalClient> created = _client.CreateRelationalClient();
Assert.True(created.IsSuccess(out NexusRelationalClient? relationalClient, out _));
_relationalClient = relationalClient!;
}
public async Task DisposeAsync()
{
_client.Dispose();
await _host.DisposeAsync();
}
[Fact]
public void CheckHealth_Succeeds()
{
Robotico.Result.Result result = _relationalClient.CheckHealth();
Assert.True(result.IsSuccess());
}
[Fact]
public void CheckHealth_Fails_WhenEngineReportsFailure()
{
Robotico.Result.Result<NexusClient> connected = NexusClient.Connect(
_host.ConnectionUri(NexusUriSchemes.Relational, FakeNexusTriggers.PingReportsFailure));
Assert.True(connected.IsSuccess(out NexusClient? client, out _));
using NexusClient failingClient = client!;
Robotico.Result.Result<NexusRelationalClient> created = failingClient.CreateRelationalClient();
Assert.True(created.IsSuccess(out NexusRelationalClient? failingRelationalClient, out _));
Robotico.Result.Result result = failingRelationalClient!.CheckHealth();
Assert.True(result.IsError(out IError? error));
Assert.Equal(NexusErrors.Unavailable, error!.Code);
}
[Fact]
public void CheckHealth_Fails_WhenTransportThrows()
{
Robotico.Result.Result<NexusClient> connected = NexusClient.Connect(
_host.ConnectionUri(NexusUriSchemes.Relational, FakeNexusTriggers.PingThrows));
Assert.True(connected.IsSuccess(out NexusClient? client, out _));
using NexusClient failingClient = client!;
Robotico.Result.Result<NexusRelationalClient> created = failingClient.CreateRelationalClient();
Assert.True(created.IsSuccess(out NexusRelationalClient? failingRelationalClient, out _));
Robotico.Result.Result result = failingRelationalClient!.CheckHealth();
Assert.True(result.IsError(out IError? error));
Assert.Equal(NexusErrors.Unavailable, error!.Code);
}
}