fix(galaxy): unify IsConnected with _connected guard; AttachForTests marks connected (review)
This commit is contained in:
@@ -40,8 +40,12 @@ public sealed class GalaxyMxSession : IAsyncDisposable
|
||||
_logger = logger ?? NullLogger.Instance;
|
||||
}
|
||||
|
||||
/// <summary>Gets a value indicating whether the session is connected.</summary>
|
||||
public bool IsConnected => _session is not null;
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a session is currently established. Set <c>true</c> on a
|
||||
/// successful connect/attach and <c>false</c> after teardown/dispose — tracks the same
|
||||
/// <c>_connected</c> flag that <see cref="ConnectAsync"/> guards on, so the two never disagree.
|
||||
/// </summary>
|
||||
public bool IsConnected => _connected;
|
||||
|
||||
/// <summary>
|
||||
/// Server-side handle returned by MXAccess <c>Register</c>. Zero before
|
||||
@@ -122,6 +126,7 @@ public sealed class GalaxyMxSession : IAsyncDisposable
|
||||
ObjectDisposedException.ThrowIf(_disposed, this);
|
||||
_session = session ?? throw new ArgumentNullException(nameof(session));
|
||||
_serverHandle = serverHandle;
|
||||
_connected = true; // an attached session means connected — keeps IsConnected + the ConnectAsync no-op guard consistent.
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+29
@@ -98,9 +98,38 @@ public sealed class GalaxyMxSessionReconnectTests
|
||||
await Should.ThrowAsync<InvalidOperationException>(
|
||||
async () => await session.ConnectAsync(null!, CancellationToken.None));
|
||||
openCount.ShouldBe(1);
|
||||
session.IsConnected.ShouldBeFalse(); // _connected must NOT be latched by the failed attempt.
|
||||
|
||||
// The failed first attempt must not have latched _connected — the retry reaches the body.
|
||||
await session.ConnectAsync(null!, CancellationToken.None);
|
||||
openCount.ShouldBe(2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="GalaxyMxSession.IsConnected"/> tracks the <c>_connected</c> guard across the
|
||||
/// full lifecycle: false when fresh, true after connect, still true after a recreate, and
|
||||
/// false again after dispose.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task IsConnected_reflects_connect_recreate_and_dispose()
|
||||
{
|
||||
var session = NewSession();
|
||||
var openCount = 0;
|
||||
session.OpenAndRegisterOverrideForTests = _ =>
|
||||
{
|
||||
openCount++;
|
||||
return Task.CompletedTask;
|
||||
};
|
||||
|
||||
session.IsConnected.ShouldBeFalse();
|
||||
|
||||
await session.ConnectAsync(null!, CancellationToken.None);
|
||||
session.IsConnected.ShouldBeTrue();
|
||||
|
||||
await session.RecreateAsync(null!, CancellationToken.None);
|
||||
session.IsConnected.ShouldBeTrue();
|
||||
|
||||
await session.DisposeAsync();
|
||||
session.IsConnected.ShouldBeFalse();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user