pester / Pester

Pester is the ubiquitous test and mock framework for PowerShell.
https://pester.dev/
Other
3.05k stars 469 forks source link

Pester Testing fails to create a container for Azure Automation commands #2516

Closed rphadke-trinity closed 2 weeks ago

rphadke-trinity commented 2 weeks ago

Checklist

What is the issue?

Script is erroring on two root causes:

  1. It does not like the azure automation variables Get-AutomationVariable
  2. It does not like the calling out of the container to fetch the Storage account credential with or without the azure automation call: $storageAccountCred = Get-AutomationPSCredential
Describing File Existence Test
Write-Error: C:\Users\RPhadke\cds_tools\azure_automation\pm_runbook.ps1:147:1
Line |
 147 |  Invoke-PmScenario -scenario_id $scenario_id -storageAccountCred $stor …
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Unrecognized Guid format.
 [-] Error occurred in Describe block 81ms
   at Invoke-PmScenario, C:\Users\RPhadke\cds_tools\azure_automation\pm_runbook.ps1: line 142
   FormatException: Unrecognized Guid format.
   at Invoke-PmScenario, C:\Users\RPhadke\cds_tools\azure_automation\pm_runbook.ps1: line 142
   at <ScriptBlock>, C:\Users\RPhadke\cds_tools\azure_automation\pm_runbook.ps1: line 147
   at <ScriptBlock>, C:\Users\RPhadke\cds_tools\azure_automation\pm_runbook.Tests.ps1: line 10
   at Invoke-Blocks, C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Functions\SetupTeardown.ps1: line 134
   at Invoke-TestGroupSetupBlocks, C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Functions\SetupTeardown.ps1: line 113

Expected Behavior

  1. Container should build - should not fail
  2. Should not get Unrecognized GUID format error on automation variables

Steps To Reproduce

Powershell script

Param
(
    [string]$scenario_id = "102", # Default value for scenario_id
    [PSCredential]$storageAccountCred = $null, # Default value for storageAccountCred
    [switch]$DebugMode = $false  # Switch parameter for debug mode
)

function Invoke-Scenario {
    param (
        [string]$scenario_id,
        [PSCredential]$storageAccountCred,
        [switch]$DebugMode
    )

    try {

        # Converting Azure Automation variable assets to script variables
        $start = Get-AutomationVariable -Name "start"
        $rootVal = Get-AutomationVariable -Name "rootVal"
        $credName = Get-AutomationVariable -Name "credName"
        $executable_path = Get-AutomationVariable -Name "executable_path"
        $drive = Get-AutomationVariable -Name "drive"

        # Map drive if unmapped
        if ($null -eq $storageAccountCred) {
            $storageAccountCred = Get-AutomationPSCredential -Name $credName
        }
    }
    catch {
        # If an error is caught, log it and then re-throw it
        Write-Error -Message $_.Exception.Message
        # Send-ProcessingError
        throw $_.Exception
    }
}

Invoke-Scenario -scenario_id $scenario_id -storageAccountCred $storageAccountCred -DebugMode $DebugMode

Testing Script

Describe "File Existence Test" {

    BeforeAll {
        # pm_runbook.ps1 - .Tests.ps1 + .ps1 = pm_runbook.ps1
        . $PSCommandPath.Replace('.Tests.ps1', '.ps1')
    }

    It "should find pm_runbook.ps1 file" {
        . $PSCommandPath.Replace('.Tests.ps1', '.ps1')
        Test-Path $filePath | Should -Be $true
    }

}

Describe your environment

Pester version : 3.4.0 C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Pester.psm1
PowerShell version : 7.4.2 OS version : Microsoft Windows NT 10.0.22631.0

Possible Solution?

No response

db-trin-life commented 2 weeks ago

upvote, would love to get azure automation commands here

fflaten commented 2 weeks ago

Hi. You're using Pester v3 which is no longer supported. Please upgrade to the latest version as required in the checklist at the beginning of the issue text, see link for help.

Still, there's nothing in the issue pointing to Pester being the root cause. Stacktrace doesn't match the provided code and error is likely related to something external. The testing script is also executing the script twice and testing an undefined path variable.

Closing as likely spam. If not, please update the issue with a valid sample and error and let me now in a comment.