ps/Modules/Alkami.PowerShell.Services/Public/Get-ChocolateyServicesToStart.tests.ps1

143 lines
6.3 KiB
PowerShell
Raw Permalink Normal View History

2023-05-30 22:51:22 -07:00
. $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-ChocolateyServicesToStart" {
Context "Logic" {
Mock -CommandName Get-ChocolateyServices -ModuleName $moduleForMock -MockWith {
return @(
@{Name = "Alkami.Tier0.Service"; State = "Stopped"; PathName = "C:\Tier0.exe"; },
@{Name = "Alkami.Tier1.Service"; State = "Stopped"; PathName = "C:\Tier1.exe"; },
@{Name = "Alkami.Tier2.Service"; State = "Stopped"; PathName = "C:\Tier2.exe"; },
@{Name = "Alkami.Tier3.Service"; State = "Stopped"; PathName = "C:\Tier2.exe"; },
@{Name = "Alkami.Running.Service"; State = "Running"; PathName = "C:\Running.exe"; }
)
}
Mock -CommandName Get-MicroServiceTiers -ModuleName $moduleForMock -MockWith {
return @(
@(
"Alkami.Tier0.Service"
),
@(
"Alkami.Tier1.Service",
"Alkami.Running.Service"
)
)
}
$s = Get-ChocolateyServicesToStart
It "Assigns Tier Based on Order in the Array" {
$s | Where-Object {$_.ServiceName -eq "Alkami.Tier0.Service"} | Select-Object -ExpandProperty Tier | Should -Be 0
$s | Where-Object {$_.ServiceName -eq "Alkami.Tier1.Service"} | Select-Object -ExpandProperty Tier | Should -Be 1
$s | Where-Object {$_.ServiceName -eq "Alkami.Tier2.Service"} | Select-Object -ExpandProperty Tier | Should -Be 2
$s | Where-Object {$_.ServiceName -eq "Alkami.Tier3.Service"} | Select-Object -ExpandProperty Tier | Should -Be 2
}
It "Excludes Services Already Running" {
$s | Where-Object {$_.ServiceName -eq "Alkami.Running.Service"} | Should -BeNull
}
It "Dynamically Lumps All Undefined Services in the Last Tier" {
Mock -CommandName Get-MicroServiceTiers -ModuleName $moduleForMock -MockWith {
# This data pretends we added a new "Tier 2" definition, which should put Tier3 in to Tier 3 instead of Tier 2 as in the tests above / current state
return @(
@(
"Alkami.Tier0.Service"
),
@(
"Alkami.Tier1.Service",
"Alkami.Running.Service"
),
@(
"Alkami.Tier2.Service"
)
)
}
$s = Get-ChocolateyServicesToStart
$s | Where-Object {$_.ServiceName -eq "Alkami.Tier3.Service"} | Select-Object -ExpandProperty Tier | Should -Be "3"
}
It "Calls Get Chocolatey Services with the Supplied Machine Name" {
Mock -CommandName Get-ChocolateyServices -ModuleName $moduleForMock -MockWith {}
$fakeMachine = "FakeMachine.FQDN.Com"
Get-ChocolateyServicesToStart $fakeMachine
Assert-MockCalled -ModuleName $moduleForMock Get-ChocolateyServices -Times 1 -Exactly -Scope It `
-ParameterFilter { $RemoteServer -eq $fakeMachine }
}
}
Context "Warnings" {
Mock -CommandName Write-Warning -ModuleName $moduleForMock -MockWith {}
Mock -CommandName Get-ChocolateyServices -ModuleName $moduleForMock -MockWith {
return @(
@{Name = "Alkami.Legitimate.Tier0.Service"; State = "Stopped"; PathName = "C:\LegitTier0Service.exe"; },
@{Name = "Alkami.Legitimate.Tier1.Service"; State = "Stopped"; PathName = "C:\LegitTier1Service.exe"; }
)
}
Mock -CommandName Get-MicroServiceTiers -ModuleName $moduleForMock -MockWith {
return @(
@(
"Alkami.NonExistant.Tier0.Service"
),
@(
"Alkami.Legitimate.Tier1.Service",
"Alkami.NonExistant.Tier1.Service"
)
)
}
It "Writes a Warning if a Service is in Tier 0 But Is Not Found on Non FAB Servers" {
Mock -CommandName Test-IsServiceFabricServer -ModuleName $moduleForMock -MockWith { return $false }
$s = Get-ChocolateyServicesToStart
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 1 -Exactly -Scope It `
-ParameterFilter { $Message -match "Alkami.NonExistant.Tier0.Service is defined in tier 0 but not located on this machine" }
}
It "Does Not Write a Warning if a Service is in Tier 0 But Is Not Found on Non FAB Servers" {
Mock -CommandName Test-IsServiceFabricServer -ModuleName $moduleForMock -MockWith { return $true }
$s = Get-ChocolateyServicesToStart
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 0 -Exactly -Scope It `
-ParameterFilter { $Message -match "Alkami.NonExistant.Tier0.Service is defined in tier 0 but not located on this machine" }
}
It "Writes a Warning if a Service is in Tier 1 But Is Not Found on MicroService Servers" {
Mock -CommandName Test-IsMicroServer -ModuleName $moduleForMock -MockWith { return $true }
$s = Get-ChocolateyServicesToStart
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 1 -Exactly -Scope It `
-ParameterFilter { $Message -match "Alkami.NonExistant.Tier1.Service is defined in tier 1 but not located on this machine" }
}
It "Does Not Write a Warning if a Service is in Tier 1 But Is Not Found on Non MicroService Servers" {
Mock -CommandName Test-IsMicroServer -ModuleName $moduleForMock -MockWith { return $false }
$s = Get-ChocolateyServicesToStart
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 0 -Exactly -Scope It `
-ParameterFilter { $Message -match "Alkami.NonExistant.Tier1.Service is defined in tier 1 but not located on this machine" }
}
}
}