Files
PowerShell-PSDscResources/Tests/Integration/MSFT_ServiceResource.Integration.Tests.ps1
T
2016-11-02 11:54:04 -07:00

191 lines
8.8 KiB
PowerShell

if ($PSVersionTable.PSVersion.Major -lt 5 -or $PSVersionTable.PSVersion.Minor -lt 1)
{
Write-Warning -Message 'Cannot run PSDscResources integration tests on PowerShell versions lower than 5.1'
return
}
$script:DscResourceName = 'MSFT_ServiceResource'
Import-Module -Name (Join-Path -Path (Split-Path -Path $PSScriptRoot -Parent) `
-ChildPath (Join-Path -Path 'TestHelpers' `
-ChildPath 'CommonTestHelper.psm1'))
$script:testEnvironment = Enter-DscResourceTestEnvironment `
-DscResourceModuleName 'PSDscResources' `
-DscResourceName 'MSFT_ServiceResource' `
-TestType 'Integration'
try
{
$script:testServiceName = 'DscTestService'
$script:testServiceCodePath = Join-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -ChildPath 'TestHelpers\DscTestService.cs'
$script:testServiceDisplayName = 'DSC test service display name'
$script:testServiceDescription = 'This is a DSC test service used for integration testing MSFT_ServiceResource'
$script:testServiceDependsOn = 'winrm'
$script:testServiceExecutablePath = Join-Path -Path $ENV:Temp -ChildPath 'DscTestService.exe'
$script:testServiceNewCodePath = Join-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -ChildPath 'TestHelpers\DscTestService.cs'
$script:testServiceNewDisplayName = 'New: DSC test service display name'
$script:testServiceNewDescription = 'New: This is a DSC test service used for integration testing MSFT_ServiceResource'
$script:testServiceNewDependsOn = 'spooler'
$script:testServiceNewExecutablePath = Join-Path -Path $ENV:Temp -ChildPath 'NewDscTestService.exe'
<#
Nano Server doesn't recognize 'spooler', so if these tests are being run on Nano
this value must stay as 'winrm'
#>
if ($PSVersionTable.PSEdition -ieq 'Core') { $script:testServiceNewDependsOn = 'winrm' }
Import-Module -Name (Join-Path -Path (Split-Path -Path $PSScriptRoot -Parent) `
-ChildPath 'TestHelpers\MSFT_ServiceResource.TestHelper.psm1') `
-Force
Stop-Service $script:testServiceName -ErrorAction SilentlyContinue
# Create new Service binaries for the new service.
New-ServiceBinary `
-ServiceName $script:testServiceName `
-ServiceCodePath $script:testServiceCodePath `
-ServiceDisplayName $script:testServiceDisplayName `
-ServiceDescription $script:testServiceDescription `
-ServiceDependsOn $script:testServiceDependsOn `
-ServiceExecutablePath $script:testServiceExecutablePath
New-ServiceBinary `
-ServiceName $script:testServiceName `
-ServiceCodePath $script:testServiceNewCodePath `
-ServiceDisplayName $script:testServiceNewDisplayName `
-ServiceDescription $script:testServiceNewDescription `
-ServiceDependsOn $script:testServiceNewDependsOn `
-ServiceExecutablePath $script:testServiceExecutablePath
#region Integration Tests
$configFile = Join-Path -Path $PSScriptRoot -ChildPath "$($script:DscResourceName)_Add.config.ps1"
. $configFile
Describe "$($script:DscResourceName) Add Service" {
It 'Should compile and apply the MOF without throwing' {
{
& "$($script:DscResourceName)_Add_Config" `
-OutputPath $script:testEnvironment.WorkingFolder `
-ServiceName $script:testServiceName `
-ServicePath $script:testServiceExecutablePath `
-ServiceDisplayName $script:testServiceDisplayName `
-ServiceDescription $script:testServiceDescription `
-ServiceDependsOn $script:testServiceDependsOn
Start-DscConfiguration -Path $script:testEnvironment.WorkingFolder `
-ComputerName localhost -Wait -Verbose -Force
} | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing' {
{ Get-DscConfiguration -Verbose -ErrorAction Stop } | Should Not Throw
}
$script:service = Get-CimInstance -ClassName Win32_Service -Filter "Name='$($script:testServiceName)'"
It 'Should return a service of type CimInstance' {
$script:service | Should BeOfType 'Microsoft.Management.Infrastructure.CimInstance'
}
It 'Should have set the resource and all the parameters should match' {
# Get the current service details
$script:service.status | Should Be 'OK'
$script:service.pathname | Should Be $script:testServiceExecutablePath
$script:service.description | Should Be $script:testServiceDescription
$script:service.displayname | Should Be $script:testServiceDisplayName
$script:service.started | Should Be $true
$script:service.state | Should Be 'Running'
$script:service.desktopinteract | Should Be $true
$script:service.startname | Should Be 'LocalSystem'
$script:service.startmode | Should Be 'Auto'
}
}
Reset-DSC
$configFile = Join-Path -Path $PSScriptRoot -ChildPath "$($script:DscResourceName)_Edit.config.ps1"
. $configFile
Describe "$($script:DscResourceName) Edit Service" {
It 'Should compile and apply the MOF without throwing' {
{
& "$($script:DscResourceName)_Edit_Config" `
-OutputPath $script:testEnvironment.WorkingFolder `
-ServiceName $script:testServiceName `
-ServicePath $script:testServiceNewExecutablePath `
-ServiceDisplayName $script:testServiceNewDisplayName `
-ServiceDescription $script:testServiceNewDescription `
-ServiceDependsOn $script:testServiceNewDependsOn
Start-DscConfiguration -Path $script:testEnvironment.WorkingFolder `
-ComputerName localhost -Wait -Verbose -Force
} | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing' {
{ Get-DscConfiguration -Verbose -ErrorAction Stop } | Should Not Throw
}
# Get the current service details
$script:service = Get-CimInstance -ClassName Win32_Service -Filter "Name='$($script:testServiceName)'"
It 'Should return a service or type CimInstance' {
$script:service | Should BeOfType 'Microsoft.Management.Infrastructure.CimInstance'
}
It 'Should have set the resource and all the parameters should match' {
# Get the current service details
$script:service.status | Should Be 'OK'
$script:service.pathname | Should Be $script:testServiceNewExecutablePath
$script:service.description | Should Be $script:testServiceNewDescription
$script:service.displayname | Should Be $script:testServiceNewDisplayName
$script:service.started | Should Be $false
$script:service.state | Should Be 'Stopped'
$script:service.desktopinteract | Should Be $false
$script:service.startname | Should Be 'NT Authority\LocalService'
$script:service.startmode | Should Be 'Manual'
}
}
Reset-DSC
$configFile = Join-Path -Path $PSScriptRoot -ChildPath "$($script:DscResourceName)_Remove.config.ps1"
. $configFile
Describe "$($script:DscResourceName) Remove Service" {
It 'Should compile and apply the MOF without throwing' {
{
& "$($script:DscResourceName)_Remove_Config" `
-OutputPath $script:testEnvironment.WorkingFolder `
-ServiceName $script:testServiceName
Start-DscConfiguration -Path $script:testEnvironment.WorkingFolder `
-ComputerName localhost -Wait -Verbose -Force
} | Should not throw
}
It 'Should be able to call Get-DscConfiguration without throwing' {
{ Get-DscConfiguration -Verbose -ErrorAction Stop } | Should Not throw
}
# Get the current service details
$script:service = Get-CimInstance -ClassName Win32_Service -Filter "Name='$($script:testServiceName)'"
It 'Should return the service as null' {
$script:service | Should BeNullOrEmpty
}
}
#endregion
}
finally
{
# Clean up
Remove-TestService `
-ServiceName $script:testServiceName `
-ServiceExecutablePath $script:testServiceExecutablePath
Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment
}