71 lines
2.7 KiB
C#
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);
|
||
|
|
}
|
||
|
|
}
|