resolved csv deserializer test

This commit is contained in:
David Sparer
2019-01-19 13:19:06 -06:00
parent b029b35df7
commit 7fd9abbbc8
2 changed files with 32 additions and 7 deletions

View File

@@ -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()));
}

View File

@@ -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;
}