From 8fb5d579e8cf5eb0f93d07a73bf318a8969c6b10 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 17 Jul 2024 11:09:34 -0700 Subject: Initialize WOW64 in TouchFile custom action Fixes 8638 --- .../TestData/TouchFileTests/TouchFile/Package.wxs | 8 ++++ .../TouchFileTests/TouchFile/TouchFile.wixproj | 6 +++ .../msi/WixToolsetTest.MsiE2E/TouchFileTests.cs | 48 ++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 src/test/msi/TestData/TouchFileTests/TouchFile/Package.wxs create mode 100644 src/test/msi/TestData/TouchFileTests/TouchFile/TouchFile.wixproj create mode 100644 src/test/msi/WixToolsetTest.MsiE2E/TouchFileTests.cs (limited to 'src/test') diff --git a/src/test/msi/TestData/TouchFileTests/TouchFile/Package.wxs b/src/test/msi/TestData/TouchFileTests/TouchFile/Package.wxs new file mode 100644 index 00000000..23bd195b --- /dev/null +++ b/src/test/msi/TestData/TouchFileTests/TouchFile/Package.wxs @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/test/msi/TestData/TouchFileTests/TouchFile/TouchFile.wixproj b/src/test/msi/TestData/TouchFileTests/TouchFile/TouchFile.wixproj new file mode 100644 index 00000000..58321e7e --- /dev/null +++ b/src/test/msi/TestData/TouchFileTests/TouchFile/TouchFile.wixproj @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/msi/WixToolsetTest.MsiE2E/TouchFileTests.cs b/src/test/msi/WixToolsetTest.MsiE2E/TouchFileTests.cs new file mode 100644 index 00000000..f7666825 --- /dev/null +++ b/src/test/msi/WixToolsetTest.MsiE2E/TouchFileTests.cs @@ -0,0 +1,48 @@ +// 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. + +namespace WixToolsetTest.MsiE2E; + +using System; +using System.IO; +using WixTestTools; +using Xunit; +using Xunit.Abstractions; + +public class TouchFileTests : MsiE2ETests +{ + public TouchFileTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) + { + } + + [RuntimeFact] + public void CanValidateTouchFile() + { + var touchFileTestPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "touch-file-test.txt"); + + try + { + var touchFileTime = new DateTime(2004, 4, 5, 0, 0, 0, DateTimeKind.Utc); + + File.WriteAllText(touchFileTestPath, "This file exists to test CanValidateTouchFile()"); + File.SetCreationTimeUtc(touchFileTestPath, touchFileTime); + File.SetLastAccessTimeUtc(touchFileTestPath, touchFileTime); + File.SetLastWriteTimeUtc(touchFileTestPath, touchFileTime); + + var product = this.CreatePackageInstaller("TouchFile"); + + var justBeforeInstall = DateTime.UtcNow; + product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + + var touchFile = new FileInfo(touchFileTestPath); + Assert.Equal(touchFileTime, touchFile.CreationTimeUtc); + Assert.Equal(touchFileTime, touchFile.LastAccessTimeUtc); + Assert.True(touchFile.LastWriteTimeUtc >= justBeforeInstall, $"Touch file {touchFileTestPath} last write time: {touchFile.LastWriteTimeUtc} of file should have been updated to at least: {justBeforeInstall}"); + + product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); + } + finally + { + File.Delete(touchFileTestPath); + } + } +} -- cgit v1.2.3-55-g6feb