165 lines
6.6 KiB
PowerShell
165 lines
6.6 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-HostnamesByEnvironmentName" {
|
||
|
|
||
|
# 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 "Parameter Validation" {
|
||
|
|
||
|
It "Null Environment Name Should Throw" {
|
||
|
|
||
|
{ Get-HostnamesByEnvironmentName -EnvironmentName $null } | Should Throw
|
||
|
}
|
||
|
|
||
|
It "Empty Environment Name Should Throw" {
|
||
|
|
||
|
{ Get-HostnamesByEnvironmentName -EnvironmentName '' } | Should Throw
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "Get-Environment Is Called When EnvironmentType Parameter Is Null" {
|
||
|
Mock -CommandName Get-Environment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-DesignationTagNameByEnvironment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith { return @() }
|
||
|
|
||
|
$result = ( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType $null )
|
||
|
|
||
|
It "Get-Environment Is Called One Time" {
|
||
|
|
||
|
Assert-MockCalled Get-Environment -Times 1 -Exactly -Scope Context -ModuleName $moduleForMock
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "Get-Environment Is Called When EnvironmentType Parameter Is Empty" {
|
||
|
Mock -CommandName Get-Environment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-DesignationTagNameByEnvironment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith { return @() }
|
||
|
|
||
|
$result = ( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType '' )
|
||
|
|
||
|
It "Get-Environment Is Called One Time" {
|
||
|
|
||
|
Assert-MockCalled Get-Environment -Times 1 -Exactly -Scope Context -ModuleName $moduleForMock
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "Get-Environment Is Not Called When EnvironmentType Parameter Is Provided" {
|
||
|
Mock -CommandName Get-Environment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-DesignationTagNameByEnvironment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith { return @() }
|
||
|
|
||
|
$result = ( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType 'Prod' )
|
||
|
|
||
|
It "Get-Environment Is Not Called" {
|
||
|
|
||
|
Assert-MockCalled Get-Environment -Times 0 -Exactly -Scope Context -ModuleName $moduleForMock
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "Returns Empty Array When No Instances Are Found" {
|
||
|
Mock -CommandName Get-Environment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-DesignationTagNameByEnvironment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith { return @() }
|
||
|
|
||
|
It "Is Empty" {
|
||
|
|
||
|
( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType 'Prod' ) | Should -BeExactly @()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Context "Sorted Result Does Not Include Null Or Empty Entries" {
|
||
|
Mock -CommandName Get-Environment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
Mock -CommandName Get-DesignationTagNameByEnvironment -ModuleName $moduleForMock -MockWith { return 'Prod' }
|
||
|
|
||
|
It "Does Not Include Null" {
|
||
|
|
||
|
if (!($awsPowerShellLoaded)) {
|
||
|
|
||
|
Set-ItResult -Inconclusive -Because "AWSPowerShell Not Installed"
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith {
|
||
|
$testInstance = (New-Object Amazon.EC2.Model.Instance)
|
||
|
$testInstance.InstanceId = 'Test'
|
||
|
|
||
|
$nullInstance = (New-Object Amazon.EC2.Model.Instance)
|
||
|
$nullInstance.InstanceId = $null
|
||
|
|
||
|
return @( $testInstance, $nullInstance )
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-InstanceHostname -ModuleName $moduleForMock -MockWith {
|
||
|
return $Instance.InstanceId.ToUpperInvariant()
|
||
|
}
|
||
|
|
||
|
( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType 'Prod' ) | Should -BeExactly @( 'TEST' )
|
||
|
}
|
||
|
|
||
|
It "Does Not Include Empty String" {
|
||
|
|
||
|
if (!($awsPowerShellLoaded)) {
|
||
|
|
||
|
Set-ItResult -Inconclusive -Because "AWSPowerShell Not Installed"
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith {
|
||
|
$testInstance = (New-Object Amazon.EC2.Model.Instance)
|
||
|
$testInstance.InstanceId = 'Test'
|
||
|
|
||
|
$emptyInstance = (New-Object Amazon.EC2.Model.Instance)
|
||
|
$emptyInstance.InstanceId = ''
|
||
|
|
||
|
return @( $testInstance, $emptyInstance )
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-InstanceHostname -ModuleName $moduleForMock -MockWith {
|
||
|
return $Instance.InstanceId.ToUpperInvariant()
|
||
|
}
|
||
|
|
||
|
( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType 'Prod' ) | Should -BeExactly @( 'TEST' )
|
||
|
}
|
||
|
|
||
|
It "Is Sorted" {
|
||
|
|
||
|
if (!($awsPowerShellLoaded)) {
|
||
|
|
||
|
Set-ItResult -Inconclusive -Because "AWSPowerShell Not Installed"
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-InstancesByTag -ModuleName $moduleForMock -MockWith {
|
||
|
$bInstance = (New-Object Amazon.EC2.Model.Instance)
|
||
|
$bInstance.InstanceId = 'B'
|
||
|
|
||
|
$aInstance = (New-Object Amazon.EC2.Model.Instance)
|
||
|
$aInstance.InstanceId = 'A'
|
||
|
|
||
|
return @( $bInstance, $aInstance )
|
||
|
}
|
||
|
|
||
|
Mock -CommandName Get-InstanceHostname -ModuleName $moduleForMock -MockWith {
|
||
|
return $Instance.InstanceId.ToUpperInvariant()
|
||
|
}
|
||
|
|
||
|
( Get-HostnamesByEnvironmentName -EnvironmentName 'Test' -EnvironmentType 'Prod' ) | Should -BeExactly @( 'A', 'B' )
|
||
|
}
|
||
|
}
|
||
|
}
|