SessionTest_Connected_ServerSendsBadPacket.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System.Diagnostics;
  2. using System.Net.Sockets;
  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_Connected_ServerSendsBadPacket : SessionTest_ConnectedBase
  11. {
  12. protected override void Act()
  13. {
  14. var badPacket = new byte[] { 0x0a, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 };
  15. ServerSocket.Send(badPacket, 0, badPacket.Length, SocketFlags.None);
  16. // give session some time to react to bad packet
  17. Thread.Sleep(200);
  18. }
  19. [TestMethod]
  20. public void IsConnectedShouldReturnFalse()
  21. {
  22. Assert.IsFalse(Session.IsConnected);
  23. }
  24. [TestMethod]
  25. public void DisconnectShouldFinishImmediately()
  26. {
  27. var stopwatch = new Stopwatch();
  28. stopwatch.Start();
  29. Session.Disconnect();
  30. stopwatch.Stop();
  31. Assert.IsTrue(stopwatch.ElapsedMilliseconds < 500);
  32. }
  33. [TestMethod]
  34. public void DisconnectedIsNeverRaised()
  35. {
  36. Assert.AreEqual(0, DisconnectedRegister.Count);
  37. }
  38. [TestMethod]
  39. public void DisconnectReceivedIsNeverRaised()
  40. {
  41. Assert.AreEqual(0, DisconnectReceivedRegister.Count);
  42. }
  43. [TestMethod]
  44. public void ErrorOccurredIsRaisedOnce()
  45. {
  46. Assert.AreEqual(1, ErrorOccurredRegister.Count);
  47. var errorOccurred = ErrorOccurredRegister[0];
  48. Assert.IsNotNull(errorOccurred);
  49. var exception = errorOccurred.Exception;
  50. Assert.IsNotNull(exception);
  51. Assert.AreEqual(typeof (SshConnectionException), exception.GetType());
  52. var connectionException = (SshConnectionException) exception;
  53. Assert.AreEqual(DisconnectReason.ProtocolError, connectionException.DisconnectReason);
  54. Assert.IsNull(connectionException.InnerException);
  55. Assert.AreEqual("Bad packet length: 168101125.", connectionException.Message);
  56. }
  57. [TestMethod]
  58. public void DisposeShouldFinishImmediately()
  59. {
  60. var stopwatch = new Stopwatch();
  61. stopwatch.Start();
  62. Session.Dispose();
  63. stopwatch.Stop();
  64. Assert.IsTrue(stopwatch.ElapsedMilliseconds < 500);
  65. }
  66. [TestMethod]
  67. public void ReceiveOnServerSocketShouldReturnZero()
  68. {
  69. var buffer = new byte[1];
  70. var actual = ServerSocket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
  71. Assert.AreEqual(0, actual);
  72. }
  73. [TestMethod]
  74. public void SendMessageShouldThrowSshConnectionException()
  75. {
  76. try
  77. {
  78. Session.SendMessage(new IgnoreMessage());
  79. Assert.Fail();
  80. }
  81. catch (SshConnectionException ex)
  82. {
  83. Assert.AreEqual(DisconnectReason.None, ex.DisconnectReason);
  84. Assert.IsNull(ex.InnerException);
  85. Assert.AreEqual("Client not connected.", ex.Message);
  86. }
  87. }
  88. [TestMethod]
  89. public void ISession_MessageListenerCompletedShouldBeSignaled()
  90. {
  91. var session = (ISession)Session;
  92. Assert.IsNotNull(session.MessageListenerCompleted);
  93. Assert.IsTrue(session.MessageListenerCompleted.WaitOne());
  94. }
  95. [TestMethodAttribute]
  96. public void ISession_SendMessageShouldThrowSshConnectionException()
  97. {
  98. var session = (ISession) Session;
  99. try
  100. {
  101. session.SendMessage(new IgnoreMessage());
  102. Assert.Fail();
  103. }
  104. catch (SshConnectionException ex)
  105. {
  106. Assert.AreEqual(DisconnectReason.None, ex.DisconnectReason);
  107. Assert.IsNull(ex.InnerException);
  108. Assert.AreEqual("Client not connected.", ex.Message);
  109. }
  110. }
  111. [TestMethod]
  112. public void ISession_TrySendMessageShouldReturnFalse()
  113. {
  114. var session = (ISession) Session;
  115. var actual = session.TrySendMessage(new IgnoreMessage());
  116. Assert.IsFalse(actual);
  117. }
  118. [TestMethod]
  119. public void ISession_WaitOnHandleShouldThrowSshConnectionExceptionDetailingBadPacket()
  120. {
  121. var session = (ISession) Session;
  122. var waitHandle = new ManualResetEvent(false);
  123. try
  124. {
  125. session.WaitOnHandle(waitHandle);
  126. Assert.Fail();
  127. }
  128. catch (SshConnectionException ex)
  129. {
  130. Assert.AreEqual(DisconnectReason.ProtocolError, ex.DisconnectReason);
  131. Assert.IsNull(ex.InnerException);
  132. Assert.AreEqual("Bad packet length: 168101125.", ex.Message);
  133. }
  134. }
  135. }
  136. }