From 7750404222a7c5bb6543dd246c2cce0f7c097d8d Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 18 Feb 2022 17:41:43 -0600 Subject: Ignore HEAD request failure in dlutil's DownloadUrl. Fixes #6331 --- src/libs/dutil/WixToolset.DUtil/dlutil.cpp | 5 ++++- src/test/burn/WixToolsetTest.BurnE2E/CacheTests.cs | 5 ++++- src/test/burn/WixToolsetTest.BurnE2E/IWebServer.cs | 2 ++ .../WebServer/CoreOwinWebServer.cs | 22 ++++++++++++++++++++-- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/libs/dutil/WixToolset.DUtil/dlutil.cpp b/src/libs/dutil/WixToolset.DUtil/dlutil.cpp index 70155e6f..f6b793b2 100644 --- a/src/libs/dutil/WixToolset.DUtil/dlutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/dlutil.cpp @@ -158,7 +158,10 @@ extern "C" HRESULT DAPI DownloadUrl( // Get the resource size and creation time from the internet. hr = GetResourceMetadata(hSession, &sczUrl, pDownloadSource->sczUser, pDownloadSource->sczPassword, pAuthenticate, &dw64Size, &ftCreated); - DlExitOnFailure(hr, "Failed to get size and time for URL: %ls", sczUrl); + if (FAILED(hr)) + { + LogStringLine(REPORT_VERBOSE, "Ignoring failure to get size and time for URL: %ls (error 0x%x)", sczUrl, hr); + } // Ignore failure to initialize resume because we will fall back to full download then // download. diff --git a/src/test/burn/WixToolsetTest.BurnE2E/CacheTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/CacheTests.cs index 953aed2e..4a3ffa2e 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/CacheTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/CacheTests.cs @@ -67,6 +67,7 @@ namespace WixToolsetTest.BurnE2E { "/BundleA/PackageA.msi", Path.Combine(this.TestContext.TestDataFolder, "PackageA.msi") }, { "/BundleA/PackageB.msi", Path.Combine(this.TestContext.TestDataFolder, "PackageB.msi") }, }); + webServer.DisableHeadResponses = true; webServer.Start(); // Don't install PackageB initially so it will be installed when run from the package cache. @@ -95,11 +96,13 @@ namespace WixToolsetTest.BurnE2E testBAController.SetPackageRequestedState("PackageB", RequestState.Present); - bundleA.Modify(bundlePackageCachePath); + var modifyLogPath = bundleA.Modify(bundlePackageCachePath); bundleA.VerifyRegisteredAndInPackageCache(); packageA.VerifyInstalled(true); packageB.VerifyInstalled(true); + + Assert.True(LogVerifier.MessageInLogFile(modifyLogPath, "Ignoring failure to get size and time for URL: http://localhost:9999/e2e/BundleA/PackageB.msi (error 0x80070002)")); } [Fact] diff --git a/src/test/burn/WixToolsetTest.BurnE2E/IWebServer.cs b/src/test/burn/WixToolsetTest.BurnE2E/IWebServer.cs index 3bb8a23e..3846ae94 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/IWebServer.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/IWebServer.cs @@ -7,6 +7,8 @@ namespace WixToolsetTest.BurnE2E public interface IWebServer : IDisposable { + bool DisableHeadResponses { get; set; } + /// /// Registers a collection of relative URLs (the key) with its absolute path to the file (the value). /// diff --git a/src/test/burn/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs b/src/test/burn/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs index 89825813..025e01ff 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/WebServer/CoreOwinWebServer.cs @@ -7,6 +7,7 @@ namespace WixToolsetTest.BurnE2E using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders.Physical; using Microsoft.Extensions.Hosting; @@ -18,6 +19,8 @@ namespace WixToolsetTest.BurnE2E private IHost WebHost { get; set; } + public bool DisableHeadResponses { get; set; } + public void AddFiles(Dictionary physicalPathsByRelativeUrl) { foreach (var kvp in physicalPathsByRelativeUrl) @@ -40,6 +43,7 @@ namespace WixToolsetTest.BurnE2E FileProvider = this, RequestPath = "/e2e", ServeUnknownFileTypes = true, + OnPrepareResponse = this.OnPrepareStaticFileResponse, }); }); }) @@ -47,13 +51,24 @@ namespace WixToolsetTest.BurnE2E this.WebHost.Start(); } + private void OnPrepareStaticFileResponse(StaticFileResponseContext obj) + { + if (this.DisableHeadResponses && obj.Context.Request.Method == "HEAD") + { + obj.Context.Response.StatusCode = 404; + } + } + public void Dispose() { var waitTime = TimeSpan.FromSeconds(5); this.WebHost?.StopAsync(waitTime).Wait(waitTime); } - public IDirectoryContents GetDirectoryContents(string subpath) => throw new NotImplementedException(); + public IDirectoryContents GetDirectoryContents(string subpath) + { + throw new NotImplementedException(); + } public IFileInfo GetFileInfo(string subpath) { @@ -65,6 +80,9 @@ namespace WixToolsetTest.BurnE2E return new NotFoundFileInfo(subpath); } - public IChangeToken Watch(string filter) => throw new NotImplementedException(); + public IChangeToken Watch(string filter) + { + throw new NotImplementedException(); + } } } \ No newline at end of file -- cgit v1.2.3-55-g6feb