tests/functions/image/New-DcnImage.Tests.ps1
$commandname = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "") . "$PSScriptRoot\..\constants.ps1" Describe "$CommandName Unit Tests" -Tag 'UnitTests' { Context "Validate parameters" { [object[]]$params = (Get-ChildItem Function:\New-DcnImage).Parameters.Keys $knownParameters = 'SourceSqlInstance', 'SourceSqlCredential', 'SourceCredential', 'DestinationSqlInstance', 'DestinationSqlCredential', 'DestinationCredential', 'DcnSqlCredential', 'Database', 'ImageNetworkPath', 'ImageLocalPath', 'VhdType', 'CreateFullBackup', 'UseLastFullBackup', 'CopyOnlyBackup', 'MaskingFile', 'Force', 'EnableException' It "Should contain our specific parameters" { ( (Compare-Object -ReferenceObject $knownParameters -DifferenceObject $params -IncludeEqual | Where-Object SideIndicator -eq "==").Count ) | Should Be $knownParameters.Count } } } Describe "$CommandName Integration Tests" -Tag "IntegrationTests" { BeforeAll { if (-not (Test-Path -Path $script:imagefolder)) { New-Item -Path $script:imagefolder -ItemType Directory } $sourceServer = Connect-DbaInstance -SqlInstance $script:sourcesqlinstance if ($sourceServer.Databases.Name -notcontains $script:database) { $query = "CREATE DATABASE $($script:database)" $sourceServer.Query($query) Invoke-DbaQuery -SqlInstance $script:sourcesqlinstance -Database $script:database -File "$($PSScriptRoot)\..\database.sql" } $null = Set-DcnConfiguration -InformationStore File -Path $script:workingfolder -Force -EnableException if (-not (Get-SmbShare -Name $script:dclshare -ErrorAction SilentlyContinue)) { New-SMBShare -Name $script:dclshare -Path $script:workingfolder -FullAccess Everyone } } Context "Create an image with full backup" { $destServer = Connect-DbaInstance -SqlInstance $script:destinationsqlinstance $params = @{ SourceSqlInstance = $script:sourcesqlinstance DestinationSqlInstance = $script:destinationsqlinstance Database = $script:database ImageNetworkPath = "\\127.0.0.1\$($script:dclshare)\$($script:images)" CreateFullBackup = $true } $image = New-DcnImage @params It "Image object cannot be null" { $image | Should -Not -Be $null } It "Image path should exist" { Test-Path -Path $image.ImageLocation | Should -Be $true } $null = Remove-Item -Path $image.ImageLocation -Force } Context "Create image with defaults and an existing backup" { # Create the backup Backup-DbaDatabase -SqlInstance $script:sourcesqlinstance -Database $script:database # Create the image with the last backup $params = @{ SourceSqlInstance = $script:sourcesqlinstance DestinationSqlInstance = $script:destinationsqlinstance Database = $script:database ImageNetworkPath = "\\127.0.0.1\$($script:dclshare)\$($script:images)" UseLastFullBackup = $true } $image = New-DcnImage @params It "Image object cannot be null" { $image | Should -Not -Be $null } It "Image Path Should exist" { Test-Path -Path $image.ImageLocation | Should -Be $true } $null = Remove-Item -Path $image.ImageLocation -Force } AfterAll { if ($sourceServer.Databases.Name -contains $script:database) { $null = Remove-DbaDatabase -SqlInstance $script:sourcesqlinstance -Database $script:database -Confirm:$false } if ($destServer.Databases.Name -contains $script:database) { $null = Remove-DbaDatabase -SqlInstance $script:destinationsqlinstance -Database $script:database -Confirm:$false } if ((Get-SmbShare -Name $script:dclshare -ErrorAction SilentlyContinue)) { Remove-SmbShare -Name $script:dclshare -Confirm:$false } } } |