SessionTest_NotConnected.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using System;
  2. using System.Net;
  3. using System.Threading;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using Renci.SshNet.Common;
  6. using Renci.SshNet.Messages.Transport;
  7. namespace Renci.SshNet.Tests.Classes
  8. {
  9. [TestClass]
  10. public class SessionTest_NotConnected : SessionTestBase
  11. {
  12. private ConnectionInfo _connectionInfo;
  13. private Session _session;
  14. protected override void SetupData()
  15. {
  16. var serverEndPoint = new IPEndPoint(IPAddress.Loopback, 8122);
  17. _connectionInfo = CreateConnectionInfo(serverEndPoint, TimeSpan.FromSeconds(5));
  18. }
  19. protected override void Act()
  20. {
  21. _session = new Session(_connectionInfo, ServiceFactoryMock.Object, SocketFactoryMock.Object);
  22. }
  23. [TestMethod]
  24. public void ConnectionInfoShouldReturnConnectionInfoPassedThroughConstructor()
  25. {
  26. Assert.AreSame(_connectionInfo, _session.ConnectionInfo);
  27. }
  28. [TestMethod]
  29. public void DisconnectShouldNotThrowException()
  30. {
  31. _session.Disconnect();
  32. }
  33. [TestMethod]
  34. public void DisposeShouldNotThrowException()
  35. {
  36. _session.Dispose();
  37. }
  38. [TestMethod]
  39. public void IsConnectedShouldReturnFalse()
  40. {
  41. Assert.IsFalse(_session.IsConnected);
  42. }
  43. [TestMethod]
  44. public void SendMessageShouldThrowSshConnectionException()
  45. {
  46. try
  47. {
  48. _session.SendMessage(new IgnoreMessage());
  49. Assert.Fail();
  50. }
  51. catch (SshConnectionException ex)
  52. {
  53. Assert.AreEqual(DisconnectReason.None, ex.DisconnectReason);
  54. Assert.IsNull(ex.InnerException);
  55. Assert.AreEqual("Client not connected.", ex.Message);
  56. }
  57. }
  58. [TestMethod]
  59. public void SessionIdShouldReturnNull()
  60. {
  61. Assert.IsNull(_session.SessionId);
  62. }
  63. [TestMethod]
  64. public void ServerVersionShouldReturnNull()
  65. {
  66. Assert.IsNull(_session.ServerVersion);
  67. }
  68. [TestMethod]
  69. public void WaitOnHandle_WaitOnHandle_WaitHandle_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  70. {
  71. const WaitHandle waitHandle = null;
  72. try
  73. {
  74. _session.WaitOnHandle(waitHandle);
  75. Assert.Fail();
  76. }
  77. catch (ArgumentNullException ex)
  78. {
  79. Assert.IsNull(ex.InnerException);
  80. Assert.AreEqual("waitHandle", ex.ParamName);
  81. }
  82. }
  83. [TestMethod]
  84. public void WaitOnHandle_WaitOnHandle_WaitHandleAndTimeout_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  85. {
  86. const WaitHandle waitHandle = null;
  87. var timeout = TimeSpan.FromMinutes(5);
  88. try
  89. {
  90. _session.WaitOnHandle(waitHandle, timeout);
  91. Assert.Fail();
  92. }
  93. catch (ArgumentNullException ex)
  94. {
  95. Assert.IsNull(ex.InnerException);
  96. Assert.AreEqual("waitHandle", ex.ParamName);
  97. }
  98. }
  99. [TestMethod]
  100. public void ISession_TryWait_WaitHandleAndTimeout_ShouldReturnDisconnected()
  101. {
  102. var session = (ISession)_session;
  103. var waitHandle = new ManualResetEvent(false);
  104. var result = session.TryWait(waitHandle, Timeout.InfiniteTimeSpan);
  105. Assert.AreEqual(WaitResult.Disconnected, result);
  106. }
  107. [TestMethod]
  108. public void ISession_TryWait_WaitHandleAndTimeoutAndException_ShouldReturnDisconnected()
  109. {
  110. var session = (ISession)_session;
  111. var waitHandle = new ManualResetEvent(false);
  112. var result = session.TryWait(waitHandle, Timeout.InfiniteTimeSpan, out var exception);
  113. Assert.AreEqual(WaitResult.Disconnected, result);
  114. Assert.IsNull(exception);
  115. }
  116. [TestMethod]
  117. public void ISession_ConnectionInfoShouldReturnConnectionInfoPassedThroughConstructor()
  118. {
  119. var session = (ISession)_session;
  120. Assert.AreSame(_connectionInfo, session.ConnectionInfo);
  121. }
  122. [TestMethod]
  123. public void ISession_MessageListenerCompletedShouldBeSignaled()
  124. {
  125. var session = (ISession)_session;
  126. Assert.IsNotNull(session.MessageListenerCompleted);
  127. Assert.IsTrue(session.MessageListenerCompleted.WaitOne(0));
  128. }
  129. [TestMethod]
  130. public void ISession_SendMessageShouldThrowSshConnectionException()
  131. {
  132. var session = (ISession)_session;
  133. try
  134. {
  135. session.SendMessage(new IgnoreMessage());
  136. Assert.Fail();
  137. }
  138. catch (SshConnectionException ex)
  139. {
  140. Assert.AreEqual(DisconnectReason.None, ex.DisconnectReason);
  141. Assert.IsNull(ex.InnerException);
  142. Assert.AreEqual("Client not connected.", ex.Message);
  143. }
  144. }
  145. [TestMethod]
  146. public void ISession_TrySendMessageShouldReturnFalse()
  147. {
  148. var session = (ISession)_session;
  149. var actual = session.TrySendMessage(new IgnoreMessage());
  150. Assert.IsFalse(actual);
  151. }
  152. [TestMethod]
  153. public void ISession_WaitOnHandle_WaitHandle_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  154. {
  155. const WaitHandle waitHandle = null;
  156. var session = (ISession)_session;
  157. try
  158. {
  159. session.WaitOnHandle(waitHandle);
  160. Assert.Fail();
  161. }
  162. catch (ArgumentNullException ex)
  163. {
  164. Assert.IsNull(ex.InnerException);
  165. Assert.AreEqual("waitHandle", ex.ParamName);
  166. }
  167. }
  168. [TestMethod]
  169. public void ISession_WaitOnHandle_WaitHandleAndTimeout_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  170. {
  171. const WaitHandle waitHandle = null;
  172. var session = (ISession)_session;
  173. try
  174. {
  175. session.WaitOnHandle(waitHandle, Timeout.InfiniteTimeSpan);
  176. Assert.Fail();
  177. }
  178. catch (ArgumentNullException ex)
  179. {
  180. Assert.IsNull(ex.InnerException);
  181. Assert.AreEqual("waitHandle", ex.ParamName);
  182. }
  183. }
  184. private static ConnectionInfo CreateConnectionInfo(IPEndPoint serverEndPoint, TimeSpan timeout)
  185. {
  186. return new ConnectionInfo(serverEndPoint.Address.ToString(), serverEndPoint.Port, "eric", new NoneAuthenticationMethod("eric"))
  187. {
  188. Timeout = timeout
  189. };
  190. }
  191. }
  192. }