From b03d355d69064b06449caa1a64430eade1884ef6 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Thu, 30 Nov 2017 12:29:56 -0600 Subject: [PATCH] connection's inheritance is now correctly disabled when rootnode is the parent --- .../Connection/ConnectionInfoTests.cs | 39 +++++++++++++++++-- mRemoteV1/Connection/ConnectionInfo.cs | 30 ++++++++------ 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/mRemoteNGTests/Connection/ConnectionInfoTests.cs b/mRemoteNGTests/Connection/ConnectionInfoTests.cs index 0eff910f..5475bdb6 100644 --- a/mRemoteNGTests/Connection/ConnectionInfoTests.cs +++ b/mRemoteNGTests/Connection/ConnectionInfoTests.cs @@ -1,13 +1,16 @@ -using mRemoteNG.Connection; +using System.Collections.Generic; +using System.Reflection; +using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Connection.Protocol.SSH; using mRemoteNG.Container; +using mRemoteNG.Tree.Root; using NUnit.Framework; namespace mRemoteNGTests.Connection { - public class ConnectionInfoTests + public class ConnectionInfoTests { private ConnectionInfo _connectionInfo; private const string TestDomain = "somedomain"; @@ -91,7 +94,29 @@ namespace mRemoteNGTests.Connection Assert.That(nameOfModifiedProperty, Is.EqualTo("OpenConnections")); } - [TestCase(ProtocolType.HTTP, ExpectedResult = 80)] + [TestCaseSource(typeof(InheritancePropertyProvider), nameof(InheritancePropertyProvider.GetProperties))] + public void MovingAConnectionUnderRootNodeDisablesInheritance(PropertyInfo property) + { + var rootNode = new RootNodeInfo(RootNodeType.Connection); + _connectionInfo.Inheritance.EverythingInherited = true; + _connectionInfo.SetParent(rootNode); + var propertyValue = property.GetValue(_connectionInfo.Inheritance); + Assert.That(propertyValue, Is.False); + } + + [TestCaseSource(typeof(InheritancePropertyProvider), nameof(InheritancePropertyProvider.GetProperties))] + public void MovingAConnectionFromUnderRootNodeToUnderADifferentNodeEnablesInheritance(PropertyInfo property) + { + var rootNode = new RootNodeInfo(RootNodeType.Connection); + var otherContainer = new ContainerInfo(); + _connectionInfo.Inheritance.EverythingInherited = true; + _connectionInfo.SetParent(rootNode); + _connectionInfo.SetParent(otherContainer); + var propertyValue = property.GetValue(_connectionInfo.Inheritance); + Assert.That(propertyValue, Is.True); + } + + [TestCase(ProtocolType.HTTP, ExpectedResult = 80)] [TestCase(ProtocolType.HTTPS, ExpectedResult = 443)] [TestCase(ProtocolType.ICA, ExpectedResult = 1494)] [TestCase(ProtocolType.IntApp, ExpectedResult = 0)] @@ -107,5 +132,13 @@ namespace mRemoteNGTests.Connection _connectionInfo.Protocol = protocolType; return _connectionInfo.GetDefaultPort(); } + + private class InheritancePropertyProvider + { + public static IEnumerable GetProperties() + { + return new ConnectionInfoInheritance(new object()).GetProperties(); + } + } } } \ No newline at end of file diff --git a/mRemoteV1/Connection/ConnectionInfo.cs b/mRemoteV1/Connection/ConnectionInfo.cs index c3fc1107..95244fa7 100644 --- a/mRemoteV1/Connection/ConnectionInfo.cs +++ b/mRemoteV1/Connection/ConnectionInfo.cs @@ -3,19 +3,20 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; -using mRemoteNG.Tools; using mRemoteNG.App; -using mRemoteNG.Connection.Protocol.VNC; -using mRemoteNG.Connection.Protocol.SSH; -using mRemoteNG.Connection.Protocol.Http; -using mRemoteNG.Connection.Protocol.RAW; -using mRemoteNG.Connection.Protocol.ICA; -using mRemoteNG.Connection.Protocol.RDP; -using mRemoteNG.Connection.Protocol.Telnet; -using mRemoteNG.Connection.Protocol.Rlogin; -using mRemoteNG.Container; using mRemoteNG.Connection.Protocol; +using mRemoteNG.Connection.Protocol.Http; +using mRemoteNG.Connection.Protocol.ICA; +using mRemoteNG.Connection.Protocol.RAW; +using mRemoteNG.Connection.Protocol.RDP; +using mRemoteNG.Connection.Protocol.Rlogin; +using mRemoteNG.Connection.Protocol.SSH; +using mRemoteNG.Connection.Protocol.Telnet; +using mRemoteNG.Connection.Protocol.VNC; +using mRemoteNG.Container; +using mRemoteNG.Tools; using mRemoteNG.Tree; +using mRemoteNG.Tree.Root; namespace mRemoteNG.Connection @@ -125,14 +126,19 @@ namespace mRemoteNG.Connection return filteredProperties; } - public virtual void SetParent(ContainerInfo parent) + public virtual void SetParent(ContainerInfo newParent) { RemoveParent(); - parent?.AddChild(this); + newParent?.AddChild(this); + if (newParent is RootNodeInfo) + Inheritance.DisableInheritance(); } public void RemoveParent() { + if (Parent is RootNodeInfo) + Inheritance.EnableInheritance(); + Parent?.RemoveChild(this); } #endregion