From e29b4aacf89ce060509b20a5f81df200f7d2fbc1 Mon Sep 17 00:00:00 2001 From: chris_bednarski Date: Mon, 21 Aug 2023 11:34:51 +1000 Subject: remove windows xp specific code from firewall extension --- src/test/burn/WixTestTools/Firewall/Verifier.cs | 8 ++++- .../IgnoreFailedFirewallRules.wixproj | 13 +++++++ .../IgnoreFailedFirewallRules/product.wxs | 35 ++++++++++++++++++ .../FirewallExtensionTests.cs | 42 ++++++++++++++++++++-- 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj create mode 100644 src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/product.wxs (limited to 'src/test') diff --git a/src/test/burn/WixTestTools/Firewall/Verifier.cs b/src/test/burn/WixTestTools/Firewall/Verifier.cs index c1bf3219..2c273e7a 100644 --- a/src/test/burn/WixTestTools/Firewall/Verifier.cs +++ b/src/test/burn/WixTestTools/Firewall/Verifier.cs @@ -254,7 +254,13 @@ namespace WixTestTools.Firewall rule.Enabled = false; } - public static void RemoveFirewallRulesByName(string name) + /// + /// Removes a firewall rule by name. If multiple rules with the same name exist, only one of them is removed.
+ /// This behavior is different from netsh advfirewall firewall delete rule where all matching rules are deleted if multiple matches are found.
+ /// The firewall rule name cannot be null or an empty string. + ///
+ /// Name of the firewall rule to be removed. + public static void RemoveFirewallRuleByName(string name) { var rules = GetINetFwRules(); rules.Remove(name); diff --git a/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj new file mode 100644 index 00000000..b1770b0f --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/IgnoreFailedFirewallRules.wixproj @@ -0,0 +1,13 @@ + + + + {4D188568-1CCF-4EEE-BC27-17C3DCC83E58} + true + + + + + + + + \ No newline at end of file diff --git a/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/product.wxs new file mode 100644 index 00000000..d615f0c6 --- /dev/null +++ b/src/test/msi/TestData/FirewallExtensionTests/IgnoreFailedFirewallRules/product.wxs @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs b/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs index 3e605d7a..4106cd72 100644 --- a/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs +++ b/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs @@ -144,7 +144,7 @@ namespace WixToolsetTest.MsiE2E var product = this.CreatePackageInstaller("FirewallRules"); product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - Verifier.RemoveFirewallRulesByName("WiXToolset401 Test - 0002"); + Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0002"); Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0002")); product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS); @@ -176,7 +176,7 @@ namespace WixToolsetTest.MsiE2E var product = this.CreatePackageInstaller("FirewallRules"); product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); - Verifier.RemoveFirewallRulesByName("WiXToolset401 Test - 0001"); + Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0001"); Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0001")); product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS); @@ -277,5 +277,43 @@ namespace WixToolsetTest.MsiE2E Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0004")); Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0005 - 9999")); } + + [RuntimeFact] + public void SucceedWhenIgnoreOnFailureIsSet() + { + var product = this.CreatePackageInstaller("IgnoreFailedFirewallRules"); + var log1 = product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0006 pipe")); + Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add app to the authorized apps list")); + + Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0007 pipe")); + Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add app to the authorized ports list")); + + var expected = new RuleDetails("WiXToolset401 Test - 0008 removal") + { + Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW, + ApplicationName = "test.exe", + Description = "WiX Toolset firewall exception rule integration test - removal test", + Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, + EdgeTraversal = true, + EdgeTraversalOptions = 1, + Enabled = true, + InterfaceTypes = "All", + LocalPorts = "52390", + LocalAddresses = "*", + Profiles = Int32.MaxValue, + Protocol = 6, + RemoteAddresses = "*", + RemotePorts = "*", + SecureFlags = 0, + }; + + Verifier.VerifyFirewallRule("WiXToolset401 Test - 0008 removal", expected); + Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0008 removal"); + + var log2 = product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, "NORULENAME=1"); + Assert.True(LogVerifier.MessageInLogFile(log2, "failed to remove firewall rule")); + } } } -- cgit v1.2.3-55-g6feb