109 lines
3.2 KiB
Go
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"])
|
|
}
|
|
}
|