ZcashLightClientKit/Tests/PerformanceTests/SDKMetricsTests.swift

168 lines
5.6 KiB
Swift

//
// SDKMetricsTests.swift
//
//
// Created by Lukáš Korba on 19.12.2022.
//
import XCTest
@testable import ZcashLightClientKit
final class SDKMetricsTests: XCTestCase {
func testPushDownloadBlocksReport() throws {
let metrics = SDKMetrics()
metrics.enableMetrics()
metrics.pushProgressReport(
progress: BlockProgress(
startHeight: 1_730_000,
targetHeight: 1_730_099,
progressHeight: 1_730_050
),
start: Date(timeIntervalSinceReferenceDate: 0.0),
end: Date(timeIntervalSinceReferenceDate: 1.0),
batchSize: 10,
operation: .downloadBlocks
)
XCTAssertTrue(metrics.popBlock(operation: .downloadBlocks)?.count == 1)
if let reports = metrics.reports[.downloadBlocks], let report = reports.first {
XCTAssertEqual(report, SDKMetrics.BlockMetricReport.placeholderA)
} else {
XCTFail("Not expected to fail.")
}
metrics.disableMetrics()
}
func testPopDownloadBlocksReport() throws {
let metrics = SDKMetrics()
metrics.enableMetrics()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA]
if let reports = metrics.popBlock(operation: .downloadBlocks), let report = reports.first {
XCTAssertEqual(report, SDKMetrics.BlockMetricReport.placeholderA)
} else {
XCTFail("Not expected to fail.")
}
metrics.disableMetrics()
}
func testCumulativeSummary() throws {
let metrics = SDKMetrics()
metrics.enableMetrics()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA]
let summary = SDKMetrics.CumulativeSummary(
downloadedBlocksReport: SDKMetrics.ReportSummary(minTime: 1.0, maxTime: 1.0, avgTime: 1.0),
validatedBlocksReport: nil,
scannedBlocksReport: nil,
enhancementReport: nil,
fetchUTXOsReport: nil,
totalSyncReport: nil
)
XCTAssertEqual(summary, metrics.cumulativeSummary())
metrics.disableMetrics()
}
func testCumulateAndStartNewSet() throws {
let metrics = SDKMetrics()
metrics.enableMetrics()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA]
metrics.cumulateReportsAndStartNewSet()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA]
metrics.cumulateReportsAndStartNewSet()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA]
metrics.cumulateReportsAndStartNewSet()
XCTAssertTrue(metrics.cumulativeSummaries.count == 3)
let summary = SDKMetrics.CumulativeSummary(
downloadedBlocksReport: SDKMetrics.ReportSummary(minTime: 1.0, maxTime: 1.0, avgTime: 1.0),
validatedBlocksReport: nil,
scannedBlocksReport: nil,
enhancementReport: nil,
fetchUTXOsReport: nil,
totalSyncReport: nil
)
let summaries = [summary, summary, summary]
XCTAssertEqual(summaries, metrics.cumulativeSummaries)
metrics.disableMetrics()
}
func testCumulativeSummaryMinMaxAvg() throws {
let metrics = SDKMetrics()
metrics.enableMetrics()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA, SDKMetrics.BlockMetricReport.placeholderB]
let summary = SDKMetrics.CumulativeSummary(
downloadedBlocksReport: SDKMetrics.ReportSummary(minTime: 1.0, maxTime: 6.0, avgTime: 3.5),
validatedBlocksReport: nil,
scannedBlocksReport: nil,
enhancementReport: nil,
fetchUTXOsReport: nil,
totalSyncReport: nil
)
XCTAssertEqual(summary, metrics.cumulativeSummary())
metrics.disableMetrics()
}
func testSummarizedCumulativeReports() throws {
let metrics = SDKMetrics()
metrics.enableMetrics()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderA]
metrics.cumulateReportsAndStartNewSet()
metrics.reports[.downloadBlocks] = [SDKMetrics.BlockMetricReport.placeholderB]
metrics.cumulateReportsAndStartNewSet()
let summary = SDKMetrics.CumulativeSummary(
downloadedBlocksReport: SDKMetrics.ReportSummary(minTime: 1.0, maxTime: 6.0, avgTime: 3.5),
validatedBlocksReport: nil,
scannedBlocksReport: nil,
enhancementReport: nil,
fetchUTXOsReport: nil,
totalSyncReport: nil
)
XCTAssertEqual(metrics.summarizedCumulativeReports(), summary)
metrics.disableMetrics()
}
}
extension SDKMetrics.BlockMetricReport {
static let placeholderA = Self(
startHeight: 1_730_000,
progressHeight: 1_730_050,
targetHeight: 1_730_099,
batchSize: 10,
startTime: Date(timeIntervalSinceReferenceDate: 0.0).timeIntervalSinceReferenceDate,
endTime: Date(timeIntervalSinceReferenceDate: 1.0).timeIntervalSinceReferenceDate
)
static let placeholderB = Self(
startHeight: 1_730_000,
progressHeight: 1_730_080,
targetHeight: 1_730_099,
batchSize: 10,
startTime: Date(timeIntervalSinceReferenceDate: 0.0).timeIntervalSinceReferenceDate,
endTime: Date(timeIntervalSinceReferenceDate: 6.0).timeIntervalSinceReferenceDate
)
}