70 lines
2.5 KiB
Swift
70 lines
2.5 KiB
Swift
import XCTest
|
|
@testable import MacMonitor
|
|
|
|
final class MMProcessTests: XCTestCase {
|
|
|
|
func testProcessCPUPercentCalculation() {
|
|
let prevCPUTimes: [NSNumber: NSNumber] = [
|
|
100: NSNumber(value: 1_000_000_000), // 1.0s
|
|
200: NSNumber(value: 500_000_000) // 0.5s
|
|
]
|
|
|
|
let rawProcesses: [[String: Any]] = [
|
|
[
|
|
"pid": 100,
|
|
"ppid": 1,
|
|
"uid": 501,
|
|
"username": "tester",
|
|
"name": "cpu_hog",
|
|
"cpuTimeNs": NSNumber(value: 2_000_000_000), // delta = 1.0s over 2.0s = 50% CPU
|
|
"residentBytes": NSNumber(value: 50_000_000),
|
|
"virtualBytes": NSNumber(value: 100_000_000),
|
|
"threadCount": 4,
|
|
"runningThreads": 1
|
|
],
|
|
[
|
|
"pid": 200,
|
|
"ppid": 1,
|
|
"uid": 501,
|
|
"username": "tester",
|
|
"name": "idle_app",
|
|
"cpuTimeNs": NSNumber(value: 520_000_000), // delta = 0.02s over 2.0s = 1% CPU
|
|
"residentBytes": NSNumber(value: 20_000_000),
|
|
"virtualBytes": NSNumber(value: 50_000_000),
|
|
"threadCount": 2,
|
|
"runningThreads": 0
|
|
]
|
|
]
|
|
|
|
let timeDelta: TimeInterval = 2.0
|
|
|
|
let results = MMProcessTelemetryProvider.calculateProcessList(
|
|
withRawProcesses: rawProcesses,
|
|
previousCPUTimes: prevCPUTimes,
|
|
timeDelta: timeDelta
|
|
)
|
|
|
|
XCTAssertEqual(results.count, 2)
|
|
// First entry should be highest CPU
|
|
XCTAssertEqual(results[0]["name"] as? String, "cpu_hog")
|
|
let hogCPU = results[0]["cpuPercent"] as? Double ?? 0
|
|
XCTAssertEqual(hogCPU, 50.0, accuracy: 0.1)
|
|
|
|
let idleCPU = results[1]["cpuPercent"] as? Double ?? 0
|
|
XCTAssertEqual(idleCPU, 1.0, accuracy: 0.1)
|
|
}
|
|
|
|
func testLiveProcessProvider() throws {
|
|
let provider = MMProcessTelemetryProvider()
|
|
XCTAssertEqual(provider.domain, .process)
|
|
XCTAssertEqual(provider.providerIdentifier, "com.i3omb.macmonitor.telemetry.process")
|
|
|
|
let sample = try provider.sampleTelemetry()
|
|
XCTAssertNotNil(sample)
|
|
let processCount = sample["processCount"] as? Int ?? 0
|
|
XCTAssertGreaterThan(processCount, 0)
|
|
XCTAssertNotNil(sample["processes"])
|
|
XCTAssertNotNil(sample["totalThreads"])
|
|
}
|
|
}
|