mirror of
https://github.com/shadowsocks/ShadowsocksX-NG.git
synced 2026-11-08 17:54:50 +00:00
39 lines
1.4 KiB
Swift
39 lines
1.4 KiB
Swift
import XCTest
|
|
|
|
@testable import ShadowsocksX_NG2
|
|
|
|
final class FirewallStatusCheckerTests: XCTestCase {
|
|
func testGetAppBlockedOutputMapsToBlockedStatus() async {
|
|
var capturedExecutable: URL?
|
|
var capturedArguments: [String] = []
|
|
let checker = SocketFilterFirewallChecker { executable, arguments in
|
|
capturedExecutable = executable
|
|
capturedArguments = arguments
|
|
return "Incoming connection to /bundle/Helpers/sslocal is blocked.\n"
|
|
}
|
|
let target = URL(fileURLWithPath: "/bundle/Helpers/sslocal")
|
|
|
|
let blocked = await checker.status(for: target)
|
|
XCTAssertEqual(blocked, .blocked)
|
|
XCTAssertEqual(
|
|
capturedExecutable?.path,
|
|
"/usr/libexec/ApplicationFirewall/socketfilterfw")
|
|
XCTAssertEqual(capturedArguments, ["--getappblocked", target.path])
|
|
}
|
|
|
|
func testPermittedAndUnknownResultsDegradeWithoutFalseBlock() async {
|
|
let permitted = SocketFilterFirewallChecker { _, _ in
|
|
"Incoming connection to /bundle/Helpers/sslocal is permitted.\n"
|
|
}
|
|
let unavailable = SocketFilterFirewallChecker { _, _ in
|
|
throw CocoaError(.fileNoSuchFile)
|
|
}
|
|
let target = URL(fileURLWithPath: "/bundle/Helpers/sslocal")
|
|
|
|
let permittedStatus = await permitted.status(for: target)
|
|
let unavailableStatus = await unavailable.status(for: target)
|
|
XCTAssertEqual(permittedStatus, .permitted)
|
|
XCTAssertEqual(unavailableStatus, .unknown)
|
|
}
|
|
}
|