Files
MacMonitor/Tests/MMDiskIOTests.swift
gronod f59ee440af
MacMonitor CI/CD Pipeline / Build & Test (Intel x86_64) (push) Canceled after 0s
feat(telemetry): implement real-time disk I/O throughput and IOPS provider (fixes #10)
2026-09-08 12:34:25 +01:00

74 lines
3.0 KiB
Swift

import XCTest
@testable import MacMonitor
final class MMDiskIOTests: XCTestCase {
func testDiskIOMetricsCalculation() {
let prev: [String: [String: NSNumber]] = [
"disk0": [
"readBytes": NSNumber(value: 10_000_000),
"writeBytes": NSNumber(value: 5_000_000),
"readOps": NSNumber(value: 1_000),
"writeOps": NSNumber(value: 500)
],
"disk1": [
"readBytes": NSNumber(value: 2_000_000),
"writeBytes": NSNumber(value: 1_000_000),
"readOps": NSNumber(value: 200),
"writeOps": NSNumber(value: 100)
]
]
let curr: [String: [String: NSNumber]] = [
"disk0": [
"readBytes": NSNumber(value: 20_000_000), // delta = 10,000,000 bytes
"writeBytes": NSNumber(value: 7_000_000), // delta = 2,000,000 bytes
"readOps": NSNumber(value: 1_200), // delta = 200 ops
"writeOps": NSNumber(value: 600) // delta = 100 ops
],
"disk1": [
"readBytes": NSNumber(value: 4_000_000), // delta = 2,000,000 bytes
"writeBytes": NSNumber(value: 1_000_000), // delta = 0
"readOps": NSNumber(value: 250), // delta = 50 ops
"writeOps": NSNumber(value: 100) // delta = 0 ops
]
]
let timeDelta: TimeInterval = 2.0 // 2 seconds
let metrics = MMDiskIOProvider.calculateDiskIOMetrics(
withCurrentSnapshots: curr,
previousSnapshots: prev,
timeDelta: timeDelta
)
let totalReadBps = metrics["totalReadBytesPerSec"] as? Double ?? 0
let totalWriteBps = metrics["totalWriteBytesPerSec"] as? Double ?? 0
let totalReadIOPS = metrics["totalReadIOPS"] as? Double ?? 0
let totalWriteIOPS = metrics["totalWriteIOPS"] as? Double ?? 0
let disks = metrics["disks"] as? [[String: Any]] ?? []
// (10MB + 2MB) / 2s = 6,000,000 B/s
XCTAssertEqual(totalReadBps, 6_000_000.0, accuracy: 1.0)
// (2MB + 0) / 2s = 1,000,000 B/s
XCTAssertEqual(totalWriteBps, 1_000_000.0, accuracy: 1.0)
// (200 + 50) / 2s = 125 IOPS
XCTAssertEqual(totalReadIOPS, 125.0, accuracy: 0.1)
// (100 + 0) / 2s = 50 IOPS
XCTAssertEqual(totalWriteIOPS, 50.0, accuracy: 0.1)
XCTAssertEqual(disks.count, 2)
}
func testLiveDiskIOProvider() throws {
let provider = MMDiskIOProvider()
XCTAssertEqual(provider.domain, .storage)
XCTAssertEqual(provider.providerIdentifier, "com.i3omb.macmonitor.telemetry.storage.io")
let sample = try provider.sampleTelemetry()
XCTAssertNotNil(sample)
XCTAssertNotNil(sample["totalReadBytesPerSec"])
XCTAssertNotNil(sample["totalWriteBytesPerSec"])
XCTAssertNotNil(sample["disks"])
}
}