Skip to content

Instantly share code, notes, and snippets.

@TravisEz13
Last active January 26, 2016 21:33
Show Gist options
  • Save TravisEz13/56ee0baae24efcae90f9 to your computer and use it in GitHub Desktop.
Save TravisEz13/56ee0baae24efcae90f9 to your computer and use it in GitHub Desktop.
<#
.summary
Test suite for MSFT_xPendingReboot.psm1
For PR https://github.com/PowerShell/xPendingReboot/pull/1
#>
[CmdletBinding()]
param()
Import-Module $PSScriptRoot\..\DSCResources\MSFT_xPendingReboot\MSFT_xPendingReboot.psm1 -Force
$ErrorActionPreference = 'stop'
Set-StrictMode -Version latest
Describe 'Get-TargetResource' {
Context "All Reboots Are Required" {
# Used by ComponentBasedServicing
Mock Get-ChildItem {
return @{ Name = 'RebootPending' }
} -ParameterFilter { $Path -eq 'hklm:SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\' } -ModuleName "MSFT_xPendingReboot" -Verifiable
# Used by WindowsUpdate
Mock Get-ChildItem {
return @{ Name = 'RebootRequired' }
} -ParameterFilter { $Path -eq 'hklm:SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\' } -ModuleName "MSFT_xPendingReboot" -Verifiable
# Used by PendingFileRename
Mock Get-ItemProperty {
return @{ PendingFileRenameOperations= @("File1", "File2") }
} -ParameterFilter { $Path -eq 'hklm:\SYSTEM\CurrentControlSet\Control\Session Manager\' } -ModuleName "MSFT_xPendingReboot" -Verifiable
# Used by PendingComputerRename
Mock Get-ItemProperty {
return @{ ComputerName = "box2" }
} -ParameterFilter { $Path -eq 'hklm:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName' } -ModuleName "MSFT_xPendingReboot" -Verifiable
Mock Get-ItemProperty {
return @{ ComputerName = "box" }
} -ParameterFilter { $Path -eq 'hklm:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName' } -ModuleName "MSFT_xPendingReboot" -Verifiable
Mock Invoke-WmiMethod {
return New-Object PSObject -Property @{
ReturnValue = 0
IsHardRebootPending = $false
RebootPending = $true
}
} -ModuleName "MSFT_xPendingReboot" -Verifiable
$value = Get-TargetResource -Name "Test"
It "All mocks were called" {
Assert-VerifiableMocks
}
It "Component Based Servicing should be true" {
$value.ComponentBasedServicing | Should Be $true
}
It "WindowsUpdate should be true" {
$value.ComponentBasedServicing | Should Be $true
}
It "Pending File Rename should be true" {
$value.PendingFileRename | Should Be $true
}
It "Pending Computer Rename should be true" {
$value.PendingComputerRename | Should Be $true
}
It "Ccm Client SDK should be true" {
$value.CcmClientSDK | Should Be $true
}
}
Context "No Reboots Are Required" {
# Used by ComponentBasedServicing
Mock Get-ChildItem {
return @{ Name = '' }
} -ParameterFilter { $Path -eq 'hklm:SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\' } -ModuleName "MSFT_xPendingReboot" -Verifiable
# Used by WindowsUpdate
Mock Get-ChildItem {
return @{ Name = '' }
} -ParameterFilter { $Path -eq 'hklm:SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\' } -ModuleName "MSFT_xPendingReboot" -Verifiable
# Used by PendingFileRename
Mock Get-ItemProperty {
return @{ PendingFileRenameOperations= @() }
} -ParameterFilter { $Path -eq 'hklm:\SYSTEM\CurrentControlSet\Control\Session Manager\' } -ModuleName "MSFT_xPendingReboot" -Verifiable
# Used by PendingComputerRename
Mock Get-ItemProperty {
return @{ }
} -ParameterFilter { $Path -eq 'hklm:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName' } -ModuleName "MSFT_xPendingReboot" -Verifiable
Mock Get-ItemProperty {
return @{ }
} -ParameterFilter { $Path -eq 'hklm:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName' } -ModuleName "MSFT_xPendingReboot" -Verifiable
Mock Invoke-WmiMethod {
return New-Object PSObject -Property @{
ReturnValue = 0
IsHardRebootPending = $false
RebootPending = $false
}
} -ModuleName "MSFT_xPendingReboot" -Verifiable
$value = Get-TargetResource -Name "Test"
It "Component Based Servicing should be false" {
$value.ComponentBasedServicing | Should Be $false
}
It "WindowsUpdate should be false" {
$value.ComponentBasedServicing | Should Be $false
}
It "Pending File Rename should be false" {
$value.PendingFileRename | Should Be $false
}
It "Pending Computer Rename should be false" {
$value.PendingComputerRename | Should Be $false
}
It "Ccm Client SDK should be false" {
$value.CcmClientSDK | Should Be $false
}
}
}
Describe 'Test-TargetResource' {
Context "All Reboots Are Required" {
# Used by ComponentBasedServicing
Mock Get-TargetResource -ModuleName "MSFT_xPendingReboot" {
return @{
Name = $Name
ComponentBasedServicing = $true
WindowsUpdate = $true
PendingFileRename = $true
PendingComputerRename = $true
CcmClientSDK = $true
}
}
It "All Reboots are Skipped" {
$result = Test-TargetResource -Name "Test" -SkipComponentBasedServicing $true -SkipWindowsUpdate $true -SkipPendingFileRename $true -SkipPendingComputerRename $true -SkipCcmClientSDK $true
$result | Should Be $true
}
It "No Reboots are Skipped" {
$result = Test-TargetResource -Name "Test" -SkipComponentBasedServicing $false -SkipWindowsUpdate $false -SkipPendingFileRename $false -SkipPendingComputerRename $false -SkipCcmClientSDK $false
$result | Should Be $false
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment