Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- `Remove-SqlDscTraceFlag`
- Added missing integration test to ensure command reliability [issue #2239](https://github.com/dsccommunity/SqlServerDsc/issues/2239)

### Fixed

- Updated `.gitattributes` to enforce LF line endings for PowerShell files to
Expand Down
1 change: 1 addition & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,7 @@ stages:
'tests/Integration/Commands/Remove-SqlDscDatabase.Integration.Tests.ps1'
'tests/Integration/Commands/Remove-SqlDscRole.Integration.Tests.ps1'
'tests/Integration/Commands/Remove-SqlDscLogin.Integration.Tests.ps1'
'tests/Integration/Commands/Remove-SqlDscTraceFlag.Integration.Tests.ps1'
# Group 9
'tests/Integration/Commands/Uninstall-SqlDscServer.Integration.Tests.ps1'
)
Expand Down
1 change: 1 addition & 0 deletions tests/Integration/Commands/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ Remove-SqlDscAgentOperator | 8 | 2 (New-SqlDscAgentOperator) | DSCSQLTEST | -
Remove-SqlDscDatabase | 8 | 2 (New-SqlDscDatabase) | DSCSQLTEST | -
Remove-SqlDscRole | 8 | 2 (New-SqlDscRole) | DSCSQLTEST | -
Remove-SqlDscLogin | 8 | 2 (New-SqlDscLogin) | DSCSQLTEST | -
Remove-SqlDscTraceFlag | 8 | 1 (Install-SqlDscServer) | DSCSQLTEST | -
Uninstall-SqlDscServer | 9 | 8 (Remove commands) | - | -
Install-SqlDscReportingService | 1 | 0 (Prerequisites) | - | SSRS instance
Get-SqlDscInstalledInstance | 2 | 1 (Install-SqlDscReportingService), 0 (Prerequisites) | SSRS | -
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'Suppressing this rule because Script Analyzer does not understand Pester syntax.')]
param ()

BeforeDiscovery {
try
{
if (-not (Get-Module -Name 'DscResource.Test'))
{
# Assumes dependencies have been resolved, so if this module is not available, run 'noop' task.
if (-not (Get-Module -Name 'DscResource.Test' -ListAvailable))
{
# Redirect all streams to $null, except the error stream (stream 2)
& "$PSScriptRoot/../../../build.ps1" -Tasks 'noop' 3>&1 4>&1 5>&1 6>&1 > $null
}

# If the dependencies have not been resolved, this will throw an error.
Import-Module -Name 'DscResource.Test' -Force -ErrorAction 'Stop'
}
}
catch [System.IO.FileNotFoundException]
{
throw 'DscResource.Test module dependency not found. Please run ".\build.ps1 -ResolveDependency -Tasks build" first.'
}
}

BeforeAll {
$script:moduleName = 'SqlServerDsc'

Import-Module -Name $script:moduleName -Force -ErrorAction 'Stop'
}

Describe 'Remove-SqlDscTraceFlag' -Tag @('Integration_SQL2017', 'Integration_SQL2019', 'Integration_SQL2022') {
BeforeAll {
$script:mockInstanceName = 'DSCSQLTEST'
$script:mockComputerName = Get-ComputerName

# Test trace flags to use for testing
$script:testTraceFlags = @(4199, 3226)
$script:singleTestTraceFlag = 1118
}

Context 'When removing trace flags using ServerName and InstanceName parameters' {
It 'Should remove a single trace flag without error' {
# Arrange - Add a test trace flag first
{
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Act - Remove the trace flag
{
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Assert - Verify the trace flag was removed
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
$currentTraceFlags | Should -Not -Contain $script:singleTestTraceFlag
}

It 'Should remove multiple trace flags without error' {
# Arrange - Add test trace flags first
{
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:testTraceFlags -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Act - Remove the trace flags
{
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:testTraceFlags -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Assert - Verify the trace flags were removed
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
foreach ($traceFlag in $script:testTraceFlags)
{
$currentTraceFlags | Should -Not -Contain $traceFlag
}
}

It 'Should not error when removing non-existent trace flags' {
# Act & Assert - Removing a trace flag that doesn't exist should not throw
{
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag 9999 -Force -ErrorAction 'Stop'
} | Should -Not -Throw
}

It 'Should preserve other existing trace flags when removing specific ones' {
# Arrange - Add multiple trace flags
$allTestFlags = @(4199, 3226, 1118, 2544)
$flagsToRemove = @(4199, 1118)
$flagsToKeep = @(3226, 2544)

{
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $allTestFlags -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Act - Remove only some of the trace flags
{
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $flagsToRemove -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Assert - Verify correct flags were removed and others preserved
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'

foreach ($removedFlag in $flagsToRemove)
{
$currentTraceFlags | Should -Not -Contain $removedFlag
}

foreach ($keptFlag in $flagsToKeep)
{
$currentTraceFlags | Should -Contain $keptFlag
}

# Clean up - Remove remaining test flags
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $flagsToKeep -Force -ErrorAction 'SilentlyContinue'
}
}

Context 'When removing trace flags using ServiceObject parameter' {
BeforeAll {
# Get the service object for the test instance
$script:serviceObject = Get-SqlDscManagedComputerService -ServiceType 'DatabaseEngine' -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
}

It 'Should remove a single trace flag using ServiceObject parameter' {
# Arrange - Add a test trace flag first
{
Add-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Act - Remove the trace flag
{
Remove-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Assert - Verify the trace flag was removed
$currentTraceFlags = Get-SqlDscTraceFlag -ServiceObject $script:serviceObject -ErrorAction 'Stop'
$currentTraceFlags | Should -Not -Contain $script:singleTestTraceFlag
}

It 'Should remove multiple trace flags using ServiceObject parameter' {
# Arrange - Add test trace flags first
{
Add-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $script:testTraceFlags -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Act - Remove the trace flags
{
Remove-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $script:testTraceFlags -Force -ErrorAction 'Stop'
} | Should -Not -Throw

# Assert - Verify the trace flags were removed
$currentTraceFlags = Get-SqlDscTraceFlag -ServiceObject $script:serviceObject -ErrorAction 'Stop'
foreach ($traceFlag in $script:testTraceFlags)
{
$currentTraceFlags | Should -Not -Contain $traceFlag
}
}
}
}
Loading