Files
MacMonitor/Tests/MMKernelTelemetryTests.swift
T
gronod d24fa7de35
MacMonitor CI/CD Pipeline / Build & Test (Intel x86_64) (push) Canceled after 0s
feat(telemetry): implement kernel context switching and event counter provider (fixes #6)
2026-09-08 12:32:18 +01:00

71 lines
3.0 KiB
Swift

import XCTest
@testable import MacMonitor
final class MMKernelTelemetryTests: XCTestCase {
func testKernelRatesCalculation() {
let prev: [String: NSNumber] = [
"contextSwitches": NSNumber(value: 100_000),
"syscalls": NSNumber(value: 200_000),
"pageFaults": NSNumber(value: 50_000),
"cowFaults": NSNumber(value: 1_000),
"zeroFills": NSNumber(value: 10_000),
"pageins": NSNumber(value: 500),
"pageouts": NSNumber(value: 100),
"decompressions": NSNumber(value: 200),
"compressions": NSNumber(value: 300)
]
let curr: [String: NSNumber] = [
"contextSwitches": NSNumber(value: 102_500), // delta = 2,500
"syscalls": NSNumber(value: 210_000), // delta = 10,000
"pageFaults": NSNumber(value: 51_000), // delta = 1,000
"cowFaults": NSNumber(value: 1_050), // delta = 50
"zeroFills": NSNumber(value: 10_200), // delta = 200
"pageins": NSNumber(value: 520), // delta = 20
"pageouts": NSNumber(value: 105), // delta = 5
"decompressions": NSNumber(value: 210), // delta = 10
"compressions": NSNumber(value: 315) // delta = 15
]
let timeDelta: TimeInterval = 2.0 // 2 seconds
let rates = MMKernelTelemetryProvider.calculateRates(
withCurrentCounters: curr,
previousCounters: prev,
timeDelta: timeDelta
)
let cswRate = rates["contextSwitchesRate"] as? Double ?? 0
let syscallRate = rates["syscallsRate"] as? Double ?? 0
let faultRate = rates["pageFaultsRate"] as? Double ?? 0
let cowRate = rates["cowFaultsRate"] as? Double ?? 0
let zeroFillRate = rates["zeroFillsRate"] as? Double ?? 0
let pageinsRate = rates["pageinsRate"] as? Double ?? 0
XCTAssertEqual(cswRate, 1250.0, accuracy: 0.1)
XCTAssertEqual(syscallRate, 5000.0, accuracy: 0.1)
XCTAssertEqual(faultRate, 500.0, accuracy: 0.1)
XCTAssertEqual(cowRate, 25.0, accuracy: 0.1)
XCTAssertEqual(zeroFillRate, 100.0, accuracy: 0.1)
XCTAssertEqual(pageinsRate, 10.0, accuracy: 0.1)
let cumCSW = rates["cumulative_contextSwitches"] as? UInt64 ?? 0
XCTAssertEqual(cumCSW, 102_500)
}
func testLiveKernelProvider() throws {
let provider = MMKernelTelemetryProvider()
XCTAssertEqual(provider.domain, .system)
XCTAssertEqual(provider.providerIdentifier, "com.i3omb.macmonitor.telemetry.kernel.counters")
let sample = try provider.sampleTelemetry()
XCTAssertNotNil(sample)
XCTAssertNotNil(sample["cumulative_contextSwitches"])
XCTAssertNotNil(sample["cumulative_syscalls"])
XCTAssertNotNil(sample["cumulative_pageFaults"])
XCTAssertNotNil(sample["contextSwitchesRate"])
XCTAssertNotNil(sample["syscallsRate"])
}
}