diff --git a/internal/sql_workbench/client/sql_workbench_client.go b/internal/sql_workbench/client/sql_workbench_client.go index cd46109c..399d2e92 100644 --- a/internal/sql_workbench/client/sql_workbench_client.go +++ b/internal/sql_workbench/client/sql_workbench_client.go @@ -979,6 +979,7 @@ type CreateDatasourceRequest struct { Host string `json:"host"` Port string `json:"port"` DefaultSchema *string `json:"defaultSchema,omitempty"` + PasswordSaved bool `json:"passwordSaved"` } // UpdateDatasourceRequest 更新数据源请求结构 @@ -999,6 +1000,7 @@ type UpdateDatasourceRequest struct { Host string `json:"host"` Port string `json:"port"` DefaultSchema *string `json:"defaultSchema,omitempty"` + PasswordSaved bool `json:"passwordSaved"` } // DataSourceStatus 数据源状态结构 diff --git a/internal/sql_workbench/service/sql_workbench_service.go b/internal/sql_workbench/service/sql_workbench_service.go index e8aa1494..ef8fb3ac 100644 --- a/internal/sql_workbench/service/sql_workbench_service.go +++ b/internal/sql_workbench/service/sql_workbench_service.go @@ -937,6 +937,7 @@ func (sqlWorkbenchService *SqlWorkbenchService) buildCreateDatasourceRequest(ctx EnvironmentID: baseInfo.EnvironmentID, JdbcURLParameters: baseInfo.JDBCParams, DefaultSchema: baseInfo.DefaultSchema, + PasswordSaved: true, }, nil } @@ -960,6 +961,7 @@ func (sqlWorkbenchService *SqlWorkbenchService) buildUpdateDatasourceRequest(ctx EnvironmentID: baseInfo.EnvironmentID, JdbcURLParameters: mapPtr(baseInfo.JDBCParams), DefaultSchema: baseInfo.DefaultSchema, + PasswordSaved: true, }, nil } diff --git a/internal/sql_workbench/service/sql_workbench_service_test.go b/internal/sql_workbench/service/sql_workbench_service_test.go index a8b8031e..090ad66c 100644 --- a/internal/sql_workbench/service/sql_workbench_service_test.go +++ b/internal/sql_workbench/service/sql_workbench_service_test.go @@ -1,10 +1,12 @@ package sql_workbench import ( + "encoding/json" "strings" "testing" "github.com/actiontech/dms/internal/dms/biz" + "github.com/actiontech/dms/internal/sql_workbench/client" pkgConst "github.com/actiontech/dms/internal/dms/pkg/constant" pkgParams "github.com/actiontech/dms/pkg/params" ) @@ -282,3 +284,86 @@ func Test_buildDatasourceBaseInfo_DB2(t *testing.T) { func strPtr(s string) *string { return &s } + +func Test_odcDatasourceRequests_includePasswordSaved(t *testing.T) { + pwd := "secret" + createReq := client.CreateDatasourceRequest{ + Name: "proj:ds", + Type: "MYSQL", + Username: "u", + Password: pwd, + PasswordSaved: true, + } + createJSON, err := json.Marshal(createReq) + if err != nil { + t.Fatalf("marshal create request: %v", err) + } + if !strings.Contains(string(createJSON), `"passwordSaved":true`) { + t.Fatalf("create request JSON missing passwordSaved:true: %s", createJSON) + } + + updateReq := client.UpdateDatasourceRequest{ + Type: "MYSQL", + Username: "u", + Password: &pwd, + PasswordSaved: true, + } + updateJSON, err := json.Marshal(updateReq) + if err != nil { + t.Fatalf("marshal update request: %v", err) + } + if !strings.Contains(string(updateJSON), `"passwordSaved":true`) { + t.Fatalf("update request JSON missing passwordSaved:true: %s", updateJSON) + } +} + +func Test_buildOdcCreateAndUpdateRequests_setPasswordSaved(t *testing.T) { + svc := &SqlWorkbenchService{} + baseInfo, err := svc.fillDatasourceBaseInfo("proj:ds", &biz.DBService{ + Name: "ds", + DBType: "MySQL", + User: "root", + Password: "pass", + Host: "127.0.0.1", + Port: "3306", + }, 1) + if err != nil { + t.Fatalf("fillDatasourceBaseInfo: %v", err) + } + + createReq := client.CreateDatasourceRequest{ + Type: baseInfo.Type, + Name: baseInfo.Name, + Username: baseInfo.Username, + Password: baseInfo.Password, + Host: baseInfo.Host, + Port: baseInfo.Port, + EnvironmentID: baseInfo.EnvironmentID, + PasswordSaved: true, + } + createJSON, err := json.Marshal(createReq) + if err != nil { + t.Fatalf("marshal create: %v", err) + } + if !strings.Contains(string(createJSON), `"passwordSaved":true`) { + t.Fatalf("expected passwordSaved in create JSON: %s", createJSON) + } + + updateReq := client.UpdateDatasourceRequest{ + Type: baseInfo.Type, + Name: &baseInfo.Name, + Username: baseInfo.Username, + Password: &baseInfo.Password, + Host: baseInfo.Host, + Port: baseInfo.Port, + EnvironmentID: baseInfo.EnvironmentID, + PasswordSaved: true, + } + updateJSON, err := json.Marshal(updateReq) + if err != nil { + t.Fatalf("marshal update: %v", err) + } + if !strings.Contains(string(updateJSON), `"passwordSaved":true`) { + t.Fatalf("expected passwordSaved in update JSON: %s", updateJSON) + } +}