| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using System;
- using System.Diagnostics;
- using System.Net;
- using System.Net.Sockets;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using Moq;
- using Renci.SshNet.Tests.Common;
- namespace Renci.SshNet.Tests.Classes.Connection
- {
- [TestClass]
- public class DirectConnectorTest_Connect_ConnectionSucceeded : DirectConnectorTestBase
- {
- private ConnectionInfo _connectionInfo;
- private AsyncSocketListener _server;
- private Socket _clientSocket;
- private Stopwatch _stopWatch;
- private bool _disconnected;
- private Socket _actual;
- protected override void SetupData()
- {
- base.SetupData();
- var random = new Random();
- _connectionInfo = CreateConnectionInfo(IPAddress.Loopback.ToString());
- _connectionInfo.Timeout = TimeSpan.FromMilliseconds(random.Next(50, 200));
- _stopWatch = new Stopwatch();
- _disconnected = false;
- _clientSocket = SocketFactory.Create(SocketType.Stream, ProtocolType.Tcp);
- _server = new AsyncSocketListener(new IPEndPoint(IPAddress.Loopback, _connectionInfo.Port));
- _server.Disconnected += (socket) => _disconnected = true;
- _server.Connected += (socket) => socket.Send(new byte[1] { 0x44 });
- _server.Start();
- }
- protected override void SetupMocks()
- {
- _ = SocketFactoryMock.Setup(p => p.Create(SocketType.Stream, ProtocolType.Tcp))
- .Returns(_clientSocket);
- }
- protected override void TearDown()
- {
- base.TearDown();
- _server?.Dispose();
- _clientSocket?.Dispose();
- }
- protected override void Act()
- {
- _stopWatch.Start();
- try
- {
- _actual = Connector.Connect(_connectionInfo);
- }
- finally
- {
- _stopWatch.Stop();
- }
- }
- [TestMethod]
- public void ConnectShouldHaveReturnedSocketCreatedUsingSocketFactory()
- {
- Assert.IsNotNull(_actual);
- Assert.AreSame(_clientSocket, _actual);
- }
- [TestMethod]
- public void ConnectShouldHaveRespectedTimeout()
- {
- var errorText = string.Format("Elapsed: {0}, Timeout: {1}",
- _stopWatch.ElapsedMilliseconds,
- _connectionInfo.Timeout.TotalMilliseconds);
- // Compare elapsed time with configured timeout, allowing for a margin of error
- Assert.IsTrue(_stopWatch.ElapsedMilliseconds < _connectionInfo.Timeout.TotalMilliseconds + 100, errorText);
- }
- [TestMethod]
- public void ClientSocketShouldBeConnected()
- {
- Assert.IsTrue(_clientSocket.Connected);
- Assert.IsFalse(_disconnected);
- }
- [TestMethod]
- public void NoBytesShouldHaveBeenReadFromSocket()
- {
- var buffer = new byte[1];
- var bytesRead = _clientSocket.Receive(buffer);
- Assert.AreEqual(1, bytesRead);
- Assert.AreEqual(0x44, buffer[0]);
- }
- [TestMethod]
- public void CreateOnSocketFactoryShouldHaveBeenInvokedOnce()
- {
- SocketFactoryMock.Verify(p => p.Create(SocketType.Stream, ProtocolType.Tcp),
- Times.Once());
- }
- }
- }
|