102 lines
4.0 KiB
Swift
102 lines
4.0 KiB
Swift
import XCTest
|
|
@testable import MacMonitor
|
|
|
|
final class MMPowerTests: XCTestCase {
|
|
|
|
func testUnitsAndNames() {
|
|
XCTAssertEqual(MMPowerTelemetryProvider.unit(forKey: "PSTR"), "W")
|
|
XCTAssertEqual(MMPowerTelemetryProvider.unit(forKey: "VC0C"), "V")
|
|
XCTAssertEqual(MMPowerTelemetryProvider.unit(forKey: "IC0C"), "A")
|
|
XCTAssertEqual(MMPowerTelemetryProvider.unit(forKey: "UNKNOWN"), "")
|
|
|
|
XCTAssertEqual(MMPowerTelemetryProvider.humanReadableName(forKey: "PSTR"), "Total System Power")
|
|
XCTAssertEqual(MMPowerTelemetryProvider.humanReadableName(forKey: "VC0C"), "CPU Core Voltage")
|
|
XCTAssertEqual(MMPowerTelemetryProvider.humanReadableName(forKey: "IC0C"), "CPU Core Current")
|
|
}
|
|
|
|
func testPowerMetricsCalculationFromSMC() {
|
|
let readings: [String: NSNumber] = [
|
|
"PSTR": NSNumber(value: 45.2),
|
|
"PCPR": NSNumber(value: 28.4),
|
|
"PG0R": NSNumber(value: 8.5),
|
|
"PMSR": NSNumber(value: 3.1),
|
|
"VC0C": NSNumber(value: 1.15),
|
|
"IC0C": NSNumber(value: 24.5)
|
|
]
|
|
|
|
let batteryInfo: [String: Any] = [
|
|
"powerSource": "AC Power",
|
|
"isCharging": false,
|
|
"batteryLevel": 100.0,
|
|
"batteryWatts": 0.0
|
|
]
|
|
|
|
let metrics = MMPowerTelemetryProvider.calculatePowerMetrics(
|
|
withReadings: readings,
|
|
batteryInfo: batteryInfo
|
|
)
|
|
|
|
let systemWatts = metrics["systemTotalWatts"] as? Double ?? 0
|
|
let cpuWatts = metrics["cpuWatts"] as? Double ?? 0
|
|
let gpuWatts = metrics["gpuWatts"] as? Double ?? 0
|
|
let memWatts = metrics["memoryWatts"] as? Double ?? 0
|
|
let cpuV = metrics["cpuVoltage"] as? Double ?? 0
|
|
let cpuI = metrics["cpuCurrent"] as? Double ?? 0
|
|
let powerSource = metrics["powerSource"] as? String ?? ""
|
|
let sensors = metrics["sensors"] as? [[String: Any]] ?? []
|
|
|
|
XCTAssertEqual(systemWatts, 45.2, accuracy: 0.1)
|
|
XCTAssertEqual(cpuWatts, 28.4, accuracy: 0.1)
|
|
XCTAssertEqual(gpuWatts, 8.5, accuracy: 0.1)
|
|
XCTAssertEqual(memWatts, 3.1, accuracy: 0.1)
|
|
XCTAssertEqual(cpuV, 1.15, accuracy: 0.01)
|
|
XCTAssertEqual(cpuI, 24.5, accuracy: 0.1)
|
|
XCTAssertEqual(powerSource, "AC Power")
|
|
XCTAssertEqual(sensors.count, 6)
|
|
}
|
|
|
|
func testBatteryFallbackCalculation() {
|
|
// No PSTR, no PCPR, but VC0C and IC0C are present
|
|
let readings: [String: NSNumber] = [
|
|
"VC0C": NSNumber(value: 1.2),
|
|
"IC0C": NSNumber(value: 10.0)
|
|
]
|
|
|
|
let batteryInfo: [String: Any] = [
|
|
"powerSource": "Battery Power",
|
|
"isCharging": false,
|
|
"batteryLevel": 75.0,
|
|
"batteryWatts": 18.5
|
|
]
|
|
|
|
let metrics = MMPowerTelemetryProvider.calculatePowerMetrics(
|
|
withReadings: readings,
|
|
batteryInfo: batteryInfo
|
|
)
|
|
|
|
let systemWatts = metrics["systemTotalWatts"] as? Double ?? 0
|
|
let cpuWatts = metrics["cpuWatts"] as? Double ?? 0
|
|
let powerSource = metrics["powerSource"] as? String ?? ""
|
|
let isCharging = metrics["isCharging"] as? Bool ?? true
|
|
|
|
// System watts falls back to batteryWatts (18.5)
|
|
XCTAssertEqual(systemWatts, 18.5, accuracy: 0.1)
|
|
// CPU watts calculated from V * I = 1.2 * 10.0 = 12.0 W
|
|
XCTAssertEqual(cpuWatts, 12.0, accuracy: 0.1)
|
|
XCTAssertEqual(powerSource, "Battery Power")
|
|
XCTAssertFalse(isCharging)
|
|
}
|
|
|
|
func testLivePowerProvider() throws {
|
|
let provider = MMPowerTelemetryProvider()
|
|
XCTAssertEqual(provider.domain, .power)
|
|
XCTAssertEqual(provider.providerIdentifier, "com.i3omb.macmonitor.telemetry.power")
|
|
|
|
let sample = try provider.sampleTelemetry()
|
|
XCTAssertNotNil(sample)
|
|
XCTAssertNotNil(sample["systemTotalWatts"])
|
|
XCTAssertNotNil(sample["powerSource"])
|
|
XCTAssertNotNil(sample["sensors"])
|
|
}
|
|
}
|