mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-14 02:19:58 +08:00
🐛 fix(driver): 允许旧驱动代理继续连接并保留重装提示
This commit is contained in:
@@ -803,15 +803,31 @@ func verifyRuntimeOptionalDriverAgentRevision(config connection.ConnectionConfig
|
||||
if packageMetaExists {
|
||||
selectedVersion = strings.TrimSpace(pkg.Version)
|
||||
}
|
||||
agentRevision, err := verifyInstalledOptionalDriverAgentRevision(driverType, executablePath, selectedVersion)
|
||||
if !shouldVerifyOptionalDriverAgentRevision(driverType, selectedVersion) {
|
||||
return nil
|
||||
}
|
||||
expectedRevision := strings.TrimSpace(db.OptionalDriverAgentRevision(driverType))
|
||||
if expectedRevision == "" {
|
||||
return nil
|
||||
}
|
||||
displayName := resolveDriverDisplayName(driverDefinition{Type: driverType})
|
||||
agentRevision, current, err := optionalDriverAgentRevisionCurrent(driverType, executablePath)
|
||||
if err != nil {
|
||||
return err
|
||||
logger.Warnf("%s driver-agent revision 元数据不可用,继续使用已安装代理:version=%s path=%s err=%v;建议在驱动管理中重装",
|
||||
displayName, selectedVersion, executablePath, err)
|
||||
return nil
|
||||
}
|
||||
if expectedRevision := strings.TrimSpace(db.OptionalDriverAgentRevision(driverType)); expectedRevision != "" {
|
||||
displayName := resolveDriverDisplayName(driverDefinition{Type: driverType})
|
||||
logger.Infof("%s driver-agent revision 校验通过:已安装=%s 当前需要=%s version=%s path=%s",
|
||||
displayName, strings.TrimSpace(agentRevision), expectedRevision, selectedVersion, executablePath)
|
||||
if !current {
|
||||
actualLabel := strings.TrimSpace(agentRevision)
|
||||
if actualLabel == "" {
|
||||
actualLabel = "空"
|
||||
}
|
||||
logger.Warnf("%s driver-agent revision 不匹配,继续使用已安装代理:已安装=%s 当前需要=%s version=%s path=%s;建议在驱动管理中重装",
|
||||
displayName, actualLabel, expectedRevision, selectedVersion, executablePath)
|
||||
return nil
|
||||
}
|
||||
logger.Infof("%s driver-agent revision 校验通过:已安装=%s 当前需要=%s version=%s path=%s",
|
||||
displayName, strings.TrimSpace(agentRevision), expectedRevision, selectedVersion, executablePath)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ func TestVerifyInstalledOptionalDriverAgentRevisionRejectsProbeFailure(t *testin
|
||||
}
|
||||
}
|
||||
|
||||
func TestVerifyRuntimeOptionalDriverAgentRevisionRejectsStaleOceanBaseAgent(t *testing.T) {
|
||||
func TestVerifyRuntimeOptionalDriverAgentRevisionAllowsStaleOceanBaseAgent(t *testing.T) {
|
||||
originalProbe := optionalDriverAgentMetadataProbe
|
||||
t.Cleanup(func() {
|
||||
optionalDriverAgentMetadataProbe = originalProbe
|
||||
@@ -92,11 +92,23 @@ func TestVerifyRuntimeOptionalDriverAgentRevisionRejectsStaleOceanBaseAgent(t *t
|
||||
}
|
||||
|
||||
err := verifyRuntimeOptionalDriverAgentRevision(connection.ConnectionConfig{Type: "oceanbase"})
|
||||
if err == nil {
|
||||
t.Fatal("expected stale OceanBase agent revision to be rejected")
|
||||
if err != nil {
|
||||
t.Fatalf("runtime revision mismatch should warn and continue, got %v", err)
|
||||
}
|
||||
if !strings.Contains(err.Error(), "revision 不匹配") {
|
||||
t.Fatalf("expected revision mismatch error, got %v", err)
|
||||
}
|
||||
|
||||
func TestVerifyRuntimeOptionalDriverAgentRevisionAllowsMetadataProbeFailure(t *testing.T) {
|
||||
originalProbe := optionalDriverAgentMetadataProbe
|
||||
t.Cleanup(func() {
|
||||
optionalDriverAgentMetadataProbe = originalProbe
|
||||
})
|
||||
optionalDriverAgentMetadataProbe = func(driverType string, executablePath string) (db.OptionalDriverAgentMetadata, error) {
|
||||
return db.OptionalDriverAgentMetadata{}, errOptionalDriverAgentMetadataUnavailable
|
||||
}
|
||||
|
||||
err := verifyRuntimeOptionalDriverAgentRevision(connection.ConnectionConfig{Type: "sqlserver"})
|
||||
if err != nil {
|
||||
t.Fatalf("runtime metadata probe failure should warn and continue, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -963,7 +963,7 @@ func TestEnsureOptionalDriverAgentBinaryFallsBackAfterStaleDownloadRevision(t *t
|
||||
goScript += ".bat"
|
||||
}
|
||||
if runtime.GOOS == "windows" {
|
||||
if err := os.WriteFile(goScript, []byte("@echo off\r\nset out=\r\n:loop\r\nif \"%1\"==\"\" goto done\r\nif \"%1\"==\"-o\" (set out=%2& shift& shift& goto loop)\r\nshift\r\ngoto loop\r\n:done\r\ncopy /Y \"%GONAVI_TEST_BUILT_AGENT%\" \"%out%\" >nul\r\n"), 0o755); err != nil {
|
||||
if err := os.WriteFile(goScript, []byte("@echo off\r\nsetlocal\r\nset \"out=\"\r\n:loop\r\nif \"%~1\"==\"\" goto done\r\nif \"%~1\"==\"-o\" goto capture\r\nshift\r\ngoto loop\r\n:capture\r\nset \"out=%~2\"\r\nshift\r\nshift\r\ngoto loop\r\n:done\r\nif \"%out%\"==\"\" exit /b 1\r\ncopy /Y \"%GONAVI_TEST_BUILT_AGENT%\" \"%out%\" >nul\r\n"), 0o755); err != nil {
|
||||
t.Fatalf("write fake go script failed: %v", err)
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user