2
0

IgnoreMessageTest.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System;
  2. using System.Globalization;
  3. using System.Linq;
  4. using Renci.SshNet.Common;
  5. using Renci.SshNet.Messages.Transport;
  6. using Microsoft.VisualStudio.TestTools.UnitTesting;
  7. namespace Renci.SshNet.Tests.Classes.Messages.Transport
  8. {
  9. [TestClass]
  10. public class IgnoreMessageTest
  11. {
  12. private Random _random;
  13. private byte[] _data;
  14. [TestInitialize]
  15. public void Init()
  16. {
  17. _random = new Random();
  18. _data = new byte[_random.Next(1, 10)];
  19. _random.NextBytes(_data);
  20. }
  21. [TestMethod]
  22. public void DefaultConstructor()
  23. {
  24. var target = new IgnoreMessage();
  25. Assert.IsNotNull(target.Data);
  26. Assert.AreEqual(0, target.Data.Length);
  27. }
  28. [TestMethod]
  29. public void Constructor_Data()
  30. {
  31. var target = new IgnoreMessage(_data);
  32. Assert.AreSame(_data, target.Data);
  33. }
  34. [TestMethod]
  35. public void Constructor_Data_ShouldThrowArgumentNullExceptionWhenDataIsNull()
  36. {
  37. const byte[] data = null;
  38. try
  39. {
  40. new IgnoreMessage(data);
  41. Assert.Fail();
  42. }
  43. catch (ArgumentNullException ex)
  44. {
  45. Assert.IsNull(ex.InnerException);
  46. Assert.AreEqual("data", ex.ParamName);
  47. }
  48. }
  49. [TestMethod]
  50. public void GetBytes()
  51. {
  52. var request = new IgnoreMessage(_data);
  53. var bytes = request.GetBytes();
  54. var expectedBytesLength = 0;
  55. expectedBytesLength += 1; // Type
  56. expectedBytesLength += 4; // Data length
  57. expectedBytesLength += _data.Length; // Data
  58. Assert.AreEqual(expectedBytesLength, bytes.Length);
  59. var sshDataStream = new SshDataStream(bytes);
  60. Assert.AreEqual(IgnoreMessage.MessageNumber, sshDataStream.ReadByte());
  61. Assert.AreEqual((uint) _data.Length, sshDataStream.ReadUInt32());
  62. var actualData = new byte[_data.Length];
  63. sshDataStream.Read(actualData, 0, actualData.Length);
  64. Assert.IsTrue(_data.SequenceEqual(actualData));
  65. Assert.IsTrue(sshDataStream.IsEndOfData);
  66. }
  67. [TestMethod]
  68. public void Load()
  69. {
  70. var ignoreMessage = new IgnoreMessage(_data);
  71. var bytes = ignoreMessage.GetBytes();
  72. var target = new IgnoreMessage();
  73. target.Load(bytes, 1, bytes.Length - 1);
  74. Assert.IsNotNull(target.Data);
  75. Assert.AreEqual(_data.Length, target.Data.Length);
  76. Assert.IsTrue(target.Data.SequenceEqual(_data));
  77. }
  78. [TestMethod]
  79. public void Load_ShouldIgnoreDataWhenItsLengthIsGreatherThanItsActualBytes()
  80. {
  81. var ssh = new SshDataStream(1);
  82. ssh.WriteByte(2); // Type
  83. ssh.Write(5u); // Data length
  84. ssh.Write(new byte[3]); // Data
  85. var ignoreMessageBytes = ssh.ToArray();
  86. var ignoreMessage = new IgnoreMessage();
  87. ignoreMessage.Load(ignoreMessageBytes, 1, ignoreMessageBytes.Length - 1);
  88. Assert.IsNotNull(ignoreMessage.Data);
  89. Assert.AreEqual(0, ignoreMessage.Data.Length);
  90. }
  91. [TestMethod]
  92. public void Load_ShouldThrowNotSupportedExceptionWhenDataLengthIsGreaterThanInt32MaxValue()
  93. {
  94. var ssh = new SshDataStream(1);
  95. ssh.WriteByte(2); // Type
  96. ssh.Write(uint.MaxValue); // Data length
  97. ssh.Write(new byte[3]);
  98. var ignoreMessageBytes = ssh.ToArray();
  99. var ignoreMessage = new IgnoreMessage();
  100. try
  101. {
  102. ignoreMessage.Load(ignoreMessageBytes, 1, ignoreMessageBytes.Length - 1);
  103. Assert.Fail();
  104. }
  105. catch (NotSupportedException ex)
  106. {
  107. Assert.IsNull(ex.InnerException);
  108. Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Data longer than {0} is not supported.", int.MaxValue), ex.Message);
  109. }
  110. }
  111. }
  112. }