SessionTest_Connected.cs 7.8 KB

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