diff --git a/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs b/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs index 53f74739..4bcb698d 100644 --- a/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs +++ b/mRemoteNGTests/IntegrationTests/XmlSerializationLifeCycleTests.cs @@ -1,4 +1,6 @@ -using System.Linq; +using System; +using System.Linq; +using System.Xml.Linq; using mRemoteNG.Config.Serializers; using mRemoteNG.Config.Serializers.Xml; using mRemoteNG.Connection; @@ -29,20 +31,19 @@ namespace mRemoteNGTests.IntegrationTests _originalModel.RootNodes.OfType().First().PasswordString.ConvertToSecureString(), new SaveFilter()); _serializer = new XmlConnectionsSerializer(cryptoProvider, nodeSerializer); + _deserializer = new XmlConnectionsDeserializer(); } [TearDown] public void Teardown() { _serializer = null; - _deserializer = null; } [Test] public void SerializeThenDeserialize() { var serializedContent = _serializer.Serialize(_originalModel); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name); var nodeNamesFromOriginalModel = _originalModel.GetRecursiveChildList().Select(node => node.Name); @@ -54,7 +55,6 @@ namespace mRemoteNGTests.IntegrationTests { _serializer.UseFullEncryption = true; var serializedContent = _serializer.Serialize(_originalModel); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name); var nodeNamesFromOriginalModel = _originalModel.GetRecursiveChildList().Select(node => node.Name); @@ -66,7 +66,6 @@ namespace mRemoteNGTests.IntegrationTests { var originalConnectionInfo = new ConnectionInfo {Name = "con1", Description = "£°úg¶┬ä" }; var serializedContent = _serializer.Serialize(originalConnectionInfo); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var deserializedConnectionInfo = deserializedModel.GetRecursiveChildList().First(node => node.Name == originalConnectionInfo.Name); Assert.That(deserializedConnectionInfo.Description, Is.EqualTo(originalConnectionInfo.Description)); @@ -84,13 +83,26 @@ namespace mRemoteNGTests.IntegrationTests new SaveFilter()); _serializer = new XmlConnectionsSerializer(cryptoProvider, nodeSerializer); var serializedContent = _serializer.Serialize(_originalModel); - _deserializer = new XmlConnectionsDeserializer(); var deserializedModel = _deserializer.Deserialize(serializedContent); var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name); var nodeNamesFromOriginalModel = _originalModel.GetRecursiveChildList().Select(node => node.Name); Assert.That(nodeNamesFromDeserializedModel, Is.EquivalentTo(nodeNamesFromOriginalModel)); } + [Test] + public void GuidCreatedIfNonExistedInXml() + { + var originalConnectionInfo = new ConnectionInfo { Name = "con1" }; + var serializedContent = _serializer.Serialize(originalConnectionInfo); + + // remove GUID from connection xml + serializedContent = serializedContent.Replace(originalConnectionInfo.ConstantID, ""); + + var deserializedModel = _deserializer.Deserialize(serializedContent); + var deserializedConnectionInfo = deserializedModel.GetRecursiveChildList().First(node => node.Name == originalConnectionInfo.Name); + Assert.That(Guid.TryParse(deserializedConnectionInfo.ConstantID, out var guid)); + } + private ConnectionTreeModel SetupConnectionTreeModel() { diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs index 71919e63..f4b2620e 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs @@ -205,7 +205,9 @@ namespace mRemoteNG.Config.Serializers.Xml { if (xmlnode.Attributes == null) return null; - var connectionId = xmlnode.Attributes["Id"]?.Value ?? Guid.NewGuid().ToString(); + var connectionId = xmlnode.Attributes["Id"]?.Value; + if (string.IsNullOrWhiteSpace(connectionId)) + connectionId = Guid.NewGuid().ToString(); var connectionInfo = new ConnectionInfo(connectionId); try