mirror of
https://github.com/status-im/migrate.git
synced 2025-02-22 16:08:04 +00:00
Merge pull request #88 from HaraldNordgren/error_output
Improve error output for missing or malformed '-database' and '-source' parameters
This commit is contained in:
commit
6092802b3a
@ -82,13 +82,13 @@ type Migrate struct {
|
||||
func New(sourceUrl, databaseUrl string) (*Migrate, error) {
|
||||
m := newCommon()
|
||||
|
||||
sourceName, err := schemeFromUrl(sourceUrl)
|
||||
sourceName, err := sourceSchemeFromUrl(sourceUrl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
m.sourceName = sourceName
|
||||
|
||||
databaseName, err := schemeFromUrl(databaseUrl)
|
||||
databaseName, err := databaseSchemeFromUrl(databaseUrl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
25
util.go
25
util.go
@ -1,6 +1,7 @@
|
||||
package migrate
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
nurl "net/url"
|
||||
"strings"
|
||||
@ -43,15 +44,35 @@ func suint(n int) uint {
|
||||
return uint(n)
|
||||
}
|
||||
|
||||
var errNoScheme = fmt.Errorf("no scheme")
|
||||
var errNoScheme = errors.New("no scheme")
|
||||
var errEmptyURL = errors.New("URL cannot be empty")
|
||||
|
||||
func sourceSchemeFromUrl(url string) (string, error) {
|
||||
u, err := schemeFromUrl(url)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("source: %v", err)
|
||||
}
|
||||
return u, nil
|
||||
}
|
||||
|
||||
func databaseSchemeFromUrl(url string) (string, error) {
|
||||
u, err := schemeFromUrl(url)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("database: %v", err)
|
||||
}
|
||||
return u, nil
|
||||
}
|
||||
|
||||
// schemeFromUrl returns the scheme from a URL string
|
||||
func schemeFromUrl(url string) (string, error) {
|
||||
if url == "" {
|
||||
return "", errEmptyURL
|
||||
}
|
||||
|
||||
u, err := nurl.Parse(url)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(u.Scheme) == 0 {
|
||||
return "", errNoScheme
|
||||
}
|
||||
|
83
util_test.go
83
util_test.go
@ -1,6 +1,7 @@
|
||||
package migrate
|
||||
|
||||
import (
|
||||
"errors"
|
||||
nurl "net/url"
|
||||
"testing"
|
||||
)
|
||||
@ -30,3 +31,85 @@ func TestFilterCustomQuery(t *testing.T) {
|
||||
t.Fatalf("didn't expect x-custom")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSourceSchemeFromUrlSuccess(t *testing.T) {
|
||||
urlStr := "protocol://path"
|
||||
expected := "protocol"
|
||||
|
||||
u, err := sourceSchemeFromUrl(urlStr)
|
||||
if err != nil {
|
||||
t.Fatalf("expected no error, but received %q", err)
|
||||
}
|
||||
if u != expected {
|
||||
t.Fatalf("expected %q, but received %q", expected, u)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSourceSchemeFromUrlFailure(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
urlStr string
|
||||
expectErr error
|
||||
}{
|
||||
{
|
||||
name: "Empty",
|
||||
urlStr: "",
|
||||
expectErr: errors.New("source: URL cannot be empty"),
|
||||
},
|
||||
{
|
||||
name: "NoScheme",
|
||||
urlStr: "hello",
|
||||
expectErr: errors.New("source: no scheme"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
_, err := sourceSchemeFromUrl(tc.urlStr)
|
||||
if err.Error() != tc.expectErr.Error() {
|
||||
t.Fatalf("expected %q, but received %q", tc.expectErr, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDatabaseSchemeFromUrlSuccess(t *testing.T) {
|
||||
urlStr := "protocol://path"
|
||||
expected := "protocol"
|
||||
|
||||
u, err := databaseSchemeFromUrl(urlStr)
|
||||
if err != nil {
|
||||
t.Fatalf("expected no error, but received %q", err)
|
||||
}
|
||||
if u != expected {
|
||||
t.Fatalf("expected %q, but received %q", expected, u)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDatabaseSchemeFromUrlFailure(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
urlStr string
|
||||
expectErr error
|
||||
}{
|
||||
{
|
||||
name: "Empty",
|
||||
urlStr: "",
|
||||
expectErr: errors.New("database: URL cannot be empty"),
|
||||
},
|
||||
{
|
||||
name: "NoScheme",
|
||||
urlStr: "hello",
|
||||
expectErr: errors.New("database: no scheme"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
_, err := databaseSchemeFromUrl(tc.urlStr)
|
||||
if err.Error() != tc.expectErr.Error() {
|
||||
t.Fatalf("expected %q, but received %q", tc.expectErr, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user