Files
Havline/internal/frp/config_test.go
T
mrlee 278f8267b7 chore: 初始提交 Fonu 1.0.2
- 公网反代:Nginx 状态卡片(版本 / 运行状态 / 配置校验 / 端口监听)
- 部署设置第一、二梯队(HTTPS 开关、安全头、限流、连接数、仅中国大陆 IP)
- 隧道检测兼容 frps v0.68 / v0.71(V2 与旧版端点)
- 恢复被清空的 internal/frp/store.go、internal/api/ddns_handler.go、web/src/views/DdnsView.vue
2026-09-23 09:40:59 +08:00

66 lines
2.7 KiB
Go

package frp
import (
"strings"
"testing"
)
func TestRenderTOML(t *testing.T) {
remotePort := 60022
content := renderTOML(renderedConfig{
Server: Server{ServerAddr: "vps.example.com", ServerPort: 7000, TLS: true},
Token: "token with \"quotes\"",
Proxies: []Proxy{
{Name: "nas-ssh", Type: "tcp", LocalIP: "127.0.0.1", LocalPort: 22, RemotePort: &remotePort},
{Name: "nas-web", Type: "http", LocalIP: "127.0.0.1", LocalPort: 18080, CustomDomains: []string{"nas.example.com"}},
},
})
for _, expected := range []string{
`serverAddr = "vps.example.com"`,
`auth.token = "token with \"quotes\""`,
`remotePort = 60022`,
`customDomains = ["nas.example.com"]`,
} {
if !strings.Contains(content, expected) {
t.Fatalf("配置缺少 %q:\n%s", expected, content)
}
}
}
func TestRenderMaskedTOMLDoesNotExposeToken(t *testing.T) {
content := renderMaskedTOML(Server{ServerAddr: "vps.example.com", ServerPort: 7000, TLS: true}, nil)
if !strings.Contains(content, `auth.token = "********"`) {
t.Fatalf("脱敏配置未隐藏 Token:\n%s", content)
}
}
func TestRenderProxyOptions(t *testing.T) {
content := renderTOML(renderedConfig{Server: Server{ServerAddr: "vps.example.com", ServerPort: 7000}, Proxies: []Proxy{
{Name: "udp", Type: "udp", LocalIP: "127.0.0.1", LocalPort: 53, RemotePort: intPtr(6002), Options: ProxyOptions{Transport: ProxyTransportOptions{UseEncryption: true, ProxyProtocolVersion: "v2"}, HealthCheck: ProxyHealthCheckOptions{Type: "tcp"}}},
{Name: "secret", Type: "stcp", LocalIP: "127.0.0.1", LocalPort: 22, Options: ProxyOptions{SecretKey: "secret", AllowUsers: []string{"*"}}},
}})
for _, expected := range []string{`type = "udp"`, `remotePort = 6002`, `transport.useEncryption = true`, `transport.proxyProtocolVersion = "v2"`, `healthCheck.type = "tcp"`, `secretKey = "secret"`, `allowUsers = ["*"]`} {
if !strings.Contains(content, expected) {
t.Fatalf("配置缺少 %q:\n%s", expected, content)
}
}
}
func TestRenderNATTraversalOnlyWhenDisabledAssistedAddrs(t *testing.T) {
omitted := renderTOML(renderedConfig{Proxies: []Proxy{
{Name: "p2p", Type: "xtcp", Options: ProxyOptions{NATTraversal: &ProxyNATTraversal{}}},
}})
if strings.Contains(omitted, "natTraversal") {
t.Fatalf("disableAssistedAddrs=false 不应渲染 natTraversal(旧版 frpc 校验会失败):\n%s", omitted)
}
enabled := renderTOML(renderedConfig{Proxies: []Proxy{
{Name: "p2p", Type: "xtcp", Options: ProxyOptions{NATTraversal: &ProxyNATTraversal{DisableAssistedAddrs: true}}},
}})
if !strings.Contains(enabled, "natTraversal.disableAssistedAddrs = true") {
t.Fatalf("disableAssistedAddrs=true 应渲染 natTraversal:\n%s", enabled)
}
}
func intPtr(value int) *int { return &value }