Public Access
Let a session's transport say what it negotiated
ISshConnection and ISftpSession both carry Cipher now — the server-to-client algorithm off SSH.NET's own ConnectionInfo, captured once because a rekey is not an event that library raises — and TerminalWorkspace.GetSessionFacts hands that plus the host key's algorithm back per session, without ever handing over the connection itself. Nothing reads either yet; the status bar that will is the next commit.
This commit is contained in:
@@ -149,6 +149,31 @@ public sealed class TerminalWorkspaceTests
|
||||
workspace.IsSessionLive(second).ShouldBeTrue("closing one tab must not disturb another");
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// The shell's connect path reads these back once, right after <see cref="TerminalWorkspace.OpenSessionAsync"/>
|
||||
/// returns, to fill in the status bar's cipher and host-key facts — see <c>VaultViewModel.ConnectAndAnnounceAsync</c>.
|
||||
/// Asserted the same way <see cref="LivenessIsAnsweredPerSession"/> asserts liveness: per session, and
|
||||
/// null rather than thrown for an id this workspace never issued.
|
||||
/// </remarks>
|
||||
[Fact]
|
||||
public async Task SessionFactsAreReadPerSession()
|
||||
{
|
||||
var connections = new FakeConnectionFactory();
|
||||
|
||||
await using var workspace = CreateWorkspace(connections);
|
||||
|
||||
var sessionId = await workspace.OpenSessionAsync(
|
||||
Request(), TerminalSize.Default, TestContext.Current.CancellationToken);
|
||||
|
||||
var facts = workspace.GetSessionFacts(sessionId).ShouldNotBeNull();
|
||||
var connection = connections.Connections.ShouldHaveSingleItem();
|
||||
|
||||
facts.Cipher.ShouldBe(connection.Cipher);
|
||||
facts.HostKeyAlgorithm.ShouldBe(connection.HostKey.Algorithm);
|
||||
|
||||
workspace.GetSessionFacts(9999).ShouldBeNull("this workspace never issued that id");
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// Inserting a snippet has to be able to say whether it arrived, and the transport cannot: it drops
|
||||
|
||||
Reference in New Issue
Block a user