ChannelDataMessageTest.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. Assert.AreEqual(0, target.Offset);
  22. Assert.AreEqual(0, target.Size);
  23. }
  24. [TestMethod]
  25. public void Constructor_LocalChannelNumberAndData()
  26. {
  27. var random = new Random();
  28. var localChannelNumber = (uint)random.Next(0, int.MaxValue);
  29. var data = new byte[3];
  30. var target = new ChannelDataMessage(localChannelNumber, data);
  31. Assert.AreSame(data, target.Data);
  32. Assert.AreEqual(0, target.Offset);
  33. Assert.AreEqual(data.Length, target.Size);
  34. }
  35. [TestMethod]
  36. public void Constructor_LocalChannelNumberAndData_ShouldThrowArgumentNullExceptionWhenDataIsNull()
  37. {
  38. var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);
  39. const byte[] data = null;
  40. try
  41. {
  42. new ChannelDataMessage(localChannelNumber, data);
  43. Assert.Fail();
  44. }
  45. catch (ArgumentNullException ex)
  46. {
  47. Assert.IsNull(ex.InnerException);
  48. Assert.AreEqual("data", ex.ParamName);
  49. }
  50. }
  51. [TestMethod]
  52. public void Constructor_LocalChannelNumberAndDataAndOffsetAndSize()
  53. {
  54. var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);
  55. var data = new byte[4];
  56. const int offset = 2;
  57. const int size = 1;
  58. var target = new ChannelDataMessage(localChannelNumber, data, offset, size);
  59. Assert.AreSame(data, target.Data);
  60. Assert.AreEqual(offset, target.Offset);
  61. Assert.AreEqual(size, target.Size);
  62. }
  63. [TestMethod]
  64. public void Constructor_LocalChannelNumberAndDataAndOffsetAndSize_ShouldThrowArgumentNullExceptionWhenDataIsNull()
  65. {
  66. var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);
  67. const byte[] data = null;
  68. const int offset = 0;
  69. const int size = 0;
  70. try
  71. {
  72. new ChannelDataMessage(localChannelNumber, data, offset, size);
  73. Assert.Fail();
  74. }
  75. catch (ArgumentNullException ex)
  76. {
  77. Assert.IsNull(ex.InnerException);
  78. Assert.AreEqual("data", ex.ParamName);
  79. }
  80. }
  81. [TestMethod]
  82. public void GetBytes()
  83. {
  84. var random = new Random();
  85. var localChannelNumber = (uint) random.Next(0, int.MaxValue);
  86. var data = new byte[random.Next(10, 20)];
  87. random.NextBytes(data);
  88. var offset = random.Next(2, 4);
  89. var size = random.Next(5, 9);
  90. var target = new ChannelDataMessage(localChannelNumber, data, offset, size);
  91. var bytes = target.GetBytes();
  92. var expectedBytesLength = 1; // Type
  93. expectedBytesLength += 4; // LocalChannelNumber
  94. expectedBytesLength += 4; // Data length
  95. expectedBytesLength += size; // Data
  96. Assert.AreEqual(expectedBytesLength, bytes.Length);
  97. var sshDataStream = new SshDataStream(bytes);
  98. Assert.AreEqual(ChannelDataMessage.MessageNumber, sshDataStream.ReadByte());
  99. Assert.AreEqual(localChannelNumber, sshDataStream.ReadUInt32());
  100. Assert.AreEqual((uint) size, sshDataStream.ReadUInt32());
  101. var actualData = new byte[size];
  102. sshDataStream.Read(actualData, 0, size);
  103. Assert.IsTrue(actualData.SequenceEqual(data.Take(offset, size)));
  104. Assert.IsTrue(sshDataStream.IsEndOfData);
  105. }
  106. [TestMethod]
  107. public void Load()
  108. {
  109. var random = new Random();
  110. var localChannelNumber = (uint) random.Next(0, int.MaxValue);
  111. var data = new byte[random.Next(10, 20)];
  112. random.NextBytes(data);
  113. var offset = random.Next(2, 4);
  114. var size = random.Next(5, 9);
  115. var channelDataMessage = new ChannelDataMessage(localChannelNumber, data, offset, size);
  116. var bytes = channelDataMessage.GetBytes();
  117. var target = new ChannelDataMessage();
  118. target.Load(bytes, 1, bytes.Length - 1); // skip message type
  119. Assert.IsTrue(target.Data.SequenceEqual(data.Take(offset, size)));
  120. Assert.AreEqual(0, target.Offset);
  121. Assert.AreEqual(size, target.Size);
  122. }
  123. }
  124. }