92 lines
4.2 KiB
PowerShell
92 lines
4.2 KiB
PowerShell
. $PSScriptRoot\..\..\Load-PesterModules.ps1
|
|
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
|
|
$functionPath = Join-Path -Path $here -ChildPath $sut
|
|
Write-Host "Overriding SUT: $functionPath"
|
|
Import-Module $functionPath -Force
|
|
$moduleForMock = ""
|
|
|
|
Describe "Get-WindowsServiceApplicationPath" {
|
|
|
|
$fakeServiceNormal = "SvcNormalPath"
|
|
$expectedPathNormal = "TestDrive:\TestPath"
|
|
$fakeServiceSpace = "SvcSpacePath"
|
|
$expectedPathWithSpace = "TestDrive:\TestPath WithSpace"
|
|
$fakeServiceName = -join ((65..90) + (97..122) | Get-Random -Count 15 | ForEach-Object { [char]$_ })
|
|
|
|
Mock -CommandName Write-Warning -MockWith {} -ModuleName $moduleForMock
|
|
Mock -CommandName Write-Host -MockWith {} -ModuleName $moduleForMock
|
|
Mock -CommandName Write-Verbose -MockWith {} -ModuleName $moduleForMock
|
|
Mock -CommandName Write-Error -MockWith {} -ModuleName $moduleForMock
|
|
|
|
Mock -CommandName Get-ServiceInfoByCIMFragment -ModuleName $moduleForMock -MockWith {
|
|
$exeName = "$($QueryFragment).exe"
|
|
$returnPath = Join-Path -Path $expectedPathNormal -ChildPath $exeName
|
|
$returnResults = @()
|
|
$returnResults += @{
|
|
#Name = $cimService.Name
|
|
#DisplayName = $cimService.DisplayName
|
|
#Path = $cimService.PathName
|
|
ExePath = $returnPath#($cimService.PathName.Remove($cimService.PathName.LastIndexOf(".exe")) + ".exe").Replace('"', '')
|
|
#Started = $cimService.Started
|
|
#State = $cimService.State
|
|
#Status = $cimService.Status
|
|
#StartMode = $cimService.StartMode
|
|
# Provided to make comparison checks to other things easier.
|
|
# The name in several places is StartType
|
|
#StartType = $cimService.StartMode
|
|
#ProcessId = $cimService.ProcessId
|
|
#InstallDate = $cimService.InstallDate
|
|
#UserName = $cimService.StartName
|
|
}
|
|
return $returnResults
|
|
} -ParameterFilter { $QueryFragment -eq "SvcNormalPath" }
|
|
|
|
Mock -CommandName Get-ServiceInfoByCIMFragment -ModuleName $moduleForMock -MockWith {
|
|
$exeName = "$($QueryFragment).exe"
|
|
$returnPath = Join-Path -Path $expectedPathWithSpace -ChildPath $exeName
|
|
$returnResults = @()
|
|
$returnResults += @{
|
|
#Name = $cimService.Name
|
|
#DisplayName = $cimService.DisplayName
|
|
#Path = $cimService.PathName
|
|
ExePath = $returnPath#($cimService.PathName.Remove($cimService.PathName.LastIndexOf(".exe")) + ".exe").Replace('"', '')
|
|
#Started = $cimService.Started
|
|
#State = $cimService.State
|
|
#Status = $cimService.Status
|
|
#StartMode = $cimService.StartMode
|
|
# Provided to make comparison checks to other things easier.
|
|
# The name in several places is StartType
|
|
#StartType = $cimService.StartMode
|
|
#ProcessId = $cimService.ProcessId
|
|
#InstallDate = $cimService.InstallDate
|
|
#UserName = $cimService.StartName
|
|
}
|
|
return $returnResults
|
|
} -ParameterFilter { $QueryFragment -eq "SvcSpacePath" }
|
|
|
|
Context "Error Handling" {
|
|
|
|
It "Does not throw if the service is not found" {
|
|
|
|
{ Get-WindowsServiceApplicationPath "$fakeServiceName" } | Should -Not -Throw
|
|
Assert-MockCalled -CommandName Write-Warning -ParameterFilter { $Message -match "Unable to locate service info" } -Times 1 -Exactly -Scope It -ModuleName $moduleForMock
|
|
}
|
|
}
|
|
|
|
Context "Service Executable Formatting" {
|
|
|
|
It "Handles_Paths_With_Spaces" {
|
|
|
|
Get-WindowsServiceApplicationPath -serviceName $fakeServiceSpace | Should -Be $expectedPathWithSpace
|
|
Assert-MockCalled -CommandName Get-ServiceInfoByCIMFragment -Times 1 -Exactly -Scope It -ModuleName $moduleForMock
|
|
}
|
|
|
|
It "Handles_Paths_Without_Spaces" {
|
|
|
|
Get-WindowsServiceApplicationPath -serviceName $fakeServiceNormal | Should -Be $expectedPathNormal
|
|
Assert-MockCalled -CommandName Get-ServiceInfoByCIMFragment -Times 1 -Exactly -Scope It -ModuleName $moduleForMock
|
|
}
|
|
|
|
}
|
|
} |