diff --git a/src/Renci.SshNet.Tests/Classes/ForwardedPortDynamicTest_Started_SocketVersionNotSupported.cs b/src/Renci.SshNet.Tests/Classes/ForwardedPortDynamicTest_Started_SocketVersionNotSupported.cs index ec78b4fe..3f07f5ba 100644 --- a/src/Renci.SshNet.Tests/Classes/ForwardedPortDynamicTest_Started_SocketVersionNotSupported.cs +++ b/src/Renci.SshNet.Tests/Classes/ForwardedPortDynamicTest_Started_SocketVersionNotSupported.cs @@ -1,147 +1,167 @@ -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -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 ForwardedPortDynamicTest_Started_SocketVersionNotSupported - { - private Mock _sessionMock; - private Mock _channelMock; - private Mock _connectionInfoMock; - private ForwardedPortDynamic _forwardedPort; - private Socket _client; - private IList _closingRegister; - private IList _exceptionRegister; - private int _bytesReceived; - - [TestInitialize] - public void Initialize() - { - Arrange(); - Act(); - } - - [TestCleanup] - public void Cleanup() - { - if (_forwardedPort != null && _forwardedPort.IsStarted) - { - _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); - _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(5)); - _forwardedPort.Stop(); - } - if (_client != null) - { - if (_client.Connected) - { - _client.Shutdown(SocketShutdown.Both); - _client.Close(); - _client = null; - } - } - } - - private void Arrange() - { - _closingRegister = new List(); - _exceptionRegister = new List(); - - _sessionMock = new Mock(MockBehavior.Strict); - _channelMock = new Mock(MockBehavior.Strict); - _connectionInfoMock = new Mock(MockBehavior.Strict); - - _sessionMock.Setup(p => p.IsConnected).Returns(true); - _sessionMock.Setup(p => p.CreateChannelDirectTcpip()).Returns(_channelMock.Object); - _channelMock.Setup(p => p.Close()); - _channelMock.Setup(p => p.Dispose()); - - _forwardedPort = new ForwardedPortDynamic(8122); - _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args); - _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args); - _forwardedPort.Session = _sessionMock.Object; - _forwardedPort.Start(); - - var endPoint = new IPEndPoint(IPAddress.Loopback, 8122); - - _client = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); - _client.Connect(endPoint); - } - - private void Act() - { - var buffer = new byte[] {0x07}; - _client.Send(buffer, 0, buffer.Length, SocketFlags.None); - _bytesReceived = _client.Receive(buffer, 0, buffer.Length, SocketFlags.None); - } - - [TestMethod] - public void SocketShouldBeConnected() - { - Assert.IsTrue(_client.Connected); - } - - [TestMethod] - public void ForwardedPortShouldShutdownSendOnSocket() - { - Assert.AreEqual(0, _bytesReceived); - } - - [TestMethod] - public void ClosingShouldNotHaveFired() - { - Assert.AreEqual(0, _closingRegister.Count); - } - - [TestMethod] - public void ExceptionShouldHaveFiredOnce() - { - Assert.AreEqual(1, _exceptionRegister.Count, GetExceptions()); - - var exception = _exceptionRegister[0].Exception; - Assert.IsNotNull(exception); - var notSupportedException = exception as NotSupportedException; - Assert.IsNotNull(notSupportedException, exception.ToString()); - Assert.AreEqual("SOCKS version 7 is not supported.", notSupportedException.Message); - } - - [TestMethod] - public void CreateChannelDirectTcpipOnSessionShouldBeInvokedOnce() - { - _sessionMock.Verify(p => p.CreateChannelDirectTcpip(), Times.Once); - } - - [TestMethod] - public void CloseOnChannelShouldBeInvokedOnce() - { - _channelMock.Verify(p => p.Close(), Times.Once); - } - - [TestMethod] - public void DisposeOnChannelShouldBeInvokedOnce() - { - _channelMock.Verify(p => p.Dispose(), Times.Once); - } - - private string GetExceptions() - { - var sb = new StringBuilder(); - - foreach (var exceptionEventArgs in _exceptionRegister) - { - if (sb.Length > 0) - sb.AppendLine(); - sb.Append(exceptionEventArgs.Exception); - } - - return sb.ToString(); - } - } -} +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +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 ForwardedPortDynamicTest_Started_SocketVersionNotSupported + { + private Mock _sessionMock; + private Mock _channelMock; + private Mock _connectionInfoMock; + private ForwardedPortDynamic _forwardedPort; + private Socket _client; + private IList _closingRegister; + private IList _exceptionRegister; + private TimeSpan _connectionTimeout; + + [TestInitialize] + public void Initialize() + { + Arrange(); + Act(); + } + + [TestCleanup] + public void Cleanup() + { + if (_forwardedPort != null && _forwardedPort.IsStarted) + { + _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); + _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(5)); + _forwardedPort.Stop(); + } + if (_client != null) + { + if (_client.Connected) + { + _client.Shutdown(SocketShutdown.Both); + _client.Close(); + _client = null; + } + } + } + + private void SetupData() + { + _closingRegister = new List(); + _exceptionRegister = new List(); + _connectionTimeout = TimeSpan.FromSeconds(5); + } + + private void CreateMocks() + { + _sessionMock = new Mock(MockBehavior.Strict); + _channelMock = new Mock(MockBehavior.Strict); + _connectionInfoMock = new Mock(MockBehavior.Strict); + } + + private void SetupMocks() + { + var seq = new MockSequence(); + + _sessionMock.InSequence(seq).Setup(p => p.IsConnected).Returns(true); + _sessionMock.InSequence(seq).Setup(p => p.CreateChannelDirectTcpip()).Returns(_channelMock.Object); + _sessionMock.InSequence(seq).Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); + _connectionInfoMock.InSequence(seq).Setup(p => p.Timeout).Returns(_connectionTimeout); + _channelMock.InSequence(seq).Setup(p => p.Close()); + _channelMock.InSequence(seq).Setup(p => p.Dispose()); + } + private void Arrange() + { + SetupData(); + CreateMocks(); + SetupMocks(); + + _forwardedPort = new ForwardedPortDynamic(8122); + _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args); + _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args); + _forwardedPort.Session = _sessionMock.Object; + _forwardedPort.Start(); + + var endPoint = new IPEndPoint(IPAddress.Loopback, 8122); + + _client = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + _client.Connect(endPoint); + } + + private void Act() + { + var buffer = new byte[] {0x07}; + _client.Send(buffer, 0, buffer.Length, SocketFlags.None); + } + + [TestMethod] + public void SocketShouldBeConnected() + { + Assert.IsTrue(_client.Connected); + } + + [TestMethod] + public void ForwardedPortShouldShutdownSendOnSocket() + { + var buffer = new byte[1]; + + var bytesReceived = _client.Receive(buffer, 0, buffer.Length, SocketFlags.None); + + Assert.AreEqual(0, bytesReceived); + } + + [TestMethod] + public void ClosingShouldNotHaveFired() + { + Assert.AreEqual(0, _closingRegister.Count); + } + + [TestMethod] + public void ExceptionShouldHaveFiredOnce() + { + Assert.AreEqual(1, _exceptionRegister.Count, GetExceptions()); + + var exception = _exceptionRegister[0].Exception; + Assert.IsNotNull(exception); + var notSupportedException = exception as NotSupportedException; + Assert.IsNotNull(notSupportedException, exception.ToString()); + Assert.AreEqual("SOCKS version 7 is not supported.", notSupportedException.Message); + } + + [TestMethod] + public void CreateChannelDirectTcpipOnSessionShouldBeInvokedOnce() + { + _sessionMock.Verify(p => p.CreateChannelDirectTcpip(), Times.Once); + } + + [TestMethod] + public void CloseOnChannelShouldBeInvokedOnce() + { + _channelMock.Verify(p => p.Close(), Times.Once); + } + + [TestMethod] + public void DisposeOnChannelShouldBeInvokedOnce() + { + _channelMock.Verify(p => p.Dispose(), Times.Once); + } + + private string GetExceptions() + { + var sb = new StringBuilder(); + + foreach (var exceptionEventArgs in _exceptionRegister) + { + if (sb.Length > 0) + sb.AppendLine(); + sb.Append(exceptionEventArgs.Exception); + } + + return sb.ToString(); + } + } +}