Skip to content

Commit d699697

Browse files
Set-DbaNetworkCertificate - Fix restart credential passthrough (review of #10232)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8e9adfc commit d699697

3 files changed

Lines changed: 69 additions & 4 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ Find real bugs (logic errors, null refs, incorrect behavior) and fix them. Skip
117117
| fb94490d9 | Install-DbaMaintenanceSolution - Fix AutoScheduleJobs schedule bugs (#10303) | DONE | Added AutoScheduleJobs validation for -InstallJobs and exactly one full schedule; added unit regression tests. |
118118
| 45e46e6ae | Copy-DbaAgentJob - Add AD group membership check for job owner login validation (#10297) | DONE | Reviewed AD group membership owner validation; no bugs found. |
119119
| daa4e306e | Invoke-DbaBalanceDataFiles - Add -TargetFileGroup parameter (#10296) | PENDING | |
120-
| 02ad1f092 | ConvertTo-DbaTimeline - Add support for Find-DbaDbGrowthEvent input (#10304) | DONE | Escaped growth-event database names before emitting JavaScript timeline rows; added unit regression coverage. |
121-
| 8987045a9 | Refactor Set-DbaNetworkCertificate (#10232) | PENDING | |
120+
| 02ad1f092 | ConvertTo-DbaTimeline - Add support for Find-DbaDbGrowthEvent input (#10304) | DONE | Escaped growth-event database names before emitting JavaScript timeline rows; added unit regression coverage. |
121+
| 8987045a9 | Refactor Set-DbaNetworkCertificate (#10232) | DONE | Passed Credential to Restart-DbaService when -RestartService is used; added unit regression coverage. |
122122
| 392fc9dea | Set-DbaDbCompression, Invoke-DbaBalanceDataFiles, Invoke-DbaDbPiiScan - Normalize table names via Get-ObjectNameParts (#10312) | PENDING | |
123123
| b2f217f47 | Invoke-TlsWebRequest - Auto-detect system proxy (#10310) | PENDING | |
124124
| 1662d73a6 | New-DbaDatabase - Support Azure Blob Storage paths for data and log files (#10315) | PENDING | |

public/Set-DbaNetworkCertificate.ps1

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,16 @@ function Set-DbaNetworkCertificate {
354354
if ($RestartService) {
355355
Write-ProgressHelper -StepNumber ($stepCounter++) -Message "Restarting SQL Server service for $instance"
356356
try {
357-
$null = Restart-DbaService -SqlInstance $instance -Type Engine -Force -EnableException
357+
$splatRestartService = @{
358+
SqlInstance = $instance
359+
Type = "Engine"
360+
Force = $true
361+
EnableException = $true
362+
}
363+
if ($Credential) {
364+
$splatRestartService.Credential = $Credential
365+
}
366+
$null = Restart-DbaService @splatRestartService
358367
} catch {
359368
$notes = "Failed to restart service"
360369
Write-Message -Level Warning -Message "$notes for instance $instance."

tests/Set-DbaNetworkCertificate.Tests.ps1

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Requires -Module @{ ModuleName="Pester"; ModuleVersion="5.0" }
22
param(
3-
$ModuleName = "dbatools",
3+
$ModuleName = "dbatools",
44
$CommandName = "Set-DbaNetworkCertificate",
55
$PSDefaultParameterValues = $TestConfig.Defaults
66
)
@@ -22,6 +22,62 @@ Describe $CommandName -Tag UnitTests {
2222
Compare-Object -ReferenceObject $expectedParameters -DifferenceObject $hasParameters | Should -BeNullOrEmpty
2323
}
2424
}
25+
26+
InModuleScope dbatools {
27+
Context "RestartService" {
28+
BeforeEach {
29+
$script:serviceCredential = New-Object System.Management.Automation.PSCredential(
30+
"sql1\svc-sql",
31+
(ConvertTo-SecureString "Password123!" -AsPlainText -Force)
32+
)
33+
$script:certificateThumbprint = "0123456789ABCDEF0123456789ABCDEF01234567"
34+
35+
Mock Test-FunctionInterrupt { $false }
36+
Mock Test-DbaNetworkCertificate {
37+
[PSCustomObject]@{
38+
ComputerName = "sql1"
39+
InstanceName = "MSSQLSERVER"
40+
SqlInstance = "sql1"
41+
ConfiguredCertificateThumbprint = $null
42+
ConfiguredCertificateValid = $false
43+
SuitableCertificateAvailable = $true
44+
SuitableCertificateCount = 1
45+
SuitableCertificates = [PSCustomObject]@{
46+
Thumbprint = $script:certificateThumbprint
47+
}
48+
}
49+
}
50+
Mock Invoke-Command2 {
51+
[PSCustomObject]@{
52+
Verbose = @()
53+
Exception = $null
54+
ServiceAccount = "sql1\svc-sql"
55+
}
56+
}
57+
Mock Restart-DbaService { }
58+
}
59+
60+
It "passes Credential to Restart-DbaService when RestartService is used" {
61+
$splatSetNetworkCertificate = @{
62+
SqlInstance = "sql1"
63+
Credential = $script:serviceCredential
64+
RestartService = $true
65+
Confirm = $false
66+
}
67+
68+
$result = Set-DbaNetworkCertificate @splatSetNetworkCertificate
69+
70+
$result.CertificateThumbprint | Should -Be $script:certificateThumbprint
71+
Assert-MockCalled -CommandName Restart-DbaService -Exactly 1 -Scope It -ModuleName dbatools -ParameterFilter {
72+
$SqlInstance.FullName -eq "sql1" -and
73+
$Credential -eq $script:serviceCredential -and
74+
$Type -eq "Engine" -and
75+
$Force -and
76+
$EnableException
77+
}
78+
}
79+
}
80+
}
2581
}
2682

2783
Describe $CommandName -Tag IntegrationTests {

0 commit comments

Comments
 (0)