Files
MacMonitor/Tests/MMComponentThermalTests.swift
gronod fda8bf9e49
MacMonitor CI/CD Pipeline / Build & Test (Intel x86_64) (push) Canceled after 0s
feat(telemetry): implement motherboard and component thermal provider (fixes #18)
2026-09-08 12:23:57 +01:00

81 lines
3.8 KiB
Swift

import XCTest
@testable import MacMonitor
final class MMComponentThermalTests: XCTestCase {
func testCategoryClassification() {
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TPCD"), "PCH / Chipset")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TP0P"), "PCH / Chipset")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "Th0H"), "Heatsink")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "Th1H"), "Heatsink")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TM0P"), "Memory")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TM1S"), "Memory")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "Tp0P"), "Power Supply")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TA0P"), "Ambient / Enclosure")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TTLD"), "Thunderbolt / IO")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "TB0T"), "Thunderbolt / IO")
XCTAssertEqual(MMComponentThermalProvider.category(forKey: "ZZ99"), "Other")
}
func testHumanReadableNames() {
XCTAssertEqual(MMComponentThermalProvider.humanReadableName(forKey: "TPCD"), "Platform Controller Hub (Die)")
XCTAssertEqual(MMComponentThermalProvider.humanReadableName(forKey: "Th0H"), "Main Heatsink A")
XCTAssertEqual(MMComponentThermalProvider.humanReadableName(forKey: "TA0P"), "Ambient Air Intake")
XCTAssertEqual(MMComponentThermalProvider.humanReadableName(forKey: "CUSTOM"), "CUSTOM")
}
func testComponentMetricsCalculation() {
let readings: [String: NSNumber] = [
"TPCD": NSNumber(value: 65.5),
"Th0H": NSNumber(value: 48.0),
"TM0P": NSNumber(value: 42.0),
"TA0P": NSNumber(value: 28.5)
]
let metrics = MMComponentThermalProvider.calculateComponentMetrics(from: readings)
let peak = metrics["peakTemperature"] as? Double ?? 0
let avg = metrics["averageTemperature"] as? Double ?? 0
let count = metrics["sensorCount"] as? Int ?? 0
let components = metrics["components"] as? [[String: Any]] ?? []
let categorized = metrics["categorized"] as? [String: [[String: Any]]] ?? [:]
XCTAssertEqual(peak, 65.5, accuracy: 0.1)
XCTAssertEqual(avg, (65.5 + 48.0 + 42.0 + 28.5) / 4.0, accuracy: 0.1)
XCTAssertEqual(count, 4)
XCTAssertEqual(components.count, 4)
let pchList = categorized["PCH / Chipset"]
XCTAssertNotNil(pchList)
let firstPchName = pchList?.first?["name"] as? String
XCTAssertEqual(firstPchName, "Platform Controller Hub (Die)")
XCTAssertEqual(categorized["Heatsink"]?.count, 1)
XCTAssertEqual(categorized["Memory"]?.count, 1)
XCTAssertEqual(categorized["Ambient / Enclosure"]?.count, 1)
}
func testEmptyReadingsCalculation() {
let metrics = MMComponentThermalProvider.calculateComponentMetrics(from: [:])
let peak = metrics["peakTemperature"] as? Double ?? -1
let avg = metrics["averageTemperature"] as? Double ?? -1
let count = metrics["sensorCount"] as? Int ?? -1
XCTAssertEqual(peak, 0.0)
XCTAssertEqual(avg, 0.0)
XCTAssertEqual(count, 0)
}
func testLiveComponentThermalProvider() throws {
let provider = MMComponentThermalProvider()
XCTAssertEqual(provider.domain, .thermal)
XCTAssertEqual(provider.providerIdentifier, "com.i3omb.macmonitor.telemetry.thermal.components")
let sample = try provider.sampleTelemetry()
XCTAssertNotNil(sample)
XCTAssertNotNil(sample["sensorCount"])
XCTAssertNotNil(sample["components"])
XCTAssertNotNil(sample["categorized"])
}
}