mydb/adapter/postgresql/connection_pq_test.go
2023-09-18 15:15:42 +08:00

109 lines
3.2 KiB
Go

//go:build pq
// +build pq
package postgresql
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestConnectionURL(t *testing.T) {
c := ConnectionURL{}
// Default connection string is empty.
assert.Equal(t, "", c.String(), "Expecting default connectiong string to be empty")
// Adding a host with port.
c.Host = "localhost:1234"
assert.Equal(t, "host=localhost port=1234 sslmode=prefer", c.String())
// Adding a host.
c.Host = "localhost"
assert.Equal(t, "host=localhost sslmode=prefer", c.String())
// Adding a username.
c.User = "Anakin"
assert.Equal(t, `host=localhost sslmode=prefer user=Anakin`, c.String())
// Adding a password with special characters.
c.Password = "Some Sort of ' Password"
assert.Equal(t, `host=localhost password=Some\ Sort\ of\ \'\ Password sslmode=prefer user=Anakin`, c.String())
// Adding a port.
c.Host = "localhost:1234"
assert.Equal(t, `host=localhost password=Some\ Sort\ of\ \'\ Password port=1234 sslmode=prefer user=Anakin`, c.String())
// Adding a database.
c.Database = "MyDatabase"
assert.Equal(t, `dbname=MyDatabase host=localhost password=Some\ Sort\ of\ \'\ Password port=1234 sslmode=prefer user=Anakin`, c.String())
// Adding options.
c.Options = map[string]string{
"sslmode": "verify-full",
}
assert.Equal(t, `dbname=MyDatabase host=localhost password=Some\ Sort\ of\ \'\ Password port=1234 sslmode=verify-full user=Anakin`, c.String())
}
func TestParseConnectionURL(t *testing.T) {
{
s := "postgres://anakin:skywalker@localhost/jedis"
u, err := ParseURL(s)
assert.NoError(t, err)
assert.Equal(t, "anakin", u.User)
assert.Equal(t, "skywalker", u.Password)
assert.Equal(t, "localhost", u.Host)
assert.Equal(t, "jedis", u.Database)
assert.Zero(t, u.Options["sslmode"], "Failed to parse SSLMode.")
}
{
// case with port
s := "postgres://anakin:skywalker@localhost:1234/jedis"
u, err := ParseURL(s)
assert.NoError(t, err)
assert.Equal(t, "anakin", u.User)
assert.Equal(t, "skywalker", u.Password)
assert.Equal(t, "jedis", u.Database)
assert.Equal(t, "localhost:1234", u.Host)
assert.Zero(t, u.Options["sslmode"], "Failed to parse SSLMode.")
}
{
s := "postgres://anakin:skywalker@localhost/jedis?sslmode=verify-full"
u, err := ParseURL(s)
assert.NoError(t, err)
assert.Equal(t, "verify-full", u.Options["sslmode"])
}
{
s := "user=anakin password=skywalker host=localhost dbname=jedis"
u, err := ParseURL(s)
assert.NoError(t, err)
assert.Equal(t, "anakin", u.User)
assert.Equal(t, "skywalker", u.Password)
assert.Equal(t, "jedis", u.Database)
assert.Equal(t, "localhost", u.Host)
assert.Zero(t, u.Options["sslmode"], "Failed to parse SSLMode.")
}
{
s := "user=anakin password=skywalker host=localhost dbname=jedis sslmode=verify-full"
u, err := ParseURL(s)
assert.NoError(t, err)
assert.Equal(t, "verify-full", u.Options["sslmode"])
}
{
s := "user=anakin password=skywalker host=localhost dbname=jedis sslmode=verify-full timezone=UTC"
u, err := ParseURL(s)
assert.NoError(t, err)
assert.Equal(t, 2, len(u.Options), "Expecting exactly two options")
assert.Equal(t, "verify-full", u.Options["sslmode"])
assert.Equal(t, "UTC", u.Options["timezone"])
}
}