Skip to content

Commit dbdd892

Browse files
Connect-DbaInstance - Fix AccessToken NonPooledConnection regression (review of #10260)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 34d47df commit dbdd892

3 files changed

Lines changed: 64 additions & 4 deletions

File tree

docs/trackers/features/commit-bug-review-TRACKER.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ Find real bugs (logic errors, null refs, incorrect behavior) and fix them. Skip
7575
| 099624061 | Get-DbaDbRestoreHistory - Add BackupStartDate, StopAt, and LastRestorePoint columns (#10249) | DONE | Fixed LastRestorePoint so StopAt is used whenever specified; added unit regression test. |
7676
| 4f1e56ce4 | New-DbaDbMailAccount, Set-DbaDbMailAccount - Add Port, SSL, and authentication parameters (#10257) | DONE | Added validation to reject conflicting SMTP authentication modes and incomplete credential pairs; added unit regression tests. |
7777
| 8218d327e | Restore-DbaDatabase, Invoke-DbaAdvancedRestore - Add ErrorBrokerConversations parameter (#10253) | DONE | Fixed missing ExecuteAs script prefix and added NoRecovery/Standby validation; added regression tests. |
78-
| 9a4e4bacb | Connect-DbaInstance - Set NonPooledConnection on ServerConnection (#10260) | PENDING | |
78+
| 9a4e4bacb | Connect-DbaInstance - Set NonPooledConnection on ServerConnection (#10260) | DONE | Fixed AccessToken regression by skipping a redundant NonPooledConnection assignment on SqlConnection-backed contexts; added unit regression test. |
7979
| a0ab78a66 | Get-DbaCmObject - Apply CimOperationTimeout to all CIM connections (#10252) | PENDING | |
8080
| fbdb47053 | Import-DbaXESessionTemplate - Add event_file target when TargetFilePath specified (#10250) | PENDING | |
8181
| 3d6fa113f | Connect-DbaInstance - Trust server certificate for localhost DAC connections (#10263) | PENDING | |

public/Connect-DbaInstance.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ function Connect-DbaInstance {
11261126
}
11271127
Write-Message -Level Debug -Message "Setting ConnectionContext.StatementTimeout to '$StatementTimeout'"
11281128
$server.ConnectionContext.StatementTimeout = $StatementTimeout
1129-
if ($NonPooledConnection) {
1129+
if ($NonPooledConnection -and -not $server.ConnectionContext.NonPooledConnection) {
11301130
Write-Message -Level Debug -Message "Setting ConnectionContext.NonPooledConnection to 'True'"
11311131
$server.ConnectionContext.NonPooledConnection = $true
11321132
}
@@ -1366,4 +1366,4 @@ function Connect-DbaInstance {
13661366
Write-Message -Level Debug -Message "We are finished with this instance"
13671367
}
13681368
}
1369-
}
1369+
}

tests/Connect-DbaInstance.Tests.ps1

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,66 @@ Describe $CommandName -Tag UnitTests {
137137
$result.ConnectionString | Should -Match "Initial Catalog=master"
138138
}
139139
}
140+
141+
Context "Access token connection behavior" {
142+
BeforeAll {
143+
function New-MockAccessTokenServer {
144+
$sqlConnectionObject = [PSCustomObject]@{
145+
ConnectionString = "Data Source=sqltoken;Integrated Security=True"
146+
}
147+
$connectionContext = [PSCustomObject]@{
148+
ConnectionString = $sqlConnectionObject.ConnectionString
149+
SqlConnectionObject = $sqlConnectionObject
150+
StatementTimeout = 0
151+
}
152+
153+
Add-Member -InputObject $connectionContext -Name NonPooledConnection -MemberType ScriptProperty -Value {
154+
$true
155+
} -SecondValue {
156+
param($value)
157+
$script:nonPooledConnectionSetterCalls++
158+
throw "Property NonPooledConnection cannot be changed or read after a connection string has been set."
159+
} -Force
160+
161+
Add-Member -InputObject $connectionContext -Name ExecuteWithResults -MemberType ScriptMethod -Value {
162+
param($Query)
163+
} -Force
164+
165+
[PSCustomObject]@{
166+
ConnectionContext = $connectionContext
167+
}
168+
}
169+
170+
Mock Add-ConnectionHashValue { } -ModuleName dbatools
171+
Mock New-Object {
172+
[PSCustomObject]@{
173+
ConnectionString = "Data Source=sqltoken;Integrated Security=True"
174+
AccessToken = $null
175+
}
176+
} -ModuleName dbatools -ParameterFilter {
177+
$TypeName -eq "Microsoft.Data.SqlClient.SqlConnection"
178+
}
179+
Mock New-Object {
180+
[PSCustomObject]@{ }
181+
} -ModuleName dbatools -ParameterFilter {
182+
$TypeName -eq "Microsoft.SqlServer.Management.Common.ServerConnection"
183+
}
184+
Mock New-Object {
185+
New-MockAccessTokenServer
186+
} -ModuleName dbatools -ParameterFilter {
187+
$TypeName -eq "Microsoft.SqlServer.Management.Smo.Server"
188+
}
189+
}
190+
191+
It "does not reapply NonPooledConnection when AccessToken already uses a SqlConnection" {
192+
$script:nonPooledConnectionSetterCalls = 0
193+
194+
$result = Connect-DbaInstance -SqlInstance "sqltoken" -AccessToken "token" -NonPooledConnection -SqlConnectionOnly
195+
196+
$result.ConnectionString | Should -Be "Data Source=sqltoken;Integrated Security=True"
197+
$script:nonPooledConnectionSetterCalls | Should -Be 0
198+
}
199+
}
140200
}
141201

142202
Describe $CommandName -Tag IntegrationTests {
@@ -396,4 +456,4 @@ Describe $CommandName -Tag IntegrationTests {
396456
$null = $server | Disconnect-DbaInstance
397457
}
398458
}
399-
}
459+
}

0 commit comments

Comments
 (0)