diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-03-28 14:51:21 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-03-30 16:05:00 -0500 |
commit | 3221757bb210b23e4c8d859d20aa20b43c0df582 (patch) | |
tree | 4391705303589d48a5f93ac1ba9c5701c9daeba7 /src | |
parent | 7cc4271c9d78ed60e354f585d03b612a9efb7cf3 (diff) | |
download | wix-3221757bb210b23e4c8d859d20aa20b43c0df582.tar.gz wix-3221757bb210b23e4c8d859d20aa20b43c0df582.tar.bz2 wix-3221757bb210b23e4c8d859d20aa20b43c0df582.zip |
Port the update bundle tests from old repo.
Diffstat (limited to 'src')
28 files changed, 640 insertions, 12 deletions
diff --git a/src/TestBA/TestBA.cs b/src/TestBA/TestBA.cs index f86a5807..18b1fd0c 100644 --- a/src/TestBA/TestBA.cs +++ b/src/TestBA/TestBA.cs | |||
@@ -178,20 +178,15 @@ namespace WixToolset.Test.BA | |||
178 | { | 178 | { |
179 | // The list of updates is sorted in descending version, so the first callback should be the largest update available. | 179 | // The list of updates is sorted in descending version, so the first callback should be the largest update available. |
180 | // This update should be either larger than ours (so we are out of date), the same as ours (so we are current) | 180 | // This update should be either larger than ours (so we are out of date), the same as ours (so we are current) |
181 | // or smaller than ours (we have a private build). If we really wanted to, we could leave the e.StopProcessingUpdates alone and | 181 | // or smaller than ours (we have a private build). |
182 | // enumerate all of the updates. | 182 | // Enumerate all of the updates anyway in case something's broken. |
183 | this.Log(String.Format("Potential update v{0} from '{1}'; current version: v{2}", e.Version, e.UpdateLocation, this.Version)); | 183 | this.Log(String.Format("Potential update v{0} from '{1}'; current version: v{2}", e.Version, e.UpdateLocation, this.Version)); |
184 | if (this.Engine.CompareVersions(e.Version, this.Version) > 0) | 184 | if (!this.UpdateAvailable && this.Engine.CompareVersions(e.Version, this.Version) > 0) |
185 | { | 185 | { |
186 | this.Log(String.Format("Selected update v{0}", e.Version)); | 186 | this.Log(String.Format("Selected update v{0}", e.Version)); |
187 | this.Engine.SetUpdate(null, e.UpdateLocation, e.Size, UpdateHashType.None, null); | 187 | this.Engine.SetUpdate(null, e.UpdateLocation, e.Size, UpdateHashType.None, null); |
188 | this.UpdateAvailable = true; | 188 | this.UpdateAvailable = true; |
189 | } | 189 | } |
190 | else | ||
191 | { | ||
192 | this.UpdateAvailable = false; | ||
193 | } | ||
194 | e.StopProcessingUpdates = true; | ||
195 | } | 190 | } |
196 | 191 | ||
197 | protected override void OnDetectUpdateComplete(DetectUpdateCompleteEventArgs e) | 192 | protected override void OnDetectUpdateComplete(DetectUpdateCompleteEventArgs e) |
diff --git a/src/TestData/Templates/PackagePerUser.wxs b/src/TestData/Templates/PackagePerUser.wxs index e985966c..25133fb4 100644 --- a/src/TestData/Templates/PackagePerUser.wxs +++ b/src/TestData/Templates/PackagePerUser.wxs | |||
@@ -36,8 +36,7 @@ | |||
36 | 36 | ||
37 | <Fragment> | 37 | <Fragment> |
38 | <Directory Id="TARGETDIR" Name="SourceDir"> | 38 | <Directory Id="TARGETDIR" Name="SourceDir"> |
39 | <Directory Id="LocalAppDataFolder" /> | 39 | <Directory Id="LocalAppDataFolder"> |
40 | <Directory Id="ProgramFilesFolder"> | ||
41 | <Directory Id="WixDir" Name="~Test WiX"> | 40 | <Directory Id="WixDir" Name="~Test WiX"> |
42 | <Directory Id="TestDir" Name="$(var.TestGroupName)"> | 41 | <Directory Id="TestDir" Name="$(var.TestGroupName)"> |
43 | <Directory Id="INSTALLFOLDER" Name="$(var.PackageName)" /> | 42 | <Directory Id="INSTALLFOLDER" Name="$(var.PackageName)" /> |
diff --git a/src/TestData/UpdateBundleTests/BundleAv1/BundleA.props b/src/TestData/UpdateBundleTests/BundleAv1/BundleA.props new file mode 100644 index 00000000..19b37770 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleAv1/BundleA.props | |||
@@ -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> | ||
3 | <PropertyGroup> | ||
4 | <OutputType>Bundle</OutputType> | ||
5 | <UpgradeCode>{AF745E41-CEAC-4C9F-83D8-663BAB1AF5CC}</UpgradeCode> | ||
6 | </PropertyGroup> | ||
7 | <ItemGroup> | ||
8 | <Compile Include="..\..\Templates\Bundle.wxs" Link="Bundle.wxs" /> | ||
9 | </ItemGroup> | ||
10 | </Project> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleAv1/BundleAv1.wixproj b/src/TestData/UpdateBundleTests/BundleAv1/BundleAv1.wixproj new file mode 100644 index 00000000..69d0408f --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleAv1/BundleAv1.wixproj | |||
@@ -0,0 +1,12 @@ | |||
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 | <Import Project="BundleA.props" /> | ||
4 | <ItemGroup> | ||
5 | <ProjectReference Include="..\PackageAv1\PackageAv1.wixproj" /> | ||
6 | <ProjectReference Include="..\..\TestBA\TestBAWixlib\testbawixlib.wixproj" /> | ||
7 | </ItemGroup> | ||
8 | <ItemGroup> | ||
9 | <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.90" /> | ||
10 | <PackageReference Include="WixToolset.NetFx.wixext" Version="4.0.64" /> | ||
11 | </ItemGroup> | ||
12 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/BundleAv1/BundleAv1.wxs b/src/TestData/UpdateBundleTests/BundleAv1/BundleAv1.wxs new file mode 100644 index 00000000..7bf16212 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleAv1/BundleAv1.wxs | |||
@@ -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 | |||
3 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
5 | <Fragment> | ||
6 | <PackageGroup Id="BundlePackages"> | ||
7 | <MsiPackage Id="PackageA" SourceFile="$(var.PackageAv1.TargetPath)" /> | ||
8 | </PackageGroup> | ||
9 | </Fragment> | ||
10 | </Wix> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleAv2/BundleAv2.wixproj b/src/TestData/UpdateBundleTests/BundleAv2/BundleAv2.wixproj new file mode 100644 index 00000000..78e773db --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleAv2/BundleAv2.wixproj | |||
@@ -0,0 +1,15 @@ | |||
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 | <Import Project="..\BundleAv1\BundleA.props" /> | ||
4 | <PropertyGroup> | ||
5 | <Version>2.0.0.0</Version> | ||
6 | </PropertyGroup> | ||
7 | <ItemGroup> | ||
8 | <ProjectReference Include="..\PackageAv2\PackageAv2.wixproj" /> | ||
9 | <ProjectReference Include="..\..\TestBA\TestBAWixlib\testbawixlib.wixproj" /> | ||
10 | </ItemGroup> | ||
11 | <ItemGroup> | ||
12 | <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.90" /> | ||
13 | <PackageReference Include="WixToolset.NetFx.wixext" Version="4.0.64" /> | ||
14 | </ItemGroup> | ||
15 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/BundleAv2/BundleAv2.wxs b/src/TestData/UpdateBundleTests/BundleAv2/BundleAv2.wxs new file mode 100644 index 00000000..5cbee5a8 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleAv2/BundleAv2.wxs | |||
@@ -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 | |||
3 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
5 | <Fragment> | ||
6 | <PackageGroup Id="BundlePackages"> | ||
7 | <MsiPackage Id="PackageA" SourceFile="$(var.PackageAv2.TargetPath)" /> | ||
8 | </PackageGroup> | ||
9 | </Fragment> | ||
10 | </Wix> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv1/Bundle.wxs b/src/TestData/UpdateBundleTests/BundleBv1/Bundle.wxs new file mode 100644 index 00000000..906121f4 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv1/Bundle.wxs | |||
@@ -0,0 +1,42 @@ | |||
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 | <?ifndef Version?> | ||
4 | <?define Version = 1.0.0.0?> | ||
5 | <?endif?> | ||
6 | |||
7 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
8 | <Bundle Name="~$(var.TestGroupName) - $(var.BundleName)" Version="$(var.Version)" UpgradeCode="$(var.UpgradeCode)" Compressed="yes"> | ||
9 | <!-- Update should be the only thing different from the template --> | ||
10 | <Update Location="$(var.WebServerBaseUrl)BundleB/feed" /> | ||
11 | |||
12 | <Log Prefix="~$(var.TestGroupName)_$(var.BundleName)" /> | ||
13 | |||
14 | <Variable Name="TestGroupName" Value="$(var.TestGroupName)" /> | ||
15 | |||
16 | <?ifdef SoftwareTag?> | ||
17 | <SoftwareTag Regid="regid.1995-08.com.example" InstallPath="[CommonAppDataFolder]regid.1995-08.com.example" /> | ||
18 | <?endif?> | ||
19 | |||
20 | <?ifndef BA?> | ||
21 | <!-- pulled in through the PackageGroupRef below --> | ||
22 | <?elseif $(var.BA) = "TestBAdnc"?> | ||
23 | <!-- pulled in through the PackageGroupRef below --> | ||
24 | <?elseif $(var.BA) = "hyperlinkLicense"?> | ||
25 | <BootstrapperApplication> | ||
26 | <bal:WixStandardBootstrapperApplication LicenseUrl="" Theme="hyperlinkLicense" /> | ||
27 | </BootstrapperApplication> | ||
28 | <?else?> | ||
29 | <BootstrapperApplicationRef Id="$(var.BA)" /> | ||
30 | <?endif?> | ||
31 | |||
32 | <Chain> | ||
33 | <?ifndef BA?> | ||
34 | <PackageGroupRef Id="TestBA" /> | ||
35 | <?elseif $(var.BA) = "TestBAdnc"?> | ||
36 | <PackageGroupRef Id="TestBAdnc" /> | ||
37 | <?endif?> | ||
38 | |||
39 | <PackageGroupRef Id="BundlePackages" /> | ||
40 | </Chain> | ||
41 | </Bundle> | ||
42 | </Wix> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv1/BundleB.props b/src/TestData/UpdateBundleTests/BundleBv1/BundleB.props new file mode 100644 index 00000000..8a275612 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv1/BundleB.props | |||
@@ -0,0 +1,7 @@ | |||
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> | ||
3 | <PropertyGroup> | ||
4 | <OutputType>Bundle</OutputType> | ||
5 | <UpgradeCode>{BF325BA5-5012-47C7-828C-577B6979CB28}</UpgradeCode> | ||
6 | </PropertyGroup> | ||
7 | </Project> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv1/BundleBv1.wixproj b/src/TestData/UpdateBundleTests/BundleBv1/BundleBv1.wixproj new file mode 100644 index 00000000..ca40fbdd --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv1/BundleBv1.wixproj | |||
@@ -0,0 +1,18 @@ | |||
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 | <Import Project="BundleB.props" /> | ||
4 | <ItemGroup> | ||
5 | <ProjectReference Include="..\PackageBv1\PackageBv1.wixproj" /> | ||
6 | <ProjectReference Include="..\..\TestBA\TestBAWixlib\testbawixlib.wixproj" /> | ||
7 | </ItemGroup> | ||
8 | <ItemGroup> | ||
9 | <Feeds Include="*.xml" /> | ||
10 | </ItemGroup> | ||
11 | <ItemGroup> | ||
12 | <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.90" /> | ||
13 | <PackageReference Include="WixToolset.NetFx.wixext" Version="4.0.64" /> | ||
14 | </ItemGroup> | ||
15 | <Target Name="CopyFeeds" AfterTargets="AfterBuild"> | ||
16 | <Copy SourceFiles="@(Feeds)" DestinationFolder="$(OutputPath)" /> | ||
17 | </Target> | ||
18 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv1/BundleBv1.wxs b/src/TestData/UpdateBundleTests/BundleBv1/BundleBv1.wxs new file mode 100644 index 00000000..00d927ec --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv1/BundleBv1.wxs | |||
@@ -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 | |||
3 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
5 | <Fragment> | ||
6 | <PackageGroup Id="BundlePackages"> | ||
7 | <MsiPackage Id="PackageB" SourceFile="$(var.PackageBv1.TargetPath)" /> | ||
8 | </PackageGroup> | ||
9 | </Fragment> | ||
10 | </Wix> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv1/FeedBv1.0.xml b/src/TestData/UpdateBundleTests/BundleBv1/FeedBv1.0.xml new file mode 100644 index 00000000..743548be --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv1/FeedBv1.0.xml | |||
@@ -0,0 +1,32 @@ | |||
1 | <?xml version='1.0' ?> | ||
2 | <!-- 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. --> | ||
3 | |||
4 | |||
5 | <feed xmlns="http://www.w3.org/2005/Atom" xmlns:as="http://appsyndication.org/2006/appsyn"> | ||
6 | <title type="text">BundleB v1.0</title> | ||
7 | <subtitle type="text">Bundle Subtitle.</subtitle> | ||
8 | <as:application type="application/exe">1116353B-7C6E-4C29-BFA1-D4A972CD421D</as:application> | ||
9 | <updated>2014-07-14T12:39:00.000Z</updated> | ||
10 | <id>http://localhost:9999/e2e/BundleB/feed</id> | ||
11 | <link rel="self" type="application/atom+xml" href="http://localhost:9999/e2e/BundleB/feed"/> | ||
12 | <generator version="0.1">manual build</generator> | ||
13 | <entry> | ||
14 | <title>Bundle v1.0</title> | ||
15 | <id>v1.0</id> | ||
16 | <author> | ||
17 | <name>Bundle_Author</name> | ||
18 | <uri>http://mycompany.com/software</uri> | ||
19 | <email>Bundle_Author@mycompany.com</email> | ||
20 | </author> | ||
21 | <link rel="alternate" href="http://www.mycompany.com/content/view/software"/> | ||
22 | <link rel="enclosure" href="http://localhost:9999/e2e/BundleB/1.0/BundleB.exe" length="0" type="application/octet-stream"/> | ||
23 | <content type="html"> | ||
24 | <p>Change list:</p><ul> | ||
25 | <li>Initial release.</li> | ||
26 | </ul> | ||
27 | </content> | ||
28 | <as:upgrade version="1.0.0.0-preview" /> | ||
29 | <as:version>1.0.0.0</as:version> | ||
30 | <updated>2014-07-14T12:39:00.000Z</updated> | ||
31 | </entry> | ||
32 | </feed> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv1/FeedBv2.0.xml b/src/TestData/UpdateBundleTests/BundleBv1/FeedBv2.0.xml new file mode 100644 index 00000000..c8e3f6ea --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv1/FeedBv2.0.xml | |||
@@ -0,0 +1,51 @@ | |||
1 | <?xml version='1.0' ?> | ||
2 | <!-- 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. --> | ||
3 | |||
4 | |||
5 | <feed xmlns="http://www.w3.org/2005/Atom" xmlns:as="http://appsyndication.org/2006/appsyn"> | ||
6 | <title type="text">BundleB v2.0</title> | ||
7 | <subtitle type="text">Bundle Subtitle.</subtitle> | ||
8 | <as:application type="application/exe">1116353B-7C6E-4C29-BFA1-D4A972CD421D</as:application> | ||
9 | <updated>2014-07-14T12:39:00.000Z</updated> | ||
10 | <id>http://localhost:9999/e2e/BundleB/feed</id> | ||
11 | <link rel="self" type="application/atom+xml" href="http://localhost:9999/e2e/BundleB/feed"/> | ||
12 | <generator version="0.1">manual build</generator> | ||
13 | <entry> | ||
14 | <title>Bundle v2.0</title> | ||
15 | <id>v2.0</id> | ||
16 | <author> | ||
17 | <name>Bundle_Author</name> | ||
18 | <uri>http://mycompany.com/software</uri> | ||
19 | <email>Bundle_Author@mycompany.com</email> | ||
20 | </author> | ||
21 | <link rel="alternate" href="http://www.mycompany.com/content/view/software"/> | ||
22 | <link rel="enclosure" href="http://localhost:9999/e2e/BundleB/2.0/BundleB.exe" length="0" type="application/octet-stream"/> | ||
23 | <content type="html"> | ||
24 | <p>Change list:</p><ul> | ||
25 | <li>Updated release.</li> | ||
26 | </ul> | ||
27 | </content> | ||
28 | <as:upgrade version="1.0" /> | ||
29 | <as:version>2.0.0.0</as:version> | ||
30 | <updated>2014-11-10T12:39:00.000Z</updated> | ||
31 | </entry> | ||
32 | <entry> | ||
33 | <title>Bundle v1.0</title> | ||
34 | <id>v1.0</id> | ||
35 | <author> | ||
36 | <name>Bundle_Author</name> | ||
37 | <uri>http://mycompany.com/software</uri> | ||
38 | <email>Bundle_Author@mycompany.com</email> | ||
39 | </author> | ||
40 | <link rel="alternate" href="http://www.mycompany.com/content/view/software"/> | ||
41 | <link rel="enclosure" href="http://localhost:9999/e2e/BundleB/1.0/BundleB.exe" length="0" type="application/octet-stream"/> | ||
42 | <content type="html"> | ||
43 | <p>Change list:</p><ul> | ||
44 | <li>Initial release.</li> | ||
45 | </ul> | ||
46 | </content> | ||
47 | <as:upgrade version="1.0.0.0-preview" /> | ||
48 | <as:version>1.0.0.0</as:version> | ||
49 | <updated>2014-11-09T12:39:00.000Z</updated> | ||
50 | </entry> | ||
51 | </feed> | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv2/BundleBv2.wixproj b/src/TestData/UpdateBundleTests/BundleBv2/BundleBv2.wixproj new file mode 100644 index 00000000..cc2aec76 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv2/BundleBv2.wixproj | |||
@@ -0,0 +1,18 @@ | |||
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 | <Import Project="..\BundleBv1\BundleB.props" /> | ||
4 | <PropertyGroup> | ||
5 | <Version>2.0.0.0</Version> | ||
6 | </PropertyGroup> | ||
7 | <ItemGroup> | ||
8 | <Compile Include="..\BundleBv1\Bundle.wxs" /> | ||
9 | </ItemGroup> | ||
10 | <ItemGroup> | ||
11 | <ProjectReference Include="..\PackageBv2\PackageBv2.wixproj" /> | ||
12 | <ProjectReference Include="..\..\TestBA\TestBAWixlib\testbawixlib.wixproj" /> | ||
13 | </ItemGroup> | ||
14 | <ItemGroup> | ||
15 | <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.90" /> | ||
16 | <PackageReference Include="WixToolset.NetFx.wixext" Version="4.0.64" /> | ||
17 | </ItemGroup> | ||
18 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/BundleBv2/BundleBv2.wxs b/src/TestData/UpdateBundleTests/BundleBv2/BundleBv2.wxs new file mode 100644 index 00000000..2043b084 --- /dev/null +++ b/src/TestData/UpdateBundleTests/BundleBv2/BundleBv2.wxs | |||
@@ -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 | |||
3 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
5 | <Fragment> | ||
6 | <PackageGroup Id="BundlePackages"> | ||
7 | <MsiPackage Id="PackageB" SourceFile="$(var.PackageBv2.TargetPath)" /> | ||
8 | </PackageGroup> | ||
9 | </Fragment> | ||
10 | </Wix> | ||
diff --git a/src/TestData/UpdateBundleTests/PackageAv1/PackageA.props b/src/TestData/UpdateBundleTests/PackageAv1/PackageA.props new file mode 100644 index 00000000..bc734540 --- /dev/null +++ b/src/TestData/UpdateBundleTests/PackageAv1/PackageA.props | |||
@@ -0,0 +1,9 @@ | |||
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> | ||
3 | <PropertyGroup> | ||
4 | <UpgradeCode>{AB55C215-3268-4005-9657-6B0567F0A4B1}</UpgradeCode> | ||
5 | </PropertyGroup> | ||
6 | <ItemGroup> | ||
7 | <Compile Include="..\..\Templates\Package.wxs" Link="Package.wxs" /> | ||
8 | </ItemGroup> | ||
9 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/PackageAv1/PackageAv1.wixproj b/src/TestData/UpdateBundleTests/PackageAv1/PackageAv1.wixproj new file mode 100644 index 00000000..45d3b2c8 --- /dev/null +++ b/src/TestData/UpdateBundleTests/PackageAv1/PackageAv1.wixproj | |||
@@ -0,0 +1,4 @@ | |||
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 | <Import Project="PackageA.props" /> | ||
4 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/PackageAv2/PackageAv2.wixproj b/src/TestData/UpdateBundleTests/PackageAv2/PackageAv2.wixproj new file mode 100644 index 00000000..b419f663 --- /dev/null +++ b/src/TestData/UpdateBundleTests/PackageAv2/PackageAv2.wixproj | |||
@@ -0,0 +1,7 @@ | |||
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 | <Import Project="..\PackageAv1\PackageA.props" /> | ||
4 | <PropertyGroup> | ||
5 | <Version>2.0.0.0</Version> | ||
6 | </PropertyGroup> | ||
7 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/PackageBv1/PackageB.props b/src/TestData/UpdateBundleTests/PackageBv1/PackageB.props new file mode 100644 index 00000000..e677cb7e --- /dev/null +++ b/src/TestData/UpdateBundleTests/PackageBv1/PackageB.props | |||
@@ -0,0 +1,9 @@ | |||
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> | ||
3 | <PropertyGroup> | ||
4 | <UpgradeCode>{6B971C9E-2FB0-4BF7-8D77-D2DF71FD9A14}</UpgradeCode> | ||
5 | </PropertyGroup> | ||
6 | <ItemGroup> | ||
7 | <Compile Include="..\..\Templates\PackagePerUser.wxs" Link="PackagePerUser.wxs" /> | ||
8 | </ItemGroup> | ||
9 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/PackageBv1/PackageBv1.wixproj b/src/TestData/UpdateBundleTests/PackageBv1/PackageBv1.wixproj new file mode 100644 index 00000000..7b6f83a3 --- /dev/null +++ b/src/TestData/UpdateBundleTests/PackageBv1/PackageBv1.wixproj | |||
@@ -0,0 +1,4 @@ | |||
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 | <Import Project="PackageB.props" /> | ||
4 | </Project> \ No newline at end of file | ||
diff --git a/src/TestData/UpdateBundleTests/PackageBv2/PackageBv2.wixproj b/src/TestData/UpdateBundleTests/PackageBv2/PackageBv2.wixproj new file mode 100644 index 00000000..126d0f53 --- /dev/null +++ b/src/TestData/UpdateBundleTests/PackageBv2/PackageBv2.wixproj | |||
@@ -0,0 +1,7 @@ | |||
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 | <Import Project="..\PackageBv1\PackageB.props" /> | ||
4 | <PropertyGroup> | ||
5 | <Version>2.0.0.0</Version> | ||
6 | </PropertyGroup> | ||
7 | </Project> \ No newline at end of file | ||
diff --git a/src/Wix.Build.targets b/src/Wix.Build.targets index 20a9bf66..17a46e2a 100644 --- a/src/Wix.Build.targets +++ b/src/Wix.Build.targets | |||
@@ -4,7 +4,8 @@ | |||
4 | <PropertyGroup> | 4 | <PropertyGroup> |
5 | <BundleName Condition=" '$(BundleName)' == '' ">$(MSBuildProjectName)</BundleName> | 5 | <BundleName Condition=" '$(BundleName)' == '' ">$(MSBuildProjectName)</BundleName> |
6 | <PackageName Condition=" '$(PackageName)' == '' ">$(MSBuildProjectName)</PackageName> | 6 | <PackageName Condition=" '$(PackageName)' == '' ">$(MSBuildProjectName)</PackageName> |
7 | <DefineConstants>TestGroupName=$(TestGroupName);PackageName=$(PackageName);BundleName=$(BundleName);$(DefineConstants)</DefineConstants> | 7 | <WebServerBaseUrl Condition=" '$(WebServerBaseUrl)' == '' ">http://localhost:9999/e2e/</WebServerBaseUrl> |
8 | <DefineConstants>TestGroupName=$(TestGroupName);PackageName=$(PackageName);BundleName=$(BundleName);WebServerBaseUrl=$(WebServerBaseUrl);$(DefineConstants)</DefineConstants> | ||
8 | <DefineConstants Condition=" '$(BA)' != '' ">BA=$(BA);$(DefineConstants)</DefineConstants> | 9 | <DefineConstants Condition=" '$(BA)' != '' ">BA=$(BA);$(DefineConstants)</DefineConstants> |
9 | <DefineConstants Condition=" '$(CabPrefix)' != '' ">CabPrefix=$(CabPrefix);$(DefineConstants)</DefineConstants> | 10 | <DefineConstants Condition=" '$(CabPrefix)' != '' ">CabPrefix=$(CabPrefix);$(DefineConstants)</DefineConstants> |
10 | <DefineConstants Condition=" '$(IncludeSoftwareTag)' == 'true' ">SoftwareTag=1;$(DefineConstants)</DefineConstants> | 11 | <DefineConstants Condition=" '$(IncludeSoftwareTag)' == 'true' ">SoftwareTag=1;$(DefineConstants)</DefineConstants> |
diff --git a/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs b/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs index c9294f73..392b675d 100644 --- a/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs +++ b/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs | |||
@@ -36,6 +36,13 @@ namespace WixToolsetTest.BurnE2E | |||
36 | return controller; | 36 | return controller; |
37 | } | 37 | } |
38 | 38 | ||
39 | protected IWebServer CreateWebServer() | ||
40 | { | ||
41 | var webServer = new CoreOwinWebServer(); | ||
42 | this.Installers.Push(webServer); | ||
43 | return webServer; | ||
44 | } | ||
45 | |||
39 | public void Dispose() | 46 | public void Dispose() |
40 | { | 47 | { |
41 | while (this.Installers.TryPop(out var installer)) | 48 | while (this.Installers.TryPop(out var installer)) |
diff --git a/src/WixToolsetTest.BurnE2E/IWebServer.cs b/src/WixToolsetTest.BurnE2E/IWebServer.cs new file mode 100644 index 00000000..3bb8a23e --- /dev/null +++ b/src/WixToolsetTest.BurnE2E/IWebServer.cs | |||
@@ -0,0 +1,20 @@ | |||
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 | namespace WixToolsetTest.BurnE2E | ||
4 | { | ||
5 | using System; | ||
6 | using System.Collections.Generic; | ||
7 | |||
8 | public interface IWebServer : IDisposable | ||
9 | { | ||
10 | /// <summary> | ||
11 | /// Registers a collection of relative URLs (the key) with its absolute path to the file (the value). | ||
12 | /// </summary> | ||
13 | void AddFiles(Dictionary<string, string> physicalPathsByRelativeUrl); | ||
14 | |||
15 | /// <summary> | ||
16 | /// Starts the web server on a new thread. | ||
17 | /// </summary> | ||
18 | void Start(); | ||
19 | } | ||
20 | } \ No newline at end of file | ||
diff --git a/src/WixToolsetTest.BurnE2E/TestBAController.cs b/src/WixToolsetTest.BurnE2E/TestBAController.cs index 8e3053b3..103b603b 100644 --- a/src/WixToolsetTest.BurnE2E/TestBAController.cs +++ b/src/WixToolsetTest.BurnE2E/TestBAController.cs | |||
@@ -155,6 +155,12 @@ namespace WixToolsetTest.BurnE2E | |||
155 | Registry.LocalMachine.DeleteSubKey(key); | 155 | Registry.LocalMachine.DeleteSubKey(key); |
156 | } | 156 | } |
157 | 157 | ||
158 | public void SetVerifyArguments(string verifyArguments) | ||
159 | { | ||
160 | this.SetBurnTestValue("VerifyArguments", verifyArguments); | ||
161 | |||
162 | } | ||
163 | |||
158 | private void SetPackageState(string packageId, string name, string value) | 164 | private void SetPackageState(string packageId, string name, string value) |
159 | { | 165 | { |
160 | var key = String.Format(@"{0}\{1}", this.TestBaseRegKeyPath, packageId ?? String.Empty); | 166 | var key = String.Format(@"{0}\{1}", this.TestBaseRegKeyPath, packageId ?? String.Empty); |
diff --git a/src/WixToolsetTest.BurnE2E/UpdateBundleTests.cs b/src/WixToolsetTest.BurnE2E/UpdateBundleTests.cs new file mode 100644 index 00000000..9fcd428b --- /dev/null +++ b/src/WixToolsetTest.BurnE2E/UpdateBundleTests.cs | |||
@@ -0,0 +1,245 @@ | |||
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 | namespace WixToolsetTest.BurnE2E | ||
4 | { | ||
5 | using System; | ||
6 | using System.Collections.Generic; | ||
7 | using System.Diagnostics; | ||
8 | using System.IO; | ||
9 | using Xunit; | ||
10 | using Xunit.Abstractions; | ||
11 | |||
12 | public class UpdateBundleTests : BurnE2ETests | ||
13 | { | ||
14 | public UpdateBundleTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } | ||
15 | |||
16 | [Fact] | ||
17 | public void CanLaunchUpdateBundleFromLocalSourceInsteadOfInstall() | ||
18 | { | ||
19 | var packageAv1 = this.CreatePackageInstaller("PackageAv1"); | ||
20 | var packageAv2 = this.CreatePackageInstaller("PackageAv2"); | ||
21 | var bundleAv1 = this.CreateBundleInstaller("BundleAv1"); | ||
22 | var bundleAv2 = this.CreateBundleInstaller("BundleAv2"); | ||
23 | |||
24 | var updateBundleSwitch = String.Concat("\"", "-updatebundle:", bundleAv2.Bundle, "\""); | ||
25 | |||
26 | packageAv1.VerifyInstalled(false); | ||
27 | packageAv2.VerifyInstalled(false); | ||
28 | |||
29 | // Install the v2 bundle by getting v1 to launch it as an update bundle. | ||
30 | bundleAv1.Install(arguments: updateBundleSwitch); | ||
31 | bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
32 | bundleAv2.VerifyRegisteredAndInPackageCache(); | ||
33 | |||
34 | packageAv1.VerifyInstalled(false); | ||
35 | packageAv2.VerifyInstalled(true); | ||
36 | |||
37 | bundleAv2.Uninstall(); | ||
38 | bundleAv2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
39 | packageAv2.VerifyInstalled(false); | ||
40 | } | ||
41 | |||
42 | [Fact] | ||
43 | public void CanLaunchUpdateBundleFromLocalSourceInsteadOfModify() | ||
44 | { | ||
45 | var packageAv1 = this.CreatePackageInstaller("PackageAv1"); | ||
46 | var packageAv2 = this.CreatePackageInstaller("PackageAv2"); | ||
47 | var bundleAv1 = this.CreateBundleInstaller("BundleAv1"); | ||
48 | var bundleAv2 = this.CreateBundleInstaller("BundleAv2"); | ||
49 | |||
50 | var updateBundleSwitch = String.Concat("\"", "-updatebundle:", bundleAv2.Bundle, "\""); | ||
51 | |||
52 | packageAv1.VerifyInstalled(false); | ||
53 | packageAv2.VerifyInstalled(false); | ||
54 | |||
55 | bundleAv1.Install(); | ||
56 | bundleAv1.VerifyRegisteredAndInPackageCache(); | ||
57 | |||
58 | packageAv1.VerifyInstalled(true); | ||
59 | packageAv2.VerifyInstalled(false); | ||
60 | |||
61 | // Install the v2 bundle by getting v1 to launch it as an update bundle. | ||
62 | bundleAv1.Modify(arguments: updateBundleSwitch); | ||
63 | bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
64 | bundleAv2.VerifyRegisteredAndInPackageCache(); | ||
65 | |||
66 | packageAv1.VerifyInstalled(false); | ||
67 | packageAv2.VerifyInstalled(true); | ||
68 | |||
69 | bundleAv2.Uninstall(); | ||
70 | bundleAv2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
71 | packageAv2.VerifyInstalled(false); | ||
72 | } | ||
73 | |||
74 | [Fact] | ||
75 | public void ForwardsArgumentsToUpdateBundle() | ||
76 | { | ||
77 | var packageAv1 = this.CreatePackageInstaller("PackageAv1"); | ||
78 | var packageAv2 = this.CreatePackageInstaller("PackageAv2"); | ||
79 | var bundleAv1 = this.CreateBundleInstaller("BundleAv1"); | ||
80 | var bundleAv2 = this.CreateBundleInstaller("BundleAv2"); | ||
81 | var testBAController = this.CreateTestBAController(); | ||
82 | |||
83 | const string verifyArguments = "these arguments should exist"; | ||
84 | var updateBundleSwitch = String.Concat("\"", "-updatebundle:", bundleAv2.Bundle, "\" ", verifyArguments); | ||
85 | |||
86 | testBAController.SetVerifyArguments(verifyArguments); | ||
87 | |||
88 | packageAv1.VerifyInstalled(false); | ||
89 | packageAv2.VerifyInstalled(false); | ||
90 | |||
91 | // Install the v2 bundle by getting v1 to launch it as an update bundle. | ||
92 | bundleAv1.Install(arguments: updateBundleSwitch); | ||
93 | bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
94 | bundleAv2.VerifyRegisteredAndInPackageCache(); | ||
95 | |||
96 | packageAv1.VerifyInstalled(false); | ||
97 | packageAv2.VerifyInstalled(true); | ||
98 | |||
99 | // Attempt to uninstall bundleA2 without the verify arguments passed and expect failure code. | ||
100 | bundleAv2.Uninstall(expectedExitCode: -1); | ||
101 | |||
102 | // Remove the required arguments and uninstall again. | ||
103 | testBAController.SetVerifyArguments(null); | ||
104 | bundleAv2.Uninstall(); | ||
105 | bundleAv2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
106 | packageAv2.VerifyInstalled(false); | ||
107 | } | ||
108 | |||
109 | // Installs bundle Bv1.0 then tries to update to latest version during modify (but no server exists). | ||
110 | [Fact] | ||
111 | public void CanCheckUpdateServerDuringModifyAndDoNothingWhenServerIsntResponsive() | ||
112 | { | ||
113 | var packageB = this.CreatePackageInstaller("PackageBv1"); | ||
114 | var bundleB = this.CreateBundleInstaller("BundleBv1"); | ||
115 | |||
116 | packageB.VerifyInstalled(false); | ||
117 | |||
118 | bundleB.Install(); | ||
119 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
120 | |||
121 | packageB.VerifyInstalled(true); | ||
122 | |||
123 | // Run the v1 bundle requesting an update bundle. | ||
124 | bundleB.Modify(arguments: "-checkupdate"); | ||
125 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
126 | |||
127 | // Verify nothing changed. | ||
128 | packageB.VerifyInstalled(true); | ||
129 | |||
130 | bundleB.Uninstall(); | ||
131 | bundleB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
132 | packageB.VerifyInstalled(false); | ||
133 | } | ||
134 | |||
135 | // Installs bundle Bv1.0 then tries to update to latest version during modify (server exists, no feed). | ||
136 | [Fact] | ||
137 | public void CanCheckUpdateServerDuringModifyAndDoNothingWhenFeedIsMissing() | ||
138 | { | ||
139 | var packageB = this.CreatePackageInstaller("PackageBv1"); | ||
140 | var bundleB = this.CreateBundleInstaller("BundleBv1"); | ||
141 | var webServer = this.CreateWebServer(); | ||
142 | |||
143 | webServer.Start(); | ||
144 | |||
145 | packageB.VerifyInstalled(false); | ||
146 | |||
147 | bundleB.Install(); | ||
148 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
149 | |||
150 | packageB.VerifyInstalled(true); | ||
151 | |||
152 | // Run the v1 bundle requesting an update bundle. | ||
153 | bundleB.Modify(arguments: "-checkupdate"); | ||
154 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
155 | |||
156 | // Verify nothing changed. | ||
157 | packageB.VerifyInstalled(true); | ||
158 | |||
159 | bundleB.Uninstall(); | ||
160 | bundleB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
161 | packageB.VerifyInstalled(false); | ||
162 | } | ||
163 | |||
164 | // Installs bundle Bv1.0 then tries to update to latest version during modify (server exists, v1.0 feed). | ||
165 | [Fact] | ||
166 | public void CanCheckUpdateServerDuringModifyAndDoNothingWhenAlreadyLatestVersion() | ||
167 | { | ||
168 | var packageB = this.CreatePackageInstaller("PackageBv1"); | ||
169 | var bundleB = this.CreateBundleInstaller("BundleBv1"); | ||
170 | var webServer = this.CreateWebServer(); | ||
171 | |||
172 | webServer.AddFiles(new Dictionary<string, string> | ||
173 | { | ||
174 | { "/BundleB/feed", Path.Combine(this.TestContext.TestDataFolder, "FeedBv1.0.xml") }, | ||
175 | }); | ||
176 | webServer.Start(); | ||
177 | |||
178 | packageB.VerifyInstalled(false); | ||
179 | |||
180 | bundleB.Install(); | ||
181 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
182 | |||
183 | packageB.VerifyInstalled(true); | ||
184 | |||
185 | // Run the v1 bundle requesting an update bundle. | ||
186 | bundleB.Modify(arguments: "-checkupdate"); | ||
187 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
188 | |||
189 | // Verify nothing changed. | ||
190 | packageB.VerifyInstalled(true); | ||
191 | |||
192 | bundleB.Uninstall(); | ||
193 | bundleB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
194 | packageB.VerifyInstalled(false); | ||
195 | } | ||
196 | |||
197 | // Installs bundle Bv1.0 then does an update to bundle Bv2.0 during modify (server exists, v2.0 feed). | ||
198 | [Fact] | ||
199 | public void CanLaunchUpdateBundleFromDownloadInsteadOfModify() | ||
200 | { | ||
201 | var packageBv1 = this.CreatePackageInstaller("PackageBv1"); | ||
202 | var packageBv2 = this.CreatePackageInstaller("PackageBv2"); | ||
203 | var bundleBv1 = this.CreateBundleInstaller("BundleBv1"); | ||
204 | var bundleBv2 = this.CreateBundleInstaller("BundleBv2"); | ||
205 | var webServer = this.CreateWebServer(); | ||
206 | |||
207 | webServer.AddFiles(new Dictionary<string, string> | ||
208 | { | ||
209 | { "/BundleB/feed", Path.Combine(this.TestContext.TestDataFolder, "FeedBv2.0.xml") }, | ||
210 | { "/BundleB/2.0/BundleB.exe", bundleBv2.Bundle }, | ||
211 | }); | ||
212 | webServer.Start(); | ||
213 | |||
214 | packageBv1.VerifyInstalled(false); | ||
215 | packageBv2.VerifyInstalled(false); | ||
216 | |||
217 | bundleBv1.Install(); | ||
218 | bundleBv1.VerifyRegisteredAndInPackageCache(); | ||
219 | |||
220 | packageBv1.VerifyInstalled(true); | ||
221 | packageBv2.VerifyInstalled(false); | ||
222 | |||
223 | // Run the v1 bundle requesting an update bundle. | ||
224 | bundleBv1.Modify(arguments: "-checkupdate"); | ||
225 | |||
226 | // The modify -> update is asynchronous, so we need to wait until the real BundleB is done | ||
227 | var childBundles = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(bundleBv2.Bundle)); | ||
228 | foreach (var childBundle in childBundles) | ||
229 | { | ||
230 | childBundle.WaitForExit(); | ||
231 | } | ||
232 | |||
233 | bundleBv1.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
234 | bundleBv2.VerifyRegisteredAndInPackageCache(); | ||
235 | |||
236 | packageBv1.VerifyInstalled(false); | ||
237 | packageBv2.VerifyInstalled(true); | ||
238 | |||
239 | bundleBv2.Uninstall(); | ||
240 | bundleBv2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
241 | packageBv1.VerifyInstalled(false); | ||
242 | packageBv2.VerifyInstalled(false); | ||
243 | } | ||
244 | } | ||
245 | } | ||
diff --git a/src/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs b/src/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs new file mode 100644 index 00000000..66db226c --- /dev/null +++ b/src/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs | |||
@@ -0,0 +1,69 @@ | |||
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 | namespace WixToolsetTest.BurnE2E | ||
4 | { | ||
5 | using System; | ||
6 | using System.Collections.Generic; | ||
7 | using System.IO; | ||
8 | using Microsoft.AspNetCore.Builder; | ||
9 | using Microsoft.AspNetCore.Hosting; | ||
10 | using Microsoft.Extensions.FileProviders; | ||
11 | using Microsoft.Extensions.FileProviders.Physical; | ||
12 | using Microsoft.Extensions.Hosting; | ||
13 | using Microsoft.Extensions.Primitives; | ||
14 | |||
15 | public class CoreOwinWebServer : IWebServer, IFileProvider | ||
16 | { | ||
17 | private Dictionary<string, string> PhysicalPathsByRelativeUrl { get; } = new Dictionary<string, string>(); | ||
18 | |||
19 | private IHost WebHost { get; set; } | ||
20 | |||
21 | public void AddFiles(Dictionary<string, string> physicalPathsByRelativeUrl) | ||
22 | { | ||
23 | foreach (var kvp in physicalPathsByRelativeUrl) | ||
24 | { | ||
25 | this.PhysicalPathsByRelativeUrl.Add(kvp.Key, kvp.Value); | ||
26 | } | ||
27 | } | ||
28 | |||
29 | public void Start() | ||
30 | { | ||
31 | this.WebHost = Host.CreateDefaultBuilder() | ||
32 | .ConfigureWebHostDefaults(webBuilder => | ||
33 | { | ||
34 | // Use localhost instead of * to avoid firewall issues. | ||
35 | webBuilder.UseUrls("http://localhost:9999"); | ||
36 | webBuilder.Configure(appBuilder => | ||
37 | { | ||
38 | appBuilder.UseStaticFiles(new StaticFileOptions | ||
39 | { | ||
40 | FileProvider = this, | ||
41 | RequestPath = "/e2e", | ||
42 | ServeUnknownFileTypes = true, | ||
43 | }); | ||
44 | }); | ||
45 | }) | ||
46 | .Build(); | ||
47 | this.WebHost.Start(); | ||
48 | } | ||
49 | |||
50 | public void Dispose() | ||
51 | { | ||
52 | this.WebHost?.StopAsync(TimeSpan.FromSeconds(5)).GetAwaiter().GetResult(); | ||
53 | } | ||
54 | |||
55 | public IDirectoryContents GetDirectoryContents(string subpath) => throw new NotImplementedException(); | ||
56 | |||
57 | public IFileInfo GetFileInfo(string subpath) | ||
58 | { | ||
59 | if (this.PhysicalPathsByRelativeUrl.TryGetValue(subpath, out var filepath)) | ||
60 | { | ||
61 | return new PhysicalFileInfo(new FileInfo(filepath)); | ||
62 | } | ||
63 | |||
64 | return new NotFoundFileInfo(subpath); | ||
65 | } | ||
66 | |||
67 | public IChangeToken Watch(string filter) => throw new NotImplementedException(); | ||
68 | } | ||
69 | } \ No newline at end of file | ||
diff --git a/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj b/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj index 170f5c73..75fdc9b3 100644 --- a/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj +++ b/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj | |||
@@ -13,10 +13,11 @@ | |||
13 | </ItemGroup> | 13 | </ItemGroup> |
14 | 14 | ||
15 | <ItemGroup> | 15 | <ItemGroup> |
16 | <ProjectReference Include="..\WixTestTools\WixTestTools.csproj" /> | 16 | <ProjectReference Include="..\WixTestTools\WixTestTools.csproj" /> |
17 | </ItemGroup> | 17 | </ItemGroup> |
18 | 18 | ||
19 | <ItemGroup> | 19 | <ItemGroup> |
20 | <PackageReference Include="Microsoft.AspNetCore.Owin" Version="3.1.13" /> | ||
20 | <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" /> | 21 | <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" /> |
21 | <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> | 22 | <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> |
22 | <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.48" /> | 23 | <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.48" /> |