mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 09:15:47 +00:00
bcaf354ccb
* Significantly improved performance and fixed bug with ShellStream's Expect methods. * Fix whitespace. * Fixed test. * Improve ShellStream Expect * Fixed typo. * Doubled expectBuffer's default size and added a large expect test. * Added guard clauses to ShellStream constructor and adjusted Common_CreateMoreChannelsThanMaxSessions test. * Fixed XMLDoc spelling mistakes. --------- Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com> Co-authored-by: Wojciech Nagórski <wojciech.nagorski@intel.com>
127 lines
4.5 KiB
C#
127 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using Moq;
|
|
using Renci.SshNet.Channels;
|
|
using Renci.SshNet.Common;
|
|
|
|
namespace Renci.SshNet.Tests.Classes
|
|
{
|
|
[TestClass]
|
|
public class ServiceFactoryTest_CreateShellStream_SendShellRequestThrowsException
|
|
{
|
|
private Mock<ISession> _sessionMock;
|
|
private Mock<IConnectionInfo> _connectionInfoMock;
|
|
private Mock<IChannelSession> _channelSessionMock;
|
|
private ServiceFactory _serviceFactory;
|
|
private string _terminalName;
|
|
private uint _columns;
|
|
private uint _rows;
|
|
private uint _width;
|
|
private uint _height;
|
|
private IDictionary<TerminalModes, uint> _terminalModeValues;
|
|
private int _bufferSize;
|
|
private int _expectSize;
|
|
private SshException _sendShellRequestException;
|
|
private SshException _actualException;
|
|
|
|
private void SetupData()
|
|
{
|
|
var random = new Random();
|
|
|
|
_terminalName = random.Next().ToString();
|
|
_columns = (uint) random.Next();
|
|
_rows = (uint) random.Next();
|
|
_width = (uint) random.Next();
|
|
_height = (uint) random.Next();
|
|
_terminalModeValues = new Dictionary<TerminalModes, uint>();
|
|
_bufferSize = random.Next();
|
|
_expectSize = _bufferSize;
|
|
_sendShellRequestException = new SshException();
|
|
_actualException = null;
|
|
}
|
|
|
|
private void CreateMocks()
|
|
{
|
|
_sessionMock = new Mock<ISession>(MockBehavior.Strict);
|
|
_connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
|
|
_channelSessionMock = new Mock<IChannelSession>(MockBehavior.Strict);
|
|
}
|
|
|
|
private void SetupMocks()
|
|
{
|
|
var sequence = new MockSequence();
|
|
|
|
_sessionMock.InSequence(sequence)
|
|
.Setup(p => p.ConnectionInfo)
|
|
.Returns(_connectionInfoMock.Object);
|
|
_connectionInfoMock.InSequence(sequence)
|
|
.Setup(p => p.Encoding)
|
|
.Returns(new UTF8Encoding());
|
|
_sessionMock.InSequence(sequence)
|
|
.Setup(p => p.CreateChannelSession())
|
|
.Returns(_channelSessionMock.Object);
|
|
_channelSessionMock.InSequence(sequence)
|
|
.Setup(p => p.Open());
|
|
_channelSessionMock.InSequence(sequence)
|
|
.Setup(p => p.SendPseudoTerminalRequest(_terminalName, _columns, _rows, _width, _height, _terminalModeValues))
|
|
.Returns(true);
|
|
_channelSessionMock.InSequence(sequence)
|
|
.Setup(p => p.SendShellRequest())
|
|
.Throws(_sendShellRequestException);
|
|
_channelSessionMock.InSequence(sequence)
|
|
.Setup(p => p.Dispose());
|
|
}
|
|
|
|
private void Arrange()
|
|
{
|
|
SetupData();
|
|
CreateMocks();
|
|
SetupMocks();
|
|
|
|
_serviceFactory = new ServiceFactory();
|
|
}
|
|
|
|
[TestInitialize]
|
|
public void Initialize()
|
|
{
|
|
Arrange();
|
|
Act();
|
|
}
|
|
|
|
private void Act()
|
|
{
|
|
try
|
|
{
|
|
_serviceFactory.CreateShellStream(_sessionMock.Object,
|
|
_terminalName,
|
|
_columns,
|
|
_rows,
|
|
_width,
|
|
_height,
|
|
_terminalModeValues,
|
|
_bufferSize,
|
|
_expectSize);
|
|
Assert.Fail();
|
|
}
|
|
catch (SshException ex)
|
|
{
|
|
_actualException = ex;
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CreateShellStreamShouldRethrowExceptionThrownBySendShellRequestOnChannelSession()
|
|
{
|
|
Assert.IsNotNull(_actualException);
|
|
Assert.AreSame(_sendShellRequestException, _actualException);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DisposeOnChannelSessionShouldHaveBeenInvokedOnce()
|
|
{
|
|
_channelSessionMock.Verify(p => p.Dispose(), Times.Once);
|
|
}
|
|
}
|
|
} |