|
|
|
#!powershell
|
|
|
|
|
|
|
|
#Requires -Module Ansible.ModuleUtils.Legacy
|
|
|
|
|
|
|
|
$params = Parse-Args $args -supports_check_mode $true
|
|
|
|
|
|
|
|
$data = Get-AnsibleParam -obj $params -name "data" -type "str" -default "normal"
|
|
|
|
$result = @{
|
|
|
|
changed = $false
|
|
|
|
}
|
|
|
|
|
|
|
|
<#
|
|
|
|
This module tests various error events in PowerShell to verify our hidden trap
|
|
|
|
catches them all and outputs a pretty error message with a traceback to help
|
|
|
|
users debug the actual issue
|
|
|
|
|
|
|
|
normal - normal execution, no errors
|
|
|
|
fail - Calls Fail-Json like normal
|
|
|
|
throw - throws an exception
|
|
|
|
error - Write-Error with ErrorActionPreferenceStop
|
|
|
|
cmdlet_error - Calls a Cmdlet with an invalid error
|
|
|
|
dotnet_exception - Calls a .NET function that will throw an error
|
|
|
|
function_throw - Throws an exception in a function
|
|
|
|
proc_exit_fine - calls an executable with a non-zero exit code with Exit-Json
|
|
|
|
proc_exit_fail - calls an executable with a non-zero exit code with Fail-Json
|
|
|
|
#>
|
|
|
|
|
|
|
|
Function Test-ThrowException {
|
|
|
|
throw "exception in function"
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($data -eq "normal") {
|
|
|
|
Exit-Json -obj $result
|
|
|
|
}
|
|
|
|
elseif ($data -eq "fail") {
|
|
|
|
Fail-Json -obj $result -message "fail message"
|
|
|
|
}
|
|
|
|
elseif ($data -eq "throw") {
|
|
|
|
throw [ArgumentException]"module is thrown"
|
|
|
|
}
|
|
|
|
elseif ($data -eq "error") {
|
|
|
|
Write-Error -Message $data
|
|
|
|
}
|
|
|
|
elseif ($data -eq "cmdlet_error") {
|
|
|
|
Get-Item -Path "fake:\path"
|
|
|
|
}
|
|
|
|
elseif ($data -eq "dotnet_exception") {
|
|
|
|
[System.IO.Path]::GetFullPath($null)
|
|
|
|
}
|
|
|
|
elseif ($data -eq "function_throw") {
|
|
|
|
Test-ThrowException
|
|
|
|
}
|
|
|
|
elseif ($data -eq "proc_exit_fine") {
|
|
|
|
# verifies that if no error was actually fired and we have an output, we
|
|
|
|
# don't use the RC to validate if the module failed
|
|
|
|
&cmd.exe /c exit 2
|
|
|
|
Exit-Json -obj $result
|
|
|
|
}
|
|
|
|
elseif ($data -eq "proc_exit_fail") {
|
|
|
|
&cmd.exe /c exit 2
|
|
|
|
Fail-Json -obj $result -message "proc_exit_fail"
|
|
|
|
}
|
|
|
|
|
|
|
|
# verify no exception were silently caught during our tests
|
|
|
|
Fail-Json -obj $result -message "end of module"
|
|
|
|
|