143 lines
6.3 KiB
PowerShell
143 lines
6.3 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-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" }
|
|
}
|
|
}
|
|
} |