71 lines
3.0 KiB
Swift
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"])
|
|
}
|
|
}
|