mirror of
https://github.com/shadowsocks/ShadowsocksX-NG.git
synced 2026-10-28 21:23:44 +00:00
test: 为 Agent 系统代理测试复用小规则夹具
This commit is contained in:
@@ -74,7 +74,7 @@ final class ProxyControlWorkflowIntegrationTests: XCTestCase {
|
||||
settingsStore: settingsStore ?? InMemoryProxySettingsStore(),
|
||||
appBundle: AppArtifact.bundle,
|
||||
// Keep real ACL compilation; corpus coverage belongs to the packaged-rule tests.
|
||||
ruleSnapshots: BuiltinRuleSnapshots(loader: Self.controlFlowRuleSnapshot),
|
||||
ruleSnapshots: BuiltinRuleSnapshots(loader: ProxyRuntimeFixture.controlFlowRuleSnapshot),
|
||||
settingsRestore: RestoredProxySettings(
|
||||
settings: settings ?? ProxySettings(listen: ActivationFixture.listen),
|
||||
unreadableError: nil),
|
||||
@@ -306,34 +306,3 @@ final class ProxyControlWorkflowIntegrationTests: XCTestCase {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension ProxyControlWorkflowIntegrationTests {
|
||||
fileprivate nonisolated static func controlFlowRuleSnapshot(_ source: RulesSource) throws
|
||||
-> RuleSnapshot
|
||||
{
|
||||
switch source {
|
||||
case .geolocationCN:
|
||||
return rulesFixture(
|
||||
source,
|
||||
rules: [
|
||||
ProxyRule(action: .direct, match: .domainExact("direct.example")),
|
||||
ProxyRule(action: .direct, match: .domainSuffix("internal.example")),
|
||||
])
|
||||
case .chinaIPv4:
|
||||
return rulesFixture(
|
||||
source,
|
||||
rules: [
|
||||
ProxyRule(action: .direct, match: .ipv4CIDR("1.0.0.0/24"))
|
||||
])
|
||||
case .gfwlist:
|
||||
return rulesFixture(
|
||||
source,
|
||||
rules: [
|
||||
ProxyRule(action: .proxy, match: .domainSuffix("proxy.example")),
|
||||
ProxyRule(action: .direct, match: .domainExact("safe.proxy.example")),
|
||||
])
|
||||
case .custom, .fixed:
|
||||
throw RuleSnapshotError.missing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,10 @@ import XCTest
|
||||
/// Agent 开关与系统代理开关的拆分语义(issue #60):与既有开关用例同文件
|
||||
/// 追加(Xcode 测试扫描限制),扩展持有独立用例组。
|
||||
final class ProxyRuntimeAgentAndSystemProxyTests: ProxyRuntimeControllerTests {
|
||||
override func makeDefaultRuleSnapshots() -> BuiltinRuleSnapshots {
|
||||
BuiltinRuleSnapshots(loader: ProxyRuntimeFixture.controlFlowRuleSnapshot)
|
||||
}
|
||||
|
||||
func testEnableWithoutActiveTargetDeploysEmptyServerListening() async throws {
|
||||
_ = try makeSeededCatalog()
|
||||
let controller = makeController(
|
||||
|
||||
@@ -102,6 +102,11 @@ class ProxyRuntimeControllerTests: XCTestCase {
|
||||
return (catalog, server)
|
||||
}
|
||||
|
||||
/// Subclasses can choose small rule inputs without changing packaged-data suites.
|
||||
func makeDefaultRuleSnapshots() -> BuiltinRuleSnapshots {
|
||||
BuiltinRuleSnapshots(bundle: AppArtifact.bundle)
|
||||
}
|
||||
|
||||
func makeController(
|
||||
probe: EndpointProbing,
|
||||
agentStatus: LaunchAgentStatus = .notRegistered,
|
||||
@@ -153,7 +158,7 @@ class ProxyRuntimeControllerTests: XCTestCase {
|
||||
customRuleStore: customRuleStore
|
||||
?? CustomRuleStore(fileURL: runtime.directory.appendingPathComponent("custom-rules.json")),
|
||||
appBundle: AppArtifact.bundle,
|
||||
ruleSnapshots: ruleSnapshots,
|
||||
ruleSnapshots: ruleSnapshots ?? makeDefaultRuleSnapshots(),
|
||||
settingsRestore: restored,
|
||||
agent: agent,
|
||||
probe: probe,
|
||||
|
||||
@@ -333,3 +333,34 @@ final class InMemoryProxySettingsStore: ProxySettingsStoring {
|
||||
saved = settings
|
||||
}
|
||||
}
|
||||
|
||||
extension ProxyRuntimeFixture {
|
||||
static func controlFlowRuleSnapshot(_ source: RulesSource) throws
|
||||
-> RuleSnapshot
|
||||
{
|
||||
switch source {
|
||||
case .geolocationCN:
|
||||
return rulesFixture(
|
||||
source,
|
||||
rules: [
|
||||
ProxyRule(action: .direct, match: .domainExact("direct.example")),
|
||||
ProxyRule(action: .direct, match: .domainSuffix("internal.example")),
|
||||
])
|
||||
case .chinaIPv4:
|
||||
return rulesFixture(
|
||||
source,
|
||||
rules: [
|
||||
ProxyRule(action: .direct, match: .ipv4CIDR("1.0.0.0/24"))
|
||||
])
|
||||
case .gfwlist:
|
||||
return rulesFixture(
|
||||
source,
|
||||
rules: [
|
||||
ProxyRule(action: .proxy, match: .domainSuffix("proxy.example")),
|
||||
ProxyRule(action: .direct, match: .domainExact("safe.proxy.example")),
|
||||
])
|
||||
case .custom, .fixed:
|
||||
throw RuleSnapshotError.missing
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user