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