Backport #28085 by @wxiaoguang Fix #28083 and fix the tests Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>tags/v1.21.1
@@ -109,7 +109,7 @@ func DBConnStr() (string, error) { | |||
connStr = fmt.Sprintf("%s:%s@%s(%s)/%s%scharset=%s&parseTime=true&tls=%s", | |||
Database.User, Database.Passwd, connType, Database.Host, Database.Name, paramSep, Database.MysqlCharset, tls) | |||
case "postgres": | |||
connStr = getPostgreSQLConnectionString(Database.Host, Database.User, Database.Passwd, Database.Name, paramSep, Database.SSLMode) | |||
connStr = getPostgreSQLConnectionString(Database.Host, Database.User, Database.Passwd, Database.Name, Database.SSLMode) | |||
case "mssql": | |||
host, port := ParseMSSQLHostPort(Database.Host) | |||
connStr = fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", host, port, Database.Name, Database.User, Database.Passwd) | |||
@@ -157,7 +157,8 @@ func parsePostgreSQLHostPort(info string) (host, port string) { | |||
return host, port | |||
} | |||
func getPostgreSQLConnectionString(dbHost, dbUser, dbPasswd, dbName, dbParam, dbsslMode string) (connStr string) { | |||
func getPostgreSQLConnectionString(dbHost, dbUser, dbPasswd, dbName, dbsslMode string) (connStr string) { | |||
dbName, dbParam, _ := strings.Cut(dbName, "?") | |||
host, port := parsePostgreSQLHostPort(dbHost) | |||
connURL := url.URL{ | |||
Scheme: "postgres", |
@@ -59,38 +59,39 @@ func Test_parsePostgreSQLHostPort(t *testing.T) { | |||
func Test_getPostgreSQLConnectionString(t *testing.T) { | |||
tests := []struct { | |||
Host string | |||
Port string | |||
User string | |||
Passwd string | |||
Name string | |||
Param string | |||
SSLMode string | |||
Output string | |||
}{ | |||
{ | |||
Host: "/tmp/pg.sock", | |||
Port: "4321", | |||
User: "testuser", | |||
Passwd: "space space !#$%^^%^```-=?=", | |||
Name: "gitea", | |||
Param: "", | |||
SSLMode: "false", | |||
Output: "postgres://testuser:space%20space%20%21%23$%25%5E%5E%25%5E%60%60%60-=%3F=@:5432/gitea?host=%2Ftmp%2Fpg.sock&sslmode=false", | |||
}, | |||
{ | |||
Host: "localhost", | |||
Port: "1234", | |||
User: "pgsqlusername", | |||
Passwd: "I love Gitea!", | |||
Name: "gitea", | |||
Param: "", | |||
SSLMode: "true", | |||
Output: "postgres://pgsqlusername:I%20love%20Gitea%21@localhost:5432/gitea?sslmode=true", | |||
}, | |||
{ | |||
Host: "localhost:1234", | |||
User: "user", | |||
Passwd: "pass", | |||
Name: "gitea?param=1", | |||
Output: "postgres://user:pass@localhost:1234/gitea?param=1&sslmode=", | |||
}, | |||
} | |||
for _, test := range tests { | |||
connStr := getPostgreSQLConnectionString(test.Host, test.User, test.Passwd, test.Name, test.Param, test.SSLMode) | |||
connStr := getPostgreSQLConnectionString(test.Host, test.User, test.Passwd, test.Name, test.SSLMode) | |||
assert.Equal(t, test.Output, connStr) | |||
} | |||
} |