fix(remote): VNC 升级支持最新版 TightVNC——修 ReadVncServerConfig 的 ConnectToRdp 误读 ExtraPorts、补 WriteVncServerConfig 漏写的 LogLevel(读/写均达 37 项全集)、InstallVncServer 从固定密码空壳实现为真安装(校验 exe→写最新版全集配置+随机密码→注册服务, 装而不启/运行中重启, 返回明文密码); 锁定最新版默认值与安装异常路径的单测

This commit is contained in:
w11
2026-09-23 19:39:08 +08:00
parent 181150b7a1
commit 38e44f7b4a
4 changed files with 90 additions and 50 deletions
+42
View File
@@ -49,3 +49,45 @@ func TestVncServerDefaultConfig(t *testing.T) {
t.Error("HttpPort 不应为 0")
}
}
// TestVncClientDefaultConfigLatest 锁定对最新版 TightVNC(2.8.x) 注册表全集的支持:
// 值与本机最新版安装器落盘值逐项对齐(AcceptHttpConnections/RunControlInterface
// 为安全策略有意取 0:不开 5800 Web 通道、不显托盘)。
func TestVncClientDefaultConfigLatest(t *testing.T) {
cfg := VncClientDefaultConfig(false)
if cfg.RfbPort != 5900 || cfg.HttpPort != 5800 {
t.Errorf("端口 = %d/%d, want 5900/5800", cfg.RfbPort, cfg.HttpPort)
}
// 最新版捕获能力:镜像驱动 + D3D + 透明窗口 + 视频区域识别
if cfg.UseMirrorDriver != 1 || cfg.UseD3D != 1 {
t.Errorf("捕获开关 = mirror:%d d3d:%d, want 1/1", cfg.UseMirrorDriver, cfg.UseD3D)
}
if cfg.GrabTransparentWindows != 1 || cfg.VideoRecognitionInterval != 3000 {
t.Errorf("透明窗口/视频识别 = %d/%d, want 1/3000", cfg.GrabTransparentWindows, cfg.VideoRecognitionInterval)
}
// 安全策略:不开 HTTP 通道、不出托盘控制台、不接 RDP 会话
if cfg.AcceptHttpConnections != 0 || cfg.RunControlInterface != 0 || cfg.ConnectToRdp != 0 {
t.Errorf("安全策略 = http:%d tray:%d rdp:%d, want 0/0/0", cfg.AcceptHttpConnections, cfg.RunControlInterface, cfg.ConnectToRdp)
}
// 连接行为:VNC 认证 + 接受 RFB + 本机输入优先 + 断开踢旧连接
if cfg.AcceptRfbConnections != 1 || cfg.UseVncAuthentication != 1 || cfg.LocalInputPriority != 1 || cfg.DisconnectClients != 1 {
t.Errorf("连接行为异常: %+v", cfg)
}
if cfg.QueryTimeout != 30 || cfg.LocalInputPriorityTimeout != 3 || cfg.PollingInterval != 1000 || cfg.AllowLoopback != 1 {
t.Errorf("超时/轮询/环回异常: %+v", cfg)
}
if len(cfg.Password) == 0 {
t.Error("固定密码密文不应为空")
}
if dec := VncPasswordDecrypt(cfg.Password); dec != "tvncpass" {
t.Errorf("固定密码回解 = %q, want tvncpass", dec)
}
}
// TestInstallVncServerMissingExe 安装入口对 tvnserver.exe 缺失必须报错(不触注册表/服务)
func TestInstallVncServerMissingExe(t *testing.T) {
_, err := InstallVncServer(`Z:\no\such\dir\tvnserver.exe`)
if err == nil {
t.Fatal("exe 不存在时应返回错误")
}
}