mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 17:25:51 +00:00
41053cb80f
* Initial plan * Refactor collection assertions to use CollectionAssert.AreEqual Replace Assert.IsTrue(xxx.IsEqualTo(yyy)) and Assert.IsTrue(xxx.SequenceEqual(yyy)) with CollectionAssert.AreEqual(expected, actual) across 55 test files Co-authored-by: Rob-Hague <5132141+Rob-Hague@users.noreply.github.com> * Fix argument order in CollectionAssert.AreEqual and remove unnecessary using directives - Fixed argument order in KeyExchangeDhGroupExchangeReplyTest.cs (expected first, actual second) - Fixed argument order in KeyExchangeInitMessageTest.cs (expected first, actual second) - Removed unnecessary 'using System.Linq' directives from all affected test files Co-authored-by: Rob-Hague <5132141+Rob-Hague@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Rob-Hague <5132141+Rob-Hague@users.noreply.github.com> Co-authored-by: Rob Hague <rob.hague00@gmail.com>
146 lines
5.3 KiB
C#
146 lines
5.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Text;
|
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
using Renci.SshNet.Common;
|
|
using Renci.SshNet.Sftp;
|
|
using Renci.SshNet.Sftp.Requests;
|
|
using Renci.SshNet.Sftp.Responses;
|
|
using Renci.SshNet.Tests.Common;
|
|
|
|
namespace Renci.SshNet.Tests.Classes.Sftp.Requests
|
|
{
|
|
[TestClass]
|
|
public class SftpOpenRequestTest
|
|
{
|
|
private uint _protocolVersion;
|
|
private uint _requestId;
|
|
private Encoding _encoding;
|
|
private string _filename;
|
|
private byte[] _filenameBytes;
|
|
private Flags _flags;
|
|
private SftpFileAttributes _attributes;
|
|
private byte[] _attributesBytes;
|
|
|
|
[TestInitialize]
|
|
public void Init()
|
|
{
|
|
var random = new Random();
|
|
|
|
_protocolVersion = (uint)random.Next(0, int.MaxValue);
|
|
_requestId = (uint)random.Next(0, int.MaxValue);
|
|
_encoding = Encoding.Unicode;
|
|
_filename = random.Next().ToString(CultureInfo.InvariantCulture);
|
|
_filenameBytes = _encoding.GetBytes(_filename);
|
|
_flags = Flags.Read;
|
|
_attributes = SftpFileAttributesBuilder.Empty;
|
|
_attributesBytes = _attributes.GetBytes();
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Constructor()
|
|
{
|
|
var request = new SftpOpenRequest(_protocolVersion, _requestId, _filename, _encoding, _flags, null, null);
|
|
|
|
Assert.AreSame(_encoding, request.Encoding);
|
|
Assert.AreEqual(_filename, request.Filename);
|
|
Assert.AreEqual(_protocolVersion, request.ProtocolVersion);
|
|
Assert.AreEqual(_requestId, request.RequestId);
|
|
Assert.AreEqual(SftpMessageTypes.Open, request.SftpMessageType);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Complete_SftpHandleResponse()
|
|
{
|
|
var statusActionInvocations = new List<SftpStatusResponse>();
|
|
var handleActionInvocations = new List<SftpHandleResponse>();
|
|
|
|
Action<SftpStatusResponse> statusAction = statusActionInvocations.Add;
|
|
Action<SftpHandleResponse> handleAction = handleActionInvocations.Add;
|
|
var handleResponse = new SftpHandleResponse(_protocolVersion);
|
|
|
|
var request = new SftpOpenRequest(
|
|
_protocolVersion,
|
|
_requestId,
|
|
_filename,
|
|
_encoding,
|
|
_flags,
|
|
handleAction,
|
|
statusAction);
|
|
|
|
request.Complete(handleResponse);
|
|
|
|
Assert.IsEmpty(statusActionInvocations);
|
|
Assert.HasCount(1, handleActionInvocations);
|
|
Assert.AreSame(handleResponse, handleActionInvocations[0]);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Complete_SftpStatusResponse()
|
|
{
|
|
var statusActionInvocations = new List<SftpStatusResponse>();
|
|
var handleActionInvocations = new List<SftpHandleResponse>();
|
|
|
|
Action<SftpStatusResponse> statusAction = statusActionInvocations.Add;
|
|
Action<SftpHandleResponse> handleAction = handleActionInvocations.Add;
|
|
var statusResponse = new SftpStatusResponse(_protocolVersion);
|
|
|
|
var request = new SftpOpenRequest(
|
|
_protocolVersion,
|
|
_requestId,
|
|
_filename,
|
|
_encoding,
|
|
_flags,
|
|
handleAction,
|
|
statusAction);
|
|
|
|
request.Complete(statusResponse);
|
|
|
|
Assert.HasCount(1, statusActionInvocations);
|
|
Assert.AreSame(statusResponse, statusActionInvocations[0]);
|
|
Assert.IsEmpty(handleActionInvocations);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetBytes()
|
|
{
|
|
var request = new SftpOpenRequest(_protocolVersion, _requestId, _filename, _encoding, _flags, null, null);
|
|
|
|
var bytes = request.GetBytes();
|
|
|
|
var expectedBytesLength = 0;
|
|
expectedBytesLength += 4; // Length
|
|
expectedBytesLength += 1; // Type
|
|
expectedBytesLength += 4; // RequestId
|
|
expectedBytesLength += 4; // Filename length
|
|
expectedBytesLength += _filenameBytes.Length; // Filename
|
|
expectedBytesLength += 4; // Flags
|
|
expectedBytesLength += _attributesBytes.Length; // Attributes
|
|
|
|
Assert.HasCount(expectedBytesLength, bytes);
|
|
|
|
var sshDataStream = new SshDataStream(bytes);
|
|
|
|
Assert.AreEqual((uint)bytes.Length - 4, sshDataStream.ReadUInt32());
|
|
Assert.AreEqual((byte)SftpMessageTypes.Open, sshDataStream.ReadByte());
|
|
Assert.AreEqual(_requestId, sshDataStream.ReadUInt32());
|
|
|
|
Assert.AreEqual((uint)_filenameBytes.Length, sshDataStream.ReadUInt32());
|
|
var actualPath = new byte[_filenameBytes.Length];
|
|
_ = sshDataStream.Read(actualPath, 0, actualPath.Length);
|
|
CollectionAssert.AreEqual(_filenameBytes, actualPath);
|
|
|
|
Assert.AreEqual((uint)_flags, sshDataStream.ReadUInt32());
|
|
|
|
var actualAttributes = new byte[_attributesBytes.Length];
|
|
_ = sshDataStream.Read(actualAttributes, 0, actualAttributes.Length);
|
|
CollectionAssert.AreEqual(_attributesBytes, actualAttributes);
|
|
|
|
Assert.IsTrue(sshDataStream.IsEndOfData);
|
|
}
|
|
}
|
|
}
|