Files
MyGoNavi/internal/app/global_proxy_database_scope_test.go
Syngnat 0136b87311 🐛 fix(proxy): 避免全局代理影响数据库连接
移除数据库和 Redis 连接对全局代理的隐式继承

保留连接自身代理与 HTTP 隧道配置并修正缓存释放链路

同步六种语言的代理作用域说明并增加回归测试

Fixes #347
2026-07-18 16:43:39 +08:00

53 lines
1.5 KiB
Go

package app
import (
"testing"
"GoNavi-Wails/internal/connection"
)
func TestResolveEffectiveConnectionConfigUsesOnlyConnectionProxy(t *testing.T) {
snapshot := currentGlobalProxyConfig()
if _, err := setGlobalProxyConfig(true, connection.ProxyConfig{
Type: "socks5",
Host: "127.0.0.1",
Port: 1080,
}); err != nil {
t.Fatalf("enable global proxy failed: %v", err)
}
t.Cleanup(func() {
_, _ = setGlobalProxyConfig(snapshot.Enabled, snapshot.Proxy)
})
app := NewApp()
directConfig := connection.ConnectionConfig{
Type: "mysql",
Host: "db.internal",
Port: 3306,
}
effectiveDirect, err := app.resolveEffectiveConnectionConfig(directConfig)
if err != nil {
t.Fatalf("resolve direct config failed: %v", err)
}
if effectiveDirect.UseProxy || effectiveDirect.Proxy != (connection.ProxyConfig{}) {
t.Fatalf("global proxy must not be injected into a direct database connection, got %+v", effectiveDirect)
}
connectionProxy := connection.ProxyConfig{
Type: "http",
Host: "db-proxy.internal",
Port: 8080,
User: "proxy-user",
}
proxiedConfig := directConfig
proxiedConfig.UseProxy = true
proxiedConfig.Proxy = connectionProxy
effectiveProxied, err := app.resolveEffectiveConnectionConfig(proxiedConfig)
if err != nil {
t.Fatalf("resolve proxied config failed: %v", err)
}
if !effectiveProxied.UseProxy || !proxyConfigEqual(effectiveProxied.Proxy, connectionProxy) {
t.Fatalf("connection-specific proxy must be preserved, got %+v", effectiveProxied)
}
}