test: 为代理控制集成测试注入小规则夹具

This commit is contained in:
Qiu Yuzhou
2026-10-04 00:22:45 +08:00
parent 0235e64ad1
commit 7fb736f53e
@@ -73,6 +73,8 @@ final class ProxyControlWorkflowIntegrationTests: XCTestCase {
settings: ActivationFixture.listen, unreadableError: nil),
settingsStore: settingsStore ?? InMemoryProxySettingsStore(),
appBundle: AppArtifact.bundle,
// Keep real ACL compilation; corpus coverage belongs to the packaged-rule tests.
ruleSnapshots: BuiltinRuleSnapshots(loader: Self.controlFlowRuleSnapshot),
settingsRestore: RestoredProxySettings(
settings: settings ?? ProxySettings(listen: ActivationFixture.listen),
unreadableError: nil),
@@ -304,3 +306,34 @@ 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
}
}
}