66 lines
2.6 KiB
Swift
66 lines
2.6 KiB
Swift
import XCTest
|
|
@testable import MacMonitor
|
|
|
|
final class MMCPULoadTests: XCTestCase {
|
|
|
|
func testTickDeltaCalculation() {
|
|
var prevTicks = [processor_cpu_load_info_data_t]()
|
|
var currTicks = [processor_cpu_load_info_data_t]()
|
|
|
|
// Setup mock Core 0: 20% user, 10% system, 70% idle
|
|
var core0Prev = processor_cpu_load_info_data_t()
|
|
core0Prev.cpu_ticks.0 = 100 // USER
|
|
core0Prev.cpu_ticks.1 = 50 // SYSTEM
|
|
core0Prev.cpu_ticks.2 = 850 // IDLE
|
|
core0Prev.cpu_ticks.3 = 0 // NICE
|
|
prevTicks.append(core0Prev)
|
|
|
|
var core0Curr = processor_cpu_load_info_data_t()
|
|
core0Curr.cpu_ticks.0 = 300 // USER (+200)
|
|
core0Curr.cpu_ticks.1 = 150 // SYSTEM (+100)
|
|
core0Curr.cpu_ticks.2 = 1550 // IDLE (+700)
|
|
core0Curr.cpu_ticks.3 = 0 // NICE (+0)
|
|
currTicks.append(core0Curr)
|
|
|
|
prevTicks.withUnsafeBufferPointer { prevBuf in
|
|
currTicks.withUnsafeBufferPointer { currBuf in
|
|
let metrics = MMCPULoadProvider.calculateLoad(
|
|
fromPreviousTicks: prevBuf.baseAddress,
|
|
currentTicks: currBuf.baseAddress!,
|
|
coreCount: 1
|
|
)
|
|
|
|
let totalPct = metrics["totalPercent"] as? Double ?? 0
|
|
let userPct = metrics["userPercent"] as? Double ?? 0
|
|
let systemPct = metrics["systemPercent"] as? Double ?? 0
|
|
let idlePct = metrics["idlePercent"] as? Double ?? 0
|
|
|
|
// Total delta = 200 + 100 + 700 = 1000
|
|
// User = 20%, System = 10%, Idle = 70%, Total Active = 30%
|
|
XCTAssertEqual(totalPct, 30.0, accuracy: 0.1)
|
|
XCTAssertEqual(userPct, 20.0, accuracy: 0.1)
|
|
XCTAssertEqual(systemPct, 10.0, accuracy: 0.1)
|
|
XCTAssertEqual(idlePct, 70.0, accuracy: 0.1)
|
|
}
|
|
}
|
|
}
|
|
|
|
func testLiveCPULoadProvider() throws {
|
|
let provider = MMCPULoadProvider()
|
|
XCTAssertTrue(provider.isAvailable)
|
|
XCTAssertEqual(provider.domain, .cpu)
|
|
XCTAssertGreaterThan(provider.coreCount, 0)
|
|
|
|
// Initial sample establishes baseline
|
|
let sample1 = try provider.sampleTelemetry()
|
|
XCTAssertNotNil(sample1)
|
|
|
|
// Second sample produces live deltas
|
|
usleep(100_000) // 100ms
|
|
let sample2 = try provider.sampleTelemetry()
|
|
let cores = sample2["cores"] as? [[String: Any]]
|
|
XCTAssertNotNil(cores)
|
|
XCTAssertEqual(cores?.count, Int(provider.coreCount))
|
|
}
|
|
}
|