From d5688d31f6dacdcf49c1e6d9c670b0a89d992dcf Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 12 Jun 2026 11:41:26 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(driver):=20=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E6=97=A7=E9=A9=B1=E5=8A=A8=E4=BB=A3=E7=90=86=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E8=BF=9E=E6=8E=A5=E5=B9=B6=E4=BF=9D=E7=95=99=E9=87=8D?= =?UTF-8?q?=E8=A3=85=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/app/app.go | 28 +++++++++++++++---- .../app/methods_driver_agent_revision_test.go | 22 +++++++++++---- internal/app/methods_driver_version_test.go | 2 +- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index e9e20e3..9e9e4d8 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -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 } diff --git a/internal/app/methods_driver_agent_revision_test.go b/internal/app/methods_driver_agent_revision_test.go index 59aa051..243e8ef 100644 --- a/internal/app/methods_driver_agent_revision_test.go +++ b/internal/app/methods_driver_agent_revision_test.go @@ -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) } } diff --git a/internal/app/methods_driver_version_test.go b/internal/app/methods_driver_version_test.go index e7764b9..99a9e49 100644 --- a/internal/app/methods_driver_version_test.go +++ b/internal/app/methods_driver_version_test.go @@ -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 {