feat: add resilient reconnect and catch-up replay
This commit is contained in:
@@ -114,6 +114,38 @@ public sealed class SuiteLinkTcpTransportTests
|
||||
async () => await listener.AcceptTcpClientAsync(secondAcceptCts.Token));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ResetConnectionAsync_AfterConnect_AllowsReconnect()
|
||||
{
|
||||
using var listener = new TcpListener(IPAddress.Loopback, 0);
|
||||
listener.Start();
|
||||
|
||||
var endpoint = (IPEndPoint)listener.LocalEndpoint;
|
||||
await using var transport = new SuiteLinkTcpTransport();
|
||||
|
||||
await transport.ConnectAsync(endpoint.Address.ToString(), endpoint.Port);
|
||||
using var accepted1 = await listener.AcceptTcpClientAsync();
|
||||
|
||||
await transport.ResetConnectionAsync();
|
||||
Assert.False(transport.IsConnected);
|
||||
|
||||
await transport.ConnectAsync(endpoint.Address.ToString(), endpoint.Port);
|
||||
using var accepted2 = await listener.AcceptTcpClientAsync();
|
||||
|
||||
Assert.True(transport.IsConnected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ResetConnectionAsync_LeaveOpenTrue_DoesNotDisposeInjectedStream()
|
||||
{
|
||||
var stream = new TrackingStream();
|
||||
await using var transport = new SuiteLinkTcpTransport(stream, leaveOpen: true);
|
||||
|
||||
await transport.ResetConnectionAsync();
|
||||
|
||||
Assert.False(stream.WasDisposed);
|
||||
}
|
||||
|
||||
private sealed class PartialReadStream : Stream
|
||||
{
|
||||
private readonly MemoryStream _inner;
|
||||
|
||||
Reference in New Issue
Block a user