mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
resolved csv deserializer test
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using mRemoteNG.App;
|
||||
using System;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
@@ -70,13 +71,20 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv
|
||||
[Test]
|
||||
public void CredentialsHarvestedWhenDeserialized()
|
||||
{
|
||||
var con = GetTestConnection();
|
||||
var csv = _serializer.Serialize(con);
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var cred = new CredentialRecord
|
||||
{
|
||||
Username = Randomizer.RandomString(),
|
||||
Domain = Randomizer.RandomString(),
|
||||
Password = Randomizer.RandomString().ConvertToSecureString()
|
||||
};
|
||||
|
||||
var csv = "Id;Username;Domain;Password\n" +
|
||||
$"{Guid.NewGuid()};{cred.Username};{cred.Domain};{cred.Password.ConvertToUnsecureString()}";
|
||||
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var harvestedCredential = deserializedConnections.CredentialRecords.FirstOrDefault();
|
||||
|
||||
Assert.That(harvestedCredential, Is.EqualTo(con.CredentialRecord)
|
||||
Assert.That(harvestedCredential, Is.EqualTo(cred)
|
||||
.Using(new CredentialDomainUserPasswordComparer()));
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@ using mRemoteNG.Tree;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security;
|
||||
using mRemoteNG.Config.Serializers.CredentialSerializer;
|
||||
using mRemoteNG.Security;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Csv
|
||||
{
|
||||
@@ -31,12 +34,26 @@ namespace mRemoteNG.Config.Serializers.Csv
|
||||
else
|
||||
{
|
||||
var connectionInfo = ParseConnectionInfo(csvHeaders, line);
|
||||
parentMapping.Add(connectionInfo, line[csvHeaders.IndexOf("Parent")]);
|
||||
|
||||
var parentFieldIndex = csvHeaders.IndexOf("Parent");
|
||||
if (parentFieldIndex > 0)
|
||||
parentMapping.Add(connectionInfo, line[parentFieldIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
var root = CreateTreeStructure(parentMapping);
|
||||
var result = new SerializationResult(root, new List<ICredentialRecord>(), new ConnectionToCredentialMap());
|
||||
var harvestedCredentials = new CredentialHarvester()
|
||||
.Harvest(new HarvestConfig<string[]>
|
||||
{
|
||||
ItemEnumerator = () => lines.Skip(1).Select(s => s.Split(';')),
|
||||
ConnectionGuidSelector = line => csvHeaders.Contains("Id") ? Guid.Parse(line[csvHeaders.IndexOf("Id")]) : Guid.NewGuid(),
|
||||
TitleSelector = line => "",
|
||||
UsernameSelector = line => csvHeaders.Contains("Username") ? line[csvHeaders.IndexOf("Username")] : "",
|
||||
DomainSelector = line => csvHeaders.Contains("Domain") ? line[csvHeaders.IndexOf("Domain")] : "",
|
||||
PasswordSelector = line => csvHeaders.Contains("Password") ? line[csvHeaders.IndexOf("Password")].ConvertToSecureString() : new SecureString()
|
||||
});
|
||||
|
||||
var result = new SerializationResult(root, harvestedCredentials.DistinctCredentialRecords.ToList(), harvestedCredentials);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user