mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 09:15:47 +00:00
933613e31c
* Update to MSTest 4 * fix TestMethodForPlatformAttribute replace Execute with ExecuteAsync and fix MSTEST0057 https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0057 (link currently dead) * fix compilation error * fix MSTEST0037 https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0037 * fix MSTEST0052 https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0052 * fix MSTEST0045 Fixing this properly would require the tests to respect testContext.CancellationToken. I'm not sure this is worth fixing or how to even do it for the sync methods. https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0045 * fix MSTEST0001 I assume that parallelization would break a lot of stuff. https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0001 * Workaround for new Sonar warnings because of MSTest4 * revert analyzer fixes in OrderedDictionaryTest * use custom sync console logger for MSTest to work around https://github.com/microsoft/testfx/issues/6457 * remove redundant args --------- Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com> Co-authored-by: Rob Hague <rob.hague00@gmail.com>
223 lines
7.1 KiB
C#
223 lines
7.1 KiB
C#
using System.Diagnostics;
|
|
using System.Globalization;
|
|
using System.Net.Sockets;
|
|
using System.Threading;
|
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
using Renci.SshNet.Common;
|
|
using Renci.SshNet.Messages.Transport;
|
|
using Renci.SshNet.Tests.Common;
|
|
|
|
namespace Renci.SshNet.Tests.Classes
|
|
{
|
|
[TestClass]
|
|
public class SessionTest_Connected_ServerSendsDisconnectMessage : SessionTest_ConnectedBase
|
|
{
|
|
private byte[] _packet;
|
|
private DisconnectMessage _disconnectMessage;
|
|
|
|
protected override void SetupData()
|
|
{
|
|
base.SetupData();
|
|
|
|
_disconnectMessage = new DisconnectMessage(DisconnectReason.ServiceNotAvailable, "Not today!");
|
|
_packet = _disconnectMessage.GetPacket(8, null);
|
|
}
|
|
|
|
protected override void Act()
|
|
{
|
|
_ = ServerSocket.Send(_packet, 4, _packet.Length - 4, SocketFlags.None);
|
|
|
|
// give session some time to process packet
|
|
Thread.Sleep(200);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void IsConnectedShouldReturnFalse()
|
|
{
|
|
Assert.IsFalse(Session.IsConnected);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DisconnectShouldFinishImmediately()
|
|
{
|
|
var stopwatch = new Stopwatch();
|
|
stopwatch.Start();
|
|
|
|
Session.Disconnect();
|
|
|
|
stopwatch.Stop();
|
|
Assert.IsLessThan(500, stopwatch.ElapsedMilliseconds);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DisconnectedIsRaisedOnce()
|
|
{
|
|
Assert.HasCount(1, DisconnectedRegister);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DisconnectReceivedIsRaisedOnce()
|
|
{
|
|
Assert.HasCount(1, DisconnectReceivedRegister);
|
|
|
|
var disconnectMessage = DisconnectReceivedRegister[0].Message;
|
|
Assert.IsNotNull(disconnectMessage);
|
|
Assert.AreEqual(_disconnectMessage.Description, disconnectMessage.Description);
|
|
Assert.AreEqual("en", disconnectMessage.Language);
|
|
Assert.AreEqual(_disconnectMessage.ReasonCode, disconnectMessage.ReasonCode);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ErrorOccurredIsNeverRaised()
|
|
{
|
|
Assert.IsEmpty(ErrorOccurredRegister, ErrorOccurredRegister.AsString());
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DisposeShouldFinishImmediately()
|
|
{
|
|
var stopwatch = new Stopwatch();
|
|
stopwatch.Start();
|
|
|
|
Session.Dispose();
|
|
|
|
stopwatch.Stop();
|
|
Assert.IsLessThan(500, stopwatch.ElapsedMilliseconds);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ReceiveOnServerSocketShouldReturnZero()
|
|
{
|
|
var buffer = new byte[1];
|
|
|
|
var actual = ServerSocket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
|
|
|
|
Assert.AreEqual(0, actual);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void SendMessageShouldThrowSshConnectionException()
|
|
{
|
|
try
|
|
{
|
|
Session.SendMessage(new IgnoreMessage());
|
|
Assert.Fail();
|
|
}
|
|
catch (SshConnectionException ex)
|
|
{
|
|
Assert.AreEqual(DisconnectReason.None, ex.DisconnectReason);
|
|
Assert.IsNull(ex.InnerException);
|
|
Assert.AreEqual("Client not connected.", ex.Message);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_MessageListenerCompletedShouldBeSignaled()
|
|
{
|
|
var session = (ISession)Session;
|
|
|
|
Assert.IsNotNull(session.MessageListenerCompleted);
|
|
Assert.IsTrue(session.MessageListenerCompleted.WaitOne());
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_SendMessageShouldThrowSshConnectionException()
|
|
{
|
|
var session = (ISession)Session;
|
|
|
|
try
|
|
{
|
|
session.SendMessage(new IgnoreMessage());
|
|
Assert.Fail();
|
|
}
|
|
catch (SshConnectionException ex)
|
|
{
|
|
Assert.AreEqual(DisconnectReason.None, ex.DisconnectReason);
|
|
Assert.IsNull(ex.InnerException);
|
|
Assert.AreEqual("Client not connected.", ex.Message);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_TrySendMessageShouldReturnFalse()
|
|
{
|
|
var session = (ISession)Session;
|
|
|
|
var actual = session.TrySendMessage(new IgnoreMessage());
|
|
|
|
Assert.IsFalse(actual);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_WaitOnHandle_WaitHandle_ShouldThrowSshConnectionExceptionDetailingDisconnectReason()
|
|
{
|
|
var session = (ISession)Session;
|
|
var waitHandle = new ManualResetEvent(false);
|
|
|
|
try
|
|
{
|
|
session.WaitOnHandle(waitHandle);
|
|
Assert.Fail();
|
|
}
|
|
catch (SshConnectionException ex)
|
|
{
|
|
Assert.AreEqual(DisconnectReason.ServiceNotAvailable, ex.DisconnectReason);
|
|
Assert.IsNull(ex.InnerException);
|
|
Assert.AreEqual(string.Format(CultureInfo.InvariantCulture,
|
|
"The connection was closed by the server: {0} ({1}).",
|
|
_disconnectMessage.Description,
|
|
_disconnectMessage.ReasonCode),
|
|
ex.Message);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_WaitOnHandle_WaitHandleAndTimeout_ShouldThrowSshConnectionExceptionDetailingDisconnectReason()
|
|
{
|
|
var session = (ISession)Session;
|
|
var waitHandle = new ManualResetEvent(false);
|
|
|
|
try
|
|
{
|
|
session.WaitOnHandle(waitHandle, Timeout.InfiniteTimeSpan);
|
|
Assert.Fail();
|
|
}
|
|
catch (SshConnectionException ex)
|
|
{
|
|
Assert.AreEqual(DisconnectReason.ServiceNotAvailable, ex.DisconnectReason);
|
|
Assert.IsNull(ex.InnerException);
|
|
Assert.AreEqual(string.Format(CultureInfo.InvariantCulture,
|
|
"The connection was closed by the server: {0} ({1}).",
|
|
_disconnectMessage.Description,
|
|
_disconnectMessage.ReasonCode),
|
|
ex.Message);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_TryWait_WaitHandleAndTimeout_ShouldReturnDisconnected()
|
|
{
|
|
var session = (ISession)Session;
|
|
var waitHandle = new ManualResetEvent(false);
|
|
|
|
var result = session.TryWait(waitHandle, Timeout.InfiniteTimeSpan);
|
|
|
|
Assert.AreEqual(WaitResult.Disconnected, result);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ISession_TryWait_WaitHandleAndTimeoutAndException_ShouldReturnDisconnected()
|
|
{
|
|
var session = (ISession)Session;
|
|
var waitHandle = new ManualResetEvent(false);
|
|
|
|
var result = session.TryWait(waitHandle, Timeout.InfiniteTimeSpan, out var exception);
|
|
|
|
Assert.AreEqual(WaitResult.Disconnected, result);
|
|
Assert.IsNull(exception);
|
|
}
|
|
}
|
|
}
|