67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
|
package pq
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestSimpleParseURL(t *testing.T) {
|
||
|
expected := "host=hostname.remote"
|
||
|
str, err := ParseURL("postgres://hostname.remote")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if str != expected {
|
||
|
t.Fatalf("unexpected result from ParseURL:\n+ %v\n- %v", str, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestIPv6LoopbackParseURL(t *testing.T) {
|
||
|
expected := "host=::1 port=1234"
|
||
|
str, err := ParseURL("postgres://[::1]:1234")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if str != expected {
|
||
|
t.Fatalf("unexpected result from ParseURL:\n+ %v\n- %v", str, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestFullParseURL(t *testing.T) {
|
||
|
expected := `dbname=database host=hostname.remote password=top\ secret port=1234 user=username`
|
||
|
str, err := ParseURL("postgres://username:top%20secret@hostname.remote:1234/database")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if str != expected {
|
||
|
t.Fatalf("unexpected result from ParseURL:\n+ %s\n- %s", str, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestInvalidProtocolParseURL(t *testing.T) {
|
||
|
_, err := ParseURL("http://hostname.remote")
|
||
|
switch err {
|
||
|
case nil:
|
||
|
t.Fatal("Expected an error from parsing invalid protocol")
|
||
|
default:
|
||
|
msg := "invalid connection protocol: http"
|
||
|
if err.Error() != msg {
|
||
|
t.Fatalf("Unexpected error message:\n+ %s\n- %s",
|
||
|
err.Error(), msg)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMinimalURL(t *testing.T) {
|
||
|
cs, err := ParseURL("postgres://")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if cs != "" {
|
||
|
t.Fatalf("expected blank connection string, got: %q", cs)
|
||
|
}
|
||
|
}
|