63 lines
2.1 KiB
Swift
63 lines
2.1 KiB
Swift
import XCTest
|
|
@testable import MacMonitor
|
|
|
|
final class MMLoadAverageTests: XCTestCase {
|
|
|
|
func testLoadMetricsCalculation() {
|
|
let metrics = MMLoadAverageProvider.calculateLoadMetrics(
|
|
withLoad1: 4.0,
|
|
load5: 3.5,
|
|
load15: 2.5,
|
|
taskCount: 500,
|
|
threadCount: 2200,
|
|
cpuCount: 8,
|
|
machFactor: 1.25
|
|
)
|
|
|
|
let load1 = metrics["load1m"] as? Double ?? 0
|
|
let norm1 = metrics["normalizedLoad1m"] as? Double ?? 0
|
|
let norm5 = metrics["normalizedLoad5m"] as? Double ?? 0
|
|
let taskCount = metrics["taskCount"] as? Int ?? 0
|
|
let threadCount = metrics["threadCount"] as? Int ?? 0
|
|
let isOverloaded = metrics["isOverloaded"] as? Bool ?? true
|
|
|
|
XCTAssertEqual(load1, 4.0, accuracy: 0.01)
|
|
XCTAssertEqual(norm1, 4.0 / 8.0, accuracy: 0.01)
|
|
XCTAssertEqual(norm5, 3.5 / 8.0, accuracy: 0.01)
|
|
XCTAssertEqual(taskCount, 500)
|
|
XCTAssertEqual(threadCount, 2200)
|
|
XCTAssertFalse(isOverloaded)
|
|
}
|
|
|
|
func testOverloadedStateDetection() {
|
|
let metrics = MMLoadAverageProvider.calculateLoadMetrics(
|
|
withLoad1: 12.0,
|
|
load5: 10.0,
|
|
load15: 8.0,
|
|
taskCount: 650,
|
|
threadCount: 3100,
|
|
cpuCount: 8,
|
|
machFactor: 0.4
|
|
)
|
|
|
|
let isOverloaded = metrics["isOverloaded"] as? Bool ?? false
|
|
let norm1 = metrics["normalizedLoad1m"] as? Double ?? 0
|
|
|
|
XCTAssertTrue(isOverloaded)
|
|
XCTAssertEqual(norm1, 1.5, accuracy: 0.01)
|
|
}
|
|
|
|
func testLiveLoadAverageProvider() throws {
|
|
let provider = MMLoadAverageProvider()
|
|
XCTAssertEqual(provider.domain, .system)
|
|
XCTAssertEqual(provider.providerIdentifier, "com.i3omb.macmonitor.telemetry.system.load")
|
|
|
|
let sample = try provider.sampleTelemetry()
|
|
XCTAssertNotNil(sample)
|
|
XCTAssertNotNil(sample["load1m"])
|
|
XCTAssertNotNil(sample["taskCount"])
|
|
XCTAssertNotNil(sample["threadCount"])
|
|
XCTAssertNotNil(sample["normalizedLoad1m"])
|
|
}
|
|
}
|