2
0

PseudoTerminalInfoTest.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Text;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using Renci.SshNet.Common;
  7. using Renci.SshNet.Messages.Connection;
  8. namespace Renci.SshNet.Tests.Classes.Messages.Connection
  9. {
  10. /// <summary>
  11. /// Represents "pty-req" type channel request information
  12. /// </summary>
  13. [TestClass]
  14. public class PseudoTerminalRequestInfoTest
  15. {
  16. private string _environmentVariable;
  17. private uint _columns;
  18. private uint _rows;
  19. private uint _width;
  20. private uint _height;
  21. private IDictionary<TerminalModes, uint> _terminalModeValues;
  22. private byte[] _environmentVariableBytes;
  23. [TestInitialize]
  24. public void Init()
  25. {
  26. var random = new Random();
  27. _environmentVariable = random.Next().ToString(CultureInfo.InvariantCulture);
  28. _environmentVariableBytes = Encoding.UTF8.GetBytes(_environmentVariable);
  29. _columns = (uint)random.Next(0, int.MaxValue);
  30. _rows = (uint)random.Next(0, int.MaxValue);
  31. _width = (uint)random.Next(0, int.MaxValue);
  32. _height = (uint)random.Next(0, int.MaxValue);
  33. _terminalModeValues = new Dictionary<TerminalModes, uint>
  34. {
  35. {TerminalModes.CS8, 433},
  36. {TerminalModes.ECHO, 566}
  37. };
  38. }
  39. [TestMethod]
  40. public void GetBytes()
  41. {
  42. var target = new PseudoTerminalRequestInfo(_environmentVariable, _columns, _rows, _width, _height, _terminalModeValues);
  43. var bytes = target.GetBytes();
  44. var expectedBytesLength = 1; // WantReply
  45. expectedBytesLength += 4; // EnvironmentVariable length
  46. expectedBytesLength += _environmentVariableBytes.Length; // EnvironmentVariable
  47. expectedBytesLength += 4; // Columns
  48. expectedBytesLength += 4; // Rows
  49. expectedBytesLength += 4; // PixelWidth
  50. expectedBytesLength += 4; // PixelHeight
  51. expectedBytesLength += 4; // Length of "encoded terminal modes"
  52. expectedBytesLength += (_terminalModeValues.Count * (1 + 4)) + 1; // encoded terminal modes
  53. Assert.AreEqual(expectedBytesLength, bytes.Length);
  54. var sshDataStream = new SshDataStream(bytes);
  55. Assert.AreEqual(1, sshDataStream.ReadByte()); // WantReply
  56. Assert.AreEqual(_environmentVariable, sshDataStream.ReadString(Encoding.UTF8));
  57. Assert.AreEqual(_columns, sshDataStream.ReadUInt32());
  58. Assert.AreEqual(_rows, sshDataStream.ReadUInt32());
  59. Assert.AreEqual(_width, sshDataStream.ReadUInt32());
  60. Assert.AreEqual(_height, sshDataStream.ReadUInt32());
  61. Assert.AreEqual((uint)((_terminalModeValues.Count * (1 + 4)) + 1), sshDataStream.ReadUInt32());
  62. Assert.AreEqual((int)TerminalModes.CS8, sshDataStream.ReadByte());
  63. Assert.AreEqual(_terminalModeValues[TerminalModes.CS8], sshDataStream.ReadUInt32());
  64. Assert.AreEqual((int)TerminalModes.ECHO, sshDataStream.ReadByte());
  65. Assert.AreEqual(_terminalModeValues[TerminalModes.ECHO], sshDataStream.ReadUInt32());
  66. Assert.AreEqual((int)TerminalModes.TTY_OP_END, sshDataStream.ReadByte());
  67. Assert.IsTrue(sshDataStream.IsEndOfData);
  68. }
  69. [TestMethod]
  70. public void GetBytes_TerminalModeValues_Null()
  71. {
  72. var target = new PseudoTerminalRequestInfo(_environmentVariable, _columns, _rows, _width, _height, null);
  73. var bytes = target.GetBytes();
  74. var expectedBytesLength = 1; // WantReply
  75. expectedBytesLength += 4; // EnvironmentVariable length
  76. expectedBytesLength += _environmentVariableBytes.Length; // EnvironmentVariable
  77. expectedBytesLength += 4; // Columns
  78. expectedBytesLength += 4; // Rows
  79. expectedBytesLength += 4; // PixelWidth
  80. expectedBytesLength += 4; // PixelHeight
  81. expectedBytesLength += 4; // Length of "encoded terminal modes"
  82. Assert.AreEqual(expectedBytesLength, bytes.Length);
  83. var sshDataStream = new SshDataStream(bytes);
  84. Assert.AreEqual(1, sshDataStream.ReadByte()); // WantReply
  85. Assert.AreEqual(_environmentVariable, sshDataStream.ReadString(Encoding.UTF8));
  86. Assert.AreEqual(_columns, sshDataStream.ReadUInt32());
  87. Assert.AreEqual(_rows, sshDataStream.ReadUInt32());
  88. Assert.AreEqual(_width, sshDataStream.ReadUInt32());
  89. Assert.AreEqual(_height, sshDataStream.ReadUInt32());
  90. Assert.AreEqual((uint)0, sshDataStream.ReadUInt32());
  91. Assert.IsTrue(sshDataStream.IsEndOfData);
  92. }
  93. [TestMethod]
  94. public void GetBytes_TerminalModeValues_Empty()
  95. {
  96. var target = new PseudoTerminalRequestInfo(_environmentVariable,
  97. _columns,
  98. _rows,
  99. _width,
  100. _height,
  101. new Dictionary<TerminalModes, uint>());
  102. var bytes = target.GetBytes();
  103. var expectedBytesLength = 1; // WantReply
  104. expectedBytesLength += 4; // EnvironmentVariable length
  105. expectedBytesLength += _environmentVariableBytes.Length; // EnvironmentVariable
  106. expectedBytesLength += 4; // Columns
  107. expectedBytesLength += 4; // Rows
  108. expectedBytesLength += 4; // PixelWidth
  109. expectedBytesLength += 4; // PixelHeight
  110. expectedBytesLength += 4; // Length of "encoded terminal modes"
  111. Assert.AreEqual(expectedBytesLength, bytes.Length);
  112. var sshDataStream = new SshDataStream(bytes);
  113. Assert.AreEqual(1, sshDataStream.ReadByte()); // WantReply
  114. Assert.AreEqual(_environmentVariable, sshDataStream.ReadString(Encoding.UTF8));
  115. Assert.AreEqual(_columns, sshDataStream.ReadUInt32());
  116. Assert.AreEqual(_rows, sshDataStream.ReadUInt32());
  117. Assert.AreEqual(_width, sshDataStream.ReadUInt32());
  118. Assert.AreEqual(_height, sshDataStream.ReadUInt32());
  119. Assert.AreEqual((uint)0, sshDataStream.ReadUInt32());
  120. Assert.IsTrue(sshDataStream.IsEndOfData);
  121. }
  122. [TestMethod]
  123. public void DefaultCtor()
  124. {
  125. var ptyReq = new PseudoTerminalRequestInfo();
  126. Assert.IsTrue(ptyReq.WantReply);
  127. Assert.AreEqual(uint.MinValue, ptyReq.Columns);
  128. Assert.IsNull(ptyReq.EnvironmentVariable);
  129. Assert.AreEqual("pty-req", ptyReq.RequestName);
  130. Assert.AreEqual(uint.MinValue, ptyReq.PixelHeight);
  131. Assert.AreEqual(uint.MinValue, ptyReq.PixelWidth);
  132. Assert.AreEqual(uint.MinValue, ptyReq.Rows);
  133. Assert.IsNull(ptyReq.TerminalModeValues);
  134. }
  135. [TestMethod]
  136. public void FullCtor()
  137. {
  138. var ptyReq = new PseudoTerminalRequestInfo(_environmentVariable, _columns, _rows, _width, _height, _terminalModeValues);
  139. Assert.IsTrue(ptyReq.WantReply);
  140. Assert.AreEqual(_columns, ptyReq.Columns);
  141. Assert.AreSame(_environmentVariable, ptyReq.EnvironmentVariable);
  142. Assert.AreEqual("pty-req", ptyReq.RequestName);
  143. Assert.AreEqual(_height, ptyReq.PixelHeight);
  144. Assert.AreEqual(_width, ptyReq.PixelWidth);
  145. Assert.AreEqual(_rows, ptyReq.Rows);
  146. Assert.AreSame(_terminalModeValues, ptyReq.TerminalModeValues);
  147. }
  148. }
  149. }