Pārlūkot izejas kodu

Update tests after connection refactoring.

drieseng 4 gadi atpakaļ
vecāks
revīzija
e71a4c958d

+ 90 - 0
src/Renci.SshNet.Tests/Classes/ServiceFactoryTest_CreateConnector.cs

@@ -0,0 +1,90 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Moq;
+using Renci.SshNet.Connection;
+using System;
+
+namespace Renci.SshNet.Tests.Classes
+{
+    [TestClass]
+    public class ServiceFactoryTest_CreateConnector
+    {
+        private ServiceFactory _serviceFactory;
+        private Mock<IConnectionInfo> _connectionInfoMock;
+
+        [TestInitialize]
+        public void Setup()
+        {
+            _serviceFactory = new ServiceFactory();
+            _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
+        }
+
+        [TestMethod]
+        public void ConnectionInfoIsNull()
+        {
+            const IConnectionInfo connectionInfo = null;
+
+            try
+            {
+                _serviceFactory.CreateConnector(connectionInfo);
+                Assert.Fail();
+            }
+            catch (ArgumentNullException ex)
+            {
+                Assert.IsNull(ex.InnerException);
+                Assert.AreEqual("connectionInfo", ex.ParamName);
+            }
+        }
+
+        [TestMethod]
+        public void ProxyType_Http()
+        {
+            _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.Http);
+
+            var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object);
+
+            Assert.IsNotNull(actual);
+            Assert.AreEqual(typeof(HttpConnector), actual.GetType());
+
+            _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
+        }
+
+        [TestMethod]
+        public void ProxyType_None()
+        {
+            _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.None);
+
+            var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object);
+
+            Assert.IsNotNull(actual);
+            Assert.AreEqual(typeof(DirectConnector), actual.GetType());
+
+            _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
+        }
+
+        [TestMethod]
+        public void ProxyType_Socks4()
+        {
+            _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.Socks4);
+
+            var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object);
+
+            Assert.IsNotNull(actual);
+            Assert.AreEqual(typeof(Socks4Connector), actual.GetType());
+
+            _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
+        }
+
+        [TestMethod]
+        public void ProxyType_Socks5()
+        {
+            _connectionInfoMock.Setup(p => p.ProxyType).Returns(ProxyTypes.Socks5);
+
+            var actual = _serviceFactory.CreateConnector(_connectionInfoMock.Object);
+
+            Assert.IsNotNull(actual);
+            Assert.AreEqual(typeof(Socks5Connector), actual.GetType());
+
+            _connectionInfoMock.Verify(p => p.ProxyType, Times.Once);
+        }
+    }
+}

+ 62 - 9
src/Renci.SshNet.Tests/Classes/SessionTest.HttpProxy.cs

@@ -5,6 +5,7 @@ using System.Text;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Renci.SshNet.Common;
 using Renci.SshNet.Tests.Common;
+using Renci.SshNet.Connection;
 
 namespace Renci.SshNet.Tests.Classes
 {
@@ -21,8 +22,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("Whatever\r\n"));
                 proxyStub.Start();
 
-                using (var session = new Session(CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, "anon"), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, "anon");
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -48,8 +56,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("HTTP/1.0 501 Custom\r\n"));
                 proxyStub.Start();
 
-                using (var session = new Session(CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, "anon"), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, "anon");
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -78,8 +93,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("SSH-666-SshStub"));
                 proxyStub.Start();
 
-                using (var session = new Session(CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, "anon"), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, "anon");
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -110,8 +132,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("SSH-666-SshStub"));
                 proxyStub.Start();
 
-                using (var session = new Session(CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, "anon"), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, "anon");
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -137,8 +166,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("HTTP/1.0 501 Custom\r\n"));
                 proxyStub.Start();
 
-                using (var session = new Session(CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, "anon"), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, "anon");
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -164,9 +200,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("HTTP/1.0 501 Custom\r\n"));
                 proxyStub.Start();
 
-                var connectionInfo = CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, "anon");
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, "anon");
+
                 using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -193,9 +235,15 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("HTTP/1.0 501 Custom\r\n"));
                 proxyStub.Start();
 
-                var connectionInfo = CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, string.Empty);
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, string.Empty);
+
                 using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -221,9 +269,14 @@ namespace Renci.SshNet.Tests.Classes
                 proxyStub.Responses.Add(Encoding.ASCII.GetBytes("HTTP/1.0 501 Custom\r\n"));
                 proxyStub.Start();
 
-                var connectionInfo = CreateConnectionInfoWithProxy(proxyEndPoint, serverEndPoint, null);
+                var connectionInfo = CreateConnectionInfoWithHttpProxy(proxyEndPoint, serverEndPoint, null);
                 using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -238,7 +291,7 @@ namespace Renci.SshNet.Tests.Classes
             }
         }
 
-        private static ConnectionInfo CreateConnectionInfoWithProxy(IPEndPoint proxyEndPoint, IPEndPoint serverEndPoint, string proxyUserName)
+        private static ConnectionInfo CreateConnectionInfoWithHttpProxy(IPEndPoint proxyEndPoint, IPEndPoint serverEndPoint, string proxyUserName)
         {
             return new ConnectionInfo(
                 serverEndPoint.Address.ToString(),

+ 70 - 5
src/Renci.SshNet.Tests/Classes/SessionTest.cs

@@ -7,6 +7,7 @@ using System.Threading;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using Renci.SshNet.Common;
+using Renci.SshNet.Connection;
 using Renci.SshNet.Messages.Transport;
 using Renci.SshNet.Tests.Common;
 using Renci.SshNet.Tests.Properties;
@@ -20,12 +21,14 @@ namespace Renci.SshNet.Tests.Classes
     public partial class SessionTest : TestBase
     {
         private Mock<IServiceFactory> _serviceFactoryMock;
+        private Mock<IConnector> _connectorMock;
 
         protected override void OnInit()
         {
             base.OnInit();
 
             _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
+            _connectorMock = new Mock<IConnector>(MockBehavior.Strict);
         }
 
         [TestMethod]
@@ -84,6 +87,11 @@ namespace Renci.SshNet.Tests.Classes
 
                 using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -130,6 +138,11 @@ namespace Renci.SshNet.Tests.Classes
 
                 using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -146,7 +159,6 @@ namespace Renci.SshNet.Tests.Classes
             }
         }
 
-
         [TestMethod]
         public void ConnectShouldSupportProtocolIdentificationStringThatDoesNotEndWithCrlf()
         {
@@ -166,6 +178,11 @@ namespace Renci.SshNet.Tests.Classes
 
                 using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -199,8 +216,15 @@ namespace Renci.SshNet.Tests.Classes
                     };
                 serverStub.Start();
 
-                using (var session = new Session(CreateConnectionInfo(serverEndPoint, TimeSpan.FromMilliseconds(500)), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfo(serverEndPoint, TimeSpan.FromMilliseconds(500));
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -237,8 +261,15 @@ namespace Renci.SshNet.Tests.Classes
                     };
                 serverStub.Start();
 
-                using (var session = new Session(CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5)), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5));
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -263,8 +294,15 @@ namespace Renci.SshNet.Tests.Classes
                     };
                 serverStub.Start();
 
-                using (var session = new Session(CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5)), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5));
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -290,8 +328,15 @@ namespace Renci.SshNet.Tests.Classes
                     };
                 serverStub.Start();
 
-                using (var session = new Session(CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5)), _serviceFactoryMock.Object))
+                var connectionInfo = CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5));
+
+                using (var session = new Session(connectionInfo, _serviceFactoryMock.Object))
                 {
+                    _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                                       .Returns(_connectorMock.Object);
+                    _connectorMock.Setup(p => p.Connect(connectionInfo))
+                                  .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
                     try
                     {
                         session.Connect();
@@ -313,6 +358,11 @@ namespace Renci.SshNet.Tests.Classes
                 new KeyboardInteractiveAuthenticationMethod("user"));
             var session = new Session(connectionInfo, _serviceFactoryMock.Object);
 
+            _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                               .Returns(_connectorMock.Object);
+            _connectorMock.Setup(p => p.Connect(connectionInfo))
+                          .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
             try
             {
                 session.Connect();
@@ -331,6 +381,11 @@ namespace Renci.SshNet.Tests.Classes
                 "proxyUser", "proxyPwd", new KeyboardInteractiveAuthenticationMethod("user"));
             var session = new Session(connectionInfo, _serviceFactoryMock.Object);
 
+            _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                               .Returns(_connectorMock.Object);
+            _connectorMock.Setup(p => p.Connect(connectionInfo))
+                          .Returns<IConnectionInfo>(c => new HttpConnector().Connect(c));
+
             try
             {
                 session.Connect();
@@ -349,6 +404,11 @@ namespace Renci.SshNet.Tests.Classes
                 new KeyboardInteractiveAuthenticationMethod(Resources.USERNAME));
             var session = new Session(connectionInfo, _serviceFactoryMock.Object);
 
+            _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                               .Returns(_connectorMock.Object);
+            _connectorMock.Setup(p => p.Connect(connectionInfo))
+                          .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
             try
             {
                 session.Connect();
@@ -377,6 +437,11 @@ namespace Renci.SshNet.Tests.Classes
                 new KeyboardInteractiveAuthenticationMethod(Resources.USERNAME));
             var session = new Session(connectionInfo, _serviceFactoryMock.Object);
 
+            _serviceFactoryMock.Setup(p => p.CreateConnector(connectionInfo))
+                               .Returns(_connectorMock.Object);
+            _connectorMock.Setup(p => p.Connect(connectionInfo))
+                          .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+
             try
             {
                 session.Connect();

+ 13 - 0
src/Renci.SshNet.Tests/Classes/SessionTest_Connected.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Threading;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Moq;
 using Renci.SshNet.Messages.Transport;
 
 namespace Renci.SshNet.Tests.Classes
@@ -251,5 +252,17 @@ namespace Renci.SshNet.Tests.Classes
                 Assert.IsNull(exception);
             }
         }
+
+        [TestMethod]
+        public void CreateConnectorOnServiceFactoryShouldHaveBeenInvokedOnce()
+        {
+            ServiceFactoryMock.Verify(p => p.CreateConnector(ConnectionInfo), Times.Once());
+        }
+
+        [TestMethod]
+        public void ConnectorOnConnectorShouldHaveBeenInvokedOnce()
+        {
+            ConnectorMock.Verify(p => p.Connect(ConnectionInfo), Times.Once());
+        }
     }
 }

+ 14 - 6
src/Renci.SshNet.Tests/Classes/SessionTest_ConnectedBase.cs

@@ -9,6 +9,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using Renci.SshNet.Common;
 using Renci.SshNet.Compression;
+using Renci.SshNet.Connection;
 using Renci.SshNet.Messages;
 using Renci.SshNet.Messages.Transport;
 using Renci.SshNet.Security;
@@ -20,7 +21,8 @@ namespace Renci.SshNet.Tests.Classes
     [TestClass]
     public abstract class SessionTest_ConnectedBase
     {
-        private Mock<IServiceFactory> _serviceFactoryMock;
+        internal Mock<IServiceFactory> ServiceFactoryMock { get; private set; }
+        internal Mock<IConnector> ConnectorMock { get; private set; }
         private Mock<IKeyExchange> _keyExchangeMock;
         private Mock<IClientAuthentication> _clientAuthenticationMock;
         private IPEndPoint _serverEndPoint;
@@ -35,6 +37,7 @@ namespace Renci.SshNet.Tests.Classes
         protected AsyncSocketListener ServerListener { get; private set; }
         protected IList<byte[]> ServerBytesReceivedRegister { get; private set; }
         protected Session Session { get; private set; }
+        protected Socket ClientSocket { get; private set; }
         protected Socket ServerSocket { get; private set; }
 
         [TestInitialize]
@@ -85,7 +88,7 @@ namespace Renci.SshNet.Tests.Classes
             ErrorOccurredRegister = new List<ExceptionEventArgs>();
             ServerBytesReceivedRegister = new List<byte[]>();
 
-            Session = new Session(ConnectionInfo, _serviceFactoryMock.Object);
+            Session = new Session(ConnectionInfo, ServiceFactoryMock.Object);
             Session.Disconnected += (sender, args) => DisconnectedRegister.Add(args);
             Session.DisconnectReceived += (sender, args) => DisconnectReceivedRegister.Add(args);
             Session.ErrorOccured += (sender, args) => ErrorOccurredRegister.Add(args);
@@ -144,14 +147,19 @@ namespace Renci.SshNet.Tests.Classes
 
         private void CreateMocks()
         {
-            _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
+            ServiceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
+            ConnectorMock = new Mock<IConnector>(MockBehavior.Strict);
             _keyExchangeMock = new Mock<IKeyExchange>(MockBehavior.Strict);
             _clientAuthenticationMock = new Mock<IClientAuthentication>(MockBehavior.Strict);
         }
 
         private void SetupMocks()
         {
-            _serviceFactoryMock.Setup(
+            ServiceFactoryMock.Setup(p => p.CreateConnector(ConnectionInfo))
+                               .Returns(ConnectorMock.Object);
+            ConnectorMock.Setup(p => p.Connect(ConnectionInfo))
+                          .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+            ServiceFactoryMock.Setup(
                 p =>
                     p.CreateKeyExchange(ConnectionInfo.KeyExchangeAlgorithms, new[] { _keyExchangeAlgorithm })).Returns(_keyExchangeMock.Object);
             _keyExchangeMock.Setup(p => p.Name).Returns(_keyExchangeAlgorithm);
@@ -164,13 +172,13 @@ namespace Renci.SshNet.Tests.Classes
             _keyExchangeMock.Setup(p => p.CreateCompressor()).Returns((Compressor) null);
             _keyExchangeMock.Setup(p => p.CreateDecompressor()).Returns((Compressor) null);
             _keyExchangeMock.Setup(p => p.Dispose());
-            _serviceFactoryMock.Setup(p => p.CreateClientAuthentication())
+            ServiceFactoryMock.Setup(p => p.CreateClientAuthentication())
                 .Callback(ClientAuthentication_Callback)
                 .Returns(_clientAuthenticationMock.Object);
             _clientAuthenticationMock.Setup(p => p.Authenticate(ConnectionInfo, Session));
         }
 
-        protected virtual void Arrange()
+        protected void Arrange()
         {
             CreateMocks();
             SetupData();

+ 7 - 0
src/Renci.SshNet.Tests/Classes/SessionTest_Connected_ServerAndClientDisconnectRace.cs

@@ -9,6 +9,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using Renci.SshNet.Common;
 using Renci.SshNet.Compression;
+using Renci.SshNet.Connection;
 using Renci.SshNet.Messages;
 using Renci.SshNet.Messages.Transport;
 using Renci.SshNet.Security;
@@ -21,6 +22,7 @@ namespace Renci.SshNet.Tests.Classes
     public class SessionTest_Connected_ServerAndClientDisconnectRace
     {
         private Mock<IServiceFactory> _serviceFactoryMock;
+        private Mock<IConnector> _connectorMock;
         private Mock<IKeyExchange> _keyExchangeMock;
         private Mock<IClientAuthentication> _clientAuthenticationMock;
         private IPEndPoint _serverEndPoint;
@@ -128,12 +130,17 @@ namespace Renci.SshNet.Tests.Classes
         private void CreateMocks()
         {
             _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
+            _connectorMock = new Mock<IConnector>(MockBehavior.Strict);
             _keyExchangeMock = new Mock<IKeyExchange>(MockBehavior.Strict);
             _clientAuthenticationMock = new Mock<IClientAuthentication>(MockBehavior.Strict);
         }
 
         private void SetupMocks()
         {
+            _serviceFactoryMock.Setup(p => p.CreateConnector(ConnectionInfo))
+                               .Returns(_connectorMock.Object);
+            _connectorMock.Setup(p => p.Connect(ConnectionInfo))
+                          .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
             _serviceFactoryMock.Setup(
                 p =>
                     p.CreateKeyExchange(ConnectionInfo.KeyExchangeAlgorithms, new[] { _keyExchangeAlgorithm })).Returns(_keyExchangeMock.Object);

+ 26 - 4
src/Renci.SshNet.Tests/Classes/SessionTest_SocketConnected_BadPacketAndDispose.cs

@@ -5,6 +5,7 @@ using System.Text;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using Renci.SshNet.Common;
+using Renci.SshNet.Connection;
 using Renci.SshNet.Messages.Transport;
 using Renci.SshNet.Tests.Common;
 
@@ -14,6 +15,7 @@ namespace Renci.SshNet.Tests.Classes
     public class SessionTest_SocketConnected_BadPacketAndDispose
     {
         private Mock<IServiceFactory> _serviceFactoryMock;
+        private Mock<IConnector> _connectorMock;
         private ConnectionInfo _connectionInfo;
         private Session _session;
         private AsyncSocketListener _serverListener;
@@ -37,7 +39,13 @@ namespace Renci.SshNet.Tests.Classes
             }
         }
 
-        protected void Arrange()
+        protected void CreateMocks()
+        {
+            _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
+            _connectorMock = new Mock<IConnector>(MockBehavior.Strict);
+        }
+
+        protected void SetupData()
         {
             _serverEndPoint = new IPEndPoint(IPAddress.Loopback, 8122);
             _connectionInfo = new ConnectionInfo(
@@ -48,8 +56,6 @@ namespace Renci.SshNet.Tests.Classes
             _connectionInfo.Timeout = TimeSpan.FromMilliseconds(200);
             _actualException = null;
 
-            _serviceFactoryMock = new Mock<IServiceFactory>(MockBehavior.Strict);
-
             _serverListener = new AsyncSocketListener(_serverEndPoint);
             _serverListener.Connected += (socket) =>
                 {
@@ -61,10 +67,26 @@ namespace Renci.SshNet.Tests.Classes
                 };
             _serverListener.BytesReceived += (received, socket) =>
                 {
-                    var badPacket = new byte[] {0x0a, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05};
+                    var badPacket = new byte[] { 0x0a, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 };
                     _serverSocket.Send(badPacket, 0, badPacket.Length, SocketFlags.None);
                     _serverSocket.Shutdown(SocketShutdown.Send);
                 };
+        }
+
+        protected void SetupMocks()
+        {
+            _serviceFactoryMock.Setup(p => p.CreateConnector(_connectionInfo))
+                               .Returns(_connectorMock.Object);
+            _connectorMock.Setup(p => p.Connect(_connectionInfo))
+                          .Returns<IConnectionInfo>(c => new DirectConnector().Connect(c));
+        }
+
+        protected void Arrange()
+        {
+            CreateMocks();
+            SetupData();
+            SetupMocks();
+
             _serverListener.Start();
         }