89 lines
3.4 KiB
PowerShell
89 lines
3.4 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-AvailabilityZone" {
|
|
# Load up AWSPowerShell for Mocking if Available
|
|
$awsPowerShellLoaded = $false
|
|
if ($null -ne (Get-Module -ListAvailable AWSPowerShell)) {
|
|
|
|
Import-AWSModule # EC2
|
|
$awsPowerShellLoaded = $true
|
|
} else {
|
|
|
|
Write-Warning "AWSPowerShell Module *NOT* installed. Some tests will not execute."
|
|
}
|
|
|
|
Context "When Not Running in AWS" {
|
|
|
|
Mock -ModuleName $moduleForMock Test-IsAws { return $false }
|
|
Mock -ModuleName $moduleForMock Write-Warning {}
|
|
Mock -ModuleName $moduleForMock Invoke-WebRequest {}
|
|
Mock -CommandName Get-CurrentInstanceAvailabilityZone -ModuleName $moduleForMock -MockWith {
|
|
return $null
|
|
}
|
|
|
|
It "Returns Null When Not Run in AWS" {
|
|
if (!($awsPowerShellLoaded)) {
|
|
Set-ItResult -Inconclusive -Because "AWSPowerShell Not Installed"
|
|
continue;
|
|
}
|
|
Mock -CommandName Write-Warning -MockWith { } -ModuleName $moduleForMock
|
|
Mock -ModuleName Alkami.DevOps.Common Test-IsAws { return $false }
|
|
Get-AvailabilityZone | Should -BeNullOrEmpty
|
|
}
|
|
}
|
|
|
|
Context "When Running in AWS" {
|
|
|
|
Mock -ModuleName $moduleForMock Test-IsAws { return $true }
|
|
Mock -ModuleName $moduleForMock Write-Warning {}
|
|
Mock -ModuleName $moduleForMock Get-EC2Instance {
|
|
return @{
|
|
Instances = @(
|
|
@{
|
|
Placement =
|
|
@{
|
|
AvailabilityZone = "us-fake-1a"
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|
|
Mock -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone {
|
|
return "us-fake-2b"
|
|
}
|
|
|
|
It "Not-localhost Calls Get-EC2Instance and Returns the Instance AvailabilityZone" {
|
|
|
|
$testResult = Get-AvailabilityZone -ComputerName "fakeweb01"
|
|
Assert-MockCalled -ModuleName $moduleForMock Get-EC2Instance -Times 1 -Exactly -Scope It
|
|
|
|
$testResult | Should -Be "us-fake-1a"
|
|
}
|
|
It "Localhost Calls Get-CurrentInstanceAvailabilityZone" {
|
|
$testResult = Get-AvailabilityZone -ComputerName "localhost"
|
|
Assert-MockCalled -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone -Times 1 -Exactly -Scope It
|
|
|
|
$testResult | Should -Be "us-fake-2b"
|
|
}
|
|
It "Explicit local hostname Calls Get-CurrentInstanceAvailabilityZone" {
|
|
$localHostname = (hostname)
|
|
$testResult = Get-AvailabilityZone -ComputerName $localHostname
|
|
Assert-MockCalled -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone -Times 1 -Exactly -Scope It
|
|
|
|
$testResult | Should -Be "us-fake-2b"
|
|
}
|
|
It "No ComputerName(defaults to localhost) Calls Get-CurrentInstanceAvailabilityZone" {
|
|
|
|
$testResult = Get-AvailabilityZone
|
|
Assert-MockCalled -ModuleName $moduleForMock Get-CurrentInstanceAvailabilityZone -Times 1 -Exactly -Scope It
|
|
|
|
$testResult | Should -Be "us-fake-2b"
|
|
}
|
|
}
|
|
} |