67 lines
2.3 KiB
PowerShell
67 lines
2.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-CurrentInstanceAvailabilityZone" {
|
|
|
|
Context "When Not Running in AWS" {
|
|
|
|
Mock -ModuleName $moduleForMock Test-IsAws { return $false }
|
|
Mock -ModuleName $moduleForMock Write-Warning {}
|
|
Mock -ModuleName $moduleForMock Get-InstanceMetadata {}
|
|
|
|
Get-CurrentInstanceAvailabilityZone -WarningAction SilentlyContinue
|
|
|
|
It "Calls Test-IsAws" {
|
|
|
|
Assert-MockCalled -ModuleName $moduleForMock Test-IsAws -Times 1 -Exactly -Scope Context
|
|
}
|
|
|
|
It "Writes a Warning" {
|
|
|
|
Assert-MockCalled -ModuleName $moduleForMock Write-Warning -Times 1 -Exactly -Scope Context
|
|
}
|
|
|
|
It "Returns Without Calling AWS APIs" {
|
|
|
|
Assert-MockCalled -ModuleName $moduleForMock Get-InstanceMetadata -ParameterFilter {$Endpoint -Match $azEndpointPath } -Times 0 -Exactly -Scope Context
|
|
}
|
|
}
|
|
|
|
Context "When Running in AWS" {
|
|
|
|
$azEndpointPath = "meta-data/placement/availability-zone"
|
|
Mock -ModuleName $moduleForMock Test-IsAws { return $true }
|
|
Mock -ModuleName $moduleForMock Write-Warning {}
|
|
Mock -ModuleName $moduleForMock Get-InstanceMetadata {
|
|
|
|
return (New-Object PSObject -Property @{
|
|
"StatusCode" = "200";
|
|
"Content" = "us-fake-1a";
|
|
} )
|
|
}
|
|
|
|
It "Returns the Instance AvailabilityZone" {
|
|
|
|
$testResult = Get-CurrentInstanceAvailabilityZone
|
|
Assert-MockCalled -ModuleName $moduleForMock Get-InstanceMetadata -ParameterFilter {$Endpoint -Match $azEndpointPath } -Times 1 -Exactly -Scope It
|
|
|
|
$testResult | Should -Be "us-fake-1a"
|
|
}
|
|
|
|
It "Throws if not success" {
|
|
Mock -ModuleName $moduleForMock Get-InstanceMetadata {
|
|
return (New-Object PSObject -Property @{
|
|
"StatusCode" = "404";
|
|
"Content" = "Not found";
|
|
} )
|
|
}
|
|
|
|
{Get-CurrentInstanceAvailabilityZone} | Should -Throw
|
|
}
|
|
}
|
|
} |