aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorchris_bednarski <Chris.Bednarski@minfos.com.au>2023-09-21 16:03:28 +1000
committerBob Arnson <github@bobs.org>2023-11-19 12:17:13 -0500
commitdfb7512b85536b7726080648f2228cf8d0153724 (patch)
treed053018ee47afe7e349dda6739a6580c771a1a3d /src/test
parent80e604761b4f43b9b79a4878fcae360b071a7c35 (diff)
downloadwix-dfb7512b85536b7726080648f2228cf8d0153724.tar.gz
wix-dfb7512b85536b7726080648f2228cf8d0153724.tar.bz2
wix-dfb7512b85536b7726080648f2228cf8d0153724.zip
add firewall extension decompiler, make msi modifications work, add all attributes
Diffstat (limited to 'src/test')
-rw-r--r--src/test/burn/WixTestTools/Firewall/RuleDetails.cs8
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/CrossVersionMerge.wixproj13
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msmbin0 -> 192512 bytes
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/package.wxs35
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj13
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs32
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj13
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs57
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj10
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt1
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs36
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj10
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt1
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs36
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj14
-rw-r--r--src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs25
-rw-r--r--src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs640
-rw-r--r--src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj1
18 files changed, 925 insertions, 20 deletions
diff --git a/src/test/burn/WixTestTools/Firewall/RuleDetails.cs b/src/test/burn/WixTestTools/Firewall/RuleDetails.cs
index d1e53de4..8c8cdda3 100644
--- a/src/test/burn/WixTestTools/Firewall/RuleDetails.cs
+++ b/src/test/burn/WixTestTools/Firewall/RuleDetails.cs
@@ -146,7 +146,9 @@ namespace WixTestTools.Firewall
146 /// This parameter allows the specification of an array of interface LUIDs (locally unique identifiers) supplied as strings.<br/> 146 /// This parameter allows the specification of an array of interface LUIDs (locally unique identifiers) supplied as strings.<br/>
147 /// This is commonly used by USB RNDIS (Remote Network Driver Interface Specification) devices to restrict traffic to a specific non-routable interface.<br/> 147 /// This is commonly used by USB RNDIS (Remote Network Driver Interface Specification) devices to restrict traffic to a specific non-routable interface.<br/>
148 /// Use <b>netsh trace show interfaces</b> to show a list of local interfaces and their LUIDs.<br/> 148 /// Use <b>netsh trace show interfaces</b> to show a list of local interfaces and their LUIDs.<br/>
149 /// Example: new object[] { "Wi-Fi", "Local Area Connection* 14" } 149 /// The interfaces are stored in the registry as GUIDs, but need to be passed to the API as text. eg from the registry<br/>
150 /// v2.30|Action=Allow|Active=TRUE|Dir=In|Protocol=6|LPort=23456|IF={423411CD-E627-4A1A-9E1F-C5BE6CD2CC99}|IF={49A98AD0-8379-4079-A445-77066C52E338}|Name=WiXToolset401 Test - 0002|Desc=WiX Toolset firewall exception rule integration test - minimal port properties|<br/>
151 /// Example API value: new object[] { "Wi-Fi", "Local Area Connection* 14" }
150 /// </summary> 152 /// </summary>
151 public object[] Interfaces { get; set; } 153 public object[] Interfaces { get; set; }
152 154
@@ -227,13 +229,13 @@ namespace WixTestTools.Firewall
227 public string LocalUserOwner { get; set; } 229 public string LocalUserOwner { get; set; }
228 230
229 /// <summary> 231 /// <summary>
230 /// This property is optional. It specifies a list of authorized local users for an app container.<br/> 232 /// This property is optional. It specifies a list of authorized local users for an app container (using SDDL).<br/>
231 /// Example: "O:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)" 233 /// Example: "O:LSD:(A;;CC;;;S-1-5-84-0-0-0-0-0)"
232 /// </summary> 234 /// </summary>
233 public string LocalUserAuthorizedList { get; set; } 235 public string LocalUserAuthorizedList { get; set; }
234 236
235 /// <summary> 237 /// <summary>
236 /// This property is optional. It specifies a list of remote users who are authorized to access an app container.<br/> 238 /// This property is optional. It specifies a list of remote users who are authorized to access an app container (using SDDL).<br/>
237 /// </summary> 239 /// </summary>
238 public string RemoteUserAuthorizedList { get; set; } 240 public string RemoteUserAuthorizedList { get; set; }
239 241
diff --git a/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/CrossVersionMerge.wixproj b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/CrossVersionMerge.wixproj
new file mode 100644
index 00000000..f1c71d3d
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/CrossVersionMerge.wixproj
@@ -0,0 +1,13 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <SuppressSpecificWarnings>1055;1056</SuppressSpecificWarnings>
5 </PropertyGroup>
6 <ItemGroup>
7 <!-- <ProjectReference Include="..\Module401\Module401.wixproj" /> -->
8 <ProjectReference Include="..\ModuleCurrent\ModuleCurrent.wixproj" />
9 </ItemGroup>
10 <ItemGroup>
11 <PackageReference Include="WixToolset.Firewall.wixext" />
12 </ItemGroup>
13</Project>
diff --git a/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msm b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msm
new file mode 100644
index 00000000..4dd5bd09
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/Module401.msm
Binary files differ
diff --git a/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/package.wxs b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/package.wxs
new file mode 100644
index 00000000..6d5ea47a
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/CrossVersionMerge/package.wxs
@@ -0,0 +1,35 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fw="http://wixtoolset.org/schemas/v4/wxs/firewall">
2 <Package Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation"
3 UpgradeCode="41B5F815-E7F6-44E0-B92A-AE95DFF683F9" Compressed="yes" Scope="perMachine">
4 <MediaTemplate EmbedCab="yes" />
5
6 <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
7
8 <Feature Id="ProductFeature" Title="Feature with merged modules">
9 <MergeRef Id="TestMsm1" />
10 <MergeRef Id="TestMsm2" />
11 <ComponentRef Id="FirewallComponent1" />
12 </Feature>
13 </Package>
14
15 <Fragment>
16 <StandardDirectory Id="ProgramFilesFolder">
17 <Directory Id="INSTALLFOLDER" Name="MsiPackage">
18 <Merge Id="TestMsm1" Language="1033" SourceFile="Module401.msm" />
19 <Merge Id="TestMsm2" Language="1033" SourceFile="ModuleCurrent.msm" />
20 </Directory>
21 </StandardDirectory>
22 </Fragment>
23
24 <Fragment>
25 <Property Id="MSIPORT1" Value="20001" />
26 <Property Id="MSIPORT2" Value="20002" />
27
28 <Component Id="FirewallComponent1" Guid="3E9A6190-3E6B-4BC2-8C84-D89D1549FEBD" Directory="INSTALLFOLDER">
29 <File Source="$(sys.SOURCEFILEPATH)">
30 <fw:FirewallException Id="FirewallException1" Description="WiX Toolset firewall exception rule integration test - package app" Name="WiXToolset Test - 0026" Scope="any" Port="[MSIPORT1]" />
31 </File>
32 <fw:FirewallException Id="FirewallException2" Description="WiX Toolset firewall exception rule integration test - package port" Name="WiXToolset Test - 0027" Scope="any" Port="[MSIPORT2]" />
33 </Component>
34 </Fragment>
35</Wix>
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj
new file mode 100644
index 00000000..3c6ef5cf
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/FirewallRulesInterfaces.wixproj
@@ -0,0 +1,13 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <UpgradeCode>{F153C27F-0236-4A0F-ADB3-50BFC73B4FEA}</UpgradeCode>
5 <ProductComponentsRef>true</ProductComponentsRef>
6 </PropertyGroup>
7 <ItemGroup>
8 <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" />
9 </ItemGroup>
10 <ItemGroup>
11 <PackageReference Include="WixToolset.Firewall.wixext" />
12 </ItemGroup>
13</Project> \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs
new file mode 100644
index 00000000..142c8f68
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesInterfaces/product.wxs
@@ -0,0 +1,32 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2
3
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fw="http://wixtoolset.org/schemas/v4/wxs/firewall">
5 <Fragment>
6 <ComponentGroup Id="ProductComponents">
7 <ComponentRef Id="FirewallComponent1"/>
8 </ComponentGroup>
9 </Fragment>
10
11 <Fragment>
12 <Component Id="FirewallComponent1" Guid="08044660-CB5D-4891-8BD5-0CB5BB668D78" Directory="INSTALLFOLDER">
13 <File Source="$(sys.SOURCEFILEPATH)" KeyPath="yes" >
14 <fw:FirewallException Id="FirewallException28"
15 Description="WiX Toolset firewall exception rule integration test - three interfaces"
16 Name="WiXToolset500 Test - 0028" Scope="any" >
17 <fw:Interface Name="[INTERFACE1]" />
18 <fw:Interface Name="[INTERFACE2]" />
19 <fw:Interface Name="[INTERFACE3]" />
20 <fw:InterfaceType Value="RemoteAccess" />
21 <fw:InterfaceType Value="Lan" />
22 <fw:InterfaceType Value="Wireless" />
23 </fw:FirewallException>
24 </File>
25
26 <fw:FirewallException Id="FirewallException29"
27 Description="WiX Toolset firewall exception rule integration test - one interface"
28 Name="WiXToolset500 Test - 0029" Scope="any" Port="29292" Interface="[INTERFACE1]" InterfaceType="[INTERFACETYPE]" >
29 </fw:FirewallException>
30 </Component>
31 </Fragment>
32</Wix>
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj
new file mode 100644
index 00000000..38d94265
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/FirewallRulesProperties.wixproj
@@ -0,0 +1,13 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <UpgradeCode>{DC2C3CDC-112F-40A8-A7B4-2C7B758F4F94}</UpgradeCode>
5 <ProductComponentsRef>true</ProductComponentsRef>
6 </PropertyGroup>
7 <ItemGroup>
8 <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" />
9 </ItemGroup>
10 <ItemGroup>
11 <PackageReference Include="WixToolset.Firewall.wixext" />
12 </ItemGroup>
13</Project> \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs
new file mode 100644
index 00000000..1f9935d5
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/FirewallRulesProperties/product.wxs
@@ -0,0 +1,57 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2
3
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fw="http://wixtoolset.org/schemas/v4/wxs/firewall">
5 <Fragment>
6 <ComponentGroup Id="ProductComponents">
7 <ComponentRef Id="FirewallComponent1"/>
8 </ComponentGroup>
9 </Fragment>
10
11 <Fragment>
12 <Component Id="FirewallComponent1" Guid="A1553D10-BEB7-4E60-A0DC-6F1EEE5A1719" Directory="INSTALLFOLDER">
13 <fw:FirewallException
14 Name="WiXToolset Test - 0028" OnUpdate="EnableOnly"
15 Port="[LOCALPORT]"
16 Protocol="[PROTOCOL]"
17 Program="[PROGRAM]"
18 Profile="[PROFILE]"
19 Description="[DESCRIPTION]"
20 Scope="[REMOTESCOPE]"
21 EdgeTraversal="[EDGETRAVERSAL]"
22 Enabled="[ENABLED]"
23 Grouping="[GROUPING]"
24 IcmpTypesAndCodes="[ICMPTYPES]"
25 Interface="[INTERFACE]"
26 InterfaceType="[INTERFACETYPE]"
27 LocalScope="[LOCALSCOPE]"
28 RemotePort="[REMOTEPORT]"
29 Service="[SERVICE]"
30 LocalAppPackageId="[PACKAGEID]"
31 LocalUserAuthorizedList="[LOCALUSERS]"
32 LocalUserOwner="[LOCALOWNER]"
33 RemoteMachineAuthorizedList="[REMOTEMACHINES]"
34 RemoteUserAuthorizedList="[REMOTEUSERS]"
35 IPSecSecureFlags="[SECUREFLAGS]"
36 />
37
38 <fw:FirewallException Name="WiXToolset Test - 0029" OnUpdate="DoNothing" >
39 <fw:RemoteAddress Value="[REMOTEADDRESS]" />
40 <fw:LocalAddress Value="[LOCALADDRESS]" />
41 <fw:InterfaceType Value="[INTERFACETYPE]" />
42 <fw:Interface Name="[INTERFACE]" />
43 </fw:FirewallException>
44
45 <fw:FirewallException Name="WiXToolset Test - 0030" >
46 <fw:RemoteAddress Value="[REMOTEADDRESS1]" />
47 <fw:RemoteAddress Value="[REMOTEADDRESS2]" />
48 <fw:LocalAddress Value="[LOCALADDRESS1]" />
49 <fw:LocalAddress Value="[LOCALADDRESS2]" />
50 <fw:InterfaceType Value="[INTERFACETYPE1]" />
51 <fw:InterfaceType Value="[INTERFACETYPE2]" />
52 <fw:Interface Name="[INTERFACE1]" />
53 <fw:Interface Name="[INTERFACE2]" />
54 </fw:FirewallException>
55 </Component>
56 </Fragment>
57</Wix>
diff --git a/src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj b/src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj
new file mode 100644
index 00000000..5f65e657
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/Module401/Module401.wixproj
@@ -0,0 +1,10 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <OutputType>Module</OutputType>
5 <SuppressSpecificWarnings>1072</SuppressSpecificWarnings>
6 </PropertyGroup>
7 <ItemGroup>
8 <PackageReference Include="WixToolset.Firewall.wixext"/><!--VersionOverride="4.0.1"-->
9 </ItemGroup>
10</Project> \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt b/src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt
new file mode 100644
index 00000000..cd0db0e1
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/Module401/data/test.txt
@@ -0,0 +1 @@
This is test.txt. \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs b/src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs
new file mode 100644
index 00000000..872743c7
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/Module401/module.wxs
@@ -0,0 +1,36 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fw="http://wixtoolset.org/schemas/v4/wxs/firewall" >
2 <Module Id="MergeModule1" Language="1033" Version="1.0.0.0" Guid="4B2C61BF-59F5-453B-98E3-3389F681EA00">
3 <SummaryInformation Manufacturer="Module 4.0.1 Manufacturer" />
4
5 <Property Id="MODULE401PORT1" Value="40101" />
6 <Property Id="MODULE401PORT2" Value="40102" />
7 <Property Id="MODULE401PORT3" Value="40103" />
8 <Property Id="MODULE401PORT4" Value="40104" />
9
10 <Directory Id="MergeRedirectFolder">
11 <Component Id="ModuleComponent1" Guid="257F9283-1334-423C-A7E7-FEE848BCD37F">
12 <File Id="File1" Name="file1.txt" Source="data/test.txt">
13 <fw:FirewallException Id="FirewallException1"
14 Description="WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - app"
15 Name="WiXToolset401 Test - 0018" Scope="any" Port="[MODULE401PORT1]" />
16 </File>
17 <fw:FirewallException Id="FirewallException2"
18 Description="WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - port"
19 Name="WiXToolset401 Test - 0019" Scope="any" Port="[MODULE401PORT2]" />
20 </Component>
21 </Directory>
22
23 <Directory Id="NotTheMergeRedirectFolder">
24 <Component Id="ModuleComponent2" Guid="48A2D573-0ADB-4010-84E3-96C3D6803E90">
25 <File Id="File2" Name="file2.txt" Source="data/test.txt">
26 <fw:FirewallException Id="FirewallException3"
27 Description="WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - app"
28 Name="WiXToolset401 Test - 0020" Scope="any" Port="[MODULE401PORT3]" />
29 </File>
30 <fw:FirewallException Id="FirewallException4"
31 Description="WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - port"
32 Name="WiXToolset401 Test - 0021" Scope="any" Port="[MODULE401PORT4]" />
33 </Component>
34 </Directory>
35 </Module>
36</Wix>
diff --git a/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj
new file mode 100644
index 00000000..8a84280c
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/ModuleCurrent.wixproj
@@ -0,0 +1,10 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <OutputType>Module</OutputType>
5 <SuppressSpecificWarnings>1072</SuppressSpecificWarnings>
6 </PropertyGroup>
7 <ItemGroup>
8 <PackageReference Include="WixToolset.Firewall.wixext" />
9 </ItemGroup>
10</Project> \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt
new file mode 100644
index 00000000..cd0db0e1
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/data/test.txt
@@ -0,0 +1 @@
This is test.txt. \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs
new file mode 100644
index 00000000..53097acd
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/ModuleCurrent/module.wxs
@@ -0,0 +1,36 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fw="http://wixtoolset.org/schemas/v4/wxs/firewall" >
2 <Module Id="MergeModule1" Language="1033" Version="1.0.0.0" Guid="44FA5DBE-2413-436E-99B3-A0751D6EB420">
3 <SummaryInformation Manufacturer="Example Company - Module Current" />
4
5 <Property Id="MODULECURRENTPORT1" Value="50001" />
6 <Property Id="MODULECURRENTPORT2" Value="50002" />
7 <Property Id="MODULECURRENTPORT3" Value="50003" />
8 <Property Id="MODULECURRENTPORT4" Value="50004" />
9
10 <Directory Id="MergeRedirectFolder">
11 <Component Id="ModuleComponent1" Guid="EB7B8A63-85C4-4ABB-B9DA-33AECAFE38F7">
12 <File Id="File1" Name="file1.txt" Source="data/test.txt">
13 <fw:FirewallException Id="FirewallException1"
14 Description="WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - app"
15 Name="WiXToolset Test - 0022" Scope="any" Port="[MODULECURRENTPORT1]" />
16 </File>
17 <fw:FirewallException Id="FirewallException2"
18 Description="WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - port"
19 Name="WiXToolset Test - 0023" Scope="any" Port="[MODULECURRENTPORT2]" />
20 </Component>
21 </Directory>
22
23 <Directory Id="NotTheMergeRedirectFolder">
24 <Component Id="ModuleComponent2" Guid="0C9DD4FC-5A54-4E96-830D-DDE27B3017B5">
25 <File Id="File2" Name="file2.txt" Source="data/test.txt">
26 <fw:FirewallException Id="FirewallException3"
27 Description="WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - app"
28 Name="WiXToolset Test - 0024" Scope="any" Port="[MODULECURRENTPORT3]" />
29 </File>
30 <fw:FirewallException Id="FirewallException4"
31 Description="WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - port"
32 Name="WiXToolset Test - 0025" Scope="any" Port="[MODULECURRENTPORT4]" />
33 </Component>
34 </Directory>
35 </Module>
36</Wix>
diff --git a/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj b/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj
new file mode 100644
index 00000000..4a9c9dbd
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/NestedService/NestedService.wixproj
@@ -0,0 +1,14 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <UpgradeCode>{80635798-F904-4C4E-81D8-27A5106F3998}</UpgradeCode>
5 <ProductComponentsRef>true</ProductComponentsRef>
6 </PropertyGroup>
7 <ItemGroup>
8 <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" />
9 </ItemGroup>
10 <ItemGroup>
11 <PackageReference Include="WixToolset.Firewall.wixext" />
12 <PackageReference Include="WixToolset.Util.wixext" />
13 </ItemGroup>
14</Project> \ No newline at end of file
diff --git a/src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs b/src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs
new file mode 100644
index 00000000..24559a33
--- /dev/null
+++ b/src/test/msi/TestData/FirewallExtensionTests/NestedService/product.wxs
@@ -0,0 +1,25 @@
1<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
2
3
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:fw="http://wixtoolset.org/schemas/v4/wxs/firewall" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" >
5 <Fragment>
6 <ComponentGroup Id="ProductComponents">
7 <ComponentRef Id="FirewallComponent1"/>
8 </ComponentGroup>
9 </Fragment>
10
11 <Fragment>
12 <Component Id="FirewallComponent1" Guid="FD6E696A-8C42-49BF-B686-0DA5CD4B2C5A" Directory="INSTALLFOLDER" >
13 <fw:FirewallException Id="FirewallException1" Description="WiX Toolset firewall exception rule integration test - service property"
14 Name="WiXToolset Test - 0031" Service="Spooler"/>
15 <util:ServiceConfig ServiceName="Spooler" FirstFailureActionType="restart" SecondFailureActionType="restart" ThirdFailureActionType="none" >
16 <fw:FirewallException Id="FirewallException2" Description="WiX Toolset firewall exception rule integration test - ServiceConfig"
17 Name="WiXToolset Test - 0032" />
18 </util:ServiceConfig>
19 <ServiceInstall Name="WixTestFirewallSrv" Type="ownProcess" Start="disabled" ErrorControl="ignore" Vital="no" Arguments="%WINDIR%\System32\spoolsv.exe" >
20 <fw:FirewallException Id="FirewallException3" Description="WiX Toolset firewall exception rule integration test - ServiceInstall"
21 Name="WiXToolset Test - 0033" />
22 </ServiceInstall>
23 </Component>
24 </Fragment>
25</Wix>
diff --git a/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs b/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs
index ce55aa14..380e6f4c 100644
--- a/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs
+++ b/src/test/msi/WixToolsetTest.MsiE2E/FirewallExtensionTests.cs
@@ -4,6 +4,8 @@ namespace WixToolsetTest.MsiE2E
4{ 4{
5 using System; 5 using System;
6 using System.IO; 6 using System.IO;
7 using System.Linq;
8 using System.Net.NetworkInformation;
7 using NetFwTypeLib; 9 using NetFwTypeLib;
8 using WixTestTools; 10 using WixTestTools;
9 using WixTestTools.Firewall; 11 using WixTestTools.Firewall;
@@ -37,8 +39,8 @@ namespace WixToolsetTest.MsiE2E
37 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")), 39 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")),
38 Description = "WiX Toolset firewall exception rule integration test - minimal app properties", 40 Description = "WiX Toolset firewall exception rule integration test - minimal app properties",
39 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 41 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
40 EdgeTraversal = true, 42 EdgeTraversal = false,
41 EdgeTraversalOptions = 1, 43 EdgeTraversalOptions = 0,
42 Enabled = true, 44 Enabled = true,
43 InterfaceTypes = "All", 45 InterfaceTypes = "All",
44 LocalAddresses = "*", 46 LocalAddresses = "*",
@@ -124,8 +126,8 @@ namespace WixToolsetTest.MsiE2E
124 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")), 126 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")),
125 Description = "WiX Toolset firewall exception rule integration test - minimal app properties", 127 Description = "WiX Toolset firewall exception rule integration test - minimal app properties",
126 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 128 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
127 EdgeTraversal = true, 129 EdgeTraversal = false,
128 EdgeTraversalOptions = 1, 130 EdgeTraversalOptions = 0,
129 Enabled = true, 131 Enabled = true,
130 InterfaceTypes = "All", 132 InterfaceTypes = "All",
131 LocalAddresses = "*", 133 LocalAddresses = "*",
@@ -187,8 +189,8 @@ namespace WixToolsetTest.MsiE2E
187 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")), 189 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRules", "product.wxs")),
188 Description = "WiX Toolset firewall exception rule integration test - minimal app properties", 190 Description = "WiX Toolset firewall exception rule integration test - minimal app properties",
189 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 191 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
190 EdgeTraversal = true, 192 EdgeTraversal = false,
191 EdgeTraversalOptions = 1, 193 EdgeTraversalOptions = 0,
192 Enabled = true, 194 Enabled = true,
193 InterfaceTypes = "All", 195 InterfaceTypes = "All",
194 LocalAddresses = "*", 196 LocalAddresses = "*",
@@ -213,8 +215,8 @@ namespace WixToolsetTest.MsiE2E
213 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("DynamicFirewallRules", "product.wxs")), 215 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("DynamicFirewallRules", "product.wxs")),
214 Description = "WiX Toolset firewall exception rule integration test - dynamic app description 9999", 216 Description = "WiX Toolset firewall exception rule integration test - dynamic app description 9999",
215 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 217 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
216 EdgeTraversal = true, 218 EdgeTraversal = false,
217 EdgeTraversalOptions = 1, 219 EdgeTraversalOptions = 0,
218 Enabled = true, 220 Enabled = true,
219 InterfaceTypes = "All", 221 InterfaceTypes = "All",
220 LocalAddresses = "*", 222 LocalAddresses = "*",
@@ -255,8 +257,8 @@ namespace WixToolsetTest.MsiE2E
255 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("windir"), "system32", "9999.exe"), 257 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("windir"), "system32", "9999.exe"),
256 Description = "WiX Toolset firewall exception rule integration test - dynamic Name 9999", 258 Description = "WiX Toolset firewall exception rule integration test - dynamic Name 9999",
257 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 259 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
258 EdgeTraversal = true, 260 EdgeTraversal = false,
259 EdgeTraversalOptions = 1, 261 EdgeTraversalOptions = 0,
260 Enabled = true, 262 Enabled = true,
261 InterfaceTypes = "All", 263 InterfaceTypes = "All",
262 LocalAddresses = "*", 264 LocalAddresses = "*",
@@ -285,10 +287,10 @@ namespace WixToolsetTest.MsiE2E
285 var log1 = product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); 287 var log1 = product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
286 288
287 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0006 pipe")); 289 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0006 pipe"));
288 Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add app to the authorized apps list")); 290 Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add firewall exception 'WiXToolset401 Test - 0006 pipe' to the list"));
289 291
290 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0007 pipe")); 292 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0007 pipe"));
291 Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add app to the authorized ports list")); 293 Assert.True(LogVerifier.MessageInLogFile(log1, "failed to add firewall exception 'WiXToolset401 Test - 0007 pipe' to the list"));
292 294
293 var expected = new RuleDetails("WiXToolset401 Test - 0008 removal") 295 var expected = new RuleDetails("WiXToolset401 Test - 0008 removal")
294 { 296 {
@@ -296,8 +298,8 @@ namespace WixToolsetTest.MsiE2E
296 ApplicationName = "test.exe", 298 ApplicationName = "test.exe",
297 Description = "WiX Toolset firewall exception rule integration test - removal test", 299 Description = "WiX Toolset firewall exception rule integration test - removal test",
298 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 300 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
299 EdgeTraversal = true, 301 EdgeTraversal = false,
300 EdgeTraversalOptions = 1, 302 EdgeTraversalOptions = 0,
301 Enabled = true, 303 Enabled = true,
302 InterfaceTypes = "All", 304 InterfaceTypes = "All",
303 LocalPorts = "52390", 305 LocalPorts = "52390",
@@ -313,7 +315,7 @@ namespace WixToolsetTest.MsiE2E
313 Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0008 removal"); 315 Verifier.RemoveFirewallRuleByName("WiXToolset401 Test - 0008 removal");
314 316
315 var log2 = product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, "NORULENAME=1"); 317 var log2 = product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, "NORULENAME=1");
316 Assert.True(LogVerifier.MessageInLogFile(log2, "failed to remove firewall rule")); 318 Assert.True(LogVerifier.MessageInLogFile(log2, "failed to remove firewall exception for name"));
317 } 319 }
318 320
319 [RuntimeFact] 321 [RuntimeFact]
@@ -370,8 +372,8 @@ namespace WixToolsetTest.MsiE2E
370 ApplicationName = "test.exe", 372 ApplicationName = "test.exe",
371 Description = "WiX Toolset firewall exception rule integration test - ports can only be specified if protocol is TCP or UDP", 373 Description = "WiX Toolset firewall exception rule integration test - ports can only be specified if protocol is TCP or UDP",
372 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN, 374 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
373 EdgeTraversal = true, 375 EdgeTraversal = false,
374 EdgeTraversalOptions = 1, 376 EdgeTraversalOptions = 0,
375 Enabled = true, 377 Enabled = true,
376 InterfaceTypes = "All", 378 InterfaceTypes = "All",
377 LocalAddresses = "*", 379 LocalAddresses = "*",
@@ -532,5 +534,609 @@ namespace WixToolsetTest.MsiE2E
532 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0016")); 534 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0016"));
533 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0017")); 535 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0017"));
534 } 536 }
537
538 [RuntimeFact]
539 public void CanInstallAndUninstallFirewallRulesWithInterfaces()
540 {
541 var names = NetworkInterface.GetAllNetworkInterfaces()
542 .Take(3)
543 .Select(ni => ni.Name);
544
545 var props = names.Select((name, idx) => $"INTERFACE{idx + 1}=\"{name}\"")
546 .Concat(new[] { "INTERFACETYPE=Lan" }).ToArray();
547
548 var product = this.CreatePackageInstaller("FirewallRulesInterfaces");
549 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS, props);
550
551 var expected1 = new RuleDetails("WiXToolset500 Test - 0028")
552 {
553 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
554 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRulesInterfaces", "product.wxs")),
555 Description = "WiX Toolset firewall exception rule integration test - three interfaces",
556 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
557 EdgeTraversal = false,
558 EdgeTraversalOptions = 0,
559 Enabled = true,
560 InterfaceTypes = "Lan,Wireless,RemoteAccess",
561 Interfaces = names.ToArray<object>(),
562 LocalAddresses = "*",
563 Profiles = Int32.MaxValue,
564 Protocol = 256,
565 RemoteAddresses = "*",
566 SecureFlags = 0,
567 };
568
569 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0028", expected1);
570
571 var expected2 = new RuleDetails("WiXToolset500 Test - 0029")
572 {
573 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
574 Description = "WiX Toolset firewall exception rule integration test - one interface",
575 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
576 EdgeTraversal = false,
577 EdgeTraversalOptions = 0,
578 Enabled = true,
579 InterfaceTypes = "Lan",
580 Interfaces = names.Take(1).ToArray<object>(),
581 LocalAddresses = "*",
582 LocalPorts = "29292",
583 Profiles = Int32.MaxValue,
584 Protocol = 6,
585 RemoteAddresses = "*",
586 RemotePorts = "*",
587 SecureFlags = 0,
588 };
589
590 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0029", expected2);
591
592 props = names.Take(1).Select((name, idx) => $"INTERFACE{idx + 2}=\"{name}\"").ToArray();
593
594 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, props);
595
596 var expected3 = new RuleDetails("WiXToolset500 Test - 0028")
597 {
598 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
599 ApplicationName = this.TestContext.GetTestInstallFolder(false, Path.Combine("FirewallRulesInterfaces", "product.wxs")),
600 Description = "WiX Toolset firewall exception rule integration test - three interfaces",
601 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
602 EdgeTraversal = false,
603 EdgeTraversalOptions = 0,
604 Enabled = true,
605 InterfaceTypes = "Lan,Wireless,RemoteAccess",
606 Interfaces = names.Take(1).ToArray<object>(),
607 LocalAddresses = "*",
608 Profiles = Int32.MaxValue,
609 Protocol = 256,
610 RemoteAddresses = "*",
611 SecureFlags = 0,
612 };
613
614 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0028", expected3);
615
616 var expected4 = new RuleDetails("WiXToolset500 Test - 0029")
617 {
618 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
619 Description = "WiX Toolset firewall exception rule integration test - one interface",
620 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
621 EdgeTraversal = false,
622 EdgeTraversalOptions = 0,
623 Enabled = true,
624 InterfaceTypes = "All",
625 LocalAddresses = "*",
626 LocalPorts = "29292",
627 Profiles = Int32.MaxValue,
628 Protocol = 6,
629 RemoteAddresses = "*",
630 RemotePorts = "*",
631 SecureFlags = 0,
632 };
633
634 Verifier.VerifyFirewallRule("WiXToolset500 Test - 0029", expected4);
635
636 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
637
638 // verify the firewall exceptions have been removed.
639 Assert.False(Verifier.FirewallRuleExists("WiXToolset500 Test - 0028"));
640 Assert.False(Verifier.FirewallRuleExists("WiXToolset500 Test - 0029"));
641 }
642
643 [RuntimeFact]
644 public void CanInstallAndUninstallFirewallRulesPackagedByDifferentModules()
645 {
646 var product = this.CreatePackageInstaller("CrossVersionMerge");
647 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
648
649 // Validate new firewall exception details.
650 var expected1 = new RuleDetails("WiXToolset401 Test - 0018")
651 {
652 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
653 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file1.txt"),
654 Description = "WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - app",
655 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
656 EdgeTraversal = true,
657 EdgeTraversalOptions = 1,
658 Enabled = true,
659 InterfaceTypes = "All",
660 LocalAddresses = "*",
661 LocalPorts = "40101",
662 Profiles = Int32.MaxValue,
663 Protocol = 6,
664 RemoteAddresses = "*",
665 RemotePorts = "*",
666 SecureFlags = 0,
667 };
668
669 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0018", expected1);
670
671 var expected2 = new RuleDetails("WiXToolset401 Test - 0019")
672 {
673 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
674 Description = "WiX Toolset firewall exception rule integration test - module 401 MergeRedirectFolder - port",
675 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
676 EdgeTraversal = false,
677 EdgeTraversalOptions = 0,
678 Enabled = true,
679 InterfaceTypes = "All",
680 LocalAddresses = "*",
681 LocalPorts = "40102",
682 Profiles = Int32.MaxValue,
683 Protocol = 6,
684 RemoteAddresses = "*",
685 RemotePorts = "*",
686 SecureFlags = 0,
687 };
688
689 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0019", expected2);
690
691 var expected3 = new RuleDetails("WiXToolset401 Test - 0020")
692 {
693 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
694 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file2.txt"),
695 Description = "WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - app",
696 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
697 EdgeTraversal = true,
698 EdgeTraversalOptions = 1,
699 Enabled = true,
700 InterfaceTypes = "All",
701 LocalAddresses = "*",
702 LocalPorts = "40103",
703 Profiles = Int32.MaxValue,
704 Protocol = 6,
705 RemoteAddresses = "*",
706 RemotePorts = "*",
707 SecureFlags = 0,
708 };
709
710 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0020", expected3);
711
712 var expected4 = new RuleDetails("WiXToolset401 Test - 0021")
713 {
714 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
715 Description = "WiX Toolset firewall exception rule integration test - module 401 NotTheMergeRedirectFolder - port",
716 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
717 EdgeTraversal = false,
718 EdgeTraversalOptions = 0,
719 Enabled = true,
720 InterfaceTypes = "All",
721 LocalAddresses = "*",
722 LocalPorts = "40104",
723 Profiles = Int32.MaxValue,
724 Protocol = 6,
725 RemoteAddresses = "*",
726 RemotePorts = "*",
727 SecureFlags = 0,
728 };
729
730 Verifier.VerifyFirewallRule("WiXToolset401 Test - 0021", expected4);
731
732 var expected5 = new RuleDetails("WiXToolset Test - 0022")
733 {
734 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
735 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file1.txt"),
736 Description = "WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - app",
737 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
738 EdgeTraversal = false,
739 EdgeTraversalOptions = 0,
740 Enabled = true,
741 InterfaceTypes = "All",
742 LocalAddresses = "*",
743 LocalPorts = "50001",
744 Profiles = Int32.MaxValue,
745 Protocol = 6,
746 RemoteAddresses = "*",
747 RemotePorts = "*",
748 SecureFlags = 0,
749 };
750
751 Verifier.VerifyFirewallRule("WiXToolset Test - 0022", expected5);
752
753 var expected6 = new RuleDetails("WiXToolset Test - 0023")
754 {
755 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
756 Description = "WiX Toolset firewall exception rule integration test - module MergeRedirectFolder - port",
757 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
758 EdgeTraversal = false,
759 EdgeTraversalOptions = 0,
760 Enabled = true,
761 InterfaceTypes = "All",
762 LocalAddresses = "*",
763 LocalPorts = "50002",
764 Profiles = Int32.MaxValue,
765 Protocol = 6,
766 RemoteAddresses = "*",
767 RemotePorts = "*",
768 SecureFlags = 0,
769 };
770
771 Verifier.VerifyFirewallRule("WiXToolset Test - 0023", expected6);
772
773 var expected7 = new RuleDetails("WiXToolset Test - 0024")
774 {
775 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
776 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "file2.txt"),
777 Description = "WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - app",
778 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
779 EdgeTraversal = false,
780 EdgeTraversalOptions = 0,
781 Enabled = true,
782 InterfaceTypes = "All",
783 LocalAddresses = "*",
784 LocalPorts = "50003",
785 Profiles = Int32.MaxValue,
786 Protocol = 6,
787 RemoteAddresses = "*",
788 RemotePorts = "*",
789 SecureFlags = 0,
790 };
791
792 Verifier.VerifyFirewallRule("WiXToolset Test - 0024", expected7);
793
794 var expected8 = new RuleDetails("WiXToolset Test - 0025")
795 {
796 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
797 Description = "WiX Toolset firewall exception rule integration test - module NotTheMergeRedirectFolder - port",
798 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
799 EdgeTraversal = false,
800 EdgeTraversalOptions = 0,
801 Enabled = true,
802 InterfaceTypes = "All",
803 LocalAddresses = "*",
804 LocalPorts = "50004",
805 Profiles = Int32.MaxValue,
806 Protocol = 6,
807 RemoteAddresses = "*",
808 RemotePorts = "*",
809 SecureFlags = 0,
810 };
811
812 Verifier.VerifyFirewallRule("WiXToolset Test - 0025", expected8);
813
814 var expected9 = new RuleDetails("WiXToolset Test - 0026")
815 {
816 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
817 ApplicationName = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "MsiPackage", "package.wxs"),
818 Description = "WiX Toolset firewall exception rule integration test - package app",
819 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
820 EdgeTraversal = false,
821 EdgeTraversalOptions = 0,
822 Enabled = true,
823 InterfaceTypes = "All",
824 LocalAddresses = "*",
825 LocalPorts = "20001",
826 Profiles = Int32.MaxValue,
827 Protocol = 6,
828 RemoteAddresses = "*",
829 RemotePorts = "*",
830 SecureFlags = 0,
831 };
832
833 Verifier.VerifyFirewallRule("WiXToolset Test - 0026", expected9);
834
835 var expected10 = new RuleDetails("WiXToolset Test - 0027")
836 {
837 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
838 Description = "WiX Toolset firewall exception rule integration test - package port",
839 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
840 EdgeTraversal = false,
841 EdgeTraversalOptions = 0,
842 Enabled = true,
843 InterfaceTypes = "All",
844 LocalAddresses = "*",
845 LocalPorts = "20002",
846 Profiles = Int32.MaxValue,
847 Protocol = 6,
848 RemoteAddresses = "*",
849 RemotePorts = "*",
850 SecureFlags = 0,
851 };
852
853 Verifier.VerifyFirewallRule("WiXToolset Test - 0027", expected10);
854
855 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
856
857 // verify the firewall exceptions have been removed.
858 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0018"));
859 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0019"));
860 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0020"));
861 Assert.False(Verifier.FirewallRuleExists("WiXToolset401 Test - 0021"));
862 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0022"));
863 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0023"));
864 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0024"));
865 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0025"));
866 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0026"));
867 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0027"));
868 }
869
870 [RuntimeFact]
871 public void ServiceNameIsPassedIntoNestedRules()
872 {
873 var product = this.CreatePackageInstaller("NestedService");
874 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
875
876 var expected1 = new RuleDetails("WiXToolset Test - 0031")
877 {
878 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
879 Protocol = 256,
880 LocalAddresses = "*",
881 RemoteAddresses = "*",
882 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
883 Description = "WiX Toolset firewall exception rule integration test - service property",
884 EdgeTraversal = false,
885 EdgeTraversalOptions = 0,
886 Enabled = true,
887 InterfaceTypes = "All",
888 Profiles = Int32.MaxValue,
889 SecureFlags = 0,
890 ServiceName = "Spooler",
891 };
892
893 Verifier.VerifyFirewallRule("WiXToolset Test - 0031", expected1);
894
895 var expected2 = new RuleDetails("WiXToolset Test - 0032")
896 {
897 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
898 Protocol = 256,
899 LocalAddresses = "*",
900 RemoteAddresses = "*",
901 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
902 Description = "WiX Toolset firewall exception rule integration test - ServiceConfig",
903 EdgeTraversal = false,
904 EdgeTraversalOptions = 0,
905 Enabled = true,
906 InterfaceTypes = "All",
907 Profiles = Int32.MaxValue,
908 SecureFlags = 0,
909 ServiceName = "Spooler",
910 };
911
912 Verifier.VerifyFirewallRule("WiXToolset Test - 0032", expected2);
913
914 var expected3 = new RuleDetails("WiXToolset Test - 0033")
915 {
916 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
917 Protocol = 256,
918 LocalAddresses = "*",
919 RemoteAddresses = "*",
920 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
921 Description = "WiX Toolset firewall exception rule integration test - ServiceInstall",
922 EdgeTraversal = false,
923 EdgeTraversalOptions = 0,
924 Enabled = true,
925 InterfaceTypes = "All",
926 Profiles = Int32.MaxValue,
927 SecureFlags = 0,
928 ServiceName = "WixTestFirewallSrv",
929 };
930
931 Verifier.VerifyFirewallRule("WiXToolset Test - 0033", expected3);
932
933 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
934
935 // verify the firewall exceptions have been removed.
936 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0031"));
937 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0032"));
938 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0033"));
939 }
940
941 [RuntimeFact]
942 public void SucceedWhenEnableOnlyFlagIsSet()
943 {
944 var product = this.CreatePackageInstaller("FirewallRulesProperties");
945 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
946
947 var expected1 = new RuleDetails("WiXToolset Test - 0028")
948 {
949 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
950 Protocol = 256,
951 LocalAddresses = "*",
952 RemoteAddresses = "*",
953 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
954 EdgeTraversal = false,
955 EdgeTraversalOptions = 0,
956 Enabled = true,
957 InterfaceTypes = "All",
958 Profiles = Int32.MaxValue,
959 SecureFlags = 0,
960 };
961
962 Verifier.VerifyFirewallRule("WiXToolset Test - 0028", expected1);
963
964 Verifier.DisableFirewallRule("WiXToolset Test - 0028");
965
966 var args = new[]
967 {
968 "LOCALPORT=3456",
969 "PROTOCOL=6",
970 "PROGRAM=ShouldBeUnchanged",
971 "PROFILE=2",
972 "DESCRIPTION=ShouldBeUnchanged",
973 "REMOTESCOPE=ShouldBeUnchanged",
974 "EDGETRAVERSAL=3",
975 "ENABLED=1",
976 "GROUPING=ShouldBeUnchanged",
977 "ICMPTYPES=ShouldBeUnchanged",
978 "INTERFACE=ShouldBeUnchanged",
979 "INTERFACETYPE=ShouldBeUnchanged",
980 "LOCALSCOPE=ShouldBeUnchanged",
981 "REMOTEPORT=60000",
982 "SERVICE=ShouldBeUnchanged",
983 "PACKAGEID=ShouldBeUnchanged",
984 "LOCALUSERS=ShouldBeUnchanged",
985 "LOCALOWNER=ShouldBeUnchanged",
986 "REMOTEMACHINES=ShouldBeUnchanged",
987 "REMOTEUSERS=ShouldBeUnchanged",
988 "SECUREFLAGS=15",
989 "REMOTEADDRESS=ShouldBeUnchanged",
990 "LOCALADDRESS=ShouldBeUnchanged",
991 };
992
993 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args);
994
995 var expected2 = new RuleDetails("WiXToolset Test - 0028")
996 {
997 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
998 Protocol = 256,
999 LocalAddresses = "*",
1000 RemoteAddresses = "*",
1001 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1002 EdgeTraversal = false,
1003 EdgeTraversalOptions = 0,
1004 Enabled = true,
1005 InterfaceTypes = "All",
1006 Profiles = Int32.MaxValue,
1007 SecureFlags = 0,
1008 };
1009
1010 Verifier.VerifyFirewallRule("WiXToolset Test - 0028", expected2);
1011
1012 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1013
1014 // verify the firewall exceptions have been removed.
1015 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0028"));
1016 }
1017
1018 [RuntimeFact]
1019 public void SucceedWhenDoNothingFlagIsSet()
1020 {
1021 var product = this.CreatePackageInstaller("FirewallRulesProperties");
1022 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1023
1024 var expected1 = new RuleDetails("WiXToolset Test - 0029")
1025 {
1026 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1027 Protocol = 256,
1028 LocalAddresses = "*",
1029 RemoteAddresses = "*",
1030 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1031 EdgeTraversal = false,
1032 EdgeTraversalOptions = 0,
1033 Enabled = true,
1034 InterfaceTypes = "All",
1035 Profiles = Int32.MaxValue,
1036 SecureFlags = 0,
1037 };
1038
1039 Verifier.VerifyFirewallRule("WiXToolset Test - 0029", expected1);
1040 Verifier.DisableFirewallRule("WiXToolset Test - 0029");
1041
1042 var args = new[]
1043 {
1044 "INTERFACE=ShouldBeUnchanged",
1045 "INTERFACETYPE=ShouldBeUnchanged",
1046 "REMOTEADDRESS=ShouldBeUnchanged",
1047 "LOCALADDRESS=ShouldBeUnchanged",
1048 };
1049
1050 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args);
1051
1052 var expected2 = new RuleDetails("WiXToolset Test - 0029")
1053 {
1054 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1055 Protocol = 256,
1056 LocalAddresses = "*",
1057 RemoteAddresses = "*",
1058 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1059 EdgeTraversal = false,
1060 EdgeTraversalOptions = 0,
1061 Enabled = false, // remains as disabled after the repair
1062 InterfaceTypes = "All",
1063 Profiles = Int32.MaxValue,
1064 SecureFlags = 0,
1065 };
1066
1067 Verifier.VerifyFirewallRule("WiXToolset Test - 0029", expected2);
1068
1069 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1070
1071 // verify the firewall exceptions have been removed.
1072 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0029"));
1073 }
1074
1075 [RuntimeFact]
1076 public void SucceedWhenNoFlagIsSet()
1077 {
1078 var product = this.CreatePackageInstaller("FirewallRulesProperties");
1079 product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1080
1081 var expected1 = new RuleDetails("WiXToolset Test - 0030")
1082 {
1083 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1084 Protocol = 256,
1085 LocalAddresses = "*",
1086 RemoteAddresses = "*",
1087 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1088 EdgeTraversal = false,
1089 EdgeTraversalOptions = 0,
1090 Enabled = true,
1091 InterfaceTypes = "All",
1092 Profiles = Int32.MaxValue,
1093 SecureFlags = 0,
1094 };
1095
1096 Verifier.VerifyFirewallRule("WiXToolset Test - 0030", expected1);
1097 Verifier.DisableFirewallRule("WiXToolset Test - 0030");
1098
1099 var names = NetworkInterface.GetAllNetworkInterfaces()
1100 .Take(2)
1101 .Select(ni => ni.Name);
1102
1103 var args = names.Select((name, idx) => $"INTERFACE{idx + 1}=\"{name}\"")
1104 .Concat(new[]
1105 {
1106 "INTERFACETYPE1=Wireless",
1107 "INTERFACETYPE2=Lan",
1108 "REMOTEADDRESS1=DHCP",
1109 "REMOTEADDRESS2=LocalSubnet",
1110 "LOCALADDRESS1=127.0.0.1",
1111 "LOCALADDRESS2=192.168.1.1",
1112 })
1113 .ToArray();
1114
1115 product.RepairProduct(MSIExec.MSIExecReturnCode.SUCCESS, args);
1116
1117 var expected2 = new RuleDetails("WiXToolset Test - 0030")
1118 {
1119 Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW,
1120 Protocol = 256,
1121 LocalAddresses = "127.0.0.1/255.255.255.255,192.168.1.1/255.255.255.255",
1122 RemoteAddresses = "LocalSubnet,DHCP",
1123 Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN,
1124 Description = "",
1125 EdgeTraversal = false,
1126 EdgeTraversalOptions = 0,
1127 Enabled = true,
1128 Interfaces = names.ToArray(),
1129 InterfaceTypes = "Lan,Wireless",
1130 Profiles = Int32.MaxValue,
1131 SecureFlags = 0,
1132 };
1133
1134 Verifier.VerifyFirewallRule("WiXToolset Test - 0030", expected2);
1135
1136 product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS);
1137
1138 // verify the firewall exceptions have been removed.
1139 Assert.False(Verifier.FirewallRuleExists("WiXToolset Test - 0030"));
1140 }
535 } 1141 }
536} 1142}
diff --git a/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj b/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj
index a5536de4..7d4695d3 100644
--- a/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj
+++ b/src/test/msi/WixToolsetTest.MsiE2E/WixToolsetTest.MsiE2E.csproj
@@ -29,6 +29,7 @@
29 29
30 <ItemGroup> 30 <ItemGroup>
31 <PackageReference Include="Microsoft.Win32.Registry" /> 31 <PackageReference Include="Microsoft.Win32.Registry" />
32 <PackageReference Include="System.Net.NetworkInformation" />
32 <PackageReference Include="System.Security.Principal.Windows" /> 33 <PackageReference Include="System.Security.Principal.Windows" />
33 <PackageReference Include="WixInternal.TestSupport" /> 34 <PackageReference Include="WixInternal.TestSupport" />
34 <PackageReference Include="WixToolset.Data" /> 35 <PackageReference Include="WixToolset.Data" />