Skip to content

Commit 20fa89e

Browse files
authored
Add integration test for Add-SqlDscTraceFlag command (#2278)
1 parent 22bce74 commit 20fa89e

4 files changed

Lines changed: 179 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3434
- Added integration tests for `Test-SqlDscIsRole` command to ensure it functions
3535
correctly in real environments
3636
[issue #2229](https://github.com/dsccommunity/SqlServerDsc/issues/2229).
37+
- Added integration tests for `Add-SqlDscTraceFlag` command to ensure it functions
38+
correctly in real environments
39+
[issue #2214](https://github.com/dsccommunity/SqlServerDsc/issues/2214).
3740

3841
### Fixed
3942

azure-pipelines.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ stages:
332332
'tests/Integration/Commands/Assert-SqlDscAgentOperator.Integration.Tests.ps1'
333333
'tests/Integration/Commands/Enable-SqlDscAgentOperator.Integration.Tests.ps1'
334334
'tests/Integration/Commands/Disable-SqlDscAgentOperator.Integration.Tests.ps1'
335+
'tests/Integration/Commands/Add-SqlDscTraceFlag.Integration.Tests.ps1'
335336
# Group 8
336337
'tests/Integration/Commands/Remove-SqlDscAgentAlert.Integration.Tests.ps1'
337338
'tests/Integration/Commands/Remove-SqlDscAgentOperator.Integration.Tests.ps1'
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'Suppressing this rule because Script Analyzer does not understand Pester syntax.')]
2+
param ()
3+
4+
BeforeDiscovery {
5+
try
6+
{
7+
if (-not (Get-Module -Name 'DscResource.Test'))
8+
{
9+
# Assumes dependencies have been resolved, so if this module is not available, run 'noop' task.
10+
if (-not (Get-Module -Name 'DscResource.Test' -ListAvailable))
11+
{
12+
# Redirect all streams to $null, except the error stream (stream 2)
13+
& "$PSScriptRoot/../../../build.ps1" -Tasks 'noop' 3>&1 4>&1 5>&1 6>&1 > $null
14+
}
15+
16+
# If the dependencies have not been resolved, this will throw an error.
17+
Import-Module -Name 'DscResource.Test' -Force -ErrorAction 'Stop'
18+
}
19+
}
20+
catch [System.IO.FileNotFoundException]
21+
{
22+
throw 'DscResource.Test module dependency not found. Please run ".\build.ps1 -ResolveDependency -Tasks noop" first.'
23+
}
24+
}
25+
26+
BeforeAll {
27+
$script:moduleName = 'SqlServerDsc'
28+
29+
Import-Module -Name $script:moduleName -Force -ErrorAction 'Stop'
30+
}
31+
32+
Describe 'Add-SqlDscTraceFlag' -Tag @('Integration_SQL2017', 'Integration_SQL2019', 'Integration_SQL2022') {
33+
BeforeAll {
34+
$script:mockInstanceName = 'DSCSQLTEST'
35+
$script:mockComputerName = Get-ComputerName
36+
37+
# Test trace flags to use for testing
38+
$script:testTraceFlags = @(4199, 3226)
39+
$script:singleTestTraceFlag = 1118
40+
$script:additionalTestTraceFlag = 2544
41+
}
42+
43+
Context 'When adding trace flags using ServerName and InstanceName parameters' {
44+
BeforeAll {
45+
# Clean up any existing test trace flags before starting tests
46+
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
47+
$testFlagsToRemove = $currentTraceFlags | Where-Object { $_ -in (@($script:testTraceFlags) + $script:singleTestTraceFlag + $script:additionalTestTraceFlag) }
48+
if ($testFlagsToRemove)
49+
{
50+
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $testFlagsToRemove -Force -ErrorAction 'SilentlyContinue'
51+
}
52+
}
53+
54+
AfterAll {
55+
# Clean up test trace flags after tests
56+
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
57+
$testFlagsToRemove = $currentTraceFlags | Where-Object { $_ -in (@($script:testTraceFlags) + $script:singleTestTraceFlag + $script:additionalTestTraceFlag) }
58+
if ($testFlagsToRemove)
59+
{
60+
Remove-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $testFlagsToRemove -Force -ErrorAction 'SilentlyContinue'
61+
}
62+
}
63+
64+
It 'Should add a single trace flag without error' {
65+
# Act - Add the trace flag
66+
{
67+
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
68+
} | Should -Not -Throw
69+
70+
# Assert - Verify the trace flag was added
71+
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
72+
$currentTraceFlags | Should -Contain $script:singleTestTraceFlag
73+
}
74+
75+
It 'Should add multiple trace flags without error' {
76+
# Act - Add the trace flags
77+
{
78+
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:testTraceFlags -Force -ErrorAction 'Stop'
79+
} | Should -Not -Throw
80+
81+
# Assert - Verify the trace flags were added
82+
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
83+
foreach ($traceFlag in $script:testTraceFlags)
84+
{
85+
$currentTraceFlags | Should -Contain $traceFlag
86+
}
87+
}
88+
89+
It 'Should not duplicate existing trace flags when adding them again' {
90+
# Arrange - Ensure a trace flag is already set
91+
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
92+
93+
$beforeAddTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
94+
$beforeCount = ($beforeAddTraceFlags | Where-Object { $_ -eq $script:singleTestTraceFlag }).Count
95+
96+
# Act - Try to add the same trace flag again
97+
{
98+
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
99+
} | Should -Not -Throw
100+
101+
# Assert - Verify no duplicate was created
102+
$afterAddTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
103+
$afterCount = ($afterAddTraceFlags | Where-Object { $_ -eq $script:singleTestTraceFlag }).Count
104+
105+
$afterCount | Should -Be $beforeCount
106+
$afterAddTraceFlags | Should -Contain $script:singleTestTraceFlag
107+
}
108+
109+
It 'Should preserve existing trace flags when adding new ones' {
110+
# Arrange - Add an initial trace flag
111+
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
112+
113+
# Act - Add additional trace flags
114+
{
115+
Add-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -TraceFlag $script:additionalTestTraceFlag -Force -ErrorAction 'Stop'
116+
} | Should -Not -Throw
117+
118+
# Assert - Verify both old and new trace flags exist
119+
$currentTraceFlags = Get-SqlDscTraceFlag -ServerName $script:mockComputerName -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
120+
$currentTraceFlags | Should -Contain $script:singleTestTraceFlag
121+
$currentTraceFlags | Should -Contain $script:additionalTestTraceFlag
122+
}
123+
}
124+
125+
Context 'When adding trace flags using ServiceObject parameter' {
126+
BeforeAll {
127+
# Get the service object for the test instance
128+
$script:serviceObject = Get-SqlDscManagedComputerService -ServiceType 'DatabaseEngine' -InstanceName $script:mockInstanceName -ErrorAction 'Stop'
129+
130+
# Clean up any existing test trace flags before starting tests
131+
$currentTraceFlags = Get-SqlDscTraceFlag -ServiceObject $script:serviceObject -ErrorAction 'Stop'
132+
$testFlagsToRemove = $currentTraceFlags | Where-Object { $_ -in (@($script:testTraceFlags) + $script:singleTestTraceFlag + $script:additionalTestTraceFlag) }
133+
if ($testFlagsToRemove)
134+
{
135+
Remove-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $testFlagsToRemove -Force -ErrorAction 'SilentlyContinue'
136+
}
137+
}
138+
139+
AfterAll {
140+
# Clean up test trace flags after tests
141+
$currentTraceFlags = Get-SqlDscTraceFlag -ServiceObject $script:serviceObject -ErrorAction 'Stop'
142+
$testFlagsToRemove = $currentTraceFlags | Where-Object { $_ -in (@($script:testTraceFlags) + $script:singleTestTraceFlag + $script:additionalTestTraceFlag) }
143+
if ($testFlagsToRemove)
144+
{
145+
Remove-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $testFlagsToRemove -Force -ErrorAction 'SilentlyContinue'
146+
}
147+
}
148+
149+
It 'Should add a single trace flag using ServiceObject parameter' {
150+
# Act - Add the trace flag
151+
{
152+
Add-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $script:singleTestTraceFlag -Force -ErrorAction 'Stop'
153+
} | Should -Not -Throw
154+
155+
# Assert - Verify the trace flag was added
156+
$currentTraceFlags = Get-SqlDscTraceFlag -ServiceObject $script:serviceObject -ErrorAction 'Stop'
157+
$currentTraceFlags | Should -Contain $script:singleTestTraceFlag
158+
}
159+
160+
It 'Should add multiple trace flags using ServiceObject parameter' {
161+
# Act - Add the trace flags
162+
{
163+
Add-SqlDscTraceFlag -ServiceObject $script:serviceObject -TraceFlag $script:testTraceFlags -Force -ErrorAction 'Stop'
164+
} | Should -Not -Throw
165+
166+
# Assert - Verify the trace flags were added
167+
$currentTraceFlags = Get-SqlDscTraceFlag -ServiceObject $script:serviceObject -ErrorAction 'Stop'
168+
foreach ($traceFlag in $script:testTraceFlags)
169+
{
170+
$currentTraceFlags | Should -Contain $traceFlag
171+
}
172+
}
173+
}
174+
}

tests/Integration/Commands/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ Test-SqlDscIsAgentOperator | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | D
8484
Assert-SqlDscAgentOperator | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
8585
Enable-SqlDscAgentOperator | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
8686
Disable-SqlDscAgentOperator | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
87+
Add-SqlDscTraceFlag | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
8788
Remove-SqlDscAgentAlert | 8 | 2 (New-SqlDscAgentAlert) | DSCSQLTEST | -
8889
Remove-SqlDscAgentOperator | 8 | 2 (New-SqlDscAgentOperator) | DSCSQLTEST | -
8990
Remove-SqlDscAudit | 8 | - | DSCSQLTEST | -

0 commit comments

Comments
 (0)