mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 14:07:46 +08:00
106 lines
5.7 KiB
C#
106 lines
5.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using mRemoteNG.Connection;
|
|
using mRemoteNG.Security;
|
|
using mRemoteNG.Tools;
|
|
using NUnit.Framework;
|
|
|
|
|
|
namespace mRemoteNGTests.Tools
|
|
{
|
|
public class ExternalToolsArgumentParserTests
|
|
{
|
|
private ExternalToolArgumentParser _argumentParser;
|
|
private const string TestString = @"()%!^abc123*<>&|""'\";
|
|
private const string StringAfterMetacharacterEscaping = @"^(^)^%^!^^abc123*^<^>^&^|^""'\";
|
|
private const string StringAfterAllEscaping = @"^(^)^%^!^^abc123*^<^>^&^|\^""'\";
|
|
private const string StringAfterNoEscaping = TestString;
|
|
private const int Port = 9933;
|
|
private const string PortAsString = "9933";
|
|
private const string SampleCommandString = @"/k echo ()%!^abc123*<>&|""'\";
|
|
|
|
|
|
[OneTimeSetUp]
|
|
public void Setup()
|
|
{
|
|
var connectionInfo = new ConnectionInfo
|
|
{
|
|
Name = TestString,
|
|
Hostname = TestString,
|
|
Port = Port,
|
|
Username = TestString,
|
|
Password = TestString.ConvertToSecureString(),
|
|
Domain = TestString,
|
|
Description = TestString,
|
|
MacAddress = TestString,
|
|
UserField = TestString
|
|
};
|
|
_argumentParser = new ExternalToolArgumentParser(connectionInfo);
|
|
}
|
|
|
|
[OneTimeTearDown]
|
|
public void Teardown()
|
|
{
|
|
_argumentParser = null;
|
|
}
|
|
|
|
[TestCaseSource(typeof(ParserTestsDataSource), nameof(ParserTestsDataSource.TestCases))]
|
|
public string ParserTests(string argumentString)
|
|
{
|
|
return _argumentParser.ParseArguments(argumentString);
|
|
}
|
|
|
|
[Test]
|
|
public void NullConnectionInfoResultsInEmptyVariables()
|
|
{
|
|
var parser = new ExternalToolArgumentParser(null);
|
|
var parsedText = parser.ParseArguments("test %USERNAME% test");
|
|
Assert.That(parsedText, Is.EqualTo("test test"));
|
|
}
|
|
|
|
|
|
|
|
private class ParserTestsDataSource
|
|
{
|
|
public static IEnumerable TestCases
|
|
{
|
|
get
|
|
{
|
|
yield return new TestCaseData("%NAME%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-NAME%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!NAME%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%HOSTNAME%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-HOSTNAME%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!HOSTNAME%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%PORT%").Returns(PortAsString);
|
|
yield return new TestCaseData("%-PORT%").Returns(PortAsString);
|
|
yield return new TestCaseData("%!PORT%").Returns(PortAsString);
|
|
yield return new TestCaseData("%USERNAME%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-USERNAME%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!USERNAME%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%PASSWORD%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-PASSWORD%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!PASSWORD%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%DOMAIN%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-DOMAIN%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!DOMAIN%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%DESCRIPTION%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-DESCRIPTION%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!DESCRIPTION%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%MACADDRESS%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-MACADDRESS%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!MACADDRESS%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%USERFIELD%").Returns(StringAfterAllEscaping);
|
|
yield return new TestCaseData("%-USERFIELD%").Returns(StringAfterMetacharacterEscaping);
|
|
yield return new TestCaseData("%!USERFIELD%").Returns(StringAfterNoEscaping);
|
|
yield return new TestCaseData("%%") {TestName = "EmptyVariableTagsNotParsed" }.Returns("%%");
|
|
yield return new TestCaseData("/k echo %!USERNAME%") { TestName = "ParsingWorksWhenVariableIsNotInFirstPosition" }.Returns(SampleCommandString);
|
|
yield return new TestCaseData("%COMSPEC%") { TestName = "EnvironmentVariablesParsed" }.Returns(Environment.GetEnvironmentVariable("comspec"));
|
|
yield return new TestCaseData("%UNSUPPORTEDPARAMETER%") { TestName = "UnsupportedParametersNotParsed" }.Returns("%UNSUPPORTEDPARAMETER%");
|
|
yield return new TestCaseData(@"\%COMSPEC\%") { TestName = "BackslashEscapedEnvironmentVariablesParsed" }.Returns(Environment.GetEnvironmentVariable("comspec"));
|
|
yield return new TestCaseData(@"^%COMSPEC^%") { TestName = "ChevronEscapedEnvironmentVariablesNotParsed" }.Returns("%COMSPEC%");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |