private/Initialize-DeployOSDCloud.Tests.ps1
|
BeforeAll { . "$PSScriptRoot\Initialize-DeployOSDCloud.ps1" . "$PSScriptRoot\core-cache\Initialize-OSDCoreCache.ps1" . "$PSScriptRoot\core-driverpack\Initialize-ModuleCoreDriverPacks.ps1" . "$PSScriptRoot\core-driverpack\Get-OSDCoreModelDriversCacheObject.ps1" . "$PSScriptRoot\core-driverpack\Get-OSDCoreDriverPackCacheObject.ps1" . "$PSScriptRoot\core-driverpack\Test-OSDCoreDriverPackCloudObject.ps1" . "$PSScriptRoot\core-operatingsystem\Get-OSDCoreOperatingSystems.ps1" . "$PSScriptRoot\core-operatingsystem\Get-OSDCoreOperatingSystemCacheObject.ps1" . "$PSScriptRoot\core-operatingsystem\Test-OperatingSystemCloudObject.ps1" . "$PSScriptRoot\workflow\Initialize-OSDCloudWorkflowSettingsOS.ps1" . "$PSScriptRoot\workflow\Resolve-OSDCloudWorkflowOSActivation.ps1" . "$PSScriptRoot\workflow\Initialize-OSDCloudWorkflowTasks.ps1" $stateNames = @( 'OSDCoreDevice', 'OSDCloudDeploy', 'OSDCloudEnv', 'OSDCoreDriverPacks', 'ModuleCoreDriverPacks', 'OSDCoreOperatingSystems', 'OSDCloudWorkflowSettingsOS', 'OSDCloudWorkflowTasks' ) $originalState = @{} foreach ($name in $stateNames) { $originalState[$name] = Get-Variable -Name $name -Scope Global -ValueOnly -ErrorAction SilentlyContinue } } AfterAll { foreach ($name in $stateNames) { Set-Variable -Name $name -Value $originalState[$name] -Scope Global } } Describe 'Initialize-DeployOSDCloud ModelDrivers defaults' { BeforeEach { $entry = [pscustomobject]@{ Type = 'ModelDrivers'; FullName = 'E:\OSDCloud\modeldrivers-amd64\HP_8CD1_Any model_28000.1' } $global:OSDCoreDevice = [pscustomobject]@{ OSDManufacturer = 'HP' OSDProduct = '8CD1' OSDModel = 'A different device model' ProcessorArchitecture = 'amd64' LocalDisk = @([pscustomobject]@{ Number = 0; FriendlyName = 'Test disk'; Size = 100GB }) } $global:OSDCloudEnv = $null $global:ModuleCoreDriverPacks = @([pscustomobject]@{ Name = 'OEM pack'; SystemId = '8CD1'; OSArchitecture = 'amd64'; FileName = 'pack.cab' Url = 'https://example.invalid/pack.cab'; HashMD5 = 'not-used-for-modeldrivers' }) $global:OSDCloudWorkflowSettingsOS = [pscustomobject]@{ OperatingSystem = [pscustomobject]@{ default = 'Windows 11 25H2'; values = @('Windows 11 25H2') } OSActivation = [pscustomobject]@{ default = 'Retail'; values = @('Retail') } OSEdition = [pscustomobject]@{ default = 'Pro'; values = @([pscustomobject]@{ Edition = 'Pro'; EditionId = 'Professional' }) } OSLanguageCode = [pscustomobject]@{ default = 'en-us'; values = @('en-us') } } $global:OSDCloudWorkflowTasks = @([pscustomobject]@{ name = 'OSDCloud'; steps = @() }) Mock Initialize-OSDCoreCache {} Mock Initialize-ModuleCoreDriverPacks {} Mock Get-OSDCoreModelDriversCacheObject { $entry } Mock Test-OSDCoreDriverPackCloudObject { $true } Mock Get-OSDCoreDriverPackCacheObject {} Mock Get-OSDCoreOperatingSystems { [pscustomobject]@{ OperatingSystem = 'Windows 11 25H2'; OSActivation = 'Retail'; OSLanguageCode = 'en-us' OSArchitecture = $global:OSDCoreDevice.ProcessorArchitecture; OSBuild = '26200'; OSBuildVersion = '26200.9457' } } Mock Initialize-OSDCloudWorkflowSettingsOS {} Mock Resolve-OSDCloudWorkflowOSActivation { $OSActivation } Mock Test-OperatingSystemCloudObject { $true } Mock Get-OSDCoreOperatingSystemCacheObject {} Mock Initialize-OSDCloudWorkflowTasks {} Mock Export-Clixml {} Mock Get-FileHash { throw 'Unexpected archive hashing' } Mock Write-Host {} } It 'defaults to ModelDrivers and retains OEM fallback without testing its URL or archive' { Initialize-DeployOSDCloud $global:OSDCloudDeploy.DriverPackName | Should -Be 'ModelDrivers' $global:OSDCloudDeploy.ModelDriversCacheObject | Should -Be $entry $global:OSDCloudDeploy.DriverPackCloudObject.Name | Should -Be 'OEM pack' $global:OSDCloudDeploy.OSBuildVersion | Should -Be '26200.9457' Should -Invoke Test-OSDCoreDriverPackCloudObject -Times 0 -Exactly Should -Invoke Get-OSDCoreDriverPackCacheObject -Times 0 -Exactly Should -Invoke Get-FileHash -Times 0 -Exactly } It 'defaults to ModelDrivers when the device has no OEM catalog entry' { $global:ModuleCoreDriverPacks = @() Initialize-DeployOSDCloud $global:OSDCloudDeploy.DriverPackName | Should -Be 'ModelDrivers' $global:OSDCloudDeploy.ModelDriversCacheObject | Should -Be $entry $global:OSDCloudDeploy.DriverPackCloudObject | Should -BeNullOrEmpty } It 'selects ModelDrivers after device overrides and with the effective architecture' { Initialize-DeployOSDCloud -OSDManufacturer Microsoft -OSDProduct Surface_Product -OSDModel 'Ignored override' -ProcessorArchitecture arm64 Should -Invoke Get-OSDCoreModelDriversCacheObject -Times 1 -Exactly -ParameterFilter { $OSArchitecture -eq 'arm64' -and $global:OSDCoreDevice.OSDManufacturer -eq 'Microsoft' -and $global:OSDCoreDevice.OSDProduct -eq 'Surface_Product' } $global:OSDCloudDeploy.OSArchitecture | Should -Be 'arm64' } It 'retains the original OEM validation behavior when no safe ModelDrivers match' { Mock Get-OSDCoreModelDriversCacheObject {} Initialize-DeployOSDCloud $global:OSDCloudDeploy.DriverPackName | Should -Be 'OEM pack' $global:OSDCloudDeploy.ModelDriversCacheObject | Should -BeNullOrEmpty Should -Invoke Test-OSDCoreDriverPackCloudObject -Times 1 -Exactly Should -Invoke Get-OSDCoreDriverPackCacheObject -Times 1 -Exactly } } |