| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | using System.Linq;using Renci.SshNet.Common;using Renci.SshNet.Messages.Connection;using Microsoft.VisualStudio.TestTools.UnitTesting;using System;using Renci.SshNet.Abstractions;using Renci.SshNet.Tests.Common;namespace Renci.SshNet.Tests.Classes.Messages.Connection{    /// <summary>    /// This is a test class for ChannelDataMessageTest and is intended    /// to contain all ChannelDataMessageTest Unit Tests    /// </summary>    [TestClass]    public class ChannelDataMessageTest : TestBase    {        [TestMethod]        public void DefaultConstructor()        {            var target = new ChannelDataMessage();            Assert.IsNull(target.Data);            Assert.AreEqual(0, target.Offset);            Assert.AreEqual(0, target.Size);        }        [TestMethod]        public void Constructor_LocalChannelNumberAndData()        {            var random = new Random();            var localChannelNumber = (uint)random.Next(0, int.MaxValue);            var data = new byte[3];            var target = new ChannelDataMessage(localChannelNumber, data);            Assert.AreSame(data, target.Data);            Assert.AreEqual(0, target.Offset);            Assert.AreEqual(data.Length, target.Size);        }        [TestMethod]        public void Constructor_LocalChannelNumberAndData_ShouldThrowArgumentNullExceptionWhenDataIsNull()        {            var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);            const byte[] data = null;            try            {                new ChannelDataMessage(localChannelNumber, data);                Assert.Fail();            }            catch (ArgumentNullException ex)            {                Assert.IsNull(ex.InnerException);                Assert.AreEqual("data", ex.ParamName);            }        }        [TestMethod]        public void Constructor_LocalChannelNumberAndDataAndOffsetAndSize()        {            var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);            var data = new byte[4];            const int offset = 2;            const int size = 1;            var target = new ChannelDataMessage(localChannelNumber, data, offset, size);            Assert.AreSame(data, target.Data);            Assert.AreEqual(offset, target.Offset);            Assert.AreEqual(size, target.Size);        }        [TestMethod]        public void Constructor_LocalChannelNumberAndDataAndOffsetAndSize_ShouldThrowArgumentNullExceptionWhenDataIsNull()        {            var localChannelNumber = (uint) new Random().Next(0, int.MaxValue);            const byte[] data = null;            const int offset = 0;            const int size = 0;            try            {                new ChannelDataMessage(localChannelNumber, data, offset, size);                Assert.Fail();            }            catch (ArgumentNullException ex)            {                Assert.IsNull(ex.InnerException);                Assert.AreEqual("data", ex.ParamName);            }        }        [TestMethod]        public void GetBytes()        {            var random = new Random();            var localChannelNumber = (uint) random.Next(0, int.MaxValue);            var data = CryptoAbstraction.GenerateRandom(random.Next(10, 20));            var offset = random.Next(0, data.Length - 1);            var size = random.Next(0, data.Length - offset);            var target = new ChannelDataMessage(localChannelNumber, data, offset, size);            var bytes = target.GetBytes();            var expectedBytesLength = 1; // Type            expectedBytesLength += 4; // LocalChannelNumber            expectedBytesLength += 4; // Data length            expectedBytesLength += size; // Data            Assert.AreEqual(expectedBytesLength, bytes.Length);            var sshDataStream = new SshDataStream(bytes);            Assert.AreEqual(target.MessageNumber, sshDataStream.ReadByte());            Assert.AreEqual(localChannelNumber, sshDataStream.ReadUInt32());            Assert.AreEqual((uint) size, sshDataStream.ReadUInt32());            var actualData = new byte[size];            sshDataStream.Read(actualData, 0, size);            Assert.IsTrue(actualData.SequenceEqual(data.Take(offset, size)));            Assert.IsTrue(sshDataStream.IsEndOfData);        }        [TestMethod]        public void Load()        {            var random = new Random();            var localChannelNumber = (uint) random.Next(0, int.MaxValue);            var data = CryptoAbstraction.GenerateRandom(random.Next(10, 20));            var offset = random.Next(0, data.Length - 1);            var size = random.Next(0, data.Length - offset);            var channelDataMessage = new ChannelDataMessage(localChannelNumber, data, offset, size);            var bytes = channelDataMessage.GetBytes();            var target = new ChannelDataMessage();            target.Load(bytes, 1, bytes.Length - 1); // skip message type            Assert.IsTrue(target.Data.SequenceEqual(data.Take(offset, size)));            Assert.AreEqual(0, target.Offset);            Assert.AreEqual(size, target.Size);        }    }}
 |