tests/Get-FilteredRestoreFile.Tests.ps1
$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1","") Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan . "$PSScriptRoot\constants.ps1" Describe "$commandname Unit Tests" -Tag 'UnitTests' { InModuleScope dbatools { Context "Empty TLog Backup Issues" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\EmptyTlogData.json -raw) Mock Read-DbaBackupHeader { $Header } $Output = Get-FilteredRestoreFile -SqlServer TestSQL -Files "c:\dummy.txt" -EnableException:$true It "Should return an array of 3 items" { $Output[0].values.count | Should be 3 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 0 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 0 } It "Should return 2 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 2 } } Context "General Diff Restore" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\DiffRestore.json -raw) Mock Read-DbaBackupHeader { $Header } $Output = Get-FilteredRestoreFile -SqlServer 'TestSQL' -Files "c:\dummy.txt" It "Should return an array of 7 items" { $Output[0].values.count | Should be 7 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 1 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 1 } It "Should return 5 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 5 } } Context "Server/database names and file paths have commas and spaces" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\RestoreCommaIssues.json -raw) Mock Read-DbaBackupHeader { $Header } $Output = Get-FilteredRestoreFile -SqlServer 'TestSQL\Testinstance,12345' -Files "c:\dumm,y.txt" It "Should return an array of 7 items" { $Output[0].values.count | Should be 7 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 1 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 1 } It "Should return 5 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 5 } } Context "Missing Diff Restore" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\DiffRestore.json -raw) $header = $header | Where-Object { $_.BackupTypeDescription -ne 'Database Differential' } Mock Read-DbaBackupHeader { $Header } $Output = Get-FilteredRestoreFile -SqlServer 'TestSQL' -Files "c:\dummy.txt" $Output It "Should return an array of 9 items" { $Output[0].values.count | Should be 9 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 0 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 0 } It "Should return 8 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 8 } } Context "Overlapping Diff and log Restore" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\DiffIssues.json -raw) Mock Read-DbaBackupHeader { $Header } $RestoreDate = Get-date "2017-07-18 09:00:00" $Output = Get-FilteredRestoreFile -SqlServer 'TestSQL' -Files "c:\dummy.txt" -RestoreTime $RestoreDate $Output It "Should return an array of 193 items" { $Output[0].values.count | Should be 194 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 1 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 1 } It "Should return 192 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 192 } It "Should not contain the Log backup with LastLsn 17126786000011867500001 " { ($Output[0].values | Where-Object { $_.LastLsn -eq '17126786000011867500001' } | Measure-Object).count | Should Be 0 } } Context "When FirstLSN ne CheckPointLsn" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\chkptLSN-ne-firstLSN.json -raw) Mock Read-DbaBackupHeader { $Header } $RestoreDate = Get-date "2017-07-18 09:00:00" $Output = Get-FilteredRestoreFile -SqlServer 'TestSQL' -Files "c:\dummy.txt" -RestoreTime $RestoreDate $Output It "Should return an array of 193 items" { $Output[0].values.count | Should be 194 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 1 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 1 } It "Should return 191 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 192 } It "Should not contain the Log backup with LastLsn 17126786000011867500001 " { ($Output[0].values | Where-Object { $_.LastLsn -eq '17126786000011867500001' } | Measure-Object).count | Should Be 0 } } Context "When TLogs between full's FirstLsn and LastLsn" { $Header = ConvertFrom-Json -InputObject (Get-Content $PSScriptRoot\..\tests\ObjectDefinitions\BackupRestore\RawInput\TLogBWFirstLastLsn.json -raw) Mock Read-DbaBackupHeader { $Header } $RestoreDate = Get-date "2017-07-18 09:00:00" $Output = Get-FilteredRestoreFile -SqlServer 'TestSQL' -Files "c:\dummy.txt" -RestoreTime $RestoreDate $Output It "Should return an array of 3 items" { $Output[0].values.count | Should be 3 } It "Should return 1 Full backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database' } | Measure-Object).count | Should Be 1 } It "Should return 0 Diff backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Database Differential' } | Measure-Object).count | Should Be 0 } It "Should return 2 log backups" { ($Output[0].values | Where-Object { $_.BackupTypeDescription -eq 'Transaction Log' } | Measure-Object).count | Should Be 2 } It "Should not contain the Log backup with LastLsn 14975000000265600001 " { ($Output[0].values | Where-Object { $_.LastLsn -eq '14975000000265600001' } | Measure-Object).count | Should Be 0 } } } } |