Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
33593d4
`Add-SqlDscTraceFlag`: Simplify trace flag addition and ensure unique…
johlju Oct 10, 2025
4a9be43
Add integration tests to ensure de-duplication of trace flags in Add-…
johlju Oct 10, 2025
dcafa11
Refactor Add-SqlDscTraceFlag to improve trace flag comparison and pro…
johlju Oct 10, 2025
1bccb7a
`Add-SqlDscTraceFlag`: Enhance de-duplication logic and add idempoten…
johlju Oct 11, 2025
4771347
Refactor integration tests for Add-SqlDscTraceFlag to improve readabi…
johlju Oct 11, 2025
ce5589c
Fix documentation for InstanceName parameter in Add-SqlDscTraceFlag t…
johlju Oct 11, 2025
ab5ef85
Refactor tests for Add-SqlDscTraceFlag to improve de-duplication chec…
johlju Oct 11, 2025
8a4e3ce
Normalize and deduplicate trace flags in Add-SqlDscTraceFlag for impr…
johlju Oct 11, 2025
3956454
Remove redundant entries for `Add-SqlDscTraceFlag` unit and integrati…
johlju Oct 11, 2025
8c19ffc
Fix parameter order in Compare-Object for accurate trace flag comparison
johlju Oct 11, 2025
ed13b19
Refactor Add-SqlDscTraceFlag for improved de-duplication and idempote…
johlju Oct 11, 2025
5270b39
Add validation for TraceFlag parameter in Add-SqlDscTraceFlag to ensu…
johlju Oct 11, 2025
db894d3
Refactor trace flag normalization in Add-SqlDscTraceFlag for improved…
johlju Oct 11, 2025
9338719
Filter out null and zero values from trace flags in Get-SqlDscTraceFl…
johlju Oct 11, 2025
2a4ebda
Update ValidateRange attribute for TraceFlag parameter to use System.…
johlju Oct 11, 2025
d4e2da4
Merge branch 'main' into fix/issue#2277
johlju Oct 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added integration tests for `Test-SqlDscIsDatabasePrincipal` command to ensure
it functions correctly in real environments
[issue #2231](https://github.com/dsccommunity/SqlServerDsc/issues/2231).
- `Add-SqlDscTraceFlag`
- Added unit tests to verify that duplicate trace flags provided via the
`-TraceFlag` parameter are de-duplicated as expected
([issue #2277](https://github.com/dsccommunity/SqlServerDsc/issues/2277)).

### Fixed

Expand Down
13 changes: 3 additions & 10 deletions source/Public/Add-SqlDscTraceFlag.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -112,16 +112,9 @@ function Add-SqlDscTraceFlag

$ErrorActionPreference = $originalErrorActionPreference

$desiredTraceFlags = [System.UInt32[]] $currentTraceFlags + @(
$TraceFlag |
ForEach-Object -Process {
# Add only when it does not already exist.
if ($_ -notin $currentTraceFlags)
{
$_
}
}
)
$desiredTraceFlags = @($currentTraceFlags) + @($TraceFlag) |
Sort-Object -Unique
$desiredTraceFlags = [System.UInt32[]] $desiredTraceFlags

$verboseDescriptionMessage = $script:localizedData.TraceFlag_Add_ShouldProcessVerboseDescription -f $InstanceName, ($TraceFlag -join ', ')
$verboseWarningMessage = $script:localizedData.TraceFlag_Add_ShouldProcessVerboseWarning -f $InstanceName
Expand Down
110 changes: 110 additions & 0 deletions tests/Unit/Public/Add-SqlDscTraceFlag.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -201,4 +201,114 @@ Describe 'Add-SqlDscTraceFlag' -Tag 'Public' {
} -Exactly -Times 1 -Scope It
}
}

Context 'When duplicate trace flags are provided in the input' {
BeforeAll {
Mock -CommandName Set-SqlDscTraceFlag
}

Context 'When there are no existing trace flags and duplicates are provided' {
BeforeAll {
Mock -CommandName Get-SqlDscTraceFlag -MockWith {
return @()
}

$mockServiceObject = [Microsoft.SqlServer.Management.Smo.Wmi.Service]::CreateTypeInstance()
$mockServiceObject.Name = 'MSSQL$SQL2022'
}

It 'Should de-duplicate trace flags when only duplicates are provided' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 4199,4199 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 1 -and
$TraceFlag -contains 4199
} -Exactly -Times 1 -Scope It
}

It 'Should de-duplicate trace flags when mix of unique and duplicates are provided' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 4199,3226,4199,3226 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 2 -and
$TraceFlag -contains 4199 -and
$TraceFlag -contains 3226
} -Exactly -Times 1 -Scope It
}

It 'Should handle multiple duplicates of multiple trace flags' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 4199,4199,3226,3226,3226,1222 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 3 -and
$TraceFlag -contains 4199 -and
$TraceFlag -contains 3226 -and
$TraceFlag -contains 1222
} -Exactly -Times 1 -Scope It
}
}

Context 'When there are existing trace flags and duplicates are provided' {
BeforeAll {
Mock -CommandName Get-SqlDscTraceFlag -MockWith {
return @(3226)
}

$mockServiceObject = [Microsoft.SqlServer.Management.Smo.Wmi.Service]::CreateTypeInstance()
$mockServiceObject.Name = 'MSSQL$SQL2022'
}

It 'Should de-duplicate when adding trace flags that include duplicates and existing flag' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 4199,3226,4199 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 2 -and
$TraceFlag -contains 4199 -and
$TraceFlag -contains 3226
} -Exactly -Times 1 -Scope It
}

It 'Should de-duplicate when all provided trace flags are duplicates of existing flag' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 3226,3226 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 1 -and
$TraceFlag -contains 3226
} -Exactly -Times 1 -Scope It
}

It 'Should de-duplicate complex scenario with existing and new flags' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 4199,4199,3226,1222,1222 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 3 -and
$TraceFlag -contains 4199 -and
$TraceFlag -contains 3226 -and
$TraceFlag -contains 1222
} -Exactly -Times 1 -Scope It
}
}

Context 'When there are multiple existing trace flags and duplicates are provided' {
BeforeAll {
Mock -CommandName Get-SqlDscTraceFlag -MockWith {
return @(3226, 1222)
}

$mockServiceObject = [Microsoft.SqlServer.Management.Smo.Wmi.Service]::CreateTypeInstance()
$mockServiceObject.Name = 'MSSQL$SQL2022'
}

It 'Should de-duplicate and merge with multiple existing trace flags' {
{ Add-SqlDscTraceFlag -ServiceObject $mockServiceObject -TraceFlag 4199,4199,3226,1222 -Force } | Should -Not -Throw

Should -Invoke -CommandName Set-SqlDscTraceFlag -ParameterFilter {
$TraceFlag.Count -eq 3 -and
$TraceFlag -contains 4199 -and
$TraceFlag -contains 3226 -and
$TraceFlag -contains 1222
} -Exactly -Times 1 -Scope It
}
}
}
}
Loading