Skip to content

Commit

Permalink
(#1185) Add tests for hooks
Browse files Browse the repository at this point in the history
This adds tests for hook scripts. It validates that the skip-hooks
option is added, that hooks install/upgrade/uninstall correctly, and
that hooks are run at the correc times during
install/upgrade/uninstall.

As a bonus, this also adds a test case for "pure" portable packages,
that is packages without any package automation scripts. First, it
tests that they install correctly. Second it checks that hook scripts
will still run even if there is no chocolateyInstall.ps1

There are a few things added to the integration Scenario.cs to ensure
that hooks are correctly setup and reset for tests. The copying of the
hook scripts relies on the CommandName being set correctly.
  • Loading branch information
TheCakeIsNaOH authored and corbob committed Sep 20, 2022
1 parent 542505f commit d6b9876
Show file tree
Hide file tree
Showing 70 changed files with 1,538 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/chocolatey.tests.integration/Scenario.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public static void reset(ChocolateyConfiguration config)
string badPackagesPath = get_package_install_path() + "-bad";
string backupPackagesPath = get_package_install_path() + "-bkp";
string shimsPath = ApplicationParameters.ShimsLocation;
string hooksPath = ApplicationParameters.HooksLocation;

_fileSystem.delete_directory_if_exists(config.CacheLocation, recursive: true, overrideAttributes: true);
_fileSystem.delete_directory_if_exists(config.Sources, recursive: true, overrideAttributes: true);
Expand All @@ -58,6 +59,7 @@ public static void reset(ChocolateyConfiguration config)
_fileSystem.delete_directory_if_exists(backupPackagesPath, recursive: true, overrideAttributes: true);
_fileSystem.delete_directory_if_exists(_fileSystem.combine_paths(get_top_level(), ".chocolatey"), recursive: true, overrideAttributes: true);
_fileSystem.delete_directory_if_exists(_fileSystem.combine_paths(get_top_level(), "extensions"), recursive: true, overrideAttributes: true);
_fileSystem.delete_directory_if_exists(hooksPath, recursive: true, overrideAttributes: true);

_fileSystem.create_directory(config.CacheLocation);
_fileSystem.create_directory(config.Sources);
Expand Down Expand Up @@ -93,6 +95,7 @@ public static void install_package(ChocolateyConfiguration config, string packag

installConfig.PackageNames = packageId;
installConfig.Version = version;
installConfig.CommandName = CommandNameType.install.to_string();
_service.install_run(installConfig);

NUnitSetup.MockLogger.Messages.Clear();
Expand Down
186 changes: 186 additions & 0 deletions src/chocolatey.tests.integration/chocolatey.tests.integration.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,18 @@
<None Include="context\exactpackage\exactpackage\1.0.0\exactpackage.nuspec">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\portablepackage.nuspec">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\Casemismatch.exe.ignore">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\graphical.exe.gui">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\not.installed.exe.ignore">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\installpackage\1.0.0\installpackage.nuspec">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
Expand Down Expand Up @@ -348,6 +360,168 @@
<None Include="context\nonterminatingerror\1.0\tools\chocolateyInstall.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\dontrun.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-beforemodify-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-beforemodify-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-beforemodify-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-install-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-install-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-install-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-uninstall-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-uninstall-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-uninstall-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-upgrade-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-upgrade-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\post-upgrade-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-beforemodify-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-beforemodify-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-beforemodify-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-install-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-install-doesnotexist.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-install-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-install-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-uninstall-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-uninstall-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-uninstall-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-upgrade-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-upgrade-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\hook\pre-upgrade-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\1.0.0\scriptpackage.hook.nuspec">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\dontrun.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-beforemodify-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-beforemodify-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-beforemodify-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-install-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-install-doesnotexist.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-install-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-install-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-uninstall-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-uninstall-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-uninstall-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-upgrade-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-upgrade-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\post-upgrade-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-beforemodify-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-beforemodify-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-beforemodify-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-install-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-install-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-install-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-uninstall-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-uninstall-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-uninstall-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-upgrade-all.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-upgrade-installpackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\hook\pre-upgrade-upgradepackage.ps1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\scriptpackage.hook\2.0.0\scriptpackage.hook.nuspec">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\testing.packages.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
Expand Down Expand Up @@ -502,6 +676,18 @@
<None Include="context\upgradepackage\1.1.1-beta\tools\graphical.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\casemismatch.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\console.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\graphical.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="context\portablepackage\1.0.0\tools\not.installed.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Content Include="infrastructure\filesystem\CopyMe.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>portablepackage</id>
<version>1.0.0</version>
<title>portablepackage</title>
<authors>__REPLACE_AUTHORS_OF_SOFTWARE__</authors>
<owners>__REPLACE_YOUR_NAME__</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>__REPLACE__</description>
<summary>__REPLACE__</summary>
<tags>portablepackage admin</tags>
</metadata>
<files>
<file src="tools\**" target="tools" />
</files>
</package>
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Throw "This script should not be run"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>scriptpackage.hook</id>
<version>1.0.0</version>
<title>scriptpackage.hook</title>
<authors>TheCakeIsNaOH</authors>
<tags>scriptpackage.hook</tags>
<summary>Package with various hook scripts</summary>
<description>Package with various hook scripts. Intended to test </description>
</metadata>
<files>
<file src="hook\**" target="hook" />
</files>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Throw "This script should not be run"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Write-Output "$($MyInvocation.MyCommand.Name) hook ran for $env:PackageName $env:PackageVersion"
Loading

0 comments on commit d6b9876

Please sign in to comment.