diff --git a/pkg/client/client.go b/pkg/client/client.go index 49b1fd698..00ff7d134 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -23,7 +23,7 @@ import ( ) var ( - regexErrAuthFailed = regexp.MustCompile(`authentication failed`) + regexErrAuthFailed = regexp.MustCompile(`(authentication failed|role "(.*)" does not exist)`) regexErrConnectionRefused = regexp.MustCompile(`(connection|actively) refused`) regexErrDatabaseNotExist = regexp.MustCompile(`database "(.*)" does not exist`) ) diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index a139f778e..f36ab6b0f 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -14,6 +14,7 @@ import ( "github.com/sosedoff/pgweb/pkg/command" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) var ( @@ -199,7 +200,46 @@ func testClientIdleTime(t *testing.T) { } func testTest(t *testing.T) { - assert.NoError(t, testClient.Test()) + examples := []struct { + name string + input string + err error + }{ + { + name: "success", + input: fmt.Sprintf("postgres://%s@%s:%s/%s?sslmode=disable", serverUser, serverHost, serverPort, serverDatabase), + err: nil, + }, + { + name: "connection refused", + input: "postgresql://localhost:5433/dbname", + err: ErrConnectionRefused, + }, + { + name: "invalid user", + input: fmt.Sprintf("postgres://%s@%s:%s/%s?sslmode=disable", "foo", serverHost, serverPort, serverDatabase), + err: ErrAuthFailed, + }, + { + name: "invalid password", + input: fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", serverUser, "foo", serverHost, serverPort, serverDatabase), + err: ErrAuthFailed, + }, + { + name: "invalid database", + input: fmt.Sprintf("postgres://%s@%s:%s/%s?sslmode=disable", serverUser, serverHost, serverPort, "foo"), + err: ErrDatabaseNotExist, + }, + } + + for _, ex := range examples { + t.Run(ex.name, func(t *testing.T) { + conn, err := NewFromUrl(ex.input, nil) + require.NoError(t, err) + + require.Equal(t, ex.err, conn.Test()) + }) + } } func testInfo(t *testing.T) {