ChannelDataMessageTest.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System.Linq;
  2. using Renci.SshNet.Common;
  3. using Renci.SshNet.Messages.Connection;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using System;
  6. using Renci.SshNet.Tests.Common;
  7. namespace Renci.SshNet.Tests.Classes.Messages.Connection
  8. {
  9. /// <summary>
  10. ///This is a test class for ChannelDataMessageTest and is intended
  11. ///to contain all ChannelDataMessageTest Unit Tests
  12. ///</summary>
  13. [TestClass]
  14. public class ChannelDataMessageTest : TestBase
  15. {
  16. [TestMethod]
  17. public void DefaultConstructor()
  18. {
  19. var target = new ChannelDataMessage();
  20. Assert.IsNull(target.Data);
  21. #if TUNING
  22. Assert.AreEqual(0, target.Offset);
  23. Assert.AreEqual(0, target.Size);
  24. #endif
  25. }
  26. [TestMethod]
  27. public void Constructor_LocalChannelNumberAndData()
  28. {
  29. var random = new Random();
  30. var localChannelNumber = (uint)random.Next(0, int.MaxValue);
  31. var data = new byte[3];
  32. var target = new ChannelDataMessage(localChannelNumber, data);
  33. Assert.AreSame(data, target.Data);
  34. #if TUNING
  35. Assert.AreEqual(0, target.Offset);
  36. Assert.AreEqual(data.Length, target.Size);
  37. #endif
  38. }
  39. [TestMethod]
  40. public void Constructor_LocalChannelNumberAndData_ShouldThrowArgumentNullExceptionWhenDataIsNull()
  41. {
  42. var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);
  43. byte[] data = null;
  44. try
  45. {
  46. new ChannelDataMessage(localChannelNumber, data);
  47. Assert.Fail();
  48. }
  49. catch (ArgumentNullException ex)
  50. {
  51. Assert.IsNull(ex.InnerException);
  52. Assert.AreEqual("data", ex.ParamName);
  53. }
  54. }
  55. #if TUNING
  56. [TestMethod]
  57. public void Constructor_LocalChannelNumberAndDataAndOffsetAndSize()
  58. {
  59. var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);
  60. var data = new byte[4];
  61. const int offset = 2;
  62. const int size = 1;
  63. var target = new ChannelDataMessage(localChannelNumber, data, offset, size);
  64. Assert.AreSame(data, target.Data);
  65. Assert.AreEqual(offset, target.Offset);
  66. Assert.AreEqual(size, target.Size);
  67. }
  68. [TestMethod]
  69. public void Constructor_LocalChannelNumberAndDataAndOffsetAndSize_ShouldThrowArgumentNullExceptionWhenDataIsNull()
  70. {
  71. var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);
  72. byte[] data = null;
  73. const int offset = 0;
  74. const int size = 0;
  75. try
  76. {
  77. new ChannelDataMessage(localChannelNumber, data, offset, size);
  78. Assert.Fail();
  79. }
  80. catch (ArgumentNullException ex)
  81. {
  82. Assert.IsNull(ex.InnerException);
  83. Assert.AreEqual("data", ex.ParamName);
  84. }
  85. }
  86. #endif
  87. [TestMethod]
  88. public void GetBytes()
  89. {
  90. var random = new Random();
  91. var localChannelNumber = (uint) random.Next(0, int.MaxValue);
  92. var data = new byte[random.Next(10, 20)];
  93. random.NextBytes(data);
  94. #if TUNING
  95. var offset = random.Next(2, 4);
  96. var size = random.Next(5, 9);
  97. var target = new ChannelDataMessage(localChannelNumber, data, offset, size);
  98. #else
  99. var offset = 0;
  100. var size = data.Length;
  101. var target = new ChannelDataMessage(localChannelNumber, data);
  102. #endif
  103. var bytes = target.GetBytes();
  104. var expectedBytesLength = 1; // Type
  105. expectedBytesLength += 4; // LocalChannelNumber
  106. expectedBytesLength += 4; // Data length
  107. expectedBytesLength += size; // Data
  108. Assert.AreEqual(expectedBytesLength, bytes.Length);
  109. var sshDataStream = new SshDataStream(bytes);
  110. Assert.AreEqual(ChannelDataMessage.MessageNumber, sshDataStream.ReadByte());
  111. Assert.AreEqual(localChannelNumber, sshDataStream.ReadUInt32());
  112. Assert.AreEqual((uint) size, sshDataStream.ReadUInt32());
  113. var actualData = new byte[size];
  114. sshDataStream.Read(actualData, 0, size);
  115. Assert.IsTrue(actualData.SequenceEqual(data.Take(offset, size)));
  116. Assert.IsTrue(sshDataStream.IsEndOfData);
  117. }
  118. [TestMethod]
  119. public void Load()
  120. {
  121. var random = new Random();
  122. var localChannelNumber = (uint)random.Next(0, int.MaxValue);
  123. var data = new byte[random.Next(10, 20)];
  124. random.NextBytes(data);
  125. #if TUNING
  126. var offset = random.Next(2, 4);
  127. var size = random.Next(5, 9);
  128. var channelDataMessage = new ChannelDataMessage(localChannelNumber, data, offset, size);
  129. #else
  130. var offset = 0;
  131. var size = data.Length;
  132. var channelDataMessage = new ChannelDataMessage(localChannelNumber, data);
  133. #endif
  134. var bytes = channelDataMessage.GetBytes();
  135. var target = new ChannelDataMessage();
  136. target.Load(bytes);
  137. Assert.IsTrue(target.Data.SequenceEqual(data.Take(offset, size)));
  138. #if TUNING
  139. Assert.AreEqual(0, target.Offset);
  140. Assert.AreEqual(size, target.Size);
  141. #endif
  142. }
  143. }
  144. }