Skip to content

Commit b95fb6a

Browse files
committed
Validate usage of StopAtMarkAfterDate and StopBeforeMarkAfterDate parameters in Restore-SqlDscDatabase
1 parent 65ea407 commit b95fb6a

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

source/Public/Restore-SqlDscDatabase.ps1

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,9 @@ function Restore-SqlDscDatabase
368368
NotAllowedList = @(
369369
'ToPointInTime'
370370
'StopAtMarkName'
371+
'StopAtMarkAfterDate'
371372
'StopBeforeMarkName'
373+
'StopBeforeMarkAfterDate'
372374
)
373375
IfParameterPresent = @{
374376
RestoreType = $RestoreType
@@ -378,6 +380,23 @@ function Restore-SqlDscDatabase
378380
Assert-BoundParameter @assertBoundParameterParameters
379381
}
380382

383+
# Validate that AfterDate parameters are only used with their corresponding mark name parameters
384+
$assertBoundParameterParameters = @{
385+
BoundParameterList = $PSBoundParameters
386+
RequiredParameter = @('StopAtMarkName')
387+
IfParameterPresent = @('StopAtMarkAfterDate')
388+
}
389+
390+
Assert-BoundParameter @assertBoundParameterParameters
391+
392+
$assertBoundParameterParameters = @{
393+
BoundParameterList = $PSBoundParameters
394+
RequiredParameter = @('StopBeforeMarkName')
395+
IfParameterPresent = @('StopBeforeMarkAfterDate')
396+
}
397+
398+
Assert-BoundParameter @assertBoundParameterParameters
399+
381400
$descriptionMessage = $script:localizedData.Restore_SqlDscDatabase_ShouldProcessVerboseDescription -f $restoreTypeDescription, $Name, $BackupFile, $ServerObject.InstanceName
382401
$confirmationMessage = $script:localizedData.Restore_SqlDscDatabase_ShouldProcessVerboseWarning -f $restoreTypeDescription, $Name
383402
$captionMessage = $script:localizedData.Restore_SqlDscDatabase_ShouldProcessCaption

tests/Unit/Public/Restore-SqlDscDatabase.Tests.ps1

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,26 @@ Describe 'Restore-SqlDscDatabase' -Tag 'Public' {
140140
{ Restore-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -BackupFile 'C:\Backups\Test.bak' -RestoreType 'Files' -StopBeforeMarkName 'MyMark' -Force } |
141141
Should -Throw -ExpectedMessage "*The parameter(s) 'StopBeforeMarkName' are not allowed to be specified*" -ErrorId 'Parameters,New-ArgumentException'
142142
}
143+
144+
It 'Should throw error when StopAtMarkAfterDate is used with Full restore' {
145+
{ Restore-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -BackupFile 'C:\Backups\Test.bak' -RestoreType 'Full' -StopAtMarkAfterDate '2024-01-15T14:30:00' -Force } |
146+
Should -Throw -ExpectedMessage "*The parameter(s) 'StopAtMarkAfterDate' are not allowed to be specified*" -ErrorId 'Parameters,New-ArgumentException'
147+
}
148+
149+
It 'Should throw error when StopBeforeMarkAfterDate is used with Differential restore' {
150+
{ Restore-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -BackupFile 'C:\Backups\Test.bak' -RestoreType 'Differential' -StopBeforeMarkAfterDate '2024-01-15T14:30:00' -Force } |
151+
Should -Throw -ExpectedMessage "*The parameter(s) 'StopBeforeMarkAfterDate' are not allowed to be specified*" -ErrorId 'Parameters,New-ArgumentException'
152+
}
153+
154+
It 'Should throw error when StopAtMarkAfterDate is used without StopAtMarkName' {
155+
{ Restore-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -BackupFile 'C:\Backups\Test.trn' -RestoreType 'Log' -StopAtMarkAfterDate '2024-01-15T14:30:00' -Force } |
156+
Should -Throw -ExpectedMessage "*'StopAtMarkName'*must*all be specified*" -ErrorId 'ARCP0001,Assert-RequiredCommandParameter'
157+
}
158+
159+
It 'Should throw error when StopBeforeMarkAfterDate is used without StopBeforeMarkName' {
160+
{ Restore-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -BackupFile 'C:\Backups\Test.trn' -RestoreType 'Log' -StopBeforeMarkAfterDate '2024-01-15T14:30:00' -Force } |
161+
Should -Throw -ExpectedMessage "*'StopBeforeMarkName'*must*all be specified*" -ErrorId 'ARCP0001,Assert-RequiredCommandParameter'
162+
}
143163
}
144164

145165
Context 'When performing successful restores' {

0 commit comments

Comments
 (0)