|
|
@@ -1,52 +1,279 @@
|
|
|
-using Renci.SshNet.Messages.Connection;
|
|
|
+using System.Globalization;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using Renci.SshNet.Common;
|
|
|
+using Renci.SshNet.Messages.Connection;
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
using System;
|
|
|
-using Renci.SshNet.Tests.Common;
|
|
|
|
|
|
namespace Renci.SshNet.Tests.Classes.Messages.Connection
|
|
|
{
|
|
|
- /// <summary>
|
|
|
- ///This is a test class for ChannelOpenMessageTest and is intended
|
|
|
- ///to contain all ChannelOpenMessageTest Unit Tests
|
|
|
- ///</summary>
|
|
|
[TestClass]
|
|
|
- [Ignore] // placeholders only
|
|
|
- public class ChannelOpenMessageTest : TestBase
|
|
|
+ public class ChannelOpenMessageTest
|
|
|
{
|
|
|
- /// <summary>
|
|
|
- ///A test for ChannelOpenMessage Constructor
|
|
|
- ///</summary>
|
|
|
- [TestMethod()]
|
|
|
- public void ChannelOpenMessageConstructorTest()
|
|
|
- {
|
|
|
- ChannelOpenMessage target = new ChannelOpenMessage();
|
|
|
- Assert.Inconclusive("TODO: Implement code to verify target");
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- ///A test for ChannelOpenMessage Constructor
|
|
|
- ///</summary>
|
|
|
- [TestMethod()]
|
|
|
- public void ChannelOpenMessageConstructorTest1()
|
|
|
- {
|
|
|
- uint channelNumber = 0; // TODO: Initialize to an appropriate value
|
|
|
- uint initialWindowSize = 0; // TODO: Initialize to an appropriate value
|
|
|
- uint maximumPacketSize = 0; // TODO: Initialize to an appropriate value
|
|
|
- ChannelOpenInfo info = null; // TODO: Initialize to an appropriate value
|
|
|
- ChannelOpenMessage target = new ChannelOpenMessage(channelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
- Assert.Inconclusive("TODO: Implement code to verify target");
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- ///A test for ChannelType
|
|
|
- ///</summary>
|
|
|
- [TestMethod()]
|
|
|
- public void ChannelTypeTest()
|
|
|
- {
|
|
|
- ChannelOpenMessage target = new ChannelOpenMessage(); // TODO: Initialize to an appropriate value
|
|
|
- string actual;
|
|
|
- actual = target.ChannelType;
|
|
|
- Assert.Inconclusive("Verify the correctness of this test method.");
|
|
|
+ private Random _random;
|
|
|
+ private Encoding _ascii;
|
|
|
+
|
|
|
+ [TestInitialize]
|
|
|
+ public void Init()
|
|
|
+ {
|
|
|
+ _random = new Random();
|
|
|
+ _ascii = Encoding.ASCII;
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void DefaultConstructor()
|
|
|
+ {
|
|
|
+ var target = new ChannelOpenMessage();
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ Assert.IsNull(target.ChannelType);
|
|
|
+#endif
|
|
|
+ Assert.IsNull(target.Info);
|
|
|
+ Assert.AreEqual(default(uint), target.InitialWindowSize);
|
|
|
+ Assert.AreEqual(default(uint), target.LocalChannelNumber);
|
|
|
+ Assert.AreEqual(default(uint), target.MaximumPacketSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Constructor_LocalChannelNumberAndInitialWindowSizeAndMaximumPacketSizeAndInfo()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint) _random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint) _random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint) _random.Next(0, int.MaxValue);
|
|
|
+ var info = new DirectTcpipChannelInfo("host", 22, "originator", 25);
|
|
|
+
|
|
|
+ var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType));
|
|
|
+#else
|
|
|
+ Assert.AreEqual(info.ChannelType, target.ChannelType);
|
|
|
+#endif
|
|
|
+ Assert.AreSame(info, target.Info);
|
|
|
+ Assert.AreEqual(initialWindowSize, target.InitialWindowSize);
|
|
|
+ Assert.AreEqual(localChannelNumber, target.LocalChannelNumber);
|
|
|
+ Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Constructor_LocalChannelNumberAndInitialWindowSizeAndMaximumPacketSizeAndInfo_ShouldThrowArgumentNullExceptionWhenInfoIsNull()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint) _random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint) _random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint) _random.Next(0, int.MaxValue);
|
|
|
+ ChannelOpenInfo info = null;
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+ Assert.Fail();
|
|
|
+ }
|
|
|
+ catch (ArgumentNullException ex)
|
|
|
+ {
|
|
|
+ Assert.IsNull(ex.InnerException);
|
|
|
+ Assert.AreEqual("info", ex.ParamName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void GetBytes()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var info = new DirectTcpipChannelInfo("host", 22, "originator", 25);
|
|
|
+ var infoBytes = info.GetBytes();
|
|
|
+ var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+
|
|
|
+ var bytes = target.GetBytes();
|
|
|
+
|
|
|
+ var expectedBytesLength = 1; // Type
|
|
|
+ expectedBytesLength += 4; // ChannelType length
|
|
|
+ expectedBytesLength += target.ChannelType.Length; // ChannelType
|
|
|
+ expectedBytesLength += 4; // LocalChannelNumber
|
|
|
+ expectedBytesLength += 4; // InitialWindowSize
|
|
|
+ expectedBytesLength += 4; // MaximumPacketSize
|
|
|
+ expectedBytesLength += infoBytes.Length; // Info
|
|
|
+
|
|
|
+ Assert.AreEqual(expectedBytesLength, bytes.Length);
|
|
|
+
|
|
|
+ var sshDataStream = new SshDataStream(bytes);
|
|
|
+
|
|
|
+ Assert.AreEqual(ChannelOpenMessage.MessageNumber, sshDataStream.ReadByte());
|
|
|
+
|
|
|
+ var actualChannelTypeLength = sshDataStream.ReadUInt32();
|
|
|
+ Assert.AreEqual((uint) target.ChannelType.Length, actualChannelTypeLength);
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ var actualChannelType = new byte[actualChannelTypeLength];
|
|
|
+ sshDataStream.Read(actualChannelType, 0, (int) actualChannelTypeLength);
|
|
|
+ Assert.IsTrue(target.ChannelType.SequenceEqual(actualChannelType));
|
|
|
+#else
|
|
|
+ var actualChannelType = new byte[actualChannelTypeLength];
|
|
|
+ sshDataStream.Read(actualChannelType, 0, (int) actualChannelTypeLength);
|
|
|
+ Assert.AreEqual(target.ChannelType, SshData.Ascii.GetString(actualChannelType));
|
|
|
+#endif
|
|
|
+
|
|
|
+ Assert.AreEqual(localChannelNumber, sshDataStream.ReadUInt32());
|
|
|
+ Assert.AreEqual(initialWindowSize, sshDataStream.ReadUInt32());
|
|
|
+ Assert.AreEqual(maximumPacketSize, sshDataStream.ReadUInt32());
|
|
|
+
|
|
|
+ var actualInfo = new byte[infoBytes.Length];
|
|
|
+ sshDataStream.Read(actualInfo, 0, actualInfo.Length);
|
|
|
+ Assert.IsTrue(infoBytes.SequenceEqual(actualInfo));
|
|
|
+
|
|
|
+ Assert.IsTrue(sshDataStream.IsEndOfData);
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Load_DirectTcpipChannelInfo()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var info = new DirectTcpipChannelInfo("host", 22, "originator", 25);
|
|
|
+ var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+ var bytes = target.GetBytes();
|
|
|
+
|
|
|
+ target.Load(bytes);
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType));
|
|
|
+#else
|
|
|
+ Assert.AreEqual(info.ChannelType, target.ChannelType);
|
|
|
+#endif
|
|
|
+ Assert.IsNotNull(target.Info);
|
|
|
+ Assert.AreEqual(initialWindowSize, target.InitialWindowSize);
|
|
|
+ Assert.AreEqual(localChannelNumber, target.LocalChannelNumber);
|
|
|
+ Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize);
|
|
|
+
|
|
|
+ var directTcpChannelInfo = target.Info as DirectTcpipChannelInfo;
|
|
|
+ Assert.IsNotNull(directTcpChannelInfo);
|
|
|
+ Assert.AreEqual(info.ChannelType, directTcpChannelInfo.ChannelType);
|
|
|
+ Assert.AreEqual(info.HostToConnect, directTcpChannelInfo.HostToConnect);
|
|
|
+ Assert.AreEqual(info.OriginatorAddress, directTcpChannelInfo.OriginatorAddress);
|
|
|
+ Assert.AreEqual(info.OriginatorPort, directTcpChannelInfo.OriginatorPort);
|
|
|
+ Assert.AreEqual(info.PortToConnect, directTcpChannelInfo.PortToConnect);
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Load_ForwardedTcpipChannelInfo()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var info = new ForwardedTcpipChannelInfo("connected", 25, "originator", 21);
|
|
|
+ var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+ var bytes = target.GetBytes();
|
|
|
+
|
|
|
+ target.Load(bytes);
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType));
|
|
|
+#else
|
|
|
+ Assert.AreEqual(info.ChannelType, target.ChannelType);
|
|
|
+#endif
|
|
|
+ Assert.IsNotNull(target.Info);
|
|
|
+ Assert.AreEqual(initialWindowSize, target.InitialWindowSize);
|
|
|
+ Assert.AreEqual(localChannelNumber, target.LocalChannelNumber);
|
|
|
+ Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize);
|
|
|
+
|
|
|
+ var forwardedTcpipChannelInfo = target.Info as ForwardedTcpipChannelInfo;
|
|
|
+ Assert.IsNotNull(forwardedTcpipChannelInfo);
|
|
|
+ Assert.AreEqual(info.ChannelType, forwardedTcpipChannelInfo.ChannelType);
|
|
|
+ Assert.AreEqual(info.ConnectedAddress, forwardedTcpipChannelInfo.ConnectedAddress);
|
|
|
+ Assert.AreEqual(info.ConnectedPort, forwardedTcpipChannelInfo.ConnectedPort);
|
|
|
+ Assert.AreEqual(info.OriginatorAddress, forwardedTcpipChannelInfo.OriginatorAddress);
|
|
|
+ Assert.AreEqual(info.OriginatorPort, forwardedTcpipChannelInfo.OriginatorPort);
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Load_SessionChannelOpenInfo()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var info = new SessionChannelOpenInfo();
|
|
|
+ var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+ var bytes = target.GetBytes();
|
|
|
+
|
|
|
+ target.Load(bytes);
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType));
|
|
|
+#else
|
|
|
+ Assert.AreEqual(info.ChannelType, target.ChannelType);
|
|
|
+#endif
|
|
|
+ Assert.IsNotNull(target.Info);
|
|
|
+ Assert.AreEqual(initialWindowSize, target.InitialWindowSize);
|
|
|
+ Assert.AreEqual(localChannelNumber, target.LocalChannelNumber);
|
|
|
+ Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize);
|
|
|
+
|
|
|
+ var sessionChannelOpenInfo = target.Info as SessionChannelOpenInfo;
|
|
|
+ Assert.IsNotNull(sessionChannelOpenInfo);
|
|
|
+ Assert.AreEqual(info.ChannelType, sessionChannelOpenInfo.ChannelType);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Load_X11ChannelOpenInfo()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var info = new X11ChannelOpenInfo("address", 26);
|
|
|
+ var target = new ChannelOpenMessage(localChannelNumber, initialWindowSize, maximumPacketSize, info);
|
|
|
+ var bytes = target.GetBytes();
|
|
|
+
|
|
|
+ target.Load(bytes);
|
|
|
+
|
|
|
+#if TUNING
|
|
|
+ Assert.AreEqual(info.ChannelType, _ascii.GetString(target.ChannelType));
|
|
|
+#else
|
|
|
+ Assert.AreEqual(info.ChannelType, target.ChannelType);
|
|
|
+#endif
|
|
|
+ Assert.IsNotNull(target.Info);
|
|
|
+ Assert.AreEqual(initialWindowSize, target.InitialWindowSize);
|
|
|
+ Assert.AreEqual(localChannelNumber, target.LocalChannelNumber);
|
|
|
+ Assert.AreEqual(maximumPacketSize, target.MaximumPacketSize);
|
|
|
+
|
|
|
+ var x11ChannelOpenInfo = target.Info as X11ChannelOpenInfo;
|
|
|
+ Assert.IsNotNull(x11ChannelOpenInfo);
|
|
|
+ Assert.AreEqual(info.ChannelType, x11ChannelOpenInfo.ChannelType);
|
|
|
+ Assert.AreEqual(info.OriginatorAddress, x11ChannelOpenInfo.OriginatorAddress);
|
|
|
+ Assert.AreEqual(info.OriginatorPort, x11ChannelOpenInfo.OriginatorPort);
|
|
|
+ }
|
|
|
+
|
|
|
+ [TestMethod]
|
|
|
+ public void Load_ShouldThrowNotSupportedExceptionWhenChannelTypeIsNotSupported()
|
|
|
+ {
|
|
|
+ var localChannelNumber = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var initialWindowSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var maximumPacketSize = (uint)_random.Next(0, int.MaxValue);
|
|
|
+ var channelName = "dunno_" + _random.Next().ToString(CultureInfo.InvariantCulture);
|
|
|
+ var channelType = _ascii.GetBytes(channelName);
|
|
|
+
|
|
|
+ var sshDataStream = new SshDataStream(1 + 4 + channelType.Length + 4 + 4 + 4);
|
|
|
+ sshDataStream.WriteByte(ChannelOpenMessage.MessageNumber);
|
|
|
+ sshDataStream.Write((uint) channelType.Length);
|
|
|
+ sshDataStream.Write(channelType, 0, channelType.Length);
|
|
|
+ sshDataStream.Write(localChannelNumber);
|
|
|
+ sshDataStream.Write(initialWindowSize);
|
|
|
+ sshDataStream.Write(maximumPacketSize);
|
|
|
+ var bytes = sshDataStream.ToArray();
|
|
|
+ var target = new ChannelOpenMessage();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ target.Load(bytes);
|
|
|
+ Assert.Fail();
|
|
|
+ }
|
|
|
+ catch (NotSupportedException ex)
|
|
|
+ {
|
|
|
+ Assert.IsNull(ex.InnerException);
|
|
|
+ Assert.AreEqual(string.Format("Channel type '{0}' is not supported.", channelName), ex.Message);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|