DirectConnectorTest_Connect_ConnectionRefusedByServer.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Diagnostics;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using Moq;
  7. namespace Renci.SshNet.Tests.Classes.Connection
  8. {
  9. [TestClass]
  10. public class DirectConnectorTest_Connect_ConnectionRefusedByServer : DirectConnectorTestBase
  11. {
  12. private ConnectionInfo _connectionInfo;
  13. private SocketException _actualException;
  14. private Socket _clientSocket;
  15. private Stopwatch _stopWatch;
  16. protected override void SetupData()
  17. {
  18. base.SetupData();
  19. _connectionInfo = CreateConnectionInfo(IPAddress.Loopback.ToString());
  20. _connectionInfo.Timeout = TimeSpan.FromMilliseconds(5000);
  21. _stopWatch = new Stopwatch();
  22. _actualException = null;
  23. _clientSocket = SocketFactory.Create(SocketType.Stream, ProtocolType.Tcp);
  24. }
  25. protected override void SetupMocks()
  26. {
  27. _ = SocketFactoryMock.Setup(p => p.Create(SocketType.Stream, ProtocolType.Tcp))
  28. .Returns(_clientSocket);
  29. }
  30. protected override void TearDown()
  31. {
  32. base.TearDown();
  33. _clientSocket?.Dispose();
  34. }
  35. protected override void Act()
  36. {
  37. _stopWatch.Start();
  38. try
  39. {
  40. _ = Connector.Connect(_connectionInfo);
  41. Assert.Fail();
  42. }
  43. catch (SocketException ex)
  44. {
  45. _actualException = ex;
  46. }
  47. finally
  48. {
  49. _stopWatch.Stop();
  50. }
  51. }
  52. [TestMethod]
  53. public void ConnectShouldHaveThrownSocketException()
  54. {
  55. Assert.IsNull(_actualException.InnerException);
  56. Assert.AreEqual(SocketError.ConnectionRefused, _actualException.SocketErrorCode);
  57. }
  58. [TestMethod]
  59. public void ConnectShouldHaveRespectedTimeout()
  60. {
  61. var errorText = string.Format("Elapsed: {0}, Timeout: {1}",
  62. _stopWatch.ElapsedMilliseconds,
  63. _connectionInfo.Timeout.TotalMilliseconds);
  64. // Compare elapsed time with configured timeout, allowing for a margin of error
  65. Assert.IsTrue(_stopWatch.ElapsedMilliseconds < _connectionInfo.Timeout.TotalMilliseconds + 100, errorText);
  66. }
  67. [TestMethod]
  68. public void ClientSocketShouldHaveBeenDisposed()
  69. {
  70. try
  71. {
  72. _ = _clientSocket.Receive(new byte[0]);
  73. Assert.Fail();
  74. }
  75. catch (ObjectDisposedException)
  76. {
  77. }
  78. }
  79. [TestMethod]
  80. public void CreateOnSocketFactoryShouldHaveBeenInvokedOnce()
  81. {
  82. SocketFactoryMock.Verify(p => p.Create(SocketType.Stream, ProtocolType.Tcp),
  83. Times.Once());
  84. }
  85. }
  86. }