SessionTest_Connected.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. using System;
  2. using System.Threading;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Moq;
  5. using Renci.SshNet.Messages.Transport;
  6. namespace Renci.SshNet.Tests.Classes
  7. {
  8. [TestClass]
  9. public class SessionTest_Connected : SessionTest_ConnectedBase
  10. {
  11. private IgnoreMessage _ignoreMessage;
  12. protected override void SetupData()
  13. {
  14. base.SetupData();
  15. var data = new byte[10];
  16. Random.NextBytes(data);
  17. _ignoreMessage = new IgnoreMessage(data);
  18. }
  19. protected override void Act()
  20. {
  21. }
  22. [TestMethod]
  23. public void ClientVersionIsRenciSshNet()
  24. {
  25. Assert.AreEqual("SSH-2.0-Renci.SshNet.SshClient.0.0.1", Session.ClientVersion);
  26. }
  27. [TestMethod]
  28. public void ConnectionInfoShouldReturnConnectionInfoPassedThroughConstructor()
  29. {
  30. Assert.AreSame(ConnectionInfo, Session.ConnectionInfo);
  31. }
  32. [TestMethod]
  33. public void IsConnectedShouldReturnTrue()
  34. {
  35. Assert.IsTrue(Session.IsConnected);
  36. }
  37. [TestMethod]
  38. public void SendMessageShouldSendPacketToServer()
  39. {
  40. ServerBytesReceivedRegister.Clear();
  41. Session.SendMessage(_ignoreMessage);
  42. // give session time to process message
  43. Thread.Sleep(100);
  44. Assert.AreEqual(1, ServerBytesReceivedRegister.Count);
  45. }
  46. [TestMethod]
  47. public void SessionIdShouldReturnExchangeHashCalculatedFromKeyExchangeInitMessage()
  48. {
  49. Assert.IsNotNull(Session.SessionId);
  50. Assert.AreSame(SessionId, Session.SessionId);
  51. }
  52. [TestMethod]
  53. public void ServerVersionShouldNotReturnNull()
  54. {
  55. Assert.IsNotNull(Session.ServerVersion);
  56. Assert.AreEqual("SSH-2.0-OurServerStub", Session.ServerVersion);
  57. }
  58. [TestMethod]
  59. public void WaitOnHandle_WaitHandle_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  60. {
  61. const WaitHandle waitHandle = null;
  62. try
  63. {
  64. Session.WaitOnHandle(waitHandle);
  65. Assert.Fail();
  66. }
  67. catch (ArgumentNullException ex)
  68. {
  69. Assert.IsNull(ex.InnerException);
  70. Assert.AreEqual("waitHandle", ex.ParamName);
  71. }
  72. }
  73. [TestMethod]
  74. public void WaitOnHandle_WaitHandleAndTimeout_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  75. {
  76. const WaitHandle waitHandle = null;
  77. var timeout = TimeSpan.FromMinutes(5);
  78. try
  79. {
  80. Session.WaitOnHandle(waitHandle, timeout);
  81. Assert.Fail();
  82. }
  83. catch (ArgumentNullException ex)
  84. {
  85. Assert.IsNull(ex.InnerException);
  86. Assert.AreEqual("waitHandle", ex.ParamName);
  87. }
  88. }
  89. [TestMethod]
  90. public void ISession_ConnectionInfoShouldReturnConnectionInfoPassedThroughConstructor()
  91. {
  92. var session = (ISession) Session;
  93. Assert.AreSame(ConnectionInfo, session.ConnectionInfo);
  94. }
  95. [TestMethod]
  96. public void ISession_MessageListenerCompletedShouldNotBeSignaled()
  97. {
  98. var session = (ISession) Session;
  99. Assert.IsNotNull(session.MessageListenerCompleted);
  100. Assert.IsFalse(session.MessageListenerCompleted.WaitOne(0));
  101. }
  102. [TestMethod]
  103. public void ISession_SendMessageShouldSendPacketToServer()
  104. {
  105. var session = (ISession) Session;
  106. ServerBytesReceivedRegister.Clear();
  107. session.SendMessage(_ignoreMessage);
  108. // give session time to process message
  109. Thread.Sleep(100);
  110. Assert.AreEqual(1, ServerBytesReceivedRegister.Count);
  111. }
  112. [TestMethod]
  113. public void ISession_TrySendMessageShouldSendPacketToServerAndReturnTrue()
  114. {
  115. var session = (ISession) Session;
  116. ServerBytesReceivedRegister.Clear();
  117. var actual = session.TrySendMessage(new IgnoreMessage());
  118. // give session time to process message
  119. Thread.Sleep(100);
  120. Assert.IsTrue(actual);
  121. Assert.AreEqual(1, ServerBytesReceivedRegister.Count);
  122. }
  123. [TestMethod]
  124. public void ISession_WaitOnHandleShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  125. {
  126. const WaitHandle waitHandle = null;
  127. var session = (ISession) Session;
  128. try
  129. {
  130. session.WaitOnHandle(waitHandle);
  131. Assert.Fail();
  132. }
  133. catch (ArgumentNullException ex)
  134. {
  135. Assert.IsNull(ex.InnerException);
  136. Assert.AreEqual("waitHandle", ex.ParamName);
  137. }
  138. }
  139. [TestMethod]
  140. public void ISession_TryWait_WaitHandleAndTimeout_ShouldReturnSuccessIfWaitHandleIsSignaled()
  141. {
  142. var session = (ISession) Session;
  143. var waitHandle = new ManualResetEvent(true);
  144. var result = session.TryWait(waitHandle, TimeSpan.FromMilliseconds(0));
  145. Assert.AreEqual(WaitResult.Success, result);
  146. }
  147. [TestMethod]
  148. public void ISession_TryWait_WaitHandleAndTimeout_ShouldReturnTimedOutIfWaitHandleIsNotSignaled()
  149. {
  150. var session = (ISession) Session;
  151. var waitHandle = new ManualResetEvent(false);
  152. var result = session.TryWait(waitHandle, TimeSpan.FromMilliseconds(0));
  153. Assert.AreEqual(WaitResult.TimedOut, result);
  154. }
  155. [TestMethod]
  156. public void ISession_TryWait_WaitHandleAndTimeout_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  157. {
  158. var session = (ISession) Session;
  159. const WaitHandle waitHandle = null;
  160. try
  161. {
  162. _ = session.TryWait(waitHandle, Session.InfiniteTimeSpan);
  163. Assert.Fail();
  164. }
  165. catch (ArgumentNullException ex)
  166. {
  167. Assert.IsNull(ex.InnerException);
  168. Assert.AreEqual("waitHandle", ex.ParamName);
  169. }
  170. }
  171. [TestMethod]
  172. public void ISession_TryWait_WaitHandleAndTimeoutAndException_ShouldReturnSuccessIfWaitHandleIsSignaled()
  173. {
  174. var session = (ISession) Session;
  175. var waitHandle = new ManualResetEvent(true);
  176. var result = session.TryWait(waitHandle, TimeSpan.FromMilliseconds(0), out var exception);
  177. Assert.AreEqual(WaitResult.Success, result);
  178. Assert.IsNull(exception);
  179. }
  180. [TestMethod]
  181. public void ISession_TryWait_WaitHandleAndTimeoutAndException_ShouldReturnTimedOutIfWaitHandleIsNotSignaled()
  182. {
  183. var session = (ISession) Session;
  184. var waitHandle = new ManualResetEvent(false);
  185. var result = session.TryWait(waitHandle, TimeSpan.FromMilliseconds(0), out var exception);
  186. Assert.AreEqual(WaitResult.TimedOut, result);
  187. Assert.IsNull(exception);
  188. }
  189. [TestMethod]
  190. public void ISession_TryWait_WaitHandleAndTimeoutAndException_ShouldThrowArgumentNullExceptionWhenWaitHandleIsNull()
  191. {
  192. var session = (ISession) Session;
  193. const WaitHandle waitHandle = null;
  194. Exception exception = null;
  195. try
  196. {
  197. session.TryWait(waitHandle, Session.InfiniteTimeSpan, out exception);
  198. Assert.Fail();
  199. }
  200. catch (ArgumentNullException ex)
  201. {
  202. Assert.IsNull(ex.InnerException);
  203. Assert.AreEqual("waitHandle", ex.ParamName);
  204. Assert.IsNull(exception);
  205. }
  206. }
  207. [TestMethod]
  208. public void ClientSocketShouldBeConnected()
  209. {
  210. Assert.IsNotNull(ClientSocket);
  211. Assert.IsTrue(ClientSocket.Connected);
  212. }
  213. [TestMethod]
  214. public void CreateConnectorOnServiceFactoryShouldHaveBeenInvokedOnce()
  215. {
  216. ServiceFactoryMock.Verify(p => p.CreateConnector(ConnectionInfo, SocketFactoryMock.Object), Times.Once());
  217. }
  218. [TestMethod]
  219. public void ConnectorOnConnectorShouldHaveBeenInvokedOnce()
  220. {
  221. ConnectorMock.Verify(p => p.Connect(ConnectionInfo), Times.Once());
  222. }
  223. }
  224. }