52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
package config
|
|
|
|
import "testing"
|
|
|
|
func TestLegacyPostgresRuntimeOptions(t *testing.T) {
|
|
for _, test := range []struct {
|
|
query string
|
|
valid bool
|
|
}{
|
|
{"", true},
|
|
{"sslmode=require", true},
|
|
{"sslmode=require&timezone=UTC&search_path=public", true},
|
|
{"sslmode=disable", false},
|
|
{"sslmode=prefer", false},
|
|
{"sslmode=verify-full", false},
|
|
{"sslmode=require&sslmode=disable", false},
|
|
{"sslmode=require&sslmode=require", false},
|
|
{"sslmode=require&options=-c%20search_path%3Dprivate", false},
|
|
{"sslmode=require&search_path=private", false},
|
|
{"sslmode=require&timezone=Asia%2FShanghai", false},
|
|
{"sslmode=require&unknown=", false},
|
|
{"sslmode=require;search_path=private", false},
|
|
{"sslmode=%zz", false},
|
|
} {
|
|
t.Run(test.query, func(t *testing.T) {
|
|
value := "postgres://smail:sample@127.0.0.1:5432/smail"
|
|
if test.query != "" {
|
|
value += "?" + test.query
|
|
}
|
|
database, password, valid := parseLegacyPostgreSQLDSN(value)
|
|
if valid != test.valid {
|
|
t.Fatalf("连接选项验证错误:%t", valid)
|
|
}
|
|
if valid && (database.Type != DatabaseTypePostgreSQL || database.Port != 5432 || password != "sample") {
|
|
t.Fatal("安全选项影响了数据库连接字段")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLegacyPostgresSetupDSNMigration(t *testing.T) {
|
|
root := t.TempDir()
|
|
writeLegacyMigrationFixture(t, root, map[string]any{
|
|
"dbType": DBTypePostgres,
|
|
"dbDSN": "postgres://smail:sample@127.0.0.1:5432/smail?sslmode=require",
|
|
})
|
|
plan, err := PlanLegacyMigration(root, RuntimeValidationOptions{})
|
|
if err != nil || len(plan.ManualFields) != 0 {
|
|
t.Fatalf("首次安装产生的安全连接串不能迁移:%v", err)
|
|
}
|
|
}
|