项目文件夹

文件
wehub-resource-sync 1d1286fadb
Build / Build and test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:18:38 +08:00

230 行
8.2 KiB
Swift

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
import XCTest
@testable import IPOverviewPlugin
final class IPOverviewParserTests: XCTestCase {
func testParsesIPAddressFromJSONPayload() {
let data = #"{"ip":"203.0.113.8"}"#.data(using: .utf8)!
XCTAssertEqual(IPOverviewParser.ipFromJSON(data), "203.0.113.8")
}
func testParsesIPAddressFromCloudflareTracePayload() {
let data = """
fl=123
h=4.ipcheck.ing
ip=2001:db8::1
ts=1710000000
""".data(using: .utf8)!
XCTAssertEqual(IPOverviewParser.ipFromCloudflareTrace(data), "2001:db8::1")
}
func testParsesIPAddressFromBilibiliPayload() {
let data = """
{"code":0,"data":{"addr":"203.0.113.8","country":"中国"}}
""".data(using: .utf8)!
XCTAssertEqual(IPOverviewParser.ipFromBilibiliIPService(data), "203.0.113.8")
}
func testParsesIPAddressFromCIPText() {
let data = """
IP\t: 203.0.113.8
地址\t: 中国 北京 北京
""".data(using: .utf8)!
XCTAssertEqual(IPOverviewParser.ipFromCIPText(data), "203.0.113.8")
}
func testParsesIPAddressFromIPIPText() {
let data = "当前 IP203.0.113.8 来自于:中国 北京 北京 电信".data(using: .utf8)!
XCTAssertEqual(IPOverviewParser.ipFromIPIPText(data), "203.0.113.8")
}
func testParsesIPWhoisGeoPayload() {
let data = """
{
"success": true,
"country": "United States",
"region": "California",
"city": "Los Angeles",
"connection": {
"asn": 15169,
"org": "Google LLC",
"isp": "Google"
},
"timezone": {
"id": "America/Los_Angeles"
}
}
""".data(using: .utf8)!
let info = IPOverviewParser.geoInfoFromIPWhois(data, ip: "8.8.8.8")
XCTAssertEqual(info?.locationText, "United States / California / Los Angeles")
XCTAssertEqual(info?.asn, "AS15169")
XCTAssertEqual(info?.organization, "Google LLC")
XCTAssertEqual(info?.timezone, "America/Los_Angeles")
}
func testMapsPreferredLocalizationToGeoLanguageCode() {
XCTAssertEqual(IPOverviewLocale.geoLanguageCode(preferredLocalization: "zh-Hans"), "zh-CN")
XCTAssertEqual(IPOverviewLocale.geoLanguageCode(preferredLocalization: "en"), "en")
XCTAssertNil(IPOverviewLocale.geoLanguageCode(preferredLocalization: "ja"))
}
func testIPWhoisGeoURLUsesLanguageCode() {
let url = IPOverviewGeoSource.ipwhois.url(ip: "8.8.8.8", languageCode: "zh-CN")
XCTAssertEqual(url.absoluteString, "https://ipwho.is/8.8.8.8?lang=zh-CN")
}
func testParsesIPAPIGeoPayload() {
let data = """
{
"country_name": "United States",
"region": "California",
"city": "Mountain View",
"org": "GOOGLE",
"asn": "AS15169",
"timezone": "America/Los_Angeles"
}
""".data(using: .utf8)!
let info = IPOverviewParser.geoInfoFromIPAPI(data, ip: "8.8.8.8")
XCTAssertEqual(info?.locationText, "United States / California / Mountain View")
XCTAssertEqual(info?.networkText, "AS15169 GOOGLE")
XCTAssertEqual(info?.source, "ipapi.co")
}
func testParsesNetworkQualityPayload() {
let data = """
{
"base_rtt": 42.5,
"dl_throughput": 125000000,
"ul_throughput": 32000000,
"dl_responsiveness": 80,
"ul_responsiveness": 91.5,
"dl_phase_duration": 4.2,
"ul_phase_duration": 3.8,
"interface_name": "en0",
"test_endpoint": "example.apple.com",
"start_date": "2026-06-24 18:02:05.338",
"end_date": "2026-06-24 18:02:11.095"
}
""".data(using: .utf8)!
let measurement = IPOverviewNetworkQualityParser.measurement(from: data)
XCTAssertEqual(measurement?.baseRTTMilliseconds, 42.5)
XCTAssertEqual(measurement?.downloadMbps, 125)
XCTAssertEqual(measurement?.uploadMbps, 32)
XCTAssertEqual(measurement?.uploadResponsivenessRPM, 91.5)
XCTAssertEqual(measurement?.totalPhaseDuration, 8)
XCTAssertEqual(measurement?.interfaceName, "en0")
XCTAssertEqual(measurement?.testEndpoint, "example.apple.com")
}
func testParsesNetworkQualityVerbosePayload() {
let data = """
==== Verbose Results ====
Uplink capacity: 29.192 Mbps
Downlink capacity: 21.801 Mbps
Idle Latency: 200.707 milliseconds | 298 RPM
Uplink Responsiveness: Low (304.435 milliseconds | 197 RPM)
Downlink Responsiveness: Low (356.107 milliseconds | 168 RPM)
Test Endpoint: example.apple.com
Interface: en0
Start: 2026-06-24 19:10:11.260
End: 2026-06-24 19:10:19.946
Downlink Phase Length: 3.60s
Uplink Phase Length: 3.54s
""".data(using: .utf8)!
let measurement = IPOverviewNetworkQualityParser.measurement(from: data)
XCTAssertEqual(measurement?.downloadMbps, 21.801)
XCTAssertEqual(measurement?.uploadMbps, 29.192)
XCTAssertEqual(measurement?.baseRTTMilliseconds, 200.707)
XCTAssertEqual(measurement?.uploadResponsivenessRPM, 197)
XCTAssertEqual(measurement?.downloadResponsivenessRPM, 168)
XCTAssertEqual(measurement?.downloadPhaseDuration, 3.60)
XCTAssertEqual(measurement?.uploadPhaseDuration, 3.54)
XCTAssertEqual(measurement?.interfaceName, "en0")
XCTAssertEqual(measurement?.testEndpoint, "example.apple.com")
}
func testParsesNetworkQualityProgressEvents() {
let events = IPOverviewNetworkQualityParser.progressEvents(from: """
Downlink capacity: 21.801 Mbps
Uplink capacity: 29.192 Mbps
Idle Latency: 200.707 milliseconds | 298 RPM
""")
XCTAssertTrue(events.contains(.phase(.measuringDownload)))
XCTAssertTrue(events.contains(.phase(.measuringUpload)))
XCTAssertTrue(events.contains(.phase(.measuringLatency)))
XCTAssertTrue(events.contains(.download(21.801)))
XCTAssertTrue(events.contains(.upload(29.192)))
}
func testParsesNetworkQualityTTYProgressEvents() {
let events = IPOverviewNetworkQualityParser.progressEvents(from: """
\u{1B}[2K
Downlink: capacity 26.079 Mbps, responsiveness 147 RPM (17.608 MB, 6 flows) - Uplink: capacity 0.000 Mbps, responsiveness 0 RPM (0 B, 0 flows)
""")
XCTAssertTrue(events.contains(.phase(.measuringDownload)))
XCTAssertTrue(events.contains(.download(26.079)))
XCTAssertFalse(events.contains(.phase(.measuringUpload)))
XCTAssertFalse(events.contains(.upload(0)))
}
func testParsesNetworkQualityTTYUploadProgressEvents() {
let events = IPOverviewNetworkQualityParser.progressEvents(from: """
\u{1B}[2K
Downlink: capacity 26.079 Mbps, responsiveness 147 RPM (17.608 MB, 6 flows) - Uplink: capacity 24.039 Mbps, responsiveness 173 RPM (9.562 MB, 5 flows)
""")
XCTAssertTrue(events.contains(.phase(.measuringUpload)))
XCTAssertTrue(events.contains(.upload(24.039)))
XCTAssertFalse(events.contains(.download(26.079)))
}
func testGradesNetworkQualityMeasurement() {
XCTAssertEqual(
IPOverviewNetworkQualityGrade.evaluate(
baseRTTMilliseconds: 45,
downloadMbps: 150,
uploadMbps: 50
),
.excellent
)
XCTAssertEqual(
IPOverviewNetworkQualityGrade.evaluate(
baseRTTMilliseconds: 120,
downloadMbps: 8,
uploadMbps: 4
),
.fair
)
XCTAssertEqual(
IPOverviewNetworkQualityGrade.evaluate(
baseRTTMilliseconds: 240,
downloadMbps: 2,
uploadMbps: 0.5
),
.poor
)
}
func testValidatesIPAddressFamily() {
XCTAssertTrue(IPOverviewService.isValidIPAddress("203.0.113.8", family: .ipv4))
XCTAssertFalse(IPOverviewService.isValidIPAddress("203.0.113.8", family: .ipv6))
XCTAssertTrue(IPOverviewService.isValidIPAddress("2001:db8::1", family: .ipv6))
XCTAssertFalse(IPOverviewService.isValidIPAddress("not-an-ip"))
}
}