Files
PowerShell-PSDscResources/Tests/Integration/MSFT_WindowsPackageCab.Integration.Tests.ps1
T

146 lines
5.8 KiB
PowerShell

if ($PSVersionTable.PSVersion -lt [Version] '5.1')
{
Write-Warning -Message 'Cannot run PSDscResources integration tests on PowerShell versions lower than 5.1'
return
}
$errorActionPreference = 'Stop'
Set-StrictMode -Version 'Latest'
$script:testFolderPath = Split-Path -Path $PSScriptRoot -Parent
$script:testHelpersPath = Join-Path -Path $script:testFolderPath -ChildPath 'TestHelpers'
Import-Module -Name (Join-Path -Path $script:testHelpersPath -ChildPath 'CommonTestHelper.psm1')
$script:testEnvironment = Enter-DscResourceTestEnvironment `
-DscResourceModuleName 'PSDscResources' `
-DscResourceName 'MSFT_WindowsPackageCab' `
-TestType 'Integration'
try
{
Describe 'WindowsPackageCab Integration Tests' {
BeforeAll {
Import-Module -Name 'Dism'
$script:installedStates = @( 'Installed', 'InstallPending' )
$script:confgurationFilePath = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_WindowsPackageCab.config.ps1'
$script:testPackageName = ''
$script:testSourcePath = Join-Path -Path $PSScriptRoot -ChildPath ''
$script:cabPackageNotProvided = $script:testPackageName -eq [System.String]::Empty
try
{
$originalPackage = Dism\Get-WindowsPackage -PackageName $script:testPackageName -Online
if ($null -ne $originalPackage -and $originalPackage.PackageState -in $script:installedStates)
{
$script:packageOriginallyInstalled = $true
}
else
{
$script:packageOriginallyInstalled = $false
}
}
catch
{
$script:packageOriginallyInstalled = $false
}
if ($script:packageOriginallyInstalled)
{
throw "Package $script:testPackageName is currently installed on this machine. These tests may destroy this package. Aborting."
}
}
AfterEach {
if (-not $script:packageOriginallyInstalled)
{
try
{
$windowsPackage = Dism\Get-WindowsPackage -PackageName $script:testPackageName -Online
if ($null -ne $windowsPackage -and $windowsPackage.PackageState -in $script:installedStates)
{
Dism\Remove-WindowsPackage -PackageName $script:testPackageName.Name -Online -NoRestart
}
}
catch
{
Write-Verbose -Message "No test cleanup needed. Package $script:testPackageName not found."
}
}
}
It 'Should install a Windows package through a cab file' -Skip:$script:cabPackageNotProvided {
$configurationName = 'InstallWindowsPackageCab'
$resourceParameters = @{
Name = $script:testPackageName
SourcePath = $script:testSourcePath
Ensure = 'Present'
}
{
. $script:confgurationFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
{ $null = Dism\Get-WindowsPackage -PackageName $resourceParameters.Name -Online } | Should -Not -Throw
$windowsPackage = Dism\Get-WindowsPackage -PackageName $resourceParameters.Name -Online
$windowsPackage | Should -Not -Be $null
$windowsPackage.PackageState -in $script:installedStates | Should -BeTrue
}
It 'Should uninstall a Windows package through a cab file' -Skip:$script:cabPackageNotProvided {
$configurationName = 'UninstallWindowsPackageCab'
$resourceParameters = @{
Name = $script:testPackageName
SourcePath = $script:testSourcePath
Ensure = 'Absent'
}
Dism\Add-WindowsPackage -PackagePath $resourceParameters.SourcePath -Online -NoRestart
{ $null = Dism\Get-WindowsPackage -PackageName $resourceParameters.Name -Online } | Should -Not -Throw
{
. $script:confgurationFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Not -Throw
{ $null = Dism\Get-WindowsPackage -PackageName $resourceParameters.Name -Online } | Should -Throw
}
It 'Should not install an invalid Windows package through a cab file' {
$configurationName = 'InstallInvalidWindowsPackageCab'
$resourceParameters = @{
Name = 'NonExistentWindowsPackageCab'
SourcePath = (Join-Path -Path $TestDrive -ChildPath 'FakePath.cab')
Ensure = 'Present'
LogPath = (Join-Path -Path $TestDrive -ChildPath 'InvalidWindowsPackageCab.log')
}
{ Dism\Get-WindowsPackage -PackageName $resourceParameters.Name -Online } | Should -Throw
{
. $script:confgurationFilePath -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @resourceParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should -Throw
Test-Path -Path $resourceParameters.LogPath | Should -BeTrue
{ Dism\Get-WindowsPackage -PackageName $resourceParameters.Name -Online } | Should -Throw
}
}
}
finally
{
Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment
}