mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-08-13 15:46:52 +00:00
94bc1a9d73
- Fix bare Skip-IfNoTarget calls in 13_Firewall and 14_Backup (missing if/return pattern caused tests to run when they should skip) - Validate modifier-only switches in dev.ps1 (-Force/-Reprovision without an action switch now errors instead of defaulting to -Shell) - Add force-cleanup to usage text in run-integration.sh - Add --connect-timeout/--max-time to guest agent curl in wait-for-pve.sh Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
119 lines
4.8 KiB
PowerShell
119 lines
4.8 KiB
PowerShell
#Requires -Module Pester
|
|
|
|
BeforeAll {
|
|
. $PSScriptRoot/_IntegrationHelper.ps1
|
|
Connect-TestPve
|
|
|
|
$script:FirewallTestRulePos = $null
|
|
}
|
|
|
|
AfterAll {
|
|
if ($null -eq $script:SkipReason) {
|
|
# Cleanup: firewall test artifacts
|
|
try {
|
|
$rules = Get-PveFirewallRule -Level Cluster -ErrorAction SilentlyContinue
|
|
$testRules = $rules | Where-Object { $_.Comment -like 'pester-test*' }
|
|
foreach ($r in $testRules) {
|
|
Remove-PveFirewallRule -Level Cluster -Position $r.Pos -Confirm:$false -ErrorAction SilentlyContinue
|
|
}
|
|
} catch { }
|
|
|
|
# Cleanup: firewall aliases
|
|
try {
|
|
Remove-PveFirewallAlias -Level Cluster -Name 'pester-alias' -Confirm:$false -ErrorAction SilentlyContinue
|
|
} catch { }
|
|
|
|
# Cleanup: firewall IP sets
|
|
try {
|
|
Remove-PveFirewallIpSet -Level Cluster -Name 'pester-ipset' -Confirm:$false -ErrorAction SilentlyContinue
|
|
} catch { }
|
|
}
|
|
Disconnect-TestPve
|
|
}
|
|
|
|
Describe 'Firewall — Integration' -Tag 'Integration' {
|
|
|
|
Context 'Firewall — Cluster Rules' {
|
|
It 'Should create a firewall rule' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ New-PveFirewallRule -Level Cluster -Type in -Action ACCEPT -Proto tcp -Dport '8080' -Comment 'pester-test-rule' -Enable -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should list firewall rules and find the test rule' {
|
|
if (Skip-IfNoTarget) { return }
|
|
$rules = Get-PveFirewallRule -Level Cluster
|
|
$rules | Should -Not -BeNullOrEmpty
|
|
$testRule = $rules | Where-Object { $_.Comment -eq 'pester-test-rule' }
|
|
$testRule | Should -Not -BeNullOrEmpty
|
|
$script:FirewallTestRulePos = $testRule.Pos
|
|
}
|
|
|
|
It 'Should update the firewall rule' {
|
|
if (Skip-IfNoTarget) { return }
|
|
if ($null -eq $script:FirewallTestRulePos) {
|
|
Set-ItResult -Skipped -Because 'No test rule was created'
|
|
}
|
|
{ Set-PveFirewallRule -Level Cluster -Position $script:FirewallTestRulePos -Comment 'pester-test-updated' -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should remove the firewall rule' {
|
|
if (Skip-IfNoTarget) { return }
|
|
if ($null -eq $script:FirewallTestRulePos) {
|
|
Set-ItResult -Skipped -Because 'No test rule was created'
|
|
}
|
|
{ Remove-PveFirewallRule -Level Cluster -Position $script:FirewallTestRulePos -Confirm:$false -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should get firewall options' {
|
|
if (Skip-IfNoTarget) { return }
|
|
$opts = Get-PveFirewallOptions -Level Cluster
|
|
$opts | Should -Not -BeNullOrEmpty
|
|
}
|
|
}
|
|
|
|
Context 'Firewall — Aliases and IP Sets' {
|
|
It 'Should create a firewall alias' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ New-PveFirewallAlias -Level Cluster -Name 'pester-alias' -Cidr '192.168.99.0/24' -Comment 'test alias' -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should list and find the alias' {
|
|
if (Skip-IfNoTarget) { return }
|
|
$aliases = Get-PveFirewallAlias -Level Cluster
|
|
$aliases | Where-Object { $_.Name -eq 'pester-alias' } | Should -Not -BeNullOrEmpty
|
|
}
|
|
|
|
It 'Should remove the alias' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ Remove-PveFirewallAlias -Level Cluster -Name 'pester-alias' -Confirm:$false -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should create an IP set' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ New-PveFirewallIpSet -Level Cluster -Name 'pester-ipset' -Comment 'test ipset' -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should add an entry to the IP set' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ New-PveFirewallIpSetEntry -Level Cluster -Name 'pester-ipset' -Cidr '10.99.0.0/16' -Comment 'test entry' -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should list IP set entries' {
|
|
if (Skip-IfNoTarget) { return }
|
|
$entries = Get-PveFirewallIpSetEntry -Level Cluster -Name 'pester-ipset'
|
|
$entries | Should -Not -BeNullOrEmpty
|
|
($entries | Where-Object { $_.Cidr -like '10.99.0.0*' }) | Should -Not -BeNullOrEmpty
|
|
}
|
|
|
|
It 'Should remove the IP set entry' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ Remove-PveFirewallIpSetEntry -Level Cluster -Name 'pester-ipset' -Cidr '10.99.0.0/16' -Confirm:$false -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
|
|
It 'Should remove the IP set' {
|
|
if (Skip-IfNoTarget) { return }
|
|
{ Remove-PveFirewallIpSet -Level Cluster -Name 'pester-ipset' -Confirm:$false -ErrorAction Stop } | Should -Not -Throw
|
|
}
|
|
}
|
|
}
|