summaryrefslogtreecommitdiff
path: root/src/test/burn/WixToolsetTest.BurnE2E/ExePackageTests.cs
blob: dc6515b5ef39da4af8e3d07832c6a1354e3e5a92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// 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.BurnE2E
{
    using WixTestTools;
    using Xunit;
    using Xunit.Abstractions;

    public class ExePackageTests : BurnE2ETests
    {
        public ExePackageTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }

        [RuntimeFact]
        public void CanInstallAndUninstallPerMachineArpEntryExePackage()
        {
            const string arpId = "{4D9EC36A-1E63-4244-875C-3ECB0A2CAE30}";
            var perMachineArpEntryExePackageBundle = this.CreateBundleInstaller(@"PerMachineArpEntryExePackage");
            var arpEntryExePackage = this.CreateArpEntryInstaller(perMachineArpEntryExePackageBundle, "TestExe");

            arpEntryExePackage.VerifyRegistered(false);

            var installLogPath = perMachineArpEntryExePackageBundle.Install();
            perMachineArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
            arpEntryExePackage.VerifyRegistered(true);

            LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\"");

            var uninstallLogPath = perMachineArpEntryExePackageBundle.Uninstall();
            perMachineArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
            arpEntryExePackage.VerifyRegistered(false);

            LogVerifier.MessageInLogFile(uninstallLogPath, $"testexe.exe\" /regd HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}");
        }

        [RuntimeFact]
        public void CanUninstallPerMachineArpEntryExePackageOnRollback()
        {
            const string arpId = "{80E90929-EEA5-48A7-A680-A0237A1CAD84}";
            var perMachineArpEntryExePackageFailureBundle = this.CreateBundleInstaller(@"PerMachineArpEntryExePackageFailure");
            var arpEntryExePackage = this.CreateArpEntryInstaller(perMachineArpEntryExePackageFailureBundle, "TestExe");

            arpEntryExePackage.VerifyRegistered(false);

            var installLogPath = perMachineArpEntryExePackageFailureBundle.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
            perMachineArpEntryExePackageFailureBundle.VerifyUnregisteredAndRemovedFromPackageCache();
            arpEntryExePackage.VerifyRegistered(false);

            LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\"");
            LogVerifier.MessageInLogFile(installLogPath, $"testexe.exe\" /regd HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}");
        }

        [RuntimeFact]
        public void CanInstallAndUninstallPerUserArpEntryExePackage()
        {
            const string arpId = "{9B5300C7-9B34-4670-9614-185B02AB87EF}";
            var perUserArpEntryExePackageBundle = this.CreateBundleInstaller(@"PerUserArpEntryExePackage");
            var arpEntryExePackage = this.CreateArpEntryInstaller(perUserArpEntryExePackageBundle, "TestExe");

            arpEntryExePackage.VerifyRegistered(false);

            var installLogPath = perUserArpEntryExePackageBundle.Install();
            perUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
            arpEntryExePackage.VerifyRegistered(true);

            LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\"");

            var uninstallLogPath = perUserArpEntryExePackageBundle.Uninstall();
            perUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
            arpEntryExePackage.VerifyRegistered(false);

            LogVerifier.MessageInLogFile(uninstallLogPath, $"testexe.exe\" /regd HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}");
        }

        [RuntimeFact]
        public void FailsUninstallWhenPerUserArpEntryExePackageMissingQuietUninstallString()
        {
            const string arpId = "{DE9F8594-5856-4454-AB10-3C01ED246D7D}";
            var brokenPerUserArpEntryExePackageBundle = this.CreateBundleInstaller(@"BrokenPerUserArpEntryExePackage");
            var arpEntryExePackage = this.CreateArpEntryInstaller(brokenPerUserArpEntryExePackageBundle, "TestExe");

            arpEntryExePackage.VerifyRegistered(false);
            brokenPerUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();

            var installLogPath = brokenPerUserArpEntryExePackageBundle.Install();
            brokenPerUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
            arpEntryExePackage.VerifyRegistered(true);

            LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\"");

            brokenPerUserArpEntryExePackageBundle.Uninstall((int)MSIExec.MSIExecReturnCode.ERROR_INVALID_PARAMETER);
            brokenPerUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();

            arpEntryExePackage.Unregister();

            brokenPerUserArpEntryExePackageBundle.Uninstall();
            brokenPerUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
        }
    }
}