tests/testEnvironment.ps1

$testData = Import-PowerShellDataFile -Path $PSScriptRoot\testData.psd1

# Class names
$namespaceWMI = 'root/WMI'
$classSmartData = 'MSStorageDriver_ATAPISmartData'
$classThresholds = 'MSStorageDriver_FailurePredictThresholds'
$classFailurePredictStatus = 'MSStorageDriver_FailurePredictStatus'
$classDiskDrive = 'Win32_DiskDrive'

$namespaceStorage = 'root/Microsoft/Windows/Storage'
$classDisk = 'MSFT_Disk'
$classPhysicalDisk = 'MSFT_PhysicalDisk'

# Class objects
$cimClassSmartData = Get-CimClass -Namespace $namespaceWMI -ClassName $classSmartData
$cimClassThresholds = Get-CimClass -Namespace $namespaceWMI -ClassName $classThresholds
$cimClassFailurePredictStatus = Get-CimClass -Namespace $namespaceWMI -ClassName $classFailurePredictStatus
$cimClassDiskDrive = Get-CimClass -ClassName $classDiskDrive

$cimClassDisk = Get-CimClass -Namespace $namespaceStorage -ClassName $classDisk
$cimClassPhysicalDisk = Get-CimClass -Namespace $namespaceStorage -ClassName $classPhysicalDisk

# Properties
# HDD1
$diskSmartDataPropertiesHDD1 = @{
    VendorSpecific = $testData.AtapiSmartData_VendorSpecific_HDD1
    InstanceName = $testData.InstanceName_HDD1
}

$diskThresholdsPropertiesHDD1 = @{
    VendorSpecific = $testData.FailurePredictThresholds_VendorSpecific_HDD1
    InstanceName = $testData.InstanceName_HDD1
}

$diskFailurePredictStatusPropertiesHDD1 = @{
    PredictFailure = $testData.FailurePredictStatus_PredictFailure_HDD1
    InstanceName = $testData.InstanceName_HDD1
}

$diskFailurePredictStatusTruePropertiesHDD1 = @{
    PredictFailure = $testData.FailurePredictStatus_PredictFailureTrue_HDD1
    InstanceName = $testData.InstanceName_HDD1
}

$diskDrivePropertiesHDD1 = @{
    Index = $testData.Index_HDD1
    PNPDeviceID = $testData.PNPDeviceID_HDD1
    Model = $testData.Model_HDD1
    BytesPerSector = $testData.BytesPerSector_HDD1
}

$diskDrivePropertiesATAHDD1 = @{
    Index = $testData.Index_HDD1
    PNPDeviceID = $testData.PNPDeviceID_HDD1
    Model = $testData.ModelATA_HDD1
    BytesPerSector = $testData.BytesPerSector_HDD1
}

$diskPropertiesHDD1 = @{
    Number = $testData.Index_HDD1
}

$physicalDiskPropertiesHDD1 = @{
    DeviceId = $testData.Index_HDD1
}

# HDD2
$diskSmartDataPropertiesHDD2 = @{
    VendorSpecific = $testData.AtapiSmartData_VendorSpecific_HDD2
    InstanceName = $testData.InstanceName_HDD2
}

$diskThresholdsPropertiesHDD2 = @{
    VendorSpecific = $testData.FailurePredictThresholds_VendorSpecific_HDD2
    InstanceName = $testData.InstanceName_HDD2
}

$diskFailurePredictStatusPropertiesHDD2 = @{
    PredictFailure = $testData.FailurePredictStatus_PredictFailure_HDD2
    InstanceName = $testData.InstanceName_HDD2
}

$diskDrivePropertiesHDD2 = @{
    Index = $testData.Index_HDD2
    PNPDeviceID = $testData.PNPDeviceID_HDD2
    Model = $testData.Model_HDD2
    BytesPerSector = $testData.BytesPerSector_HDD2
}

$diskPropertiesHDD2 = @{
    Number = $testData.Index_HDD2
}

$physicalDiskPropertiesHDD2 = @{
    DeviceId = $testData.Index_HDD2
}

# SSD1
$diskSmartDataPropertiesSSD1 = @{
    VendorSpecific = $testData.AtapiSmartData_VendorSpecific_SSD1
    InstanceName = $testData.InstanceName_SSD1
}

$diskThresholdsPropertiesSSD1 = @{
    VendorSpecific = $testData.FailurePredictThresholds_VendorSpecific_SSD1
    InstanceName = $testData.InstanceName_SSD1
}

$diskFailurePredictStatusPropertiesSSD1 = @{
    PredictFailure = $testData.FailurePredictStatus_PredictFailure_SSD1
    InstanceName = $testData.InstanceName_SSD1
}

$diskDrivePropertiesSSD1 = @{
    Index = $testData.Index_SSD1
    PNPDeviceID = $testData.PNPDeviceID_SSD1
    Model = $testData.Model_SSD1
    BytesPerSector = $testData.BytesPerSector_SSD1
}

$diskPropertiesSSD1 = @{
    Number = $testData.Index_SSD1
}

$physicalDiskPropertiesSSD1 = @{
    DeviceId = $testData.Index_SSD1
}

# SSD2
$diskSmartDataPropertiesSSD2 = @{
    VendorSpecific = $testData.AtapiSmartData_VendorSpecific_SSD2
    InstanceName = $testData.InstanceName_SSD2
}

$diskThresholdsPropertiesSSD2 = @{
    VendorSpecific = $testData.FailurePredictThresholds_VendorSpecific_SSD2
    InstanceName = $testData.InstanceName_SSD2
}

$diskFailurePredictStatusPropertiesSSD2 = @{
    PredictFailure = $testData.FailurePredictStatus_PredictFailure_SSD2
    InstanceName = $testData.InstanceName_SSD2
}

$diskDrivePropertiesSSD2 = @{
    Index = $testData.Index_SSD2
    PNPDeviceID = $testData.PNPDeviceID_SSD2
    Model = $testData.Model_SSD2
    BytesPerSector = $testData.BytesPerSector_SSD2
}

$diskPropertiesSSD2 = @{
    Number = $testData.Index_SSD2
}

$physicalDiskPropertiesSSD2 = @{
    DeviceId = $testData.Index_SSD2
}

# HFSSSD1
$diskSmartDataPropertiesHFSSSD1 = @{
    VendorSpecific = $testData.AtapiSmartData_VendorSpecific_HFSSSD1
    InstanceName = $testData.InstanceName_HFSSSD1
}

$diskThresholdsPropertiesHFSSSD1 = @{
    VendorSpecific = $testData.FailurePredictThresholds_VendorSpecific_HFSSSD1
    InstanceName = $testData.InstanceName_HFSSSD1
}

$diskFailurePredictStatusPropertiesHFSSSD1 = @{
    PredictFailure = $testData.FailurePredictStatus_PredictFailure_HFSSSD1
    InstanceName = $testData.InstanceName_HFSSSD1
}

$diskDrivePropertiesHFSSSD1 = @{
    Index = $testData.Index_HFSSSD1
    PNPDeviceID = $testData.PNPDeviceID_HFSSSD1
    Model = $testData.Model_HFSSSD1
    BytesPerSector = $testData.BytesPerSector_HFSSSD1
}

$diskPropertiesHFSSSD1 = @{
    Number = $testData.Index_HFSSSD1
}

$physicalDiskPropertiesHFSSSDD1 = @{
    DeviceId = $testData.Index_HFSSSD1
}

# CIM object
$diskSmartDataHDD1 = New-CimInstance -CimClass $cimClassSmartData -Property $diskSmartDataPropertiesHDD1 -ClientOnly
$diskSmartDataHDD2 = New-CimInstance -CimClass $cimClassSmartData -Property $diskSmartDataPropertiesHDD2 -ClientOnly
$diskSmartDataSSD1 = New-CimInstance -CimClass $cimClassSmartData -Property $diskSmartDataPropertiesSSD1 -ClientOnly
$diskSmartDataSSD2 = New-CimInstance -CimClass $cimClassSmartData -Property $diskSmartDataPropertiesSSD2 -ClientOnly
$diskSmartDataHFSSSD1 = New-CimInstance -CimClass $cimClassSmartData -Property $diskSmartDataPropertiesHFSSSD1 -ClientOnly

$diskThresholdsHDD1 = New-CimInstance -CimClass $cimClassThresholds -Property $diskThresholdsPropertiesHDD1 -ClientOnly
$diskThresholdsHDD2 = New-CimInstance -CimClass $cimClassThresholds -Property $diskThresholdsPropertiesHDD2 -ClientOnly
$diskThresholdsSSD1 = New-CimInstance -CimClass $cimClassThresholds -Property $diskThresholdsPropertiesSSD1 -ClientOnly
$diskThresholdsSSD2 = New-CimInstance -CimClass $cimClassThresholds -Property $diskThresholdsPropertiesSSD2 -ClientOnly
$diskThresholdsHFSSSD1 = New-CimInstance -CimClass $cimClassThresholds -Property $diskThresholdsPropertiesHFSSSD1 -ClientOnly

$diskFailurePredictStatusHDD1 = New-CimInstance -CimClass $cimClassFailurePredictStatus -Property $diskFailurePredictStatusPropertiesHDD1 -ClientOnly
$diskFailurePredictStatusTrueHDD1 = New-CimInstance -CimClass $cimClassFailurePredictStatus -Property $diskFailurePredictStatusTruePropertiesHDD1 -ClientOnly
$diskFailurePredictStatusHDD2 = New-CimInstance -CimClass $cimClassFailurePredictStatus -Property $diskFailurePredictStatusPropertiesHDD2 -ClientOnly
$diskFailurePredictStatusSSD1 = New-CimInstance -CimClass $cimClassFailurePredictStatus -Property $diskFailurePredictStatusPropertiesSSD1 -ClientOnly
$diskFailurePredictStatusSSD2 = New-CimInstance -CimClass $cimClassFailurePredictStatus -Property $diskFailurePredictStatusPropertiesSSD2 -ClientOnly
$diskFailurePredictStatusHFSSSD1 = New-CimInstance -CimClass $cimClassFailurePredictStatus -Property $diskFailurePredictStatusPropertiesHFSSSD1 -ClientOnly

$diskDriveHDD1 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesHDD1 -ClientOnly
$diskDriveATAHDD1 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesATAHDD1 -ClientOnly
$diskDriveHDD2 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesHDD2 -ClientOnly
$diskDriveSSD1 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesSSD1 -ClientOnly
$diskDriveSSD2 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesSSD2 -ClientOnly
$diskDriveHFSSSD1 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesHFSSSD1 -ClientOnly

$diskHDD1 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesHDD1 -ClientOnly
$diskHDD2 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesHDD2 -ClientOnly
$diskSSD1 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesSSD1 -ClientOnly
$diskSSD2 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesSSD2 -ClientOnly
$diskHFSSSD1 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesHFSSSD1 -ClientOnly

$physicalDiskHDD1 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesHDD1 -ClientOnly
$physicalDiskHDD2 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesHDD2 -ClientOnly
$physicalDiskSSD1 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesSSD1 -ClientOnly
$physicalDiskSSD2 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesSSD2 -ClientOnly
$physicalDiskHFSSSD1 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesHFSSSD1 -ClientOnly

# Remoting
$computerNames = $env:computername, 'localhost'
$ipAddresses = '127.0.0.1', '127.0.0.2'

$diskDrivePropertiesHost1 = @{
    Index = 1
}
$diskDrivePropertiesHost2 = @{
    Index = 2
}

$diskDriveHost1 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesHost1 -ClientOnly
$diskDriveHost1 | Add-Member -MemberType NoteProperty -Name PSComputerName -Value $computerNames[0] -Force

$diskDriveHost2 = New-CimInstance -CimClass $cimClassDiskDrive -Property $diskDrivePropertiesHost2 -ClientOnly
$diskDriveHost2 | Add-Member -MemberType NoteProperty -Name PSComputerName -Value $computerNames[1] -Force

$diskPropertiesHost1 = @{
    Number = 1
}
$diskPropertiesHost2 = @{
    Number = 2
}
$diskHost1 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesHost1 -ClientOnly
$diskHost1 | Add-Member -MemberType NoteProperty -Name PSComputerName -Value $computerNames[0] -Force

$diskHost2 = New-CimInstance -CimClass $cimClassDisk -Property $diskPropertiesHost2 -ClientOnly
$diskHost2 | Add-Member -MemberType NoteProperty -Name PSComputerName -Value $computerNames[1] -Force

$physicalDiskPropertiesHost1 = @{
    DeviceId = 1
}
$physicalDiskPropertiesHost2 = @{
    DeviceId = 2
}
$physicalDiskHost1 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesHost1 -ClientOnly
$physicalDiskHost1 | Add-Member -MemberType NoteProperty -Name PSComputerName -Value $computerNames[0] -Force

$physicalDiskHost2 = New-CimInstance -CimClass $cimClassPhysicalDisk -Property $physicalDiskPropertiesHost2 -ClientOnly
$physicalDiskHost2 | Add-Member -MemberType NoteProperty -Name PSComputerName -Value $computerNames[1] -Force