ps/Modules/Alkami.PowerShell.Common/Public/Move-LogsAndDeleteDotNetTemps.tests.ps1

223 lines
12 KiB
PowerShell
Raw Permalink Normal View History

2023-05-30 22:51:22 -07:00
. $PSScriptRoot\..\..\Load-PesterModules.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
$functionPath = Join-Path -Path $here -ChildPath $sut
Write-Host "Overriding SUT: $functionPath"
Import-Module $functionPath -Force
$moduleForMock = ""
Describe "Move-LogsAndDeleteDotNetTemps" {
# CODEPATH: ALWAYS
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_Default]"}
# CODEPATH: No LogDirectory param
Mock -ModuleName $moduleForMock -CommandName Get-OrbLogsPath -MockWith {return "C:\temp\OrbLogs"}
# CODEPATH: FAB
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $false}
# CODEPATH: Not FAB AND (No running Alkami workers OR forceRecycle)
# CONDITION: Backwards logic. $true means there are NOT any alkami worker processes running
Mock -ModuleName $moduleForMock -CommandName Search-ForRunningWorkerProcesses -MockWith {return $true}
# ACTION: Remove dotnet temps
Mock -ModuleName $moduleForMock -CommandName Remove-DotNetTemporaryFiles -MockWith {}
# ACTION: Either backup logs or remove logs
# Backup
Mock -ModuleName $moduleForMock -CommandName Backup-AlkamiLogs -MockWith {}
# Remove
Mock -ModuleName $moduleForMock -CommandName Remove-ORBLogFiles -MockWith {}
# ACTION: Choco cleanup
Mock -ModuleName $moduleForMock -CommandName Get-ChocolateyInstallPath -MockWith {return "C:\temp\choco"}
Mock -ModuleName $moduleForMock -CommandName Backup-LogFiles -MockWith {}
Mock -ModuleName $moduleForMock -CommandName Remove-OldArchivedLogFiles -MockWith {}
# CODEPATH: Not FAB AND (EITHER running Alkami workers OR forceRecycle)
# ACTION: Just warn
Mock -ModuleName $moduleForMock -CommandName Write-Warning -MockWith {}
# NOTE: Mocks for Get-LogLeadName are left in below to enable easy test debugging in the future.
# You can just comment out this Mock for Write-Warning and start getting (some) warnings
# with test-specific $logLeads allowing you to see which codepath you are (supposed to be) on.
Context "Parameters_And_Codepaths" {
It "Get_LogLead" {
Move-LogsAndDeleteDotNetTemps
Assert-MockCalled -CommandName Get-LogLeadName -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
}
It "Get_GetOrbLogsPath_If_LogDirectory_Omitted" {
Move-LogsAndDeleteDotNetTemps
Assert-MockCalled -CommandName Get-OrbLogsPath -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
}
It "Skip_GetOrbLogsPath_If_LogDirectory_Passed" {
Move-LogsAndDeleteDotNetTemps -LogDirectory "C:\Temp\NotOrbLogs"
Assert-MockCalled -CommandName Get-OrbLogsPath -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
}
It "FabHost_Defaults_DeleteLogsSkipActive" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_Fab_Default]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_Fab_Default]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $true}
Move-LogsAndDeleteDotNetTemps
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$SkipActiveLogs -eq $true}
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
}
It "FabHost_ArchiveLogFilesFlag_ArchiveLogsSkipActive" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_Fab_ArchiveLogFiles]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_Fab_ArchiveLogFiles]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $true}
Move-LogsAndDeleteDotNetTemps -ArchiveLogFiles
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$SkipActiveLogs -eq $true}
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
}
It "NonFabHost_NoAlkamiServicesRunning_NoForceRecycle_Defaults_DeleteLogs_DeleteDotNetTemps_ArchiveAndCleanChocoLogs" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_Default]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_Default]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $false}
Mock -ModuleName $moduleForMock -CommandName Search-ForRunningWorkerProcesses -MockWith {return $true}
Move-LogsAndDeleteDotNetTemps -ForceRecycle:$false
Assert-MockCalled -CommandName Remove-DotNetTemporaryFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$SkipActiveLogs -eq $false}
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
Assert-MockCalled -CommandName Backup-LogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$logDirectory -eq "c:\temp\choco\logs"}
Assert-MockCalled -CommandName Remove-OldArchivedLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$archiveDirectory -eq "c:\temp\choco\logs\Archive"}
}
It "NonFabHost_ArchiveLogFilesFlag_NoAlkamiServicesRunning_NoForceRecycle_ArchiveLogs_DeleteDotNetTemps_ArchiveAndCleanChocoLogs" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_Default]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_Default]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $false}
Mock -ModuleName $moduleForMock -CommandName Search-ForRunningWorkerProcesses -MockWith {return $true}
Move-LogsAndDeleteDotNetTemps -ForceRecycle:$false -ArchiveLogFiles
Assert-MockCalled -CommandName Remove-DotNetTemporaryFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$SkipActiveLogs -eq $false}
Assert-MockCalled -CommandName Backup-LogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$logDirectory -eq "c:\temp\choco\logs"}
Assert-MockCalled -CommandName Remove-OldArchivedLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$archiveDirectory -eq "c:\temp\choco\logs\Archive"}
}
It "NonFabHost_AlkamiServicesRunning_NoForceRecycle_WarnOnly" {
Mock -ModuleName $moduleForMock -CommandName Write-Warning -MockWith {} `
-ParameterFilter {$Message -match "Cannot continue"}
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_ServicesRunning]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_ServicesRunning]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $false}
Mock -ModuleName $moduleForMock -CommandName Search-ForRunningWorkerProcesses -MockWith {return $false}
Move-LogsAndDeleteDotNetTemps
Assert-MockCalled -CommandName Remove-DotNetTemporaryFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly -ParameterFilter {$SkipActiveLogs -eq $false}
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
Assert-MockCalled -CommandName Backup-LogFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly -ParameterFilter {$logDirectory -eq "c:\temp\choco\logs"}
Assert-MockCalled -CommandName Remove-OldArchivedLogFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly -ParameterFilter {$archiveDirectory -eq "c:\temp\choco\logs\Archive"}
Assert-MockCalled -CommandName Write-Warning -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$Message -match "Alkami worker processes are still running"}
}
It "NonFabHost_NoAlkamiServicesRunning_ForceRecycle_Defaults_DeleteLogs_DeleteDotNetTemps_ArchiveAndCleanChocoLogs" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_NoServicesRunning]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_NoServicesRunning]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $false}
Mock -ModuleName $moduleForMock -CommandName Search-ForRunningWorkerProcesses -MockWith {return $true}
Move-LogsAndDeleteDotNetTemps -forceRecycle
Assert-MockCalled -CommandName Remove-DotNetTemporaryFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$SkipActiveLogs -eq $false}
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly
Assert-MockCalled -CommandName Backup-LogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$logDirectory -eq "c:\temp\choco\logs"}
Assert-MockCalled -CommandName Remove-OldArchivedLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$archiveDirectory -eq "c:\temp\choco\logs\Archive"}
}
It "NonFabHost_ArchiveLogFilesFlag_NoAlkamiServicesRunning_ForceRecycle_ArchiveLogs_DeleteDotNetTemps_ArchiveAndCleanChocoLogs" {
Mock -ModuleName $moduleForMock -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_NoServicesRunning]"}
Mock -ModuleName Alkami.DevOps.Operations -CommandName Get-LogLeadName -MockWith {return "[UnitTest_NonFab_NoServicesRunning]"}
Mock -ModuleName $moduleForMock -CommandName Test-IsServiceFabricServer -MockWith {return $false}
Mock -ModuleName $moduleForMock -CommandName Search-ForRunningWorkerProcesses -MockWith {return $true}
Move-LogsAndDeleteDotNetTemps -forceRecycle -ArchiveLogFiles
Assert-MockCalled -CommandName Remove-DotNetTemporaryFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
Assert-MockCalled -CommandName Remove-ORBLogFiles -ModuleName $moduleForMock -Scope It `
-Times 0 -Exactly -ParameterFilter {$SkipActiveLogs -eq $false}
Assert-MockCalled -CommandName Backup-AlkamiLogs -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly
Assert-MockCalled -CommandName Backup-LogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$logDirectory -eq "c:\temp\choco\logs"}
Assert-MockCalled -CommandName Remove-OldArchivedLogFiles -ModuleName $moduleForMock -Scope It `
-Times 1 -Exactly -ParameterFilter {$archiveDirectory -eq "c:\temp\choco\logs\Archive"}
}
}
}