. $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-ImdsV2Token" { Context "Parameter Validation" { It "Too Low TTL" { { Get-ImdsV2Token -TTL 0 } | Should Throw } It "Too High TTL" { { Get-ImdsV2Token -TTL 21601 } | Should Throw } } Context "Cache Handling" { $Global:AlkamiImdsSessionToken = $null Mock -ModuleName $moduleForMock Invoke-RestMethod { return "1234567890" } It "Sets Token In Cache" { $token = Get-ImdsV2Token Assert-MockCalled -ModuleName $moduleForMock Invoke-RestMethod -Times 1 -Exactly -Scope It $token | Should -Be $Global:AlkamiImdsSessionToken } It "Retrieves Token From Cache" { $token = Get-ImdsV2Token Assert-MockCalled -ModuleName $moduleForMock Invoke-RestMethod -Times 0 -Exactly -Scope It $token | Should -Be $Global:AlkamiImdsSessionToken } It "Breaks The Cache" { $Global:AlkamiImdsSessionToken = "1234567890" Mock -ModuleName $moduleForMock Invoke-RestMethod { return "0987654321" } $token = Get-ImdsV2Token -InvalidateCache Assert-MockCalled -ModuleName $moduleForMock Invoke-RestMethod -Times 1 -Exactly -Scope It $token | Should -Be $Global:AlkamiImdsSessionToken } } }