Tests/FirebirdDatabase.Tests.ps1
|
Import-Module "$PSScriptRoot/../PSFirebird.psd1" -Force BeforeDiscovery { $script:FirebirdVersions = @( '3.0.12', '4.0.5', '5.0.2' ) } BeforeAll { # Helper function to check if a database is locked function Get-FirebirdDatabaseLocked( [FirebirdDatabase]$Database, [FirebirdEnvironment]$Environment ) { $info = Read-FirebirdDatabase -Database $Database -Environment $Environment return $info['MON$BACKUP_STATE'] -ne 0 } } Describe 'FirebirdDatabase' -ForEach $FirebirdVersions { BeforeAll { $script:FirebirdVersion = $_ # Create a temporary folder for the test files $script:RootFolder = New-Item -ItemType Directory -Path ([System.IO.Path]::GetTempPath()) -Name (New-Guid) $script:TestEnvironment = New-FirebirdEnvironment -Version $FirebirdVersion $script:TestDatabasePath = "$RootFolder/$FirebirdVersion-tests.fdb" # Set up the environment variables for Firebird $env:ISC_USER = 'SYSDBA' $env:ISC_PASSWORD = 'masterkey' } AfterAll { # Remove the test folder Remove-Item -Path $RootFolder -Recurse -Force -ErrorAction SilentlyContinue } BeforeEach { # Ensure the test database does not exist before each test if (Test-Path $TestDatabasePath) { Remove-Item -Path $TestDatabasePath -Recurse -Force -ErrorAction SilentlyContinue } } It 'Create database with default parameters' { $TestDatabasePath | Should -Not -Exist $testDatabase = New-FirebirdDatabase -Database $TestDatabasePath -Environment $TestEnvironment $testDatabase.Path | Should -Be $TestDatabasePath $testDatabase.Path | Should -Exist } It 'Create database with context environment' { Use-FirebirdEnvironment -Environment $TestEnvironment { $TestDatabasePath | Should -Not -Exist $testDatabase = New-FirebirdDatabase -Database $TestDatabasePath $testDatabase.Path | Should -Be $TestDatabasePath $testDatabase.Path | Should -Exist } } It 'Read database information' { $TestDatabasePath | Should -Not -Exist $testDatabase = New-FirebirdDatabase -Database $TestDatabasePath -PageSize 4096 -Environment $TestEnvironment $TestDatabasePath | Should -Exist $info = Read-FirebirdDatabase -Database $testDatabase -Environment $TestEnvironment $info.Environment | Should -BeOfType FirebirdEnvironment $info.Database | Should -Be $TestDatabase $info['MON$PAGE_SIZE'] | Should -Be 4096 } It 'Lock database' { $TestDatabasePath | Should -Not -Exist $testDatabase = New-FirebirdDatabase -Database $TestDatabasePath -Environment $TestEnvironment $TestDatabasePath | Should -Exist Get-FirebirdDatabaseLocked -Database $TestDatabase -Environment $TestEnvironment | Should -BeFalse Lock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment Get-FirebirdDatabaseLocked -Database $TestDatabase -Environment $TestEnvironment | Should -BeTrue { Lock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment } | Should -Throw 'Database is already locked for backup.' } It 'Unlock database' { $TestDatabasePath | Should -Not -Exist $testDatabase = New-FirebirdDatabase -Database $TestDatabasePath -Environment $TestEnvironment $TestDatabasePath | Should -Exist Lock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment Get-FirebirdDatabaseLocked -Database $TestDatabase -Environment $TestEnvironment | Should -BeTrue Unlock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment Get-FirebirdDatabaseLocked -Database $TestDatabase -Environment $TestEnvironment | Should -BeFalse { Unlock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment } | Should -Throw 'Database is not locked for backup.' } It 'Unlock fixes missing .delta file' { $TestDatabasePath | Should -Not -Exist $testDatabase = New-FirebirdDatabase -Database $TestDatabasePath -Environment $TestEnvironment $TestDatabasePath | Should -Exist Lock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment Get-FirebirdDatabaseLocked -Database $TestDatabase -Environment $TestEnvironment | Should -BeTrue # Simulate missing .delta file by removing it $deltaFile = "$($TestDatabasePath).delta" Remove-Item -Path $deltaFile -Force Unlock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment Get-FirebirdDatabaseLocked -Database $TestDatabase -Environment $TestEnvironment | Should -BeFalse { Unlock-FirebirdDatabase -Database $TestDatabase -Environment $TestEnvironment } | Should -Throw 'Database is not locked for backup.' } } |