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

792 lines
35 KiB
PowerShell

$errorActionPreference = 'Stop'
Set-StrictMode -Version 'Latest'
if ($PSVersionTable.PSVersion -lt [Version] '5.1')
{
Write-Warning -Message 'Cannot run PSDscResources integration tests on PowerShell versions lower than 5.1'
return
}
Describe 'WindowsProcess Integration Tests' {
BeforeAll {
$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_WindowsProcess' `
-TestType 'Integration'
$script:testProcessPath = Join-Path -Path $script:testHelpersPath -ChildPath 'WindowsProcessTestProcess.exe'
$script:testProcessName = 'WindowsProcessTestProcess'
$script:logFilePath = Join-Path -Path $TestDrive -ChildPath 'ProcessTestLog.txt'
$script:configurationFilePathNoCredential = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_WindowsProcess_NoCredential.config.ps1'
$script:configurationFilePathWithCredential = Join-Path -Path $PSScriptRoot -ChildPath 'MSFT_WindowsProcess_WithCredential.config.ps1'
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
}
AfterAll {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
$null = Exit-DscResourceTestEnvironment -TestEnvironment $script:testEnvironment
}
Describe 'No credential provided' {
Context 'Stop a process that is already stopped or does not exist' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StopStoppedProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Absent'
Arguments = $logFilePath
}
It 'Should not be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should not be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathNoCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should not be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
}
It 'Should not be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
}
Context 'Start a new running process' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StartNewProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Present'
Arguments = $logFilePath
}
It 'Should not be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should not be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathNoCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
$currentConfig.ProcessCount | Should Be 1
}
It 'Should be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
}
Context 'Start a process that is already running' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StartRunningProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Present'
Arguments = $logFilePath
}
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathNoCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
$currentConfig.ProcessCount | Should Be 1
}
It 'Should be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
}
Context 'Stop a running process' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StopRunningProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Absent'
Arguments = $logFilePath
}
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
# Remove the created log file so that we can check that the configuration did not re-create it
$null = Remove-Item -Path $script:logFilePath -Force -ErrorAction 'SilentlyContinue'
It 'Should compile and run configuration' {
{
. $script:configurationFilePathNoCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should not be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
}
It 'Should not be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
}
Context 'Get correct number of processes from Get-DscConfiguration when two of the same process are running' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'GetMultipleProcesses'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Present'
Arguments = $logFilePath
}
It 'Should not be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should not be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathNoCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the second process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the processes after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
$currentConfig.ProcessCount | Should Be 2
}
It 'Should be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
}
Context 'Stop multiple running processes' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StopMultipleRunningProcesses'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Absent'
Arguments = $logFilePath
}
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the second process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
# Remove the created log file so that we can check that the configuration did not re-create it
$null = Remove-Item -Path $script:logFilePath -Force -ErrorAction 'SilentlyContinue'
It 'Should compile and run configuration' {
{
. $script:configurationFilePathNoCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should not be able to retrieve the processes after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
}
It 'Should not be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
}
}
if ($env:AppVeyor) {
Describe 'Credential provided - Only runs in AppVeyor' {
$script:testCredential = Get-AppVeyorAdministratorCredential
$script:credentialConfigurationData = @{
AllNodes = @(
@{
NodeName = '*'
PSDscAllowPlainTextPassword = $true
}
@{
NodeName = 'localhost'
}
)
}
Context 'Stop a process that is already stopped or does not exist' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StopStoppedProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Absent'
Arguments = $logFilePath
Credential = $script:testCredential
}
It 'Should not be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should not be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathWithCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive -ConfigurationData $script:credentialConfigurationData @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should not be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
}
It 'Should not be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
}
Context 'Start a new running process' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StartNewProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Present'
Arguments = $logFilePath
Credential = $script:testCredential
}
It 'Should not be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should not be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathWithCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive -ConfigurationData $script:credentialConfigurationData @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
$currentConfig.ProcessCount | Should Be 1
}
It 'Should be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
}
Context 'Start a process that is already running' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StartRunningProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Present'
Arguments = $logFilePath
Credential = $script:testCredential
}
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathWithCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive -ConfigurationData $script:credentialConfigurationData @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
$currentConfig.ProcessCount | Should Be 1
}
It 'Should be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
}
Context 'Stop a running process' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StopRunningProcess'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Absent'
Arguments = $logFilePath
Credential = $script:testCredential
}
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
# Remove the created log file so that we can check that the configuration did not re-create it
$null = Remove-Item -Path $script:logFilePath -Force -ErrorAction 'SilentlyContinue'
It 'Should compile and run configuration' {
{
. $script:configurationFilePathWithCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive -ConfigurationData $script:credentialConfigurationData @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should not be able to retrieve the process after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
}
It 'Should not be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
}
Context 'Get correct number of processes from Get-DscConfiguration when two of the same process are running' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'GetMultipleProcesses'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Present'
Arguments = $logFilePath
Credential = $script:testCredential
}
It 'Should not be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should not be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
It 'Should compile and run configuration' {
{
. $script:configurationFilePathWithCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive -ConfigurationData $script:credentialConfigurationData @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the second process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the processes after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
$currentConfig.ProcessCount | Should Be 2
}
It 'Should be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
}
Context 'Stop multiple running processes' {
$null = Stop-Process -Name $script:testProcessName -Force -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$configurationName = 'StopMultipleRunningProcesses'
$processParameters = @{
Path = $testProcessPath
Ensure = 'Absent'
Arguments = $logFilePath
Credential = $script:testCredential
}
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
$null = Start-Process -FilePath $processParameters.Path -ArgumentList $processParameters.Arguments -ErrorAction 'SilentlyContinue'
# Wait a moment for the second process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should be able to retrieve the process before configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Not Throw
}
It 'Should be able to find the log file before configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeTrue
}
# Remove the created log file so that we can check that the configuration did not re-create it
$null = Remove-Item -Path $script:logFilePath -Force -ErrorAction 'SilentlyContinue'
It 'Should compile and run configuration' {
{
. $script:configurationFilePathWithCredential -ConfigurationName $configurationName
& $configurationName -OutputPath $TestDrive -ConfigurationData $script:credentialConfigurationData @processParameters
Start-DscConfiguration -Path $TestDrive -ErrorAction 'Stop' -Wait -Force
} | Should Not Throw
}
# Wait a moment for the process to stop/start
$null = Start-Sleep -Seconds 1
It 'Should not be able to retrieve the processes after configuration' {
{ $null = Get-Process -Name $script:testProcessName } | Should Throw
}
It 'Should be able to call Get-DscConfiguration without throwing after configuration' {
{ $null = Get-DscConfiguration -ErrorAction 'Stop' } | Should Not Throw
}
It 'Should return the correct configuration from Get-DscConfiguration after configuration' {
$currentConfig = Get-DscConfiguration
$currentConfig.Path | Should Be $processParameters.Path
$currentConfig.Arguments | Should Be $processParameters.Arguments
$currentConfig.Ensure | Should Be $processParameters.Ensure
}
It 'Should not be able to find the log file after configuration' {
$pathResult = Test-Path -Path $logFilePath
$pathResult | Should -BeFalse
}
}
}
}
}