Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unit tests for purge functionality #51

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 36 additions & 26 deletions Tests/BuildkitTools.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -302,35 +302,36 @@ Describe "BuildkitTools.psm1" {
}

It "Should successfully uninstall Buildkit" {
Mock Uninstall-BuildkitHelper -ModuleName 'BuildkitTools'
Uninstall-Buildkit -Path 'TestDrive:\Custom\Buildkit\' -Confirm:$false -Force

Uninstall-Buildkit -Path 'TestDrive:\Program Files\Buildkit' -Confirm:$false -Force
# Should stop and deregister the buildkitd service
Should -Invoke Stop-BuildkitdService -Times 1 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Unregister-Buildkitd -Times 1 -Scope It -ModuleName "BuildkitTools"

Should -Invoke Uninstall-BuildkitHelper -Times 1 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Buildkit' }
# Should remove buildkit dir
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Custom\Buildkit\bin' }

# Should not purge program data
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'HKLM:\SYSTEM\CurrentControlSet\Services\buildkit' }
Should -Invoke Uninstall-ProgramFiles -Times 0 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq "$ENV:ProgramData\Buildkit" }
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Feature -eq "buildkit" }
}

It "Should successfully uninstall Buildkit from default path" {
Mock Uninstall-BuildkitHelper -ModuleName 'BuildkitTools'

Uninstall-Buildkit -Confirm:$false -Force

Should -Invoke Uninstall-BuildkitHelper -Times 1 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Buildkit' }
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Buildkit\bin' }
}

It "Should throw an error if user does not consent to uninstalling Buildkit" {
$ENV:PESTER = $true
{ Uninstall-Buildkit -Path 'TestDrive:\Program Files\Buildkit' -Confirm:$false -Force:$false } | Should -Throw "Buildkit uninstallation cancelled."
}

It "Should successfully call uninstall Buildkit helper function" {
Uninstall-BuildkitHelper -Path 'TestDrive:\Program Files\Buildkit'
It "Should successfully purge program data" {
Uninstall-Buildkit -Path 'TestDrive:\Program Files\Buildkit' -Confirm:$false -Force -Purge

Should -Invoke Stop-BuildkitdService -Times 1 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Unregister-Buildkitd -Times 1 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'HKLM:\SYSTEM\CurrentControlSet\Services\buildkit' }
# Should purge program data
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "BuildkitTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Buildkit' }
Should -Invoke Uninstall-ProgramFiles -Times 1 -Scope It -ModuleName "BuildkitTools" `
Expand All @@ -339,26 +340,35 @@ Describe "BuildkitTools.psm1" {
-ParameterFilter { $Feature -eq "buildkit" }
}

It "Should do nothing if user does not consent to uninstalling Buildkit" {
$ENV:PESTER = $true
Uninstall-Buildkit -Path 'TestDrive:\Program Files\Buildkit' -Confirm:$false -Force:$false

# Should NOT stop and deregister the buildkit service
Should -Invoke Stop-BuildkitdService -Times 0 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Unregister-Buildkitd -Times 0 -Scope It -ModuleName "BuildkitTools"

# Should NOT remove buildkit binaries/dir
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "BuildkitTools"
}

It "Should do nothing if buildkit is not installed at specified path" {
Mock Test-EmptyDirectory -ModuleName 'BuildkitTools' -MockWith { return $true }

Uninstall-BuildkitHelper -Path 'TestDrive:\Program Files\Buildkit'
Uninstall-Buildkit -Path 'TestDrive:\Program Files\Buildkit' -Confirm:$false

Should -Invoke Stop-BuildkitdService -Times 0 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Unregister-Buildkitd -Times 0 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "BuildkitTools"

$Error[0].Exception.Message | Should -BeExactly 'Buildkit does not exist at TestDrive:\Program Files\Buildkit or the directory is empty.'
}

It "Should throw an error if buildkitd service stop or unregister was unsuccessful" {
It "Should throw an error if buildkit service stop or unregister was unsuccessful" {
Mock Stop-BuildkitdService -ModuleName 'BuildkitTools' -MockWith { Throw 'Error' }

{ Uninstall-BuildkitHelper -Path 'TestDrive:\Program Files\Buildkit' } | Should -Throw "Could not stop or unregister buildkitd service.*"
{ Uninstall-Buildkit -Path 'TestDrive:\Program Files\Buildkit' -Confirm:$false -Force -Purge } | Should -Throw "*Could not stop or unregister buildkitd service.*"
Should -Invoke Unregister-Buildkitd -Times 0 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "BuildkitTools"
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "BuildkitTools"
}
}
}
}
29 changes: 10 additions & 19 deletions Tests/ContainerNetworkTools.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -252,42 +252,33 @@ Describe "ContainerNetworkTools.psm1" {
}

It "Should successfully uninstall WinCNI plugins" {
Mock Uninstall-WinCNIPluginHelper -ModuleName 'ContainerNetworkTools'
Uninstall-WinCNIPlugin -Path 'TestDrive:\Program Files' -Confirm:$false -Force

Uninstall-WinCNIPlugin -Confirm:$false -Path 'TestDrive:\Program Files\cni' -Force

Should -Invoke Uninstall-WinCNIPluginHelper -Times 1 -Scope It -ModuleName "ContainerNetworkTools" `
# Should remove containerd/cni dir
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerNetworkTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\cni' }
}

It "Should successfully uninstall WinCNI plugins from default path" {
Mock Uninstall-WinCNIPluginHelper -ModuleName 'ContainerNetworkTools'

Uninstall-WinCNIPlugin -Confirm:$false -Force

Should -Invoke Uninstall-WinCNIPluginHelper -Times 1 -Scope It -ModuleName "ContainerNetworkTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Containerd\cni' }
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerNetworkTools" `
-ParameterFilter { $Path -eq "$ENV:ProgramFiles\Containerd\cni" }
}

It "Should throw an error if user does not consent to uninstalling WinCNIPlugin" {
It "Should do nothing if user does not consent to uninstalling WinCNIPlugin" {
$ENV:PESTER = $true
{ Uninstall-WinCNIPlugin -Confirm:$false -Path 'TestDrive:\Program Files\cni' -Force:$false } | Should -Throw "Windows CNI plugins uninstallation cancelled."
}
Uninstall-WinCNIPlugin -Confirm:$false -Force:$false

It "Should successfully call uninstall WinCNIPlugin helper function" {
Uninstall-WinCNIPluginHelper -Path 'TestDrive:\TestDir\cni'

Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerNetworkTools" `
-ParameterFilter { $Path -eq 'TestDrive:\TestDir\cni' }
# Should NOT remove WinCNIPlugin binaries/dir
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "ContainerNetworkTools"
}

It "Should do nothing if WinCNI plugins is not installed at specified path" {
Mock Test-EmptyDirectory -ModuleName 'ContainerNetworkTools' -MockWith { return $true }

Uninstall-WinCNIPluginHelper -Path 'TestDrive:\TestDir\cni'
Uninstall-WinCNIPlugin -Path 'TestDrive:\TestDir\cni' -Confirm:$false
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "ContainerNetworkTools"

$Error[0].Exception.Message | Should -Be 'Windows CNI plugin does not exist at TestDrive:\TestDir\cni or the directory is empty.'
}
}
}
59 changes: 35 additions & 24 deletions Tests/ContainerdTools.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -279,35 +279,37 @@ Describe "ContainerdTools.psm1" {
}

It "Should successfully uninstall Containerd" {
Mock Uninstall-ContainerdHelper -ModuleName 'ContainerdTools'
Uninstall-Containerd -Path 'TestDrive:\Custom\Containerd\' -Confirm:$false -Force

Uninstall-Containerd -Path 'TestDrive:\Program Files\Containerd' -Confirm:$false -Force
# Should stop and deregister the containerd service
Should -Invoke Stop-ContainerdService -Times 1 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Unregister-Containerd -Times 1 -Scope It -ModuleName "ContainerdTools"

Should -Invoke Uninstall-ContainerdHelper -Times 1 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Containerd' }
# Should remove containerd binaries only not the entire dir
# The containerd dir contains cni binaries and config.toml
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Custom\Containerd\bin' }

# Should not purge program data
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq 'HKLM:\SYSTEM\CurrentControlSet\Services\containerd' }
Should -Invoke Uninstall-ProgramFiles -Times 0 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq "$ENV:ProgramData\Containerd" }
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Feature -eq "containerd" }
}

It "Should successfully uninstall Containerd from default path" {
Mock Uninstall-ContainerdHelper -ModuleName 'ContainerdTools'

Uninstall-Containerd -Confirm:$false -Force

Should -Invoke Uninstall-ContainerdHelper -Times 1 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Containerd' }
}

It "Should throw an error if user does not consent to uninstalling Containerd" {
$ENV:PESTER = $true
{ Uninstall-Containerd -Path 'TestDrive:\Program Files\Containerd' -Confirm:$false -Force:$false } | Should -Throw "Containerd uninstallation cancelled."
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq "$ENV:ProgramFiles\Containerd\bin" }
}

It "Should successfully call uninstall Containerd helper function" {
Uninstall-ContainerdHelper -Path 'TestDrive:\Program Files\Containerd'
It "Should successfully purge program data" {
Uninstall-Containerd -Path 'TestDrive:\Program Files\Containerd' -Confirm:$false -Force -Purge

Should -Invoke Stop-ContainerdService -Times 1 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Unregister-Containerd -Times 1 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq 'HKLM:\SYSTEM\CurrentControlSet\Services\containerd' }
# Should purge program data
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "ContainerdTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\Containerd' }
Should -Invoke Uninstall-ProgramFiles -Times 1 -Scope It -ModuleName "ContainerdTools" `
Expand All @@ -316,23 +318,32 @@ Describe "ContainerdTools.psm1" {
-ParameterFilter { $Feature -eq "containerd" }
}

It "Should do nothing if user does not consent to uninstalling Containerd" {
$ENV:PESTER = $true
Uninstall-Containerd -Path 'TestDrive:\Program Files\Containerd' -Confirm:$false -Force:$false

# Should NOT stop and deregister the containerd service
Should -Invoke Stop-ContainerdService -Times 0 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Unregister-Containerd -Times 0 -Scope It -ModuleName "ContainerdTools"

# Should NOT remove containerd binaries/dir
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "ContainerdTools"
}

It "Should do nothing if containerd is not installed at specified path" {
Mock Test-EmptyDirectory -ModuleName 'ContainerdTools' -MockWith { return $true }

Uninstall-ContainerdHelper -Path 'TestDrive:\Program Files\Containerd'
Uninstall-Containerd -Path 'TestDrive:\Program Files\Containerd' -Confirm:$false

Should -Invoke Stop-ContainerdService -Times 0 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Unregister-Containerd -Times 0 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "ContainerdTools"

$Error[0].Exception.Message | Should -BeExactly 'Containerd does not exist at TestDrive:\Program Files\Containerd or the directory is empty.'
}

It "Should throw an error if containerd service stop or unregister was unsuccessful" {
Mock Stop-ContainerdService -ModuleName 'ContainerdTools' -MockWith { Throw 'Error' }

{ Uninstall-ContainerdHelper -Path 'TestDrive:\Program Files\Containerd' } | Should -Throw "Could not stop or unregister containerd service.*"
{ Uninstall-Containerd -Path 'TestDrive:\Program Files\Containerd' -Confirm:$false -Force -Purge } | Should -Throw "*Could not stop or unregister containerd service.*"
Should -Invoke Unregister-Containerd -Times 0 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "ContainerdTools"
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "ContainerdTools"
Expand Down
52 changes: 25 additions & 27 deletions Tests/NerdctlTools.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -160,39 +160,30 @@ Describe "NerdctlTools.psm1" {
}

It "Should successfully uninstall nerdctl" {
Mock Uninstall-NerdctlHelper -ModuleName 'NerdctlTools'
Uninstall-Nerdctl -Path 'TestDrive:\Custom\nerdctl\' -Confirm:$false -Force

Uninstall-Nerdctl -Path 'TestDrive:\Program Files\nerdctl' -Confirm:$false -Force
# Should remove nerdctl dir
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Custom\nerdctl\' }

Should -Invoke Uninstall-NerdctlHelper -Times 1 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\nerdctl' }
# Should not purge program data
Should -Invoke Uninstall-ProgramFiles -Times 0 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Path -eq "$ENV:ProgramData\nerdctl" }
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Feature -eq "nerdctl" }
}

It "Should successfully uninstall nerdctl from default path" {
Mock Uninstall-NerdctlHelper -ModuleName 'NerdctlTools'

Uninstall-Nerdctl -Confirm:$false -Force

Should -Invoke Uninstall-NerdctlHelper -Times 1 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\nerdctl' }
}

It "Should throw an error if user does not consent to uninstalling nerdctl" {
$ENV:PESTER = $true
{ Uninstall-Nerdctl -Confirm:$false -Path 'TestDrive:\Program Files\nerdctl'-Force:$false } | Should -Throw 'nerdctl uninstallation cancelled.'
}

It "Should do nothing if nerdctl is not installed at specified path" {
Mock Test-EmptyDirectory -ModuleName 'NerdctlTools' -MockWith { return $true }

Uninstall-Nerdctl -Confirm:$false -Force
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "NerdctlTools"
Should -Invoke Remove-FeatureFromPath -Times 0 -Scope It -ModuleName "NerdctlTools"
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Path -eq "$ENV:ProgramFiles\nerdctl" }
}

It "Should successfully call uninstall nerdctl helper function" {
Uninstall-NerdctlHelper -Path 'TestDrive:\Program Files\nerdctl'
It "Should successfully purge program data" {
Uninstall-Nerdctl -Path 'TestDrive:\Program Files\nerdctl' -Confirm:$false -Force -Purge

# Should purge program data
Should -Invoke Remove-Item -Times 1 -Scope It -ModuleName "NerdctlTools" `
-ParameterFilter { $Path -eq 'TestDrive:\Program Files\nerdctl' }
Should -Invoke Uninstall-ProgramFiles -Times 1 -Scope It -ModuleName "NerdctlTools" `
Expand All @@ -201,12 +192,19 @@ Describe "NerdctlTools.psm1" {
-ParameterFilter { $Feature -eq "nerdctl" }
}

It "Should write an error if nerdctl is not installed at specified path" {
Mock Test-EmptyDirectory -ModuleName 'NerdctlTools' -MockWith { return $true }
It "Should do nothing if user does not consent to uninstalling nerdctl" {
$ENV:PESTER = $true
Uninstall-Nerdctl -Path 'TestDrive:\Program Files\nerdctl' -Confirm:$false -Force:$false

Uninstall-NerdctlHelper -Path 'TestDrive:\Program Files\nerdctl'
# Should NOT remove nerdctl binaries/dir
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "NerdctlTools"
}

It "Should do nothing if nerdctl is not installed at specified path" {
Mock Test-EmptyDirectory -ModuleName 'NerdctlTools' -MockWith { return $true }

$Error[0].Exception.Message | Should -BeExactly 'nerdctl does not exist at TestDrive:\Program Files\nerdctl or the directory is empty.'
Uninstall-Nerdctl -Path 'TestDrive:\Program Files\nerdctl' -Confirm:$false
Should -Invoke Remove-Item -Times 0 -Scope It -ModuleName "NerdctlTools"
}
}
}
Loading
Loading