Skip to content

Commit 2123608

Browse files
authored
Migrate Tests to Pester 5 (#296)
1 parent 83a11a0 commit 2123608

25 files changed

+13636
-7660
lines changed

.vscode/settings.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline",
1111
"powershell.codeFormatting.preset": "Custom",
1212
"powershell.codeFormatting.alignPropertyValuePairs": true,
13+
"powershell.codeFormatting.useConstantStrings": true,
1314
"powershell.developer.bundledModulesPath": "${cwd}/output/RequiredModules",
1415
"powershell.scriptAnalysis.settingsPath": ".vscode\\analyzersettings.psd1",
1516
"powershell.scriptAnalysis.enable": true,
@@ -43,5 +44,15 @@
4344
"[markdown]": {
4445
"files.trimTrailingWhitespace": false,
4546
"files.encoding": "utf8"
46-
}
47+
},
48+
"powershell.pester.useLegacyCodeLens": false,
49+
"pester.testFilePath": [
50+
"[tT]ests/[qQ][aA]/*.[tT]ests.[pP][sS]1",
51+
"[tT]ests/[uU]nit/**/*.[tT]ests.[pP][sS]1",
52+
"[tT]ests/[uU]nit/*.[tT]ests.[pP][sS]1"
53+
],
54+
"pester.runTestsInNewProcess": true,
55+
"pester.pesterModulePath": "./output/RequiredModules/Pester",
56+
"powershell.pester.codeLens": true,
57+
"pester.suppressCodeLensNotice": true,
4758
}

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ For older change log history see the [historic changelog](HISTORIC_CHANGELOG.md)
1111

1212
- `azure-pipelines.yml`
1313
- Remove windows 2019 image fixes [#294](https://github.com/dsccommunity/FailoverClusterDsc/issues/294).
14+
- Migrate tests to Pester 5.
15+
- Updated to single stubs module.
16+
17+
### Removed
18+
19+
- Removed CommonTestHelper as functions are now provided by DscResource.Test.
20+
- Removed OS specific (mainly 2012R2) tests.
1421

1522
## [2.2.0] - 2025-05-22
1623

RequiredModules.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
InvokeBuild = 'latest'
1111
PSScriptAnalyzer = 'latest'
12-
Pester = '4.10.1'
12+
Pester = 'latest'
1313
Plaster = 'latest'
1414
ModuleBuilder = 'latest'
1515
ChangelogManagement = 'latest'

build.yaml

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ BuildWorkflow:
4646
- package_module_nupkg
4747

4848
hqrmtest:
49-
- DscResource_Tests_Stop_On_Fail
49+
- Invoke_HQRM_Tests_Stop_On_Fail
5050

5151
test:
5252
- Pester_Tests_Stop_On_Fail
53-
- Pester_if_Code_Coverage_Under_Threshold
53+
- Convert_Pester_Coverage
54+
- Pester_If_Code_Coverage_Under_Threshold
5455

5556
merge:
5657
- Merge_CodeCoverage_Files
@@ -64,14 +65,23 @@ BuildWorkflow:
6465
# PESTER Configuration #
6566
####################################################
6667
Pester:
67-
OutputFormat: NUnitXML
68+
Configuration:
69+
Run:
70+
Path:
71+
- tests/Unit
72+
Output:
73+
Verbosity: Detailed
74+
StackTraceVerbosity: Full
75+
CIFormat: Auto
76+
CodeCoverage:
77+
CoveragePercentTarget: 85
78+
OutputEncoding: ascii
79+
UseBreakpoints: false
80+
TestResult:
81+
OutputFormat: NUnitXML
82+
OutputEncoding: ascii
6883
ExcludeFromCodeCoverage:
6984
- Modules/DscResource.Common
70-
Script:
71-
- tests/Unit
72-
Tag:
73-
CodeCoverageThreshold: 85
74-
CodeCoverageOutputFileEncoding: ascii
7585

7686
####################################################
7787
# Code Coverage Configuration #
@@ -87,14 +97,27 @@ CodeCoverage:
8797
# Pester Configuration (DscResource.Test) #
8898
####################################################
8999
DscTest:
90-
ExcludeTag:
91-
- "Common Tests - New Error-Level Script Analyzer Rules"
92-
Tag:
93-
ExcludeSourceFile:
94-
- output
95-
ExcludeModuleFile:
96-
- Modules/DscResource.Common
97-
MainGitBranch: main
100+
Pester:
101+
Configuration:
102+
Filter:
103+
ExcludeTag:
104+
- "Common Tests - New Error-Level Script Analyzer Rules"
105+
Output:
106+
Verbosity: Detailed
107+
CIFormat: Auto
108+
TestResult:
109+
Enabled: true
110+
OutputFormat: NUnitXML
111+
OutputEncoding: ascii
112+
OutputPath: ./output/testResults/NUnitXml_HQRM_Tests.xml
113+
Script:
114+
ExcludeSourceFile:
115+
- output
116+
ExcludeModuleFile:
117+
- Modules/DscResource.Common
118+
# Must exclude built module file because it should not be tested like MOF-based resources
119+
- FailoverClusterDsc.psm1
120+
MainGitBranch: main
98121

99122
ModuleBuildTasks:
100123
Sampler:
@@ -103,6 +126,8 @@ ModuleBuildTasks:
103126
- '*.ib.tasks'
104127
DscResource.DocGenerator:
105128
- 'Task.*'
129+
DscResource.Test:
130+
- 'Task.*'
106131

107132
TaskHeader: |
108133
param($Path)

source/DSCResources/DSC_Cluster/DSC_Cluster.psm1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ function Get-TargetResource
6565
New-InvalidOperationException -Message $errorMessage
6666
}
6767
$context = $null
68+
$address = $null
6869
try
6970
{
7071
if ($PSBoundParameters.ContainsKey('DomainAdministratorCredential'))
@@ -100,7 +101,6 @@ function Get-TargetResource
100101
IgnoreNetwork = $IgnoreNetwork
101102
DomainAdministratorCredential = $DomainAdministratorCredential
102103
}
103-
104104
}
105105

106106
<#
@@ -374,7 +374,7 @@ function Test-TargetResource
374374

375375
if ($cluster)
376376
{
377-
$targetNodeName = $env:COMPUTERNAME
377+
$targetNodeName = Get-ComputerName
378378

379379
Write-Verbose -Message ($script:localizedData.CheckClusterNodeIsUp -f $targetNodeName, $Name)
380380

source/DSCResources/DSC_ClusterIPAddress/DSC_ClusterIPAddress.psm1

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ function Get-TargetResource
3737
Ensure = 'Absent'
3838
}
3939

40-
$ipResources = Get-ClusterResource | Where-Object {$_.ResourceType -eq 'IP Address'}
40+
$ipResources = Get-ClusterResource | Where-Object { $_.ResourceType -eq 'IP Address' }
4141

4242
foreach ( $ipResource in $ipResources )
4343
{
@@ -46,9 +46,9 @@ function Get-TargetResource
4646
if ( $ipResourceDetails.Address -eq $IPAddress )
4747
{
4848
Write-Verbose -Message ($script:localizedData.FoundIPResource -f $IPAddress)
49-
$result.IPAddress = $ipResourceDetails.Address
49+
$result.IPAddress = $ipResourceDetails.Address
5050
$result.AddressMask = $ipResourceDetails.AddressMask
51-
$result.Ensure = 'Present'
51+
$result.Ensure = 'Present'
5252
}
5353
}
5454
$result
@@ -98,15 +98,15 @@ function Set-TargetResource
9898
# We need to Check if the network is added to the cluster. If not, we fail. If it is, we can append the IPAddress
9999
if ( -not $(Test-ClusterNetwork -IPAddress $IPAddress -AddressMask $AddressMask) )
100100
{
101-
New-InvalidArgumentException `
102-
-Message ($script:localizedData.NonExistantClusterNetwork -f $IPAddress,$AddressMask) `
101+
New-ArgumentException `
102+
-Message ($script:localizedData.NonExistentClusterNetwork -f $IPAddress, $AddressMask) `
103103
-ArgumentName 'IPAddress'
104104
}
105105
else
106106
{
107107
$params = @{
108108
IPAddress = $IPAddress
109-
AddressMask = $AddressMask
109+
AddressMask = $AddressMask
110110
ErrorAction = 'Stop'
111111
}
112112
Add-ClusterIPAddressDependency @params
@@ -219,15 +219,15 @@ function Get-Subnet
219219
Test-IPAddress -IPAddress $AddressMask
220220

221221
$subnet = ([IPAddress](([IPAddress]$Ipaddress).Address -band ([IPAddress]$AddressMask).Address)).IPAddressToString
222-
Write-Verbose -Message ($script:localizedData.FoundSubnetfromIPAddressandAddressMask -f $IPAddress, $AddressMask, $subnet)
222+
Write-Verbose -Message ($script:localizedData.FoundSubnetFromIPAddressAndAddressMask -f $IPAddress, $AddressMask, $subnet)
223223
return $subnet
224224
}
225225

226226
<#
227227
.Synopsis
228228
Adds an IPAddress as a Dependency to a Windows Cluster
229229
.DESCRIPTION
230-
Adds an IP Address resource to a Windows Cluster's Dependecy Expression
230+
Adds an IP Address resource to a Windows Cluster's Dependency Expression
231231
.PARAMETER IPAddress
232232
IP address to add to the Cluster's DependencyExpression
233233
.PARAMETER AddressMask
@@ -274,15 +274,13 @@ function Add-ClusterIPAddressDependency
274274
}
275275
Write-Verbose -Message ($script:localizedData.SetDependencyExpression -f $dependencyExpression)
276276
Set-ClusterResourceDependency @params
277-
278277
}
279278

280-
281279
<#
282280
.Synopsis
283281
Removes an IPAddress as a Dependency to a Windows Cluster
284282
.DESCRIPTION
285-
Removes an IP Address resource to a Windows Cluster's Dependecy Expression
283+
Removes an IP Address resource to a Windows Cluster's Dependency Expression
286284
.PARAMETER IPAddress
287285
IP address to remove to the Cluster's DependencyExpression
288286
.PARAMETER AddressMask
@@ -364,7 +362,7 @@ function Test-ClusterNetwork
364362
Test-IPAddress -IPAddress $AddressMask
365363

366364
$clusterNetworks = Get-ClusterNetworkList
367-
Write-Verbose -Message ($script:localizedData.GetSubnetfromIPAddressandAddressMask -f $IPAddress, $AddressMask)
365+
Write-Verbose -Message ($script:localizedData.GetSubnetFromIPAddressAndAddressMask -f $IPAddress, $AddressMask)
368366
$subnet = $(Get-Subnet -IPAddress $IPAddress -AddressMask $AddressMask -ErrorAction Stop)
369367

370368
foreach ( $network in $clusterNetworks )
@@ -394,12 +392,15 @@ function Get-ClusterNetworkList
394392

395393
Write-Verbose -Message ($script:localizedData.GetClusterNetworks)
396394
$networks = New-Object -TypeName "System.Collections.Generic.List[PSCustomObject]"
397-
foreach ( $network in Get-ClusterNetwork )
395+
foreach ($network in Get-ClusterNetwork)
398396
{
399-
$networks.Add([PSCustomObject]@{
400-
Address = $network.Address
401-
AddressMask = $network.AddressMask
402-
})
397+
$networks.Add(
398+
[PSCustomObject]@{
399+
Address = $network.Address
400+
AddressMask = $network.AddressMask
401+
}
402+
)
403+
403404
Write-Verbose -Message ($script:localizedData.FoundClusterNetwork -f $($network.Address), $($network.AddressMask))
404405
}
405406

@@ -442,7 +443,8 @@ function Add-ClusterIPResource
442443
Group = $OwnerGroup
443444
ErrorAction = 'Stop'
444445
}
445-
$resource = Add-ClusterResource @params
446+
447+
$null = Add-ClusterResource @params
446448

447449
return $resourceName
448450
}
@@ -477,11 +479,12 @@ function Get-ClusterIPResource
477479
.Synopsis
478480
Gets the IP resource information of a Given Cluster IP address Resource
479481
.PARAMETER IPAddressResource
480-
IP cddress resource to get to information from
482+
IP address resource to get to information from
481483
#>
482484
function Get-ClusterIPResourceParameters
483485
{
484486
[CmdletBinding()]
487+
[OutputType([System.Collections.Hashtable])]
485488
param
486489
(
487490
# IPAddress to add to Cluster
@@ -494,9 +497,10 @@ function Get-ClusterIPResourceParameters
494497

495498
$address = (Get-ClusterParameter -InputObject $ipObj -Name Address).Value
496499
$addressMask = (Get-ClusterParameter -InputObject $ipObj -Name SubnetMask).Value
497-
$network = (Get-ClusterParameter -InputObject $ipObj -Name Network).Value
500+
$network = (Get-ClusterParameter -InputObject $ipObj -Name Network).Value
498501
Write-Verbose -Message ($script:localizedData.FoundIPAddressResource -f $address, $addressMask, $network)
499-
@{
502+
503+
return @{
500504
Address = $address
501505
AddressMask = $addressMask
502506
Network = $network
@@ -507,7 +511,7 @@ function Get-ClusterIPResourceParameters
507511
.Synopsis
508512
Adds an IP address resource to cluster parameter
509513
.PARAMETER IPAddressResource
510-
IP cddress resource to add to the cluster parameter
514+
IP address resource to add to the cluster parameter
511515
.PARAMETER IPAddress
512516
IP address to add to the cluster parameter
513517
.PARAMETER AddressMask
@@ -537,13 +541,12 @@ function Add-ClusterIPParameter
537541

538542
$ipAddressResource = Get-ClusterResource -Name $IPAddressResourceName
539543

540-
$parameter1 = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $iPAddressResource,Address,$IPAddress
541-
$parameter2 = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $iPAddressResource,SubnetMask,$AddressMask
542-
$parameterList = $parameter1,$parameter2
544+
$parameter1 = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $iPAddressResource, Address, $IPAddress
545+
$parameter2 = New-Object Microsoft.FailoverClusters.PowerShell.ClusterParameter $iPAddressResource, SubnetMask, $AddressMask
546+
$parameterList = $parameter1, $parameter2
543547

544-
Write-Verbose -Message ($script:localizedData.AddIPAddressResource -f $IPAddress,$AddressMask)
548+
Write-Verbose -Message ($script:localizedData.AddIPAddressResource -f $IPAddress, $AddressMask)
545549
$parameterList | Set-ClusterParameter -ErrorAction Stop
546-
547550
}
548551

549552
<#
@@ -596,14 +599,14 @@ function New-ClusterIPDependencyExpression
596599
while ( $i -le $clusterResourceCount )
597600
{
598601
if ( $i -eq $clusterResourceCount )
599-
{
600-
$dependencyExpression += "[$($ClusterResource[$i])]"
601-
}
602-
else
603-
{
604-
$dependencyExpression += "[$($ClusterResource[$i])] or "
605-
}
606-
$i++
602+
{
603+
$dependencyExpression += "[$($ClusterResource[$i])]"
604+
}
605+
else
606+
{
607+
$dependencyExpression += "[$($ClusterResource[$i])] or "
608+
}
609+
$i++
607610
}
608611
}
609612
Write-Verbose -Message ($script:localizedData.NewDependencyExpression -f $dependencyExpression)
@@ -621,7 +624,7 @@ function Get-ClusterObject
621624
(
622625
)
623626

624-
$cluster = Get-ClusterResource | Where-Object { $_.name -eq 'Cluster Name'}
627+
$cluster = Get-ClusterResource | Where-Object { $_.name -eq 'Cluster Name' }
625628

626629
return $cluster
627630
}

source/DSCResources/DSC_ClusterIPAddress/en-US/DSC_ClusterIPAddress.strings.psd1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
ConvertFrom-StringData @'
44
GetClusterNetworks = Getting all networks added to this cluster.
55
FoundClusterNetwork = Found cluster network with address {0} and address mask {1}.
6-
GetSubnetfromIPAddressandAddressMask = Getting the subnet of the given IPAddress {0} with subnet mask {1}.
7-
FoundSubnetfromIPAddressandAddressMask = IP address {0} with subnet mask {1} is in subnet {2}.
6+
GetSubnetFromIPAddressAndAddressMask = Getting the subnet of the given IPAddress {0} with subnet mask {1}.
7+
FoundSubnetFromIPAddressAndAddressMask = IP address {0} with subnet mask {1} is in subnet {2}.
88
NetworkAlreadyInCluster = Subnet {0} for IPAddress {1} network {2} is added to the cluster.
99
AddIPAddressResource = Adding IP address {0} with address mask {1} to the cluster parameters.
10-
NonExistantClusterNetwork = Cluster Network for IP address {0} and address mask {1} is not part of this cluster".
10+
NonExistentClusterNetwork = Cluster Network for IP address {0} and address mask {1} is not part of this cluster".
1111
CreateNewIPResource = Created new IP resource with IP address {0} and owner group {1}.
1212
SetDependencyExpression = Set cluster resource dependency to {0}.
1313
GetTargetResourceMessage = Getting target resource state for IP address {0} and address mask {1}.

source/DSCResources/DSC_ClusterNetwork/DSC_ClusterNetwork.psm1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ function Get-TargetResource
2929
$AddressMask
3030
)
3131

32-
Write-Verbose -Message ($script:localizedData.GetClusterNetworkInformation -f $Name)
32+
Write-Verbose -Message ($script:localizedData.GetClusterNetworkInformation -f $Address)
3333

3434
$NetworkResource = Get-ClusterNetwork | Where-Object -FilterScript {
3535
$_.Address -eq $Address -and $_.AddressMask -eq $AddressMask
@@ -227,7 +227,7 @@ function Test-TargetResource
227227
$Metric
228228
)
229229

230-
Write-Verbose -Message ($script:localizedData.EvaluatingClusterNetworkInformation -f $Name)
230+
Write-Verbose -Message ($script:localizedData.EvaluatingClusterNetworkInformation -f $Address)
231231

232232
$getTargetResourceResult = Get-TargetResource -Address $Address -AddressMask $AddressMask
233233

0 commit comments

Comments
 (0)