From 7fd9abbbc83ed16c282bf5b4cdb2875e74f1cdf6 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Sat, 19 Jan 2019 13:19:06 -0600 Subject: [PATCH] resolved csv deserializer test --- ...ectionsDeserializerMremotengFormatTests.cs | 18 +++++++++++----- ...vConnectionsDeserializerMremotengFormat.cs | 21 +++++++++++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs b/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs index 7e4f24b45..5f6321f5c 100644 --- a/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs +++ b/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs @@ -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())); } diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs index d4960001f..0f5286c53 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs @@ -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(), new ConnectionToCredentialMap()); + var harvestedCredentials = new CredentialHarvester() + .Harvest(new HarvestConfig + { + 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; }