diff --git a/collectors/veeam/MockVeeam.ps1 b/collectors/veeam/MockVeeam.ps1 deleted file mode 100644 index 28ad26e..0000000 --- a/collectors/veeam/MockVeeam.ps1 +++ /dev/null @@ -1,65 +0,0 @@ -# Stand-ins for the Veeam cmdlets, shaped like the real objects' properties the collector reads. -# Dot-source this before running the collector to try it without a VBR server: -# -# . ./tests/MockVeeam.ps1 -# ./Send-VeeamBackupStatus.ps1 -ConfigPath ./tests/config.json -DryRun - -# Fixed to the top of the hour, and IDs derived from names/times, so repeated runs see the same -# jobs and sessions, like a real server -$now = Get-Date -Minute 0 -Second 0 -Millisecond 0 -function New-StableGuid([string]$Seed) { - [guid]::new([Security.Cryptography.MD5]::Create().ComputeHash([Text.Encoding]::UTF8.GetBytes($Seed))) -} -$notSet = Get-Date '1900-01-01' - -function New-MockJob($Name, $Type, $NextRun, [bool]$Enabled = $true) { - [pscustomobject]@{ - Id = New-StableGuid $Name; Name = $Name; JobType = $Type - IsScheduleEnabled = $Enabled - ScheduleOptions = [pscustomobject]@{ NextRun = $NextRun } - } -} - -function New-MockSession($Job, $Start, $End, $State, $Result, $Reason = '', $Tasks = @(), $LogRecords = @(), $Size = 0) { - $s = [pscustomobject]@{ - Id = New-StableGuid "$($Job.Name)|$($Start.Ticks)"; JobId = $Job.Id; JobName = $Job.Name - CreationTime = $Start; EndTime = $End; State = $State; Result = $Result - IsRetryMode = $false - Info = [pscustomobject]@{ Reason = $Reason } - BackupStats = [pscustomobject]@{ BackupSize = $Size; DataSize = $Size * 3 } - Logger = [pscustomobject]@{ Records = $LogRecords } - Tasks = $Tasks - } - $s.Logger | Add-Member ScriptMethod GetLog { [pscustomobject]@{ UpdatedRecords = $this.Records } } - $s | Add-Member ScriptMethod GetTaskSessions { $this.Tasks } - $s -} - -function New-MockTask($Name, $Status, $Reason = '') { - [pscustomobject]@{ Name = $Name; Status = $Status; Info = [pscustomobject]@{ Reason = $Reason } } -} - -$global:MockJobs = @( - (New-MockJob 'File Server – Nightly' 'Backup' $now.Date.AddDays(1).AddHours(22)), - # Older VBR versions return NextRun as a culture-formatted string - (New-MockJob 'SQL01 – Logs' 'Backup' $now.AddMinutes(40).ToString()), - (New-MockJob 'Offsite Copy' 'BackupSync' $null), - (New-MockJob 'Old Exchange' 'Backup' $now.AddDays(1) $false) -) -$fs, $sql, $copy, $old = $global:MockJobs - -$global:MockSessions = @( - (New-MockSession $fs $now.AddDays(-1).AddHours(-2) $now.AddDays(-1).AddHours(-1) 'Stopped' 'Success' -Size 128GB -Tasks @( - (New-MockTask 'FS01' 'Success'), (New-MockTask 'FS02' 'Success'))), - (New-MockSession $fs $now.AddMinutes(-20) $notSet 'Working' 'None' -Tasks @((New-MockTask 'FS01' 'InProgress'))), - (New-MockSession $sql $now.AddHours(-1) $now.AddMinutes(-55) 'Stopped' 'Warning' -Size 2GB ` - -Tasks @((New-MockTask 'SQL01' 'Warning' 'Failed to truncate transaction logs for database "ERP_PROD"'))), - (New-MockSession $copy $now.AddHours(-5) $now.AddHours(-4) 'Stopped' 'Failed' 'Error: Unable to connect to repository NAS02' ` - -LogRecords @( - [pscustomobject]@{ Title = 'Preparing backup chain'; Status = 'ESucceeded' }, - [pscustomobject]@{ Title = 'Network path not found (0x80070035)'; Status = 'EFailed' })), - (New-MockSession $old $now.AddDays(-10) $now.AddDays(-10).AddHours(1) 'Stopped' 'Success') # outside 48h lookback -) - -function Get-VBRJob { [CmdletBinding()] param() $global:MockJobs } -function Get-VBRBackupSession { [CmdletBinding()] param() $global:MockSessions }