tests/maproom/unit/Get-S2DResiliencyEfficiency.Tests.ps1
|
#Requires -Modules @{ModuleName='Pester';ModuleVersion='5.0'} BeforeAll { $psm1 = Resolve-Path (Join-Path $PSScriptRoot '..\..\..\S2DCartographer.psm1') Import-Module $psm1 -Force } Describe 'Get-S2DResiliencyEfficiency' { Context 'Mirror - Two-Way (NumberOfDataCopies=2, NodeCount > 2)' { It 'ResiliencyType = "Two-Way Mirror"' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 3).ResiliencyType | Should -Be 'Two-Way Mirror' } } It 'efficiency = 50.0%' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 3).EfficiencyPercent | Should -Be 50.0 } } It '4-node still 50.0%' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 4).EfficiencyPercent | Should -Be 50.0 } } It '8-node still 50.0%' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 8).EfficiencyPercent | Should -Be 50.0 } } } Context 'Mirror - Nested Two-Way (NumberOfDataCopies=2, NodeCount <= 2)' { It '2-node: ResiliencyType = "Nested Two-Way Mirror"' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 2).ResiliencyType | Should -Be 'Nested Two-Way Mirror' } } It '2-node: efficiency = 25.0%' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 2).EfficiencyPercent | Should -Be 25.0 } } It '1-node: also returns Nested Two-Way Mirror' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 1).ResiliencyType | Should -Be 'Nested Two-Way Mirror' } } } Context 'Mirror - Three-Way (NumberOfDataCopies=3)' { It 'ResiliencyType = "Three-Way Mirror"' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 3 -NodeCount 3).ResiliencyType | Should -Be 'Three-Way Mirror' } } It 'efficiency = 33.3%' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 3 -NodeCount 3).EfficiencyPercent | Should -Be 33.3 } } It '4-node three-way still 33.3%' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 3 -NodeCount 4).EfficiencyPercent | Should -Be 33.3 } } } Context 'Parity - Single (PhysicalDiskRedundancy=1)' { It 'ResiliencyType = "Single Parity"' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 1 -NodeCount 3).ResiliencyType | Should -Be 'Single Parity' } } It '3-node single parity: efficiency = 66.7% ((3-1)/3 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 1 -NodeCount 3).EfficiencyPercent | Should -Be 66.7 } } It '4-node single parity: efficiency = 75.0% ((4-1)/4 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 1 -NodeCount 4).EfficiencyPercent | Should -Be 75.0 } } It '8-node single parity: efficiency = 87.5% ((8-1)/8 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 1 -NodeCount 8).EfficiencyPercent | Should -Be 87.5 } } } Context 'Parity - Dual (PhysicalDiskRedundancy=2)' { It 'ResiliencyType = "Dual Parity"' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -NodeCount 4).ResiliencyType | Should -Be 'Dual Parity' } } It '4-node dual parity: efficiency = 50.0% ((4-2)/4 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -NodeCount 4).EfficiencyPercent | Should -Be 50.0 } } It '6-node dual parity: efficiency = 66.7% ((6-2)/6 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -NodeCount 6).EfficiencyPercent | Should -Be 66.7 } } It '8-node dual parity: efficiency = 75.0% ((8-2)/8 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -NodeCount 8).EfficiencyPercent | Should -Be 75.0 } } It '16-node dual parity: efficiency = 87.5% ((16-2)/16 * 100)' { InModuleScope S2DCartographer { (Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -NodeCount 16).EfficiencyPercent | Should -Be 87.5 } } } Context 'Output object shape' { It 'returns PSCustomObject' { InModuleScope S2DCartographer { $r = Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 3 -NodeCount 4 $r | Should -BeOfType ([PSCustomObject]) } } It 'has ResiliencyType, EfficiencyPercent, Description properties' { InModuleScope S2DCartographer { $r = Get-S2DResiliencyEfficiency -ResiliencySettingName Mirror -NumberOfDataCopies 2 -NodeCount 4 $r.PSObject.Properties.Name | Should -Contain 'ResiliencyType' $r.PSObject.Properties.Name | Should -Contain 'EfficiencyPercent' $r.PSObject.Properties.Name | Should -Contain 'Description' } } It 'Description is a non-empty string' { InModuleScope S2DCartographer { $r = Get-S2DResiliencyEfficiency -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -NodeCount 6 $r.Description | Should -Not -BeNullOrEmpty } } } Context 'ValidateSet enforcement' { It 'throws on invalid ResiliencySettingName' { InModuleScope S2DCartographer { { Get-S2DResiliencyEfficiency -ResiliencySettingName 'RAID5' -NodeCount 4 } | Should -Throw } } } } |