. $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"} } } }