From ad9d800dee09fc94b33d990e4c6b042d6fc8a3bf Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 29 Mar 2019 20:32:20 +0300 Subject: [PATCH 01/35] Enabled maligned check --- .golangci.yml | 2 +- migrate.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index c809d521e..737123729 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -14,7 +14,7 @@ linters: - goconst - gofmt - misspell - #- maligned + - maligned - unparam - nakedret - prealloc diff --git a/migrate.go b/migrate.go index ba7d329fd..426705990 100644 --- a/migrate.go +++ b/migrate.go @@ -64,11 +64,11 @@ type Migrate struct { // GracefulStop accepts `true` and will stop executing migrations // as soon as possible at a safe break point, so that the database // is not corrupted. - GracefulStop chan bool - isGracefulStop bool + GracefulStop chan bool + isLockedMu *sync.Mutex - isLockedMu *sync.Mutex - isLocked bool + isGracefulStop bool + isLocked bool // PrefetchMigrations defaults to DefaultPrefetchMigrations, // but can be set per Migrate instance. From e932b05f7316e9a0e820dec4edd82ab228da374b Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 29 Mar 2019 22:09:45 +0300 Subject: [PATCH 02/35] Enabled staticcheck --- .golangci.yml | 1 - database/testing/testing.go | 63 ++++++++++++++++++++++++------------- testing/docker.go | 12 +++---- 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 737123729..e4fb3ee86 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -21,7 +21,6 @@ linters: #- gosec disable: - errcheck - - staticcheck linters-settings: misspell: locale: US diff --git a/database/testing/testing.go b/database/testing/testing.go index b227c6088..3304443fa 100644 --- a/database/testing/testing.go +++ b/database/testing/testing.go @@ -5,6 +5,7 @@ package testing import ( "bytes" + "errors" "fmt" "io" "testing" @@ -39,7 +40,9 @@ func TestNilVersion(t *testing.T, d database.Driver) { func TestLockAndUnlock(t *testing.T, d database.Driver) { // add a timeout, in case there is a deadlock - done := make(chan bool, 1) + done := make(chan struct{}) + errs := make(chan error) + go func() { timeout := time.After(15 * time.Second) for { @@ -47,36 +50,52 @@ func TestLockAndUnlock(t *testing.T, d database.Driver) { case <-done: return case <-timeout: - t.Fatal(fmt.Sprintf("Timeout after 15 seconds. Looks like a deadlock in Lock/UnLock.\n%#v", d)) + errs <- fmt.Errorf("Timeout after 15 seconds. Looks like a deadlock in Lock/UnLock.\n%#v", d) + return } } }() - defer func() { - done <- true - }() // run the locking test ... + go func() { + if err := d.Lock(); err != nil { + errs <- err + return + } - if err := d.Lock(); err != nil { - t.Fatal(err) - } + // try to acquire lock again + if err := d.Lock(); err == nil { + errs <- errors.New("lock: expected err not to be nil") + return + } - // try to acquire lock again - if err := d.Lock(); err == nil { - t.Fatal("Lock: expected err not to be nil") - } + // unlock + if err := d.Unlock(); err != nil { + errs <- err + return + } - // unlock - if err := d.Unlock(); err != nil { - t.Fatal(err) - } + // try to lock + if err := d.Lock(); err != nil { + errs <- err + return + } + if err := d.Unlock(); err != nil { + errs <- err + return + } + // notify everyone + close(done) + }() - // try to lock - if err := d.Lock(); err != nil { - t.Fatal(err) - } - if err := d.Unlock(); err != nil { - t.Fatal(err) + // wait for done or any error + for { + select { + case <-done: + return + case err := <-errs: + t.Fatal(err) + } } } diff --git a/testing/docker.go b/testing/docker.go index 4c43e0811..5c66f66b3 100644 --- a/testing/docker.go +++ b/testing/docker.go @@ -201,15 +201,13 @@ func (d *DockerContainer) portMapping(selectFirst bool, cPort int) (containerPor // Skip ahead until we find the port we want continue } - for _, binding := range bindings { - hostPortUint, err := strconv.ParseUint(binding.HostPort, 10, 64) - if err != nil { - return 0, "", 0, err - } - - return uint(port.Int()), binding.HostIP, uint(hostPortUint), nil + hostPortUint, err := strconv.ParseUint(bindings[0].HostPort, 10, 64) + if err != nil { + return 0, "", 0, err } + + return uint(port.Int()), bindings[0].HostIP, uint(hostPortUint), nil } if selectFirst { From 75f1059410b0411686ade8cdf6cda440ccc4f83f Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Sat, 30 Mar 2019 00:10:35 +0300 Subject: [PATCH 03/35] Fixes for golint --- database/cockroachdb/cockroachdb.go | 4 ++-- database/mysql/mysql.go | 4 ++-- database/postgres/postgres.go | 4 ++-- database/stub/stub.go | 4 ++-- database/util.go | 8 +++---- database/util_test.go | 2 +- migrate.go | 22 +++++++++---------- source/file/file.go | 15 +++++-------- .../go_bindata/examples/migrations/bindata.go | 14 ++++++------ source/stub/stub.go | 14 ++++++------ util.go | 12 +++++----- util_test.go | 8 +++---- 12 files changed, 54 insertions(+), 57 deletions(-) diff --git a/database/cockroachdb/cockroachdb.go b/database/cockroachdb/cockroachdb.go index c18edcd7a..850db6672 100644 --- a/database/cockroachdb/cockroachdb.go +++ b/database/cockroachdb/cockroachdb.go @@ -151,7 +151,7 @@ func (c *CockroachDb) Close() error { // See: https://github.com/cockroachdb/cockroach/issues/13546 func (c *CockroachDb) Lock() error { err := crdb.ExecuteTx(context.Background(), c.db, nil, func(tx *sql.Tx) error { - aid, err := database.GenerateAdvisoryLockId(c.config.DatabaseName) + aid, err := database.GenerateAdvisoryLockID(c.config.DatabaseName) if err != nil { return err } @@ -188,7 +188,7 @@ func (c *CockroachDb) Lock() error { // Locking is done manually with a separate lock table. Implementing advisory locks in CRDB is being discussed // See: https://github.com/cockroachdb/cockroach/issues/13546 func (c *CockroachDb) Unlock() error { - aid, err := database.GenerateAdvisoryLockId(c.config.DatabaseName) + aid, err := database.GenerateAdvisoryLockID(c.config.DatabaseName) if err != nil { return err } diff --git a/database/mysql/mysql.go b/database/mysql/mysql.go index ccd6f3703..e3ca15d3f 100644 --- a/database/mysql/mysql.go +++ b/database/mysql/mysql.go @@ -206,7 +206,7 @@ func (m *Mysql) Lock() error { return database.ErrLocked } - aid, err := database.GenerateAdvisoryLockId( + aid, err := database.GenerateAdvisoryLockID( fmt.Sprintf("%s:%s", m.config.DatabaseName, m.config.MigrationsTable)) if err != nil { return err @@ -231,7 +231,7 @@ func (m *Mysql) Unlock() error { return nil } - aid, err := database.GenerateAdvisoryLockId( + aid, err := database.GenerateAdvisoryLockID( fmt.Sprintf("%s:%s", m.config.DatabaseName, m.config.MigrationsTable)) if err != nil { return err diff --git a/database/postgres/postgres.go b/database/postgres/postgres.go index 96fc69023..d441a56bb 100644 --- a/database/postgres/postgres.go +++ b/database/postgres/postgres.go @@ -145,7 +145,7 @@ func (p *Postgres) Lock() error { return database.ErrLocked } - aid, err := database.GenerateAdvisoryLockId(p.config.DatabaseName, p.config.SchemaName) + aid, err := database.GenerateAdvisoryLockID(p.config.DatabaseName, p.config.SchemaName) if err != nil { return err } @@ -166,7 +166,7 @@ func (p *Postgres) Unlock() error { return nil } - aid, err := database.GenerateAdvisoryLockId(p.config.DatabaseName, p.config.SchemaName) + aid, err := database.GenerateAdvisoryLockID(p.config.DatabaseName, p.config.SchemaName) if err != nil { return err } diff --git a/database/stub/stub.go b/database/stub/stub.go index 4ad0193bd..2461fd33a 100644 --- a/database/stub/stub.go +++ b/database/stub/stub.go @@ -13,7 +13,7 @@ func init() { } type Stub struct { - Url string + URL string Instance interface{} CurrentVersion int MigrationSequence []string @@ -26,7 +26,7 @@ type Stub struct { func (s *Stub) Open(url string) (database.Driver, error) { return &Stub{ - Url: url, + URL: url, CurrentVersion: -1, MigrationSequence: make([]string, 0), Config: &Config{}, diff --git a/database/util.go b/database/util.go index f0ffd615f..7080a5050 100644 --- a/database/util.go +++ b/database/util.go @@ -6,14 +6,14 @@ import ( "strings" ) -const advisoryLockIdSalt uint = 1486364155 +const advisoryLockIDSalt uint = 1486364155 -// GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT -func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error) { +// GenerateAdvisoryLockID inspired by rails migrations, see https://goo.gl/8o9bCT +func GenerateAdvisoryLockID(databaseName string, additionalNames ...string) (string, error) { if len(additionalNames) > 0 { databaseName = strings.Join(append(additionalNames, databaseName), "\x00") } sum := crc32.ChecksumIEEE([]byte(databaseName)) - sum = sum * uint32(advisoryLockIdSalt) + sum = sum * uint32(advisoryLockIDSalt) return fmt.Sprintf("%v", sum), nil } diff --git a/database/util_test.go b/database/util_test.go index 13cba46d8..155de2a92 100644 --- a/database/util_test.go +++ b/database/util_test.go @@ -33,7 +33,7 @@ func TestGenerateAdvisoryLockId(t *testing.T) { for _, tc := range testcases { t.Run(tc.dbname, func(t *testing.T) { - if id, err := GenerateAdvisoryLockId(tc.dbname, tc.additional...); err == nil { + if id, err := GenerateAdvisoryLockID(tc.dbname, tc.additional...); err == nil { if id != tc.expectedID { t.Error("Generated incorrect ID:", id, "!=", tc.expectedID) } diff --git a/migrate.go b/migrate.go index 426705990..a5b45a66a 100644 --- a/migrate.go +++ b/migrate.go @@ -81,28 +81,28 @@ type Migrate struct { // New returns a new Migrate instance from a source URL and a database URL. // The URL scheme is defined by each driver. -func New(sourceUrl, databaseUrl string) (*Migrate, error) { +func New(sourceURL, databaseURL string) (*Migrate, error) { m := newCommon() - sourceName, err := sourceSchemeFromUrl(sourceUrl) + sourceName, err := sourceSchemeFromURL(sourceURL) if err != nil { return nil, err } m.sourceName = sourceName - databaseName, err := databaseSchemeFromUrl(databaseUrl) + databaseName, err := databaseSchemeFromURL(databaseURL) if err != nil { return nil, err } m.databaseName = databaseName - sourceDrv, err := source.Open(sourceUrl) + sourceDrv, err := source.Open(sourceURL) if err != nil { return nil, err } m.sourceDrv = sourceDrv - databaseDrv, err := database.Open(databaseUrl) + databaseDrv, err := database.Open(databaseURL) if err != nil { return nil, err } @@ -115,10 +115,10 @@ func New(sourceUrl, databaseUrl string) (*Migrate, error) { // and an existing database instance. The source URL scheme is defined by each driver. // Use any string that can serve as an identifier during logging as databaseName. // You are responsible for closing the underlying database client if necessary. -func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInstance database.Driver) (*Migrate, error) { +func NewWithDatabaseInstance(sourceURL string, databaseName string, databaseInstance database.Driver) (*Migrate, error) { m := newCommon() - sourceName, err := schemeFromUrl(sourceUrl) + sourceName, err := schemeFromURL(sourceURL) if err != nil { return nil, err } @@ -126,7 +126,7 @@ func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInst m.databaseName = databaseName - sourceDrv, err := source.Open(sourceUrl) + sourceDrv, err := source.Open(sourceURL) if err != nil { return nil, err } @@ -141,10 +141,10 @@ func NewWithDatabaseInstance(sourceUrl string, databaseName string, databaseInst // and a database URL. The database URL scheme is defined by each driver. // Use any string that can serve as an identifier during logging as sourceName. // You are responsible for closing the underlying source client if necessary. -func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, databaseUrl string) (*Migrate, error) { +func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, databaseURL string) (*Migrate, error) { m := newCommon() - databaseName, err := schemeFromUrl(databaseUrl) + databaseName, err := schemeFromURL(databaseURL) if err != nil { return nil, err } @@ -152,7 +152,7 @@ func NewWithSourceInstance(sourceName string, sourceInstance source.Driver, data m.sourceName = sourceName - databaseDrv, err := database.Open(databaseUrl) + databaseDrv, err := database.Open(databaseURL) if err != nil { return nil, err } diff --git a/source/file/file.go b/source/file/file.go index 1f5b88282..a0c641931 100644 --- a/source/file/file.go +++ b/source/file/file.go @@ -84,27 +84,24 @@ func (f *File) Close() error { } func (f *File) First() (version uint, err error) { - if v, ok := f.migrations.First(); !ok { - return 0, &os.PathError{Op: "first", Path: f.path, Err: os.ErrNotExist} - } else { + if v, ok := f.migrations.First(); ok { return v, nil } + return 0, &os.PathError{Op: "first", Path: f.path, Err: os.ErrNotExist} } func (f *File) Prev(version uint) (prevVersion uint, err error) { - if v, ok := f.migrations.Prev(version); !ok { - return 0, &os.PathError{Op: fmt.Sprintf("prev for version %v", version), Path: f.path, Err: os.ErrNotExist} - } else { + if v, ok := f.migrations.Prev(version); ok { return v, nil } + return 0, &os.PathError{Op: fmt.Sprintf("prev for version %v", version), Path: f.path, Err: os.ErrNotExist} } func (f *File) Next(version uint) (nextVersion uint, err error) { - if v, ok := f.migrations.Next(version); !ok { - return 0, &os.PathError{Op: fmt.Sprintf("next for version %v", version), Path: f.path, Err: os.ErrNotExist} - } else { + if v, ok := f.migrations.Next(version); ok { return v, nil } + return 0, &os.PathError{Op: fmt.Sprintf("next for version %v", version), Path: f.path, Err: os.ErrNotExist} } func (f *File) ReadUp(version uint) (r io.ReadCloser, identifier string, err error) { diff --git a/source/go_bindata/examples/migrations/bindata.go b/source/go_bindata/examples/migrations/bindata.go index 282d5ef54..d0a57e24e 100644 --- a/source/go_bindata/examples/migrations/bindata.go +++ b/source/go_bindata/examples/migrations/bindata.go @@ -204,9 +204,9 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ "1085649617_create_users_table.down.sql": _1085649617_create_users_tableDownSql, - "1085649617_create_users_table.up.sql": _1085649617_create_users_tableUpSql, - "1185749658_add_city_to_users.down.sql": _1185749658_add_city_to_usersDownSql, - "1185749658_add_city_to_users.up.sql": _1185749658_add_city_to_usersUpSql, + "1085649617_create_users_table.up.sql": _1085649617_create_users_tableUpSql, + "1185749658_add_city_to_users.down.sql": _1185749658_add_city_to_usersDownSql, + "1185749658_add_city_to_users.up.sql": _1185749658_add_city_to_usersUpSql, } // AssetDir returns the file names below a certain @@ -248,11 +248,12 @@ type bintree struct { Func func() (*asset, error) Children map[string]*bintree } + var _bintree = &bintree{nil, map[string]*bintree{ "1085649617_create_users_table.down.sql": &bintree{_1085649617_create_users_tableDownSql, map[string]*bintree{}}, - "1085649617_create_users_table.up.sql": &bintree{_1085649617_create_users_tableUpSql, map[string]*bintree{}}, - "1185749658_add_city_to_users.down.sql": &bintree{_1185749658_add_city_to_usersDownSql, map[string]*bintree{}}, - "1185749658_add_city_to_users.up.sql": &bintree{_1185749658_add_city_to_usersUpSql, map[string]*bintree{}}, + "1085649617_create_users_table.up.sql": &bintree{_1085649617_create_users_tableUpSql, map[string]*bintree{}}, + "1185749658_add_city_to_users.down.sql": &bintree{_1185749658_add_city_to_usersDownSql, map[string]*bintree{}}, + "1185749658_add_city_to_users.up.sql": &bintree{_1185749658_add_city_to_usersUpSql, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory @@ -301,4 +302,3 @@ func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } - diff --git a/source/stub/stub.go b/source/stub/stub.go index a7776098f..8871d972d 100644 --- a/source/stub/stub.go +++ b/source/stub/stub.go @@ -20,7 +20,7 @@ type Config struct{} // d.(*stub.Stub).Migrations = type Stub struct { - Url string + URL string Instance interface{} Migrations *source.Migrations Config *Config @@ -28,7 +28,7 @@ type Stub struct { func (s *Stub) Open(url string) (source.Driver, error) { return &Stub{ - Url: url, + URL: url, Migrations: source.NewMigrations(), Config: &Config{}, }, nil @@ -48,7 +48,7 @@ func (s *Stub) Close() error { func (s *Stub) First() (version uint, err error) { if v, ok := s.Migrations.First(); !ok { - return 0, &os.PathError{Op: "first", Path: s.Url, Err: os.ErrNotExist} // TODO: s.Url can be empty when called with WithInstance + return 0, &os.PathError{Op: "first", Path: s.URL, Err: os.ErrNotExist} // TODO: s.URL can be empty when called with WithInstance } else { return v, nil } @@ -56,7 +56,7 @@ func (s *Stub) First() (version uint, err error) { func (s *Stub) Prev(version uint) (prevVersion uint, err error) { if v, ok := s.Migrations.Prev(version); !ok { - return 0, &os.PathError{Op: fmt.Sprintf("prev for version %v", version), Path: s.Url, Err: os.ErrNotExist} + return 0, &os.PathError{Op: fmt.Sprintf("prev for version %v", version), Path: s.URL, Err: os.ErrNotExist} } else { return v, nil } @@ -64,7 +64,7 @@ func (s *Stub) Prev(version uint) (prevVersion uint, err error) { func (s *Stub) Next(version uint) (nextVersion uint, err error) { if v, ok := s.Migrations.Next(version); !ok { - return 0, &os.PathError{Op: fmt.Sprintf("next for version %v", version), Path: s.Url, Err: os.ErrNotExist} + return 0, &os.PathError{Op: fmt.Sprintf("next for version %v", version), Path: s.URL, Err: os.ErrNotExist} } else { return v, nil } @@ -74,12 +74,12 @@ func (s *Stub) ReadUp(version uint) (r io.ReadCloser, identifier string, err err if m, ok := s.Migrations.Up(version); ok { return ioutil.NopCloser(bytes.NewBufferString(m.Identifier)), fmt.Sprintf("%v.up.stub", version), nil } - return nil, "", &os.PathError{Op: fmt.Sprintf("read up version %v", version), Path: s.Url, Err: os.ErrNotExist} + return nil, "", &os.PathError{Op: fmt.Sprintf("read up version %v", version), Path: s.URL, Err: os.ErrNotExist} } func (s *Stub) ReadDown(version uint) (r io.ReadCloser, identifier string, err error) { if m, ok := s.Migrations.Down(version); ok { return ioutil.NopCloser(bytes.NewBufferString(m.Identifier)), fmt.Sprintf("%v.down.stub", version), nil } - return nil, "", &os.PathError{Op: fmt.Sprintf("read down version %v", version), Path: s.Url, Err: os.ErrNotExist} + return nil, "", &os.PathError{Op: fmt.Sprintf("read down version %v", version), Path: s.URL, Err: os.ErrNotExist} } diff --git a/util.go b/util.go index b6829aafb..4aeb0f221 100644 --- a/util.go +++ b/util.go @@ -47,24 +47,24 @@ func suint(n int) uint { var errNoScheme = errors.New("no scheme") var errEmptyURL = errors.New("URL cannot be empty") -func sourceSchemeFromUrl(url string) (string, error) { - u, err := schemeFromUrl(url) +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) +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) { +// schemeFromURL returns the scheme from a URL string +func schemeFromURL(url string) (string, error) { if url == "" { return "", errEmptyURL } diff --git a/util_test.go b/util_test.go index b4843410b..6543b28f8 100644 --- a/util_test.go +++ b/util_test.go @@ -36,7 +36,7 @@ func TestSourceSchemeFromUrlSuccess(t *testing.T) { urlStr := "protocol://path" expected := "protocol" - u, err := sourceSchemeFromUrl(urlStr) + u, err := sourceSchemeFromURL(urlStr) if err != nil { t.Fatalf("expected no error, but received %q", err) } @@ -65,7 +65,7 @@ func TestSourceSchemeFromUrlFailure(t *testing.T) { for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { - _, err := sourceSchemeFromUrl(tc.urlStr) + _, err := sourceSchemeFromURL(tc.urlStr) if err.Error() != tc.expectErr.Error() { t.Fatalf("expected %q, but received %q", tc.expectErr, err) } @@ -77,7 +77,7 @@ func TestDatabaseSchemeFromUrlSuccess(t *testing.T) { urlStr := "protocol://path" expected := "protocol" - u, err := databaseSchemeFromUrl(urlStr) + u, err := databaseSchemeFromURL(urlStr) if err != nil { t.Fatalf("expected no error, but received %q", err) } @@ -106,7 +106,7 @@ func TestDatabaseSchemeFromUrlFailure(t *testing.T) { for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { - _, err := databaseSchemeFromUrl(tc.urlStr) + _, err := databaseSchemeFromURL(tc.urlStr) if err.Error() != tc.expectErr.Error() { t.Fatalf("expected %q, but received %q", tc.expectErr, err) } From faafed151db4c477209bfe13c5d34bf0d9c157e6 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Sat, 30 Mar 2019 22:47:37 +0300 Subject: [PATCH 04/35] Enabled errcheck linter --- .golangci.yml | 2 - database/clickhouse/clickhouse.go | 15 ++++--- database/cockroachdb/cockroachdb.go | 16 +++++-- database/firebird/firebird.go | 8 +++- database/mysql/mysql.go | 21 ++++++--- database/postgres/postgres.go | 16 +++++-- database/ql/ql.go | 16 +++++-- database/redshift/redshift.go | 16 +++++-- database/sqlite3/sqlite3.go | 16 +++++-- internal/cli/commands.go | 6 ++- internal/cli/main.go | 4 +- migrate.go | 67 +++++++++++++++++++++++------ migration.go | 15 +++++-- testing/docker.go | 9 +++- testing/testing.go | 13 ++++-- 15 files changed, 182 insertions(+), 58 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index e4fb3ee86..c81fbf319 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -19,8 +19,6 @@ linters: - nakedret - prealloc #- gosec - disable: - - errcheck linters-settings: misspell: locale: US diff --git a/database/clickhouse/clickhouse.go b/database/clickhouse/clickhouse.go index d14e1c543..384742e0f 100644 --- a/database/clickhouse/clickhouse.go +++ b/database/clickhouse/clickhouse.go @@ -204,15 +204,18 @@ func (ch *ClickHouse) ensureVersionTable() (err error) { return nil } -func (ch *ClickHouse) Drop() error { - var ( - query = "SHOW TABLES FROM " + ch.config.DatabaseName - tables, err = ch.conn.Query(query) - ) +func (ch *ClickHouse) Drop() (err error) { + query := "SHOW TABLES FROM " + ch.config.DatabaseName + tables, err := ch.conn.Query(query) + if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() for tables.Next() { var table string if err := tables.Scan(&table); err != nil { diff --git a/database/cockroachdb/cockroachdb.go b/database/cockroachdb/cockroachdb.go index 850db6672..c92996558 100644 --- a/database/cockroachdb/cockroachdb.go +++ b/database/cockroachdb/cockroachdb.go @@ -150,7 +150,7 @@ func (c *CockroachDb) Close() error { // Locking is done manually with a separate lock table. Implementing advisory locks in CRDB is being discussed // See: https://github.com/cockroachdb/cockroach/issues/13546 func (c *CockroachDb) Lock() error { - err := crdb.ExecuteTx(context.Background(), c.db, nil, func(tx *sql.Tx) error { + err := crdb.ExecuteTx(context.Background(), c.db, nil, func(tx *sql.Tx) (err error) { aid, err := database.GenerateAdvisoryLockID(c.config.DatabaseName) if err != nil { return err @@ -161,7 +161,11 @@ func (c *CockroachDb) Lock() error { if err != nil { return database.Error{OrigErr: err, Err: "failed to fetch migration lock", Query: []byte(query)} } - defer rows.Close() + defer func() { + if errClose := rows.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() // If row exists at all, lock is present locked := rows.Next() @@ -267,14 +271,18 @@ func (c *CockroachDb) Version() (version int, dirty bool, err error) { } } -func (c *CockroachDb) Drop() error { +func (c *CockroachDb) Drop() (err error) { // select all tables in current schema query := `SELECT table_name FROM information_schema.tables WHERE table_schema=(SELECT current_schema())` tables, err := c.db.Query(query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() // delete one table after another tableNames := make([]string, 0) diff --git a/database/firebird/firebird.go b/database/firebird/firebird.go index 54ac9d0ee..a02fc45ba 100644 --- a/database/firebird/firebird.go +++ b/database/firebird/firebird.go @@ -166,14 +166,18 @@ func (f *Firebird) Version() (version int, dirty bool, err error) { } } -func (f *Firebird) Drop() error { +func (f *Firebird) Drop() (err error) { // select all tables query := `SELECT rdb$relation_name FROM rdb$relations WHERE rdb$view_blr IS NULL AND (rdb$system_flag IS NULL OR rdb$system_flag = 0);` tables, err := f.conn.QueryContext(context.Background(), query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() // delete one table after another tableNames := make([]string, 0) diff --git a/database/mysql/mysql.go b/database/mysql/mysql.go index e3ca15d3f..2579ab459 100644 --- a/database/mysql/mysql.go +++ b/database/mysql/mysql.go @@ -164,11 +164,14 @@ func (m *Mysql) Open(url string) (database.Driver, error) { insecureSkipVerify = x } - mysql.RegisterTLSConfig(ctls, &tls.Config{ + err = mysql.RegisterTLSConfig(ctls, &tls.Config{ RootCAs: rootCertPool, Certificates: clientCert, InsecureSkipVerify: insecureSkipVerify, }) + if err != nil { + return nil, err + } } } @@ -272,14 +275,18 @@ func (m *Mysql) SetVersion(version int, dirty bool) error { query := "TRUNCATE `" + m.config.MigrationsTable + "`" if _, err := tx.ExecContext(context.Background(), query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } if version >= 0 { query := "INSERT INTO `" + m.config.MigrationsTable + "` (version, dirty) VALUES (?, ?)" if _, err := tx.ExecContext(context.Background(), query, version, dirty); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } } @@ -311,14 +318,18 @@ func (m *Mysql) Version() (version int, dirty bool, err error) { } } -func (m *Mysql) Drop() error { +func (m *Mysql) Drop() (err error) { // select all tables query := `SHOW TABLES LIKE '%'` tables, err := m.conn.QueryContext(context.Background(), query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() // delete one table after another tableNames := make([]string, 0) diff --git a/database/postgres/postgres.go b/database/postgres/postgres.go index d441a56bb..851f8ca07 100644 --- a/database/postgres/postgres.go +++ b/database/postgres/postgres.go @@ -255,14 +255,18 @@ func (p *Postgres) SetVersion(version int, dirty bool) error { query := `TRUNCATE ` + pq.QuoteIdentifier(p.config.MigrationsTable) if _, err := tx.Exec(query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } if version >= 0 { query = `INSERT INTO ` + pq.QuoteIdentifier(p.config.MigrationsTable) + ` (version, dirty) VALUES ($1, $2)` if _, err := tx.Exec(query, version, dirty); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } } @@ -294,14 +298,18 @@ func (p *Postgres) Version() (version int, dirty bool, err error) { } } -func (p *Postgres) Drop() error { +func (p *Postgres) Drop() (err error) { // select all tables in current schema query := `SELECT table_name FROM information_schema.tables WHERE table_schema=(SELECT current_schema()) AND table_type='BASE TABLE'` tables, err := p.conn.QueryContext(context.Background(), query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() // delete one table after another tableNames := make([]string, 0) diff --git a/database/ql/ql.go b/database/ql/ql.go index 004efc4fa..e67e2335d 100644 --- a/database/ql/ql.go +++ b/database/ql/ql.go @@ -125,13 +125,17 @@ func (m *Ql) Open(url string) (database.Driver, error) { func (m *Ql) Close() error { return m.db.Close() } -func (m *Ql) Drop() error { +func (m *Ql) Drop() (err error) { query := `SELECT Name FROM __Table` tables, err := m.db.Query(query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() tableNames := make([]string, 0) for tables.Next() { var tableName string @@ -185,7 +189,9 @@ func (m *Ql) executeQuery(query string) error { return &database.Error{OrigErr: err, Err: "transaction start failed"} } if _, err := tx.Exec(query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } if err := tx.Commit(); err != nil { @@ -207,7 +213,9 @@ func (m *Ql) SetVersion(version int, dirty bool) error { if version >= 0 { query := fmt.Sprintf(`INSERT INTO %s (version, dirty) VALUES (%d, %t)`, m.config.MigrationsTable, version, dirty) if _, err := tx.Exec(query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } } diff --git a/database/redshift/redshift.go b/database/redshift/redshift.go index b772bba4f..3d018bde1 100644 --- a/database/redshift/redshift.go +++ b/database/redshift/redshift.go @@ -212,14 +212,18 @@ func (p *Redshift) SetVersion(version int, dirty bool) error { query := `DELETE FROM "` + p.config.MigrationsTable + `"` if _, err := tx.Exec(query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } if version >= 0 { query = `INSERT INTO "` + p.config.MigrationsTable + `" (version, dirty) VALUES ($1, $2)` if _, err := tx.Exec(query, version, dirty); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } } @@ -251,14 +255,18 @@ func (p *Redshift) Version() (version int, dirty bool, err error) { } } -func (p *Redshift) Drop() error { +func (p *Redshift) Drop() (err error) { // select all tables in current schema query := `SELECT table_name FROM information_schema.tables WHERE table_schema=(SELECT current_schema()) AND table_type='BASE TABLE'` tables, err := p.conn.QueryContext(context.Background(), query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() // delete one table after another tableNames := make([]string, 0) diff --git a/database/sqlite3/sqlite3.go b/database/sqlite3/sqlite3.go index 4826448a5..9cedc6bf2 100644 --- a/database/sqlite3/sqlite3.go +++ b/database/sqlite3/sqlite3.go @@ -118,13 +118,17 @@ func (m *Sqlite) Close() error { return m.db.Close() } -func (m *Sqlite) Drop() error { +func (m *Sqlite) Drop() (err error) { query := `SELECT name FROM sqlite_master WHERE type = 'table';` tables, err := m.db.Query(query) if err != nil { return &database.Error{OrigErr: err, Query: []byte(query)} } - defer tables.Close() + defer func() { + if errClose := tables.Close(); errClose != nil { + err = multierror.Append(err, errClose) + } + }() tableNames := make([]string, 0) for tables.Next() { var tableName string @@ -185,7 +189,9 @@ func (m *Sqlite) executeQuery(query string) error { return &database.Error{OrigErr: err, Err: "transaction start failed"} } if _, err := tx.Exec(query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } if err := tx.Commit(); err != nil { @@ -208,7 +214,9 @@ func (m *Sqlite) SetVersion(version int, dirty bool) error { if version >= 0 { query := fmt.Sprintf(`INSERT INTO %s (version, dirty) VALUES (%d, '%t')`, m.config.MigrationsTable, version, dirty) if _, err := tx.Exec(query); err != nil { - tx.Rollback() + if errRollback := tx.Rollback(); errRollback != nil { + err = multierror.Append(err, errRollback) + } return &database.Error{OrigErr: err, Query: []byte(query)} } } diff --git a/internal/cli/commands.go b/internal/cli/commands.go index fabd8bfb5..590468be7 100644 --- a/internal/cli/commands.go +++ b/internal/cli/commands.go @@ -80,7 +80,11 @@ func createCmd(dir string, startTime time.Time, format string, name string, ext } } - os.MkdirAll(dir, os.ModePerm) + err := os.MkdirAll(dir, os.ModePerm) + if err != nil { + log.fatalErr(err) + } + createFile(base + "up" + ext) createFile(base + "down" + ext) } diff --git a/internal/cli/main.go b/internal/cli/main.go index 361ae8eca..05add452c 100644 --- a/internal/cli/main.go +++ b/internal/cli/main.go @@ -89,7 +89,7 @@ Database drivers: `+strings.Join(database.List(), ", ")+"\n") migrater, migraterErr := migrate.New(*sourcePtr, *databasePtr) defer func() { if migraterErr == nil { - migrater.Close() + _, _ = migrater.Close() } }() if migraterErr == nil { @@ -123,7 +123,7 @@ Database drivers: `+strings.Join(database.List(), ", ")+"\n") formatPtr := createFlagSet.String("format", defaultTimeFormat, `The Go time format string to use. If the string "unix" or "unixNano" is specified, then the seconds or nanoseconds since January 1, 1970 UTC respectively will be used. Caution, due to the behavior of time.Time.Format(), invalid format strings will not error`) createFlagSet.BoolVar(&seq, "seq", seq, "Use sequential numbers instead of timestamps (default: false)") createFlagSet.IntVar(&seqDigits, "digits", seqDigits, "The number of digits to use in sequences (default: 6)") - createFlagSet.Parse(args) + _ = createFlagSet.Parse(args) if createFlagSet.NArg() == 0 { log.fatal("error: please specify name") diff --git a/migrate.go b/migrate.go index a5b45a66a..6beec91f8 100644 --- a/migrate.go +++ b/migrate.go @@ -7,6 +7,7 @@ package migrate import ( "errors" "fmt" + "github.com/hashicorp/go-multierror" "os" "sync" "time" @@ -347,7 +348,11 @@ func (m *Migrate) Run(migration ...*Migration) error { } ret <- migr - go migr.Buffer() + go func(m *Migration) { + if err := m.Buffer(); err != nil { + ret <- err + } + }(migr) } }() @@ -434,7 +439,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() from = int(firstVersion) } @@ -457,7 +466,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() from = int(next) } @@ -478,7 +491,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { return } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() return } else if err != nil { @@ -493,7 +510,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() from = int(prev) } } @@ -541,7 +562,11 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) { } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() from = int(firstVersion) count++ continue @@ -585,7 +610,11 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) { } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() from = int(next) count++ } @@ -646,7 +675,11 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) { return } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() count++ } @@ -667,7 +700,11 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) { } ret <- migr - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + ret <- err + } + }() from = int(prev) count++ } @@ -732,11 +769,13 @@ func (m *Migrate) runMigrations(ret <-chan interface{}) error { // versionExists checks the source if either the up or down migration for // the specified migration version exists. -func (m *Migrate) versionExists(version uint) error { +func (m *Migrate) versionExists(version uint) (result error) { // try up migration first up, _, err := m.sourceDrv.ReadUp(version) if err == nil { - defer up.Close() + if errClose := up.Close(); errClose != nil { + result = multierror.Append(result, errClose) + } } if os.IsExist(err) { return nil @@ -747,7 +786,11 @@ func (m *Migrate) versionExists(version uint) error { // then try down migration down, _, err := m.sourceDrv.ReadDown(version) if err == nil { - defer down.Close() + defer func() { + if errClose := down.Close(); errClose != nil { + result = multierror.Append(result, errClose) + } + }() } if os.IsExist(err) { return nil diff --git a/migration.go b/migration.go index 069e7f038..3e383407b 100644 --- a/migration.go +++ b/migration.go @@ -129,7 +129,10 @@ func (m *Migration) Buffer() error { // start reading from body, peek won't move the read pointer though // poor man's solution? - b.Peek(int(m.BufferSize)) + _, err := b.Peek(int(m.BufferSize)) + if err != nil { + return err + } m.FinishedBuffering = time.Now() @@ -145,10 +148,16 @@ func (m *Migration) Buffer() error { // close bufferWriter so Buffer knows that there is no // more data coming - m.bufferWriter.Close() + err = m.bufferWriter.Close() + if err != nil { + return err + } // it's safe to close the Body too - m.Body.Close() + err = m.Body.Close() + if err != nil { + return err + } return nil } diff --git a/testing/docker.go b/testing/docker.go index 5c66f66b3..f89384503 100644 --- a/testing/docker.go +++ b/testing/docker.go @@ -11,6 +11,7 @@ import ( dockercontainer "github.com/docker/docker/api/types/container" dockernetwork "github.com/docker/docker/api/types/network" dockerclient "github.com/docker/docker/client" + "github.com/hashicorp/go-multierror" "io" "math/rand" "strconv" @@ -62,7 +63,7 @@ type DockerContainer struct { keepForDebugging bool } -func (d *DockerContainer) PullImage() error { +func (d *DockerContainer) PullImage() (err error) { if d == nil { return errors.New("Cannot pull image on a nil *DockerContainer") } @@ -71,7 +72,11 @@ func (d *DockerContainer) PullImage() error { if err != nil { return err } - defer r.Close() + defer func() { + if errClose := r.Close(); errClose != nil { + err = multierror.Append(errClose) + } + }() // read output and log relevant lines bf := bufio.NewScanner(r) diff --git a/testing/testing.go b/testing/testing.go index a65fa181d..d7a2c2472 100644 --- a/testing/testing.go +++ b/testing/testing.go @@ -45,8 +45,11 @@ func ParallelTest(t *testing.T, versions []Version, readyFn IsReadyFunc, testFn } // make sure to remove container once done - defer container.Remove() - + defer func() { + if err := container.Remove(); err != nil { + t.Error(err) + } + }() // wait until database is ready tick := time.NewTicker(1000 * time.Millisecond) defer tick.Stop() @@ -78,7 +81,11 @@ func containerLogs(t *testing.T, c *DockerContainer) []byte { t.Error(err) return nil } - defer r.Close() + defer func() { + if err := r.Close(); err != nil { + t.Error(err) + } + }() b, err := ioutil.ReadAll(r) if err != nil { t.Error(err) From 6f0acbf92e15d1d759ac1fc8a63c8aa770abcd6d Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Mon, 15 Apr 2019 00:06:16 +0300 Subject: [PATCH 05/35] Added fixes for error check --- migrate.go | 73 +++++++++++++++++----------------------------------- migration.go | 15 +++-------- 2 files changed, 26 insertions(+), 62 deletions(-) diff --git a/migrate.go b/migrate.go index 6beec91f8..8d55feb3c 100644 --- a/migrate.go +++ b/migrate.go @@ -348,11 +348,8 @@ func (m *Migrate) Run(migration ...*Migration) error { } ret <- migr - go func(m *Migration) { - if err := m.Buffer(); err != nil { - ret <- err - } - }(migr) + // nolint: errcheck + go migr.Buffer() } }() @@ -439,11 +436,9 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() + from = int(firstVersion) } @@ -466,11 +461,9 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() + from = int(next) } @@ -491,11 +484,9 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { return } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() + return } else if err != nil { @@ -510,11 +501,8 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() from = int(prev) } } @@ -562,11 +550,8 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) { } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() from = int(firstVersion) count++ continue @@ -610,11 +595,8 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) { } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() from = int(next) count++ } @@ -675,11 +657,8 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) { return } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() count++ } @@ -700,11 +679,8 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) { } ret <- migr - go func() { - if err := migr.Buffer(); err != nil { - ret <- err - } - }() + // nolint: errcheck + go migr.Buffer() from = int(prev) count++ } @@ -786,11 +762,8 @@ func (m *Migrate) versionExists(version uint) (result error) { // then try down migration down, _, err := m.sourceDrv.ReadDown(version) if err == nil { - defer func() { - if errClose := down.Close(); errClose != nil { - result = multierror.Append(result, errClose) - } - }() + // nolint: errcheck + defer down.Close() } if os.IsExist(err) { return nil diff --git a/migration.go b/migration.go index 3e383407b..c4105d097 100644 --- a/migration.go +++ b/migration.go @@ -129,10 +129,7 @@ func (m *Migration) Buffer() error { // start reading from body, peek won't move the read pointer though // poor man's solution? - _, err := b.Peek(int(m.BufferSize)) - if err != nil { - return err - } + _, _ = b.Peek(int(m.BufferSize)) m.FinishedBuffering = time.Now() @@ -148,16 +145,10 @@ func (m *Migration) Buffer() error { // close bufferWriter so Buffer knows that there is no // more data coming - err = m.bufferWriter.Close() - if err != nil { - return err - } + _ = m.bufferWriter.Close() // it's safe to close the Body too - err = m.Body.Close() - if err != nil { - return err - } + _ = m.Body.Close() return nil } From a501fc3b9c9557201ffc0ad06470f13ae634890f Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Wed, 17 Apr 2019 16:17:41 +0300 Subject: [PATCH 06/35] Added errcheck for tests --- database/cassandra/cassandra_test.go | 12 +++- database/cockroachdb/cockroachdb_test.go | 11 +++- database/firebird/firebird_test.go | 35 +++++++++-- database/mongodb/mongodb_test.go | 46 ++++++++++++--- database/mysql/mysql_test.go | 20 +++++-- database/postgres/postgres_test.go | 74 +++++++++++++++++++----- database/ql/ql_test.go | 6 +- database/redshift/redshift_test.go | 50 +++++++++++++--- database/sqlite3/sqlite3_test.go | 6 +- go.mod | 1 + migrate_test.go | 6 +- source/file/file_test.go | 37 +++++++++--- source/godoc_vfs/vfs_example_test.go | 5 +- source/godoc_vfs/vfs_test.go | 2 +- 14 files changed, 251 insertions(+), 60 deletions(-) diff --git a/database/cassandra/cassandra_test.go b/database/cassandra/cassandra_test.go index 3389f109e..4186ebccd 100644 --- a/database/cassandra/cassandra_test.go +++ b/database/cassandra/cassandra_test.go @@ -70,7 +70,11 @@ func Test(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.Test(t, d, []byte("SELECT table_name from system_schema.tables")) }) } @@ -87,7 +91,11 @@ func TestMigrate(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "testks", d) if err != nil { diff --git a/database/cockroachdb/cockroachdb_test.go b/database/cockroachdb/cockroachdb_test.go index 4f5570e0b..7e2bcae45 100644 --- a/database/cockroachdb/cockroachdb_test.go +++ b/database/cockroachdb/cockroachdb_test.go @@ -51,7 +51,10 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { fmt.Println("ping error:", err) return false } - db.Close() + if err := db.Close(); err != nil { + fmt.Println("close error:", err) + return false + } return true } @@ -68,7 +71,11 @@ func createDB(t *testing.T, c dktest.ContainerInfo) { if err = db.Ping(); err != nil { t.Fatal(err) } - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + t.Errorf("%v", err) + } + }() if _, err = db.Exec("CREATE DATABASE migrate"); err != nil { t.Fatal(err) diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index 91ef8af7c..ccbe88dd9 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -54,9 +54,13 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { db, err := sql.Open("firebirdsql", fbConnectionString(ip, port)) if err != nil { + fmt.Println("open error:", err) + return false + } + if err := db.Close(); err != nil { + fmt.Println("close error:", err) return false } - defer db.Close() if err = db.PingContext(ctx); err != nil { switch err { case sqldriver.ErrBadConn, io.EOF: @@ -83,7 +87,11 @@ func Test(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.Test(t, d, []byte("SELECT Count(*) FROM rdb$relations")) }) } @@ -101,7 +109,11 @@ func TestMigrate(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "firebirdsql", d) if err != nil { t.Fatalf("%v", err) @@ -123,7 +135,11 @@ func TestErrorParsing(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() wantErr := `migration failed in line 0: CREATE TABLEE foo (foo varchar(40)); (details: Dynamic SQL Error SQL error code = -104 @@ -153,7 +169,11 @@ func TestFilterCustomQuery(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() }) } @@ -170,6 +190,11 @@ func Test_Lock(t *testing.T) { if err != nil { t.Fatalf("%v", err) } + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.Test(t, d, []byte("SELECT Count(*) FROM rdb$relations")) diff --git a/database/mongodb/mongodb_test.go b/database/mongodb/mongodb_test.go index 60721ec84..4feeb3a2c 100644 --- a/database/mongodb/mongodb_test.go +++ b/database/mongodb/mongodb_test.go @@ -40,7 +40,7 @@ func mongoConnectionString(host, port string) string { return fmt.Sprintf("mongodb://%s:%s/testMigration?connect=direct", host, port) } -func isReady(ctx context.Context, c dktest.ContainerInfo) bool { +func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { ip, port, err := c.FirstPort() if err != nil { return false @@ -50,7 +50,13 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { if err != nil { return false } - defer client.Disconnect(ctx) + defer func() { + if err := client.Disconnect(ctx); err != nil { + fmt.Println("close error:", err) + result = false + } + }() + if err = client.Ping(ctx, nil); err != nil { switch err { case io.EOF: @@ -76,7 +82,11 @@ func Test(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.TestNilVersion(t, d) //TestLockAndUnlock(t, d) driver doesn't support lock on database level dt.TestRun(t, d, bytes.NewReader([]byte(`[{"insert":"hello","documents":[{"wild":"world"}]}]`))) @@ -98,7 +108,11 @@ func TestMigrate(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "", d) if err != nil { t.Fatalf("%v", err) @@ -120,7 +134,11 @@ func TestWithAuth(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() createUserCMD := []byte(`[{"createUser":"deminem","pwd":"gogo","roles":[{"role":"readWrite","db":"testMigration"}]}]`) err = d.Run(bytes.NewReader(createUserCMD)) if err != nil { @@ -146,7 +164,11 @@ func TestWithAuth(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() err = d.Run(bytes.NewReader(insertCMD)) switch { case tcase.isErrorExpected && err == nil: @@ -193,7 +215,11 @@ func TestTransaction(t *testing.T) { if err != nil { t.Fatal(err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() //We have to create collection //transactions don't support operations with creating new dbs, collections //Unique index need for checking transaction aborting @@ -261,7 +287,11 @@ func TestTransaction(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() runErr := d.Run(bytes.NewReader(tcase.cmds)) if runErr != nil { if !tcase.isErrorExpected { diff --git a/database/mysql/mysql_test.go b/database/mysql/mysql_test.go index a71383484..16b2a6917 100644 --- a/database/mysql/mysql_test.go +++ b/database/mysql/mysql_test.go @@ -37,7 +37,7 @@ var ( } ) -func isReady(ctx context.Context, c dktest.ContainerInfo) bool { +func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { ip, port, err := c.Port(defaultPort) if err != nil { return false @@ -47,7 +47,11 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { if err != nil { return false } - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + result = false + } + }() if err = db.PingContext(ctx); err != nil { switch err { case sqldriver.ErrBadConn, mysql.ErrInvalidConn: @@ -76,7 +80,11 @@ func Test(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.Test(t, d, []byte("SELECT 1")) // check ensureVersionTable @@ -105,7 +113,11 @@ func TestMigrate(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "public", d) if err != nil { diff --git a/database/postgres/postgres_test.go b/database/postgres/postgres_test.go index ad2d91f6b..0ca1e1575 100644 --- a/database/postgres/postgres_test.go +++ b/database/postgres/postgres_test.go @@ -37,7 +37,7 @@ func pgConnectionString(host, port string) string { return fmt.Sprintf("postgres://postgres@%s:%s/postgres?sslmode=disable", host, port) } -func isReady(ctx context.Context, c dktest.ContainerInfo) bool { +func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { ip, port, err := c.FirstPort() if err != nil { return false @@ -47,7 +47,11 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { if err != nil { return false } - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + result = false + } + }() if err = db.PingContext(ctx); err != nil { switch err { case sqldriver.ErrBadConn, io.EOF: @@ -74,7 +78,11 @@ func Test(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.Test(t, d, []byte("SELECT 1")) }) } @@ -92,7 +100,11 @@ func TestMigrate(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "postgres", d) if err != nil { t.Fatalf("%v", err) @@ -114,7 +126,11 @@ func TestMultiStatement(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() if err := d.Run(strings.NewReader("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);")); err != nil { t.Fatalf("expected err to be nil, got %v", err) } @@ -143,7 +159,11 @@ func TestErrorParsing(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() wantErr := `migration failed: syntax error at or near "TABLEE" (column 37) in line 1: CREATE TABLE foo ` + `(foo text); CREATE TABLEE bar (bar text); (details: pq: syntax error at or near "TABLEE")` @@ -168,7 +188,11 @@ func TestFilterCustomQuery(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() }) } @@ -185,7 +209,11 @@ func TestWithSchema(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Fatalf("%v", err) + } + }() // create foobar schema if err := d.Run(strings.NewReader("CREATE SCHEMA foobar AUTHORIZATION postgres")); err != nil { @@ -200,7 +228,11 @@ func TestWithSchema(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d2.Close() + defer func() { + if err := d2.Close(); err != nil { + t.Fatalf("%v", err) + } + }() version, _, err := d2.Version() if err != nil { @@ -246,7 +278,11 @@ func TestParallelSchema(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() // create foo and bar schemas if err := d.Run(strings.NewReader("CREATE SCHEMA foo AUTHORIZATION postgres")); err != nil { @@ -261,13 +297,21 @@ func TestParallelSchema(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer dfoo.Close() + defer func() { + if err := dfoo.Close(); err != nil { + t.Errorf("%v", err) + } + }() dbar, err := p.Open(fmt.Sprintf("postgres://postgres@%v:%v/postgres?sslmode=disable&search_path=bar", ip, port)) if err != nil { t.Fatalf("%v", err) } - defer dbar.Close() + defer func() { + if err := dbar.Close(); err != nil { + t.Errorf("%v", err) + } + }() if err := dfoo.Lock(); err != nil { t.Fatal(err) @@ -349,7 +393,11 @@ func TestWithInstance_Concurrent(t *testing.T) { if err != nil { t.Fatal(err) } - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + t.Errorf("%v", err) + } + }() db.SetMaxIdleConns(concurrency) db.SetMaxOpenConns(concurrency) diff --git a/database/ql/ql_test.go b/database/ql/ql_test.go index 49e629cce..e91c84862 100644 --- a/database/ql/ql_test.go +++ b/database/ql/ql_test.go @@ -20,7 +20,9 @@ func Test(t *testing.T) { return } defer func() { - os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + t.Fatalf("%v", err) + } }() t.Logf("DB path : %s\n", filepath.Join(dir, "ql.db")) p := &Ql{} @@ -48,7 +50,7 @@ func TestMigrate(t *testing.T) { return } defer func() { - os.RemoveAll(dir) + _ = os.RemoveAll(dir) }() t.Logf("DB path : %s\n", filepath.Join(dir, "ql.db")) diff --git a/database/redshift/redshift_test.go b/database/redshift/redshift_test.go index 0fa58651d..3e9e21c40 100644 --- a/database/redshift/redshift_test.go +++ b/database/redshift/redshift_test.go @@ -44,7 +44,7 @@ func connectionString(schema, host, port string) string { return fmt.Sprintf("%s://postgres@%s:%s/postgres?sslmode=disable", schema, host, port) } -func isReady(ctx context.Context, c dktest.ContainerInfo) bool { +func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { ip, port, err := c.FirstPort() if err != nil { return false @@ -54,7 +54,11 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { if err != nil { return false } - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + result = false + } + }() if err = db.PingContext(ctx); err != nil { switch err { case sqldriver.ErrBadConn, io.EOF: @@ -81,7 +85,11 @@ func Test(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() dt.Test(t, d, []byte("SELECT 1")) }) } @@ -99,7 +107,11 @@ func TestMigrate(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "postgres", d) if err != nil { t.Fatalf("%v", err) @@ -121,7 +133,11 @@ func TestMultiStatement(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() if err := d.Run(bytes.NewReader([]byte("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);"))); err != nil { t.Fatalf("expected err to be nil, got %v", err) } @@ -150,7 +166,11 @@ func TestErrorParsing(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() wantErr := `migration failed: syntax error at or near "TABLEE" (column 37) in line 1: CREATE TABLE foo ` + `(foo text); CREATE TABLEE bar (bar text); (details: pq: syntax error at or near "TABLEE")` @@ -175,7 +195,11 @@ func TestFilterCustomQuery(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() }) } @@ -192,7 +216,11 @@ func TestWithSchema(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d.Close() + defer func() { + if err := d.Close(); err != nil { + t.Errorf("%v", err) + } + }() // create foobar schema if err := d.Run(bytes.NewReader([]byte("CREATE SCHEMA foobar AUTHORIZATION postgres"))); err != nil { @@ -207,7 +235,11 @@ func TestWithSchema(t *testing.T) { if err != nil { t.Fatalf("%v", err) } - defer d2.Close() + defer func() { + if err := d2.Close(); err != nil { + t.Errorf("%v", err) + } + }() version, _, err := d2.Version() if err != nil { diff --git a/database/sqlite3/sqlite3_test.go b/database/sqlite3/sqlite3_test.go index 648141c92..d1f3c5013 100644 --- a/database/sqlite3/sqlite3_test.go +++ b/database/sqlite3/sqlite3_test.go @@ -20,7 +20,7 @@ func Test(t *testing.T) { return } defer func() { - os.RemoveAll(dir) + _ = os.RemoveAll(dir) }() t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) p := &Sqlite{} @@ -38,7 +38,7 @@ func TestMigrate(t *testing.T) { return } defer func() { - os.RemoveAll(dir) + _ = os.RemoveAll(dir) }() t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) p := &Sqlite{} @@ -80,7 +80,7 @@ func TestMigrationTable(t *testing.T) { return } defer func() { - os.RemoveAll(dir) + _ = os.RemoveAll(dir) }() t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) diff --git a/go.mod b/go.mod index d6aa4ef03..788a129e8 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/kr/pretty v0.1.0 // indirect + github.com/kr/pty v1.1.3 // indirect github.com/kshvakov/clickhouse v1.3.5 github.com/lib/pq v1.0.0 github.com/mattn/go-sqlite3 v1.10.0 diff --git a/migrate_test.go b/migrate_test.go index 15891774c..0cb5f236b 100644 --- a/migrate_test.go +++ b/migrate_test.go @@ -108,7 +108,11 @@ func ExampleNewWithDatabaseInstance() { if err != nil { log.Fatal(err) } - defer db.Close() + defer func() { + if err := db.Close(); err != nil { + log.Fatal(err) + } + }() // Create driver instance from db. // Check each driver if it supports the WithInstance function. diff --git a/source/file/file_test.go b/source/file/file_test.go index c9cfe61cf..6f5b4343a 100644 --- a/source/file/file_test.go +++ b/source/file/file_test.go @@ -16,7 +16,9 @@ func Test(t *testing.T) { if err != nil { t.Fatal(err) } - defer os.RemoveAll(tmpDir) + defer func() { + _ = os.RemoveAll(tmpDir) + }() // write files that meet driver test requirements mustWriteFile(t, tmpDir, "1_foobar.up.sql", "1 up") @@ -46,7 +48,9 @@ func TestOpen(t *testing.T) { if err != nil { t.Fatal(err) } - defer os.RemoveAll(tmpDir) + defer func() { + _ = os.RemoveAll(tmpDir) + }() mustWriteFile(t, tmpDir, "1_foobar.up.sql", "") mustWriteFile(t, tmpDir, "1_foobar.down.sql", "") @@ -67,13 +71,17 @@ func TestOpenWithRelativePath(t *testing.T) { if err != nil { t.Fatal(err) } - defer os.RemoveAll(tmpDir) + defer func() { + _ = os.RemoveAll(tmpDir) + }() wd, err := os.Getwd() if err != nil { t.Fatal(err) } - defer os.Chdir(wd) // rescue working dir after we are done + defer func() { + _ = os.Chdir(wd) // rescue working dir after we are done + }() if err := os.Chdir(tmpDir); err != nil { t.Fatal(err) @@ -130,7 +138,9 @@ func TestOpenWithDuplicateVersion(t *testing.T) { if err != nil { t.Fatal(err) } - defer os.RemoveAll(tmpDir) + defer func() { + _ = os.RemoveAll(tmpDir) + }() mustWriteFile(t, tmpDir, "1_foo.up.sql", "") // 1 up mustWriteFile(t, tmpDir, "1_bar.up.sql", "") // 1 up @@ -147,7 +157,9 @@ func TestClose(t *testing.T) { if err != nil { t.Fatal(err) } - defer os.RemoveAll(tmpDir) + defer func() { + _ = os.RemoveAll(tmpDir) + }() f := &File{} d, err := f.Open("file://" + tmpDir) @@ -182,18 +194,25 @@ func mustCreateBenchmarkDir(t *testing.B) (dir string) { func BenchmarkOpen(b *testing.B) { dir := mustCreateBenchmarkDir(b) - defer os.RemoveAll(dir) + defer func() { + _ = os.RemoveAll(dir) + }() b.ResetTimer() for n := 0; n < b.N; n++ { f := &File{} - f.Open("file://" + dir) + _, err := f.Open("file://" + dir) + if err != nil { + b.Error(err) + } } b.StopTimer() } func BenchmarkNext(b *testing.B) { dir := mustCreateBenchmarkDir(b) - defer os.RemoveAll(dir) + defer func() { + _ = os.RemoveAll(dir) + }() f := &File{} d, _ := f.Open("file://" + dir) b.ResetTimer() diff --git a/source/godoc_vfs/vfs_example_test.go b/source/godoc_vfs/vfs_example_test.go index 9a57290d2..ae178294d 100644 --- a/source/godoc_vfs/vfs_example_test.go +++ b/source/godoc_vfs/vfs_example_test.go @@ -26,5 +26,8 @@ func Example_mapfs() { if err != nil { panic("error creating the migrations") } - m.Up() + err = m.Up() + if err != nil { + panic("up failed") + } } diff --git a/source/godoc_vfs/vfs_test.go b/source/godoc_vfs/vfs_test.go index f49360b14..641b3a563 100644 --- a/source/godoc_vfs/vfs_test.go +++ b/source/godoc_vfs/vfs_test.go @@ -34,5 +34,5 @@ func TestOpen(t *testing.T) { } }() b := &godoc_vfs.VFS{} - b.Open("") + _, _ = b.Open("") } From 826b766ff72dd0f2858dfcd6ffa5e92d4daf2a70 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Wed, 17 Apr 2019 16:50:50 +0300 Subject: [PATCH 07/35] Fixed test --- database/firebird/firebird_test.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index ccbe88dd9..b9039e67d 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -46,7 +46,7 @@ func fbConnectionString(host, port string) string { return fmt.Sprintf("firebird://%s:%s@%s:%s//firebird/data/%s", user, password, host, port, dbName) } -func isReady(ctx context.Context, c dktest.ContainerInfo) bool { +func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { ip, port, err := c.FirstPort() if err != nil { return false @@ -57,10 +57,12 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { fmt.Println("open error:", err) return false } - if err := db.Close(); err != nil { - fmt.Println("close error:", err) - return false - } + defer func() { + if err := db.Close(); err != nil { + fmt.Println("close error:", err) + result = false + } + }() if err = db.PingContext(ctx); err != nil { switch err { case sqldriver.ErrBadConn, io.EOF: From 7f72c4cc3991b53732435cea5884b836c953762d Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Wed, 17 Apr 2019 17:12:18 +0300 Subject: [PATCH 08/35] Increased golangci-lint deadline for travis --- .golangci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.golangci.yml b/.golangci.yml index 31751622b..07943a090 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,3 +1,6 @@ +run: + # timeout for analysis, e.g. 30s, 5m, default is 1m + deadline: 5m linters: enable: #- golint From 7e419d3d83f66a5c8c178fbafbe2631afa9fc582 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Wed, 17 Apr 2019 17:12:18 +0300 Subject: [PATCH 09/35] Increased golangci-lint deadline for travis --- .golangci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.golangci.yml b/.golangci.yml index 31751622b..07943a090 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,3 +1,6 @@ +run: + # timeout for analysis, e.g. 30s, 5m, default is 1m + deadline: 5m linters: enable: #- golint From bcff2ef994d8444b7cf1bfba0b0512feaa5d9ef5 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 12:09:01 +0300 Subject: [PATCH 10/35] Decreased golangci-lint deadline for travis --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 07943a090..2d4d89158 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,6 @@ run: # timeout for analysis, e.g. 30s, 5m, default is 1m - deadline: 5m + deadline: 2m linters: enable: #- golint From 39dddb510c4d7dce7cd5cdc25f05fbeaeaeb3c46 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 12:42:05 +0300 Subject: [PATCH 11/35] Revert for backward compatibility --- database/cockroachdb/cockroachdb.go | 4 ++-- database/mysql/mysql.go | 4 ++-- database/postgres/postgres.go | 4 ++-- database/util.go | 5 +++-- database/util_test.go | 2 +- source/stub/stub.go | 14 +++++++------- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/database/cockroachdb/cockroachdb.go b/database/cockroachdb/cockroachdb.go index c92996558..8d6c47075 100644 --- a/database/cockroachdb/cockroachdb.go +++ b/database/cockroachdb/cockroachdb.go @@ -151,7 +151,7 @@ func (c *CockroachDb) Close() error { // See: https://github.com/cockroachdb/cockroach/issues/13546 func (c *CockroachDb) Lock() error { err := crdb.ExecuteTx(context.Background(), c.db, nil, func(tx *sql.Tx) (err error) { - aid, err := database.GenerateAdvisoryLockID(c.config.DatabaseName) + aid, err := database.GenerateAdvisoryLockId(c.config.DatabaseName) if err != nil { return err } @@ -192,7 +192,7 @@ func (c *CockroachDb) Lock() error { // Locking is done manually with a separate lock table. Implementing advisory locks in CRDB is being discussed // See: https://github.com/cockroachdb/cockroach/issues/13546 func (c *CockroachDb) Unlock() error { - aid, err := database.GenerateAdvisoryLockID(c.config.DatabaseName) + aid, err := database.GenerateAdvisoryLockId(c.config.DatabaseName) if err != nil { return err } diff --git a/database/mysql/mysql.go b/database/mysql/mysql.go index 2579ab459..dbb81a347 100644 --- a/database/mysql/mysql.go +++ b/database/mysql/mysql.go @@ -209,7 +209,7 @@ func (m *Mysql) Lock() error { return database.ErrLocked } - aid, err := database.GenerateAdvisoryLockID( + aid, err := database.GenerateAdvisoryLockId( fmt.Sprintf("%s:%s", m.config.DatabaseName, m.config.MigrationsTable)) if err != nil { return err @@ -234,7 +234,7 @@ func (m *Mysql) Unlock() error { return nil } - aid, err := database.GenerateAdvisoryLockID( + aid, err := database.GenerateAdvisoryLockId( fmt.Sprintf("%s:%s", m.config.DatabaseName, m.config.MigrationsTable)) if err != nil { return err diff --git a/database/postgres/postgres.go b/database/postgres/postgres.go index 851f8ca07..4c0cc1c40 100644 --- a/database/postgres/postgres.go +++ b/database/postgres/postgres.go @@ -145,7 +145,7 @@ func (p *Postgres) Lock() error { return database.ErrLocked } - aid, err := database.GenerateAdvisoryLockID(p.config.DatabaseName, p.config.SchemaName) + aid, err := database.GenerateAdvisoryLockId(p.config.DatabaseName, p.config.SchemaName) if err != nil { return err } @@ -166,7 +166,7 @@ func (p *Postgres) Unlock() error { return nil } - aid, err := database.GenerateAdvisoryLockID(p.config.DatabaseName, p.config.SchemaName) + aid, err := database.GenerateAdvisoryLockId(p.config.DatabaseName, p.config.SchemaName) if err != nil { return err } diff --git a/database/util.go b/database/util.go index 7080a5050..ba5d09562 100644 --- a/database/util.go +++ b/database/util.go @@ -8,8 +8,9 @@ import ( const advisoryLockIDSalt uint = 1486364155 -// GenerateAdvisoryLockID inspired by rails migrations, see https://goo.gl/8o9bCT -func GenerateAdvisoryLockID(databaseName string, additionalNames ...string) (string, error) { +// nolint: golint +// GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT +func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error) { if len(additionalNames) > 0 { databaseName = strings.Join(append(additionalNames, databaseName), "\x00") } diff --git a/database/util_test.go b/database/util_test.go index 155de2a92..13cba46d8 100644 --- a/database/util_test.go +++ b/database/util_test.go @@ -33,7 +33,7 @@ func TestGenerateAdvisoryLockId(t *testing.T) { for _, tc := range testcases { t.Run(tc.dbname, func(t *testing.T) { - if id, err := GenerateAdvisoryLockID(tc.dbname, tc.additional...); err == nil { + if id, err := GenerateAdvisoryLockId(tc.dbname, tc.additional...); err == nil { if id != tc.expectedID { t.Error("Generated incorrect ID:", id, "!=", tc.expectedID) } diff --git a/source/stub/stub.go b/source/stub/stub.go index 8871d972d..a7776098f 100644 --- a/source/stub/stub.go +++ b/source/stub/stub.go @@ -20,7 +20,7 @@ type Config struct{} // d.(*stub.Stub).Migrations = type Stub struct { - URL string + Url string Instance interface{} Migrations *source.Migrations Config *Config @@ -28,7 +28,7 @@ type Stub struct { func (s *Stub) Open(url string) (source.Driver, error) { return &Stub{ - URL: url, + Url: url, Migrations: source.NewMigrations(), Config: &Config{}, }, nil @@ -48,7 +48,7 @@ func (s *Stub) Close() error { func (s *Stub) First() (version uint, err error) { if v, ok := s.Migrations.First(); !ok { - return 0, &os.PathError{Op: "first", Path: s.URL, Err: os.ErrNotExist} // TODO: s.URL can be empty when called with WithInstance + return 0, &os.PathError{Op: "first", Path: s.Url, Err: os.ErrNotExist} // TODO: s.Url can be empty when called with WithInstance } else { return v, nil } @@ -56,7 +56,7 @@ func (s *Stub) First() (version uint, err error) { func (s *Stub) Prev(version uint) (prevVersion uint, err error) { if v, ok := s.Migrations.Prev(version); !ok { - return 0, &os.PathError{Op: fmt.Sprintf("prev for version %v", version), Path: s.URL, Err: os.ErrNotExist} + return 0, &os.PathError{Op: fmt.Sprintf("prev for version %v", version), Path: s.Url, Err: os.ErrNotExist} } else { return v, nil } @@ -64,7 +64,7 @@ func (s *Stub) Prev(version uint) (prevVersion uint, err error) { func (s *Stub) Next(version uint) (nextVersion uint, err error) { if v, ok := s.Migrations.Next(version); !ok { - return 0, &os.PathError{Op: fmt.Sprintf("next for version %v", version), Path: s.URL, Err: os.ErrNotExist} + return 0, &os.PathError{Op: fmt.Sprintf("next for version %v", version), Path: s.Url, Err: os.ErrNotExist} } else { return v, nil } @@ -74,12 +74,12 @@ func (s *Stub) ReadUp(version uint) (r io.ReadCloser, identifier string, err err if m, ok := s.Migrations.Up(version); ok { return ioutil.NopCloser(bytes.NewBufferString(m.Identifier)), fmt.Sprintf("%v.up.stub", version), nil } - return nil, "", &os.PathError{Op: fmt.Sprintf("read up version %v", version), Path: s.URL, Err: os.ErrNotExist} + return nil, "", &os.PathError{Op: fmt.Sprintf("read up version %v", version), Path: s.Url, Err: os.ErrNotExist} } func (s *Stub) ReadDown(version uint) (r io.ReadCloser, identifier string, err error) { if m, ok := s.Migrations.Down(version); ok { return ioutil.NopCloser(bytes.NewBufferString(m.Identifier)), fmt.Sprintf("%v.down.stub", version), nil } - return nil, "", &os.PathError{Op: fmt.Sprintf("read down version %v", version), Path: s.URL, Err: os.ErrNotExist} + return nil, "", &os.PathError{Op: fmt.Sprintf("read down version %v", version), Path: s.Url, Err: os.ErrNotExist} } From 7e771007496433169f4517c9950918f1f00cef71 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 12:50:32 +0300 Subject: [PATCH 12/35] Using log.Println() instead of fmt.Println() --- database/cockroachdb/cockroachdb_test.go | 9 +++++---- database/firebird/firebird_test.go | 8 +++++--- database/mongodb/mongodb_test.go | 7 +++++-- database/mysql/mysql_test.go | 1 + database/postgres/postgres_test.go | 4 +++- database/redshift/redshift_test.go | 4 +++- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/database/cockroachdb/cockroachdb_test.go b/database/cockroachdb/cockroachdb_test.go index 7e2bcae45..df02cf5cf 100644 --- a/database/cockroachdb/cockroachdb_test.go +++ b/database/cockroachdb/cockroachdb_test.go @@ -7,6 +7,7 @@ import ( "database/sql" "fmt" "github.com/golang-migrate/migrate/v4" + "log" "strings" "testing" ) @@ -38,21 +39,21 @@ var ( func isReady(ctx context.Context, c dktest.ContainerInfo) bool { ip, port, err := c.Port(defaultPort) if err != nil { - fmt.Println("port error:", err) + log.Println("port error:", err) return false } db, err := sql.Open("postgres", fmt.Sprintf("postgres://root@%v:%v?sslmode=disable", ip, port)) if err != nil { - fmt.Println("open error:", err) + log.Println("open error:", err) return false } if err := db.PingContext(ctx); err != nil { - fmt.Println("ping error:", err) + log.Println("ping error:", err) return false } if err := db.Close(); err != nil { - fmt.Println("close error:", err) + log.Println("close error:", err) return false } return true diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index b9039e67d..6f7b4da23 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -5,6 +5,8 @@ import ( "database/sql" sqldriver "database/sql/driver" "fmt" + "log" + "github.com/golang-migrate/migrate/v4" "io" "strings" @@ -54,12 +56,12 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { db, err := sql.Open("firebirdsql", fbConnectionString(ip, port)) if err != nil { - fmt.Println("open error:", err) + log.Println("open error:", err) return false } defer func() { if err := db.Close(); err != nil { - fmt.Println("close error:", err) + log.Println("close error:", err) result = false } }() @@ -68,7 +70,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { case sqldriver.ErrBadConn, io.EOF: return false default: - fmt.Println(err) + log.Println(err) } return false } diff --git a/database/mongodb/mongodb_test.go b/database/mongodb/mongodb_test.go index 4feeb3a2c..e67b1d528 100644 --- a/database/mongodb/mongodb_test.go +++ b/database/mongodb/mongodb_test.go @@ -4,6 +4,9 @@ import ( "bytes" "context" "fmt" + + "log" + "github.com/golang-migrate/migrate/v4" "io" "os" @@ -52,7 +55,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { } defer func() { if err := client.Disconnect(ctx); err != nil { - fmt.Println("close error:", err) + log.Println("close error:", err) result = false } }() @@ -62,7 +65,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { case io.EOF: return false default: - fmt.Println(err) + log.Println(err) } return false } diff --git a/database/mysql/mysql_test.go b/database/mysql/mysql_test.go index 16b2a6917..ff8532cc0 100644 --- a/database/mysql/mysql_test.go +++ b/database/mysql/mysql_test.go @@ -5,6 +5,7 @@ import ( "database/sql" sqldriver "database/sql/driver" "fmt" + "github.com/golang-migrate/migrate/v4" "net/url" "testing" diff --git a/database/postgres/postgres_test.go b/database/postgres/postgres_test.go index 0ca1e1575..0e382eac4 100644 --- a/database/postgres/postgres_test.go +++ b/database/postgres/postgres_test.go @@ -7,6 +7,8 @@ import ( "database/sql" sqldriver "database/sql/driver" "fmt" + "log" + "github.com/golang-migrate/migrate/v4" "io" "strconv" @@ -57,7 +59,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { case sqldriver.ErrBadConn, io.EOF: return false default: - fmt.Println(err) + log.Println(err) } return false } diff --git a/database/redshift/redshift_test.go b/database/redshift/redshift_test.go index 3e9e21c40..9451ebe45 100644 --- a/database/redshift/redshift_test.go +++ b/database/redshift/redshift_test.go @@ -8,6 +8,8 @@ import ( "database/sql" sqldriver "database/sql/driver" "fmt" + "log" + "github.com/golang-migrate/migrate/v4" "io" "strconv" @@ -64,7 +66,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { case sqldriver.ErrBadConn, io.EOF: return false default: - fmt.Println(err) + log.Println(err) } return false } From edb3a4eb436c2936ec91b8eea70e7a2f2b4a7e14 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 12:55:05 +0300 Subject: [PATCH 13/35] Handling os.RemoveAll() errors --- database/ql/ql_test.go | 4 +++- database/sqlite3/sqlite3_test.go | 12 +++++++++--- source/file/file_test.go | 28 +++++++++++++++++++++------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/database/ql/ql_test.go b/database/ql/ql_test.go index e91c84862..75c9ecf7e 100644 --- a/database/ql/ql_test.go +++ b/database/ql/ql_test.go @@ -50,7 +50,9 @@ func TestMigrate(t *testing.T) { return } defer func() { - _ = os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + t.Error(err) + } }() t.Logf("DB path : %s\n", filepath.Join(dir, "ql.db")) diff --git a/database/sqlite3/sqlite3_test.go b/database/sqlite3/sqlite3_test.go index d1f3c5013..40651228f 100644 --- a/database/sqlite3/sqlite3_test.go +++ b/database/sqlite3/sqlite3_test.go @@ -20,7 +20,9 @@ func Test(t *testing.T) { return } defer func() { - _ = os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + t.Error(err) + } }() t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) p := &Sqlite{} @@ -38,7 +40,9 @@ func TestMigrate(t *testing.T) { return } defer func() { - _ = os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + t.Error(err) + } }() t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) p := &Sqlite{} @@ -80,7 +84,9 @@ func TestMigrationTable(t *testing.T) { return } defer func() { - _ = os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + t.Error(err) + } }() t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) diff --git a/source/file/file_test.go b/source/file/file_test.go index 6f5b4343a..14357e651 100644 --- a/source/file/file_test.go +++ b/source/file/file_test.go @@ -17,7 +17,9 @@ func Test(t *testing.T) { t.Fatal(err) } defer func() { - _ = os.RemoveAll(tmpDir) + if err := os.RemoveAll(tmpDir); err != nil { + t.Error(err) + } }() // write files that meet driver test requirements @@ -49,7 +51,9 @@ func TestOpen(t *testing.T) { t.Fatal(err) } defer func() { - _ = os.RemoveAll(tmpDir) + if err := os.RemoveAll(tmpDir); err != nil { + t.Error(err) + } }() mustWriteFile(t, tmpDir, "1_foobar.up.sql", "") @@ -72,7 +76,9 @@ func TestOpenWithRelativePath(t *testing.T) { t.Fatal(err) } defer func() { - _ = os.RemoveAll(tmpDir) + if err := os.RemoveAll(tmpDir); err != nil { + t.Error(err) + } }() wd, err := os.Getwd() @@ -139,7 +145,9 @@ func TestOpenWithDuplicateVersion(t *testing.T) { t.Fatal(err) } defer func() { - _ = os.RemoveAll(tmpDir) + if err := os.RemoveAll(tmpDir); err != nil { + t.Error(err) + } }() mustWriteFile(t, tmpDir, "1_foo.up.sql", "") // 1 up @@ -158,7 +166,9 @@ func TestClose(t *testing.T) { t.Fatal(err) } defer func() { - _ = os.RemoveAll(tmpDir) + if err := os.RemoveAll(tmpDir); err != nil { + t.Error(err) + } }() f := &File{} @@ -195,7 +205,9 @@ func mustCreateBenchmarkDir(t *testing.B) (dir string) { func BenchmarkOpen(b *testing.B) { dir := mustCreateBenchmarkDir(b) defer func() { - _ = os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + b.Error(err) + } }() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -211,7 +223,9 @@ func BenchmarkOpen(b *testing.B) { func BenchmarkNext(b *testing.B) { dir := mustCreateBenchmarkDir(b) defer func() { - _ = os.RemoveAll(dir) + if err := os.RemoveAll(dir); err != nil { + b.Error(err) + } }() f := &File{} d, _ := f.Open("file://" + dir) From 1bce95e253799527da9691622f5679016943351c Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 13:03:57 +0300 Subject: [PATCH 14/35] Using t.Error(error) instead of t.Errorf("%v", err) --- database/cassandra/cassandra_test.go | 4 ++-- database/cockroachdb/cockroachdb_test.go | 2 +- database/firebird/firebird_test.go | 10 +++++----- database/mongodb/mongodb_test.go | 12 ++++++------ database/mysql/mysql_test.go | 6 +++--- database/postgres/postgres_test.go | 18 +++++++++--------- database/redshift/redshift_test.go | 14 +++++++------- 7 files changed, 33 insertions(+), 33 deletions(-) diff --git a/database/cassandra/cassandra_test.go b/database/cassandra/cassandra_test.go index 4186ebccd..fcfd61708 100644 --- a/database/cassandra/cassandra_test.go +++ b/database/cassandra/cassandra_test.go @@ -72,7 +72,7 @@ func Test(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() dt.Test(t, d, []byte("SELECT table_name from system_schema.tables")) @@ -93,7 +93,7 @@ func TestMigrate(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() diff --git a/database/cockroachdb/cockroachdb_test.go b/database/cockroachdb/cockroachdb_test.go index df02cf5cf..1e3609bf0 100644 --- a/database/cockroachdb/cockroachdb_test.go +++ b/database/cockroachdb/cockroachdb_test.go @@ -74,7 +74,7 @@ func createDB(t *testing.T, c dktest.ContainerInfo) { } defer func() { if err := db.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index 6f7b4da23..3c58956ae 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -93,7 +93,7 @@ func Test(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() dt.Test(t, d, []byte("SELECT Count(*) FROM rdb$relations")) @@ -115,7 +115,7 @@ func TestMigrate(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "firebirdsql", d) @@ -141,7 +141,7 @@ func TestErrorParsing(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -175,7 +175,7 @@ func TestFilterCustomQuery(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() }) @@ -196,7 +196,7 @@ func Test_Lock(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() diff --git a/database/mongodb/mongodb_test.go b/database/mongodb/mongodb_test.go index e67b1d528..b648d83d7 100644 --- a/database/mongodb/mongodb_test.go +++ b/database/mongodb/mongodb_test.go @@ -87,7 +87,7 @@ func Test(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() dt.TestNilVersion(t, d) @@ -113,7 +113,7 @@ func TestMigrate(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "", d) @@ -139,7 +139,7 @@ func TestWithAuth(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() createUserCMD := []byte(`[{"createUser":"deminem","pwd":"gogo","roles":[{"role":"readWrite","db":"testMigration"}]}]`) @@ -169,7 +169,7 @@ func TestWithAuth(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() err = d.Run(bytes.NewReader(insertCMD)) @@ -220,7 +220,7 @@ func TestTransaction(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() //We have to create collection @@ -292,7 +292,7 @@ func TestTransaction(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() runErr := d.Run(bytes.NewReader(tcase.cmds)) diff --git a/database/mysql/mysql_test.go b/database/mysql/mysql_test.go index ff8532cc0..76859151c 100644 --- a/database/mysql/mysql_test.go +++ b/database/mysql/mysql_test.go @@ -83,7 +83,7 @@ func Test(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() dt.Test(t, d, []byte("SELECT 1")) @@ -116,13 +116,13 @@ func TestMigrate(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "public", d) if err != nil { - t.Fatalf("%v", err) + t.Error(err) } dt.TestMigrate(t, m, []byte("SELECT 1")) diff --git a/database/postgres/postgres_test.go b/database/postgres/postgres_test.go index 0e382eac4..403550f5b 100644 --- a/database/postgres/postgres_test.go +++ b/database/postgres/postgres_test.go @@ -82,7 +82,7 @@ func Test(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() dt.Test(t, d, []byte("SELECT 1")) @@ -104,7 +104,7 @@ func TestMigrate(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "postgres", d) @@ -130,7 +130,7 @@ func TestMultiStatement(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() if err := d.Run(strings.NewReader("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);")); err != nil { @@ -163,7 +163,7 @@ func TestErrorParsing(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -192,7 +192,7 @@ func TestFilterCustomQuery(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() }) @@ -282,7 +282,7 @@ func TestParallelSchema(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -301,7 +301,7 @@ func TestParallelSchema(t *testing.T) { } defer func() { if err := dfoo.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -311,7 +311,7 @@ func TestParallelSchema(t *testing.T) { } defer func() { if err := dbar.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -397,7 +397,7 @@ func TestWithInstance_Concurrent(t *testing.T) { } defer func() { if err := db.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() diff --git a/database/redshift/redshift_test.go b/database/redshift/redshift_test.go index 9451ebe45..d4185ee61 100644 --- a/database/redshift/redshift_test.go +++ b/database/redshift/redshift_test.go @@ -89,7 +89,7 @@ func Test(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() dt.Test(t, d, []byte("SELECT 1")) @@ -111,7 +111,7 @@ func TestMigrate(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "postgres", d) @@ -137,7 +137,7 @@ func TestMultiStatement(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() if err := d.Run(bytes.NewReader([]byte("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);"))); err != nil { @@ -170,7 +170,7 @@ func TestErrorParsing(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -199,7 +199,7 @@ func TestFilterCustomQuery(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() }) @@ -220,7 +220,7 @@ func TestWithSchema(t *testing.T) { } defer func() { if err := d.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() @@ -239,7 +239,7 @@ func TestWithSchema(t *testing.T) { } defer func() { if err := d2.Close(); err != nil { - t.Errorf("%v", err) + t.Error(err) } }() From 81a642bdddd1d1ba81a6e5c9c2d4fdd270a1a3d6 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 13:20:47 +0300 Subject: [PATCH 15/35] Using t.Fatal(error) instead of t.Fatalf("%v", err) --- database/cassandra/cassandra_test.go | 6 ++--- database/cockroachdb/cockroachdb_test.go | 10 ++++---- database/firebird/firebird_test.go | 12 ++++----- database/mongodb/mongodb_test.go | 32 ++++++++++++------------ database/mysql/mysql_test.go | 6 ++--- database/postgres/postgres_test.go | 28 ++++++++++----------- database/ql/ql_test.go | 8 +++--- database/redshift/redshift_test.go | 18 ++++++------- database/spanner/spanner_test.go | 6 ++--- database/sqlite3/sqlite3_test.go | 16 ++++++------ database/stub/stub_test.go | 2 +- database/testing/migrate_testing.go | 2 +- 12 files changed, 73 insertions(+), 73 deletions(-) diff --git a/database/cassandra/cassandra_test.go b/database/cassandra/cassandra_test.go index fcfd61708..91cd31bf5 100644 --- a/database/cassandra/cassandra_test.go +++ b/database/cassandra/cassandra_test.go @@ -68,7 +68,7 @@ func Test(t *testing.T) { p := &Cassandra{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -89,7 +89,7 @@ func TestMigrate(t *testing.T) { p := &Cassandra{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -99,7 +99,7 @@ func TestMigrate(t *testing.T) { m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "testks", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT table_name from system_schema.tables")) }) diff --git a/database/cockroachdb/cockroachdb_test.go b/database/cockroachdb/cockroachdb_test.go index 1e3609bf0..6ae9800c6 100644 --- a/database/cockroachdb/cockroachdb_test.go +++ b/database/cockroachdb/cockroachdb_test.go @@ -96,7 +96,7 @@ func Test(t *testing.T) { c := &CockroachDb{} d, err := c.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.Test(t, d, []byte("SELECT 1")) }) @@ -115,12 +115,12 @@ func TestMigrate(t *testing.T) { c := &CockroachDb{} d, err := c.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "migrate", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT 1")) }) @@ -139,7 +139,7 @@ func TestMultiStatement(t *testing.T) { c := &CockroachDb{} d, err := c.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } if err := d.Run(strings.NewReader("CREATE TABLE foo (foo text); CREATE TABLE bar (bar text);")); err != nil { t.Fatalf("expected err to be nil, got %v", err) @@ -169,7 +169,7 @@ func TestFilterCustomQuery(t *testing.T) { c := &CockroachDb{} _, err = c.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } }) } diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index 3c58956ae..ee4d2676a 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -89,7 +89,7 @@ func Test(t *testing.T) { p := &Firebird{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -111,7 +111,7 @@ func TestMigrate(t *testing.T) { p := &Firebird{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -120,7 +120,7 @@ func TestMigrate(t *testing.T) { }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "firebirdsql", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT Count(*) FROM rdb$relations")) }) @@ -137,7 +137,7 @@ func TestErrorParsing(t *testing.T) { p := &Firebird{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -171,7 +171,7 @@ func TestFilterCustomQuery(t *testing.T) { p := &Firebird{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -192,7 +192,7 @@ func Test_Lock(t *testing.T) { p := &Firebird{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { diff --git a/database/mongodb/mongodb_test.go b/database/mongodb/mongodb_test.go index b648d83d7..2b69f4d3c 100644 --- a/database/mongodb/mongodb_test.go +++ b/database/mongodb/mongodb_test.go @@ -83,7 +83,7 @@ func Test(t *testing.T) { p := &Mongo{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -109,7 +109,7 @@ func TestMigrate(t *testing.T) { p := &Mongo{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -118,7 +118,7 @@ func TestMigrate(t *testing.T) { }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte(`[{"insert":"hello","documents":[{"wild":"world"}]}]`)) }) @@ -135,7 +135,7 @@ func TestWithAuth(t *testing.T) { p := &Mongo{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -145,7 +145,7 @@ func TestWithAuth(t *testing.T) { createUserCMD := []byte(`[{"createUser":"deminem","pwd":"gogo","roles":[{"role":"readWrite","db":"testMigration"}]}]`) err = d.Run(bytes.NewReader(createUserCMD)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } testcases := []struct { name string @@ -165,7 +165,7 @@ func TestWithAuth(t *testing.T) { mc := &Mongo{} d, err := mc.Open(fmt.Sprintf(tcase.connectUri, ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -197,20 +197,20 @@ func TestTransaction(t *testing.T) { client, err := mongo.Connect(context.TODO(), mongoConnectionString(ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } err = client.Ping(context.TODO(), nil) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } //rs.initiate() err = client.Database("admin").RunCommand(context.TODO(), bson.D{bson.E{Key: "replSetInitiate", Value: bson.D{}}}).Err() if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } err = waitForReplicaInit(client) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } d, err := WithInstance(client, &Config{ DatabaseName: "testMigration", @@ -240,7 +240,7 @@ func TestTransaction(t *testing.T) { }]`) err = d.Run(bytes.NewReader(insertCMD)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } testcases := []struct { name string @@ -277,18 +277,18 @@ func TestTransaction(t *testing.T) { t.Run(tcase.name, func(t *testing.T) { client, err := mongo.Connect(context.TODO(), mongoConnectionString(ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } err = client.Ping(context.TODO(), nil) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } d, err := WithInstance(client, &Config{ DatabaseName: "testMigration", TransactionMode: true, }) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -298,12 +298,12 @@ func TestTransaction(t *testing.T) { runErr := d.Run(bytes.NewReader(tcase.cmds)) if runErr != nil { if !tcase.isErrorExpected { - t.Fatalf("%v", runErr) + t.Fatal(runErr) } } documentsCount, err := client.Database("testMigration").Collection("hello").Count(context.TODO(), bson.M{}) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } if tcase.documentsCount != documentsCount { t.Fatalf("expected %d and actual %d documents count not equal. run migration error:%s", tcase.documentsCount, documentsCount, runErr) diff --git a/database/mysql/mysql_test.go b/database/mysql/mysql_test.go index 76859151c..9a8f986bc 100644 --- a/database/mysql/mysql_test.go +++ b/database/mysql/mysql_test.go @@ -79,7 +79,7 @@ func Test(t *testing.T) { p := &Mysql{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -112,7 +112,7 @@ func TestMigrate(t *testing.T) { p := &Mysql{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -148,7 +148,7 @@ func TestLockWorks(t *testing.T) { p := &Mysql{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.Test(t, d, []byte("SELECT 1")) diff --git a/database/postgres/postgres_test.go b/database/postgres/postgres_test.go index 403550f5b..2951dbc7a 100644 --- a/database/postgres/postgres_test.go +++ b/database/postgres/postgres_test.go @@ -78,7 +78,7 @@ func Test(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -100,7 +100,7 @@ func TestMigrate(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -109,7 +109,7 @@ func TestMigrate(t *testing.T) { }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "postgres", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT 1")) }) @@ -126,7 +126,7 @@ func TestMultiStatement(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -159,7 +159,7 @@ func TestErrorParsing(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -188,7 +188,7 @@ func TestFilterCustomQuery(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -209,11 +209,11 @@ func TestWithSchema(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } }() @@ -228,11 +228,11 @@ func TestWithSchema(t *testing.T) { // re-connect using that schema d2, err := p.Open(fmt.Sprintf("postgres://postgres@%v:%v/postgres?sslmode=disable&search_path=foobar", ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d2.Close(); err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } }() @@ -278,7 +278,7 @@ func TestParallelSchema(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -297,7 +297,7 @@ func TestParallelSchema(t *testing.T) { // re-connect using that schemas dfoo, err := p.Open(fmt.Sprintf("postgres://postgres@%v:%v/postgres?sslmode=disable&search_path=foo", ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := dfoo.Close(); err != nil { @@ -307,7 +307,7 @@ func TestParallelSchema(t *testing.T) { dbar, err := p.Open(fmt.Sprintf("postgres://postgres@%v:%v/postgres?sslmode=disable&search_path=bar", ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := dbar.Close(); err != nil { @@ -348,7 +348,7 @@ func TestPostgres_Lock(t *testing.T) { p := &Postgres{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.Test(t, d, []byte("SELECT 1")) diff --git a/database/ql/ql_test.go b/database/ql/ql_test.go index 75c9ecf7e..57be27009 100644 --- a/database/ql/ql_test.go +++ b/database/ql/ql_test.go @@ -21,7 +21,7 @@ func Test(t *testing.T) { } defer func() { if err := os.RemoveAll(dir); err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } }() t.Logf("DB path : %s\n", filepath.Join(dir, "ql.db")) @@ -29,7 +29,7 @@ func Test(t *testing.T) { addr := fmt.Sprintf("ql://%s", filepath.Join(dir, "ql.db")) d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } db, err := sql.Open("ql", filepath.Join(dir, "ql.db")) @@ -68,14 +68,14 @@ func TestMigrate(t *testing.T) { driver, err := WithInstance(db, &Config{}) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } m, err := migrate.NewWithDatabaseInstance( "file://./examples/migrations", "ql", driver) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("CREATE TABLE t (Qty int, Name string);")) } diff --git a/database/redshift/redshift_test.go b/database/redshift/redshift_test.go index d4185ee61..8651f7fd4 100644 --- a/database/redshift/redshift_test.go +++ b/database/redshift/redshift_test.go @@ -85,7 +85,7 @@ func Test(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -107,7 +107,7 @@ func TestMigrate(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -116,7 +116,7 @@ func TestMigrate(t *testing.T) { }() m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "postgres", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT 1")) }) @@ -133,7 +133,7 @@ func TestMultiStatement(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -166,7 +166,7 @@ func TestErrorParsing(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -195,7 +195,7 @@ func TestFilterCustomQuery(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -216,7 +216,7 @@ func TestWithSchema(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d.Close(); err != nil { @@ -235,7 +235,7 @@ func TestWithSchema(t *testing.T) { // re-connect using that schema d2, err := p.Open(fmt.Sprintf("postgres://postgres@%v:%v/postgres?sslmode=disable&search_path=foobar", ip, port)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } defer func() { if err := d2.Close(); err != nil { @@ -289,7 +289,7 @@ func TestRedshift_Lock(t *testing.T) { p := &Redshift{} d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.Test(t, d, []byte("SELECT 1")) diff --git a/database/spanner/spanner_test.go b/database/spanner/spanner_test.go index b9cb52b13..2e04fc6af 100644 --- a/database/spanner/spanner_test.go +++ b/database/spanner/spanner_test.go @@ -24,7 +24,7 @@ func Test(t *testing.T) { addr := fmt.Sprintf("spanner://%s", db) d, err := s.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.Test(t, d, []byte("SELECT 1")) } @@ -43,11 +43,11 @@ func TestMigrate(t *testing.T) { addr := fmt.Sprintf("spanner://%s", db) d, err := s.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", db, d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT 1")) } diff --git a/database/sqlite3/sqlite3_test.go b/database/sqlite3/sqlite3_test.go index 40651228f..3c3f24d4d 100644 --- a/database/sqlite3/sqlite3_test.go +++ b/database/sqlite3/sqlite3_test.go @@ -29,7 +29,7 @@ func Test(t *testing.T) { addr := fmt.Sprintf("sqlite3://%s", filepath.Join(dir, "sqlite3.db")) d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.Test(t, d, []byte("CREATE TABLE t (Qty int, Name string);")) } @@ -49,7 +49,7 @@ func TestMigrate(t *testing.T) { addr := fmt.Sprintf("sqlite3://%s", filepath.Join(dir, "sqlite3.db")) d, err := p.Open(addr) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } db, err := sql.Open("sqlite3", filepath.Join(dir, "sqlite3.db")) @@ -63,7 +63,7 @@ func TestMigrate(t *testing.T) { }() driver, err := WithInstance(db, &Config{}) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } if err := d.Drop(); err != nil { t.Fatal(err) @@ -73,7 +73,7 @@ func TestMigrate(t *testing.T) { "file://./examples/migrations", "ql", driver) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("CREATE TABLE t (Qty int, Name string);")) } @@ -106,22 +106,22 @@ func TestMigrationTable(t *testing.T) { } driver, err := WithInstance(db, config) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } m, err := migrate.NewWithDatabaseInstance( "file://./examples/migrations", "ql", driver) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } t.Log("UP") err = m.Up() if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } _, err = db.Query(fmt.Sprintf("SELECT * FROM %s", config.MigrationsTable)) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } } diff --git a/database/stub/stub_test.go b/database/stub/stub_test.go index fdf74c748..aa95ac0d1 100644 --- a/database/stub/stub_test.go +++ b/database/stub/stub_test.go @@ -36,7 +36,7 @@ func TestMigrate(t *testing.T) { srcDrv.(*stub.Stub).Migrations = stubMigrations m, err := migrate.NewWithInstance("stub", srcDrv, "", d) if err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("/* foobar migration */")) diff --git a/database/testing/migrate_testing.go b/database/testing/migrate_testing.go index 944468ef4..fd05851e8 100644 --- a/database/testing/migrate_testing.go +++ b/database/testing/migrate_testing.go @@ -34,6 +34,6 @@ func TestMigrateDrop(t *testing.T, m *migrate.Migrate) { func TestMigrateUp(t *testing.T, m *migrate.Migrate) { t.Log("UP") if err := m.Up(); err != nil { - t.Fatalf("%v", err) + t.Fatal(err) } } From 21801e0bcc7b5a917bf7994ca7ed0bbe795e5a31 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 13:35:46 +0300 Subject: [PATCH 16/35] Using fmt.Sprint(sum) instead of t.Srintf("%v", sum) --- database/util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/util.go b/database/util.go index ba5d09562..29e52c6f7 100644 --- a/database/util.go +++ b/database/util.go @@ -16,5 +16,5 @@ func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (str } sum := crc32.ChecksumIEEE([]byte(databaseName)) sum = sum * uint32(advisoryLockIDSalt) - return fmt.Sprintf("%v", sum), nil + return fmt.Sprint(sum), nil } From 47fa45a16f55fab6d582f2f257d90a0062485180 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 13:39:26 +0300 Subject: [PATCH 17/35] Refactoring --- internal/cli/commands.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/cli/commands.go b/internal/cli/commands.go index 590468be7..ab2b0952d 100644 --- a/internal/cli/commands.go +++ b/internal/cli/commands.go @@ -80,8 +80,7 @@ func createCmd(dir string, startTime time.Time, format string, name string, ext } } - err := os.MkdirAll(dir, os.ModePerm) - if err != nil { + if err := os.MkdirAll(dir, os.ModePerm); err != nil { log.fatalErr(err) } From 343b35c284c96085d1e7a4a65277097120d11966 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 13:43:06 +0300 Subject: [PATCH 18/35] Revert for backward compatibility --- database/stub/stub.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/stub/stub.go b/database/stub/stub.go index 2461fd33a..4ad0193bd 100644 --- a/database/stub/stub.go +++ b/database/stub/stub.go @@ -13,7 +13,7 @@ func init() { } type Stub struct { - URL string + Url string Instance interface{} CurrentVersion int MigrationSequence []string @@ -26,7 +26,7 @@ type Stub struct { func (s *Stub) Open(url string) (database.Driver, error) { return &Stub{ - URL: url, + Url: url, CurrentVersion: -1, MigrationSequence: make([]string, 0), Config: &Config{}, From bbe0f3c5bff2e2cdc8f863ab780194f83c5023c1 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 15:04:16 +0300 Subject: [PATCH 19/35] Revert --- testing/docker.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/testing/docker.go b/testing/docker.go index f89384503..3b903df31 100644 --- a/testing/docker.go +++ b/testing/docker.go @@ -206,13 +206,15 @@ func (d *DockerContainer) portMapping(selectFirst bool, cPort int) (containerPor // Skip ahead until we find the port we want continue } - - hostPortUint, err := strconv.ParseUint(bindings[0].HostPort, 10, 64) - if err != nil { - return 0, "", 0, err + for _, binding := range bindings { + + hostPortUint, err := strconv.ParseUint(binding.HostPort, 10, 64) + if err != nil { + return 0, "", 0, err + } + // nolint: staticcheck + return uint(port.Int()), binding.HostIP, uint(hostPortUint), nil } - - return uint(port.Int()), bindings[0].HostIP, uint(hostPortUint), nil } if selectFirst { From 62bebbf1a62755ed7c941210fab7559fd3dd2e11 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 16:06:58 +0300 Subject: [PATCH 20/35] go mod tidy --- go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/go.mod b/go.mod index 788a129e8..d6aa4ef03 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,6 @@ require ( github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/kr/pty v1.1.3 // indirect github.com/kshvakov/clickhouse v1.3.5 github.com/lib/pq v1.0.0 github.com/mattn/go-sqlite3 v1.10.0 From 05e31760667c6428338f9af68fd5407e889375fe Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 16:12:44 +0300 Subject: [PATCH 21/35] Added error logging --- internal/cli/main.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/cli/main.go b/internal/cli/main.go index 05add452c..51afad77e 100644 --- a/internal/cli/main.go +++ b/internal/cli/main.go @@ -89,7 +89,9 @@ Database drivers: `+strings.Join(database.List(), ", ")+"\n") migrater, migraterErr := migrate.New(*sourcePtr, *databasePtr) defer func() { if migraterErr == nil { - _, _ = migrater.Close() + if _, err := migrater.Close(); err != nil { + log.Println(err) + } } }() if migraterErr == nil { From ecb6171535dfa0501f97e9c6ba2152c90383dd40 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 16:14:34 +0300 Subject: [PATCH 22/35] Added error logging --- internal/cli/main.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/cli/main.go b/internal/cli/main.go index 51afad77e..c975f6ed8 100644 --- a/internal/cli/main.go +++ b/internal/cli/main.go @@ -125,7 +125,9 @@ Database drivers: `+strings.Join(database.List(), ", ")+"\n") formatPtr := createFlagSet.String("format", defaultTimeFormat, `The Go time format string to use. If the string "unix" or "unixNano" is specified, then the seconds or nanoseconds since January 1, 1970 UTC respectively will be used. Caution, due to the behavior of time.Time.Format(), invalid format strings will not error`) createFlagSet.BoolVar(&seq, "seq", seq, "Use sequential numbers instead of timestamps (default: false)") createFlagSet.IntVar(&seqDigits, "digits", seqDigits, "The number of digits to use in sequences (default: 6)") - _ = createFlagSet.Parse(args) + if err := createFlagSet.Parse(args); err != nil { + log.Println(err) + } if createFlagSet.NArg() == 0 { log.fatal("error: please specify name") From 9ad81a381be241b72652e8c47d193d2c4b737f3d Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 16:20:28 +0300 Subject: [PATCH 23/35] Added error handling --- migrate.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/migrate.go b/migrate.go index 8d55feb3c..a8c37cc85 100644 --- a/migrate.go +++ b/migrate.go @@ -762,8 +762,11 @@ func (m *Migrate) versionExists(version uint) (result error) { // then try down migration down, _, err := m.sourceDrv.ReadDown(version) if err == nil { - // nolint: errcheck - defer down.Close() + defer func() { + if errClose := down.Close(); errClose != nil { + result = multierror.Append(result, errClose) + } + }() } if os.IsExist(err) { return nil From 4ca5c474a675716fbfe44b64629c8e1c5d7dddfe Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 16:48:31 +0300 Subject: [PATCH 24/35] Added error handling --- source/godoc_vfs/vfs_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/godoc_vfs/vfs_test.go b/source/godoc_vfs/vfs_test.go index 641b3a563..30bced1ed 100644 --- a/source/godoc_vfs/vfs_test.go +++ b/source/godoc_vfs/vfs_test.go @@ -34,5 +34,7 @@ func TestOpen(t *testing.T) { } }() b := &godoc_vfs.VFS{} - _, _ = b.Open("") + if _, err := b.Open(""); err != nil { + t.Error(err) + } } From e6d53b96196f5ec7fde07d6dd22c3acdc2837ddd Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 19 Apr 2019 17:47:06 +0300 Subject: [PATCH 25/35] Added error logging --- migration.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/migration.go b/migration.go index c4105d097..d951964e2 100644 --- a/migration.go +++ b/migration.go @@ -4,6 +4,7 @@ import ( "bufio" "fmt" "io" + "log" "time" ) @@ -129,7 +130,9 @@ func (m *Migration) Buffer() error { // start reading from body, peek won't move the read pointer though // poor man's solution? - _, _ = b.Peek(int(m.BufferSize)) + if _, err := b.Peek(int(m.BufferSize)); err != nil { + log.Print(err) + } m.FinishedBuffering = time.Now() From ee02b640d86988f4c611e405ee23fe33db369060 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Mon, 22 Apr 2019 14:55:20 +0300 Subject: [PATCH 26/35] Fix error logging --- database/firebird/firebird_test.go | 3 +-- database/mongodb/mongodb_test.go | 3 +-- database/mysql/mysql_test.go | 5 +++-- database/postgres/postgres_test.go | 4 ++-- database/redshift/redshift_test.go | 4 ++-- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index ee4d2676a..01872f764 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -48,7 +48,7 @@ func fbConnectionString(host, port string) string { return fmt.Sprintf("firebird://%s:%s@%s:%s//firebird/data/%s", user, password, host, port, dbName) } -func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { +func isReady(ctx context.Context, c dktest.ContainerInfo) bool { ip, port, err := c.FirstPort() if err != nil { return false @@ -62,7 +62,6 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { defer func() { if err := db.Close(); err != nil { log.Println("close error:", err) - result = false } }() if err = db.PingContext(ctx); err != nil { diff --git a/database/mongodb/mongodb_test.go b/database/mongodb/mongodb_test.go index 2b69f4d3c..d2ba64535 100644 --- a/database/mongodb/mongodb_test.go +++ b/database/mongodb/mongodb_test.go @@ -43,7 +43,7 @@ func mongoConnectionString(host, port string) string { return fmt.Sprintf("mongodb://%s:%s/testMigration?connect=direct", host, port) } -func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { +func isReady(ctx context.Context, c dktest.ContainerInfo) bool { ip, port, err := c.FirstPort() if err != nil { return false @@ -56,7 +56,6 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { defer func() { if err := client.Disconnect(ctx); err != nil { log.Println("close error:", err) - result = false } }() diff --git a/database/mysql/mysql_test.go b/database/mysql/mysql_test.go index 9a8f986bc..17eeafb8a 100644 --- a/database/mysql/mysql_test.go +++ b/database/mysql/mysql_test.go @@ -5,6 +5,7 @@ import ( "database/sql" sqldriver "database/sql/driver" "fmt" + "log" "github.com/golang-migrate/migrate/v4" "net/url" @@ -38,7 +39,7 @@ var ( } ) -func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { +func isReady(ctx context.Context, c dktest.ContainerInfo) bool { ip, port, err := c.Port(defaultPort) if err != nil { return false @@ -50,7 +51,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { } defer func() { if err := db.Close(); err != nil { - result = false + log.Println("close error:", err) } }() if err = db.PingContext(ctx); err != nil { diff --git a/database/postgres/postgres_test.go b/database/postgres/postgres_test.go index 2951dbc7a..960896801 100644 --- a/database/postgres/postgres_test.go +++ b/database/postgres/postgres_test.go @@ -39,7 +39,7 @@ func pgConnectionString(host, port string) string { return fmt.Sprintf("postgres://postgres@%s:%s/postgres?sslmode=disable", host, port) } -func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { +func isReady(ctx context.Context, c dktest.ContainerInfo) bool { ip, port, err := c.FirstPort() if err != nil { return false @@ -51,7 +51,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { } defer func() { if err := db.Close(); err != nil { - result = false + log.Println("close error:", err) } }() if err = db.PingContext(ctx); err != nil { diff --git a/database/redshift/redshift_test.go b/database/redshift/redshift_test.go index 8651f7fd4..3cacfbcd8 100644 --- a/database/redshift/redshift_test.go +++ b/database/redshift/redshift_test.go @@ -46,7 +46,7 @@ func connectionString(schema, host, port string) string { return fmt.Sprintf("%s://postgres@%s:%s/postgres?sslmode=disable", schema, host, port) } -func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { +func isReady(ctx context.Context, c dktest.ContainerInfo) bool { ip, port, err := c.FirstPort() if err != nil { return false @@ -58,7 +58,7 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) (result bool) { } defer func() { if err := db.Close(); err != nil { - result = false + log.Println("close error:", err) } }() if err = db.PingContext(ctx); err != nil { From 4348dab3ea5bc785b8e04590179ae3b04dacfeec Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Mon, 22 Apr 2019 16:10:55 +0300 Subject: [PATCH 27/35] Added error handling --- migration.go | 8 ++++++-- source/file/file_test.go | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/migration.go b/migration.go index d951964e2..919e01ee9 100644 --- a/migration.go +++ b/migration.go @@ -148,10 +148,14 @@ func (m *Migration) Buffer() error { // close bufferWriter so Buffer knows that there is no // more data coming - _ = m.bufferWriter.Close() + if err := m.bufferWriter.Close(); err != nil { + return err + } // it's safe to close the Body too - _ = m.Body.Close() + if err := m.Body.Close(); err != nil { + return err + } return nil } diff --git a/source/file/file_test.go b/source/file/file_test.go index 14357e651..6536faaea 100644 --- a/source/file/file_test.go +++ b/source/file/file_test.go @@ -86,7 +86,10 @@ func TestOpenWithRelativePath(t *testing.T) { t.Fatal(err) } defer func() { - _ = os.Chdir(wd) // rescue working dir after we are done + // rescue working dir after we are done + if err := os.Chdir(wd); err != nil { + t.Log(err) + } }() if err := os.Chdir(tmpDir); err != nil { From ed6965b99b3847654d8a58ba382a4e2d6a5c9b55 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Mon, 22 Apr 2019 16:15:18 +0300 Subject: [PATCH 28/35] Fix --- database/cockroachdb/cockroachdb_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/database/cockroachdb/cockroachdb_test.go b/database/cockroachdb/cockroachdb_test.go index 6ae9800c6..0e7c3b537 100644 --- a/database/cockroachdb/cockroachdb_test.go +++ b/database/cockroachdb/cockroachdb_test.go @@ -54,7 +54,6 @@ func isReady(ctx context.Context, c dktest.ContainerInfo) bool { } if err := db.Close(); err != nil { log.Println("close error:", err) - return false } return true } From 303b0591b4d9308b1f23b2b99e5b7dd9bc9c9f94 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Mon, 22 Apr 2019 17:36:33 +0300 Subject: [PATCH 29/35] Added logging for migr.Buffer() --- migrate.go | 71 +++++++++++++++++++++++++++++++++++++++------------- migration.go | 5 +--- 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/migrate.go b/migrate.go index a8c37cc85..870f4eb12 100644 --- a/migrate.go +++ b/migrate.go @@ -348,8 +348,11 @@ func (m *Migrate) Run(migration ...*Migration) error { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func(migr *Migration) { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }(migr) } }() @@ -436,8 +439,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() from = int(firstVersion) } @@ -461,8 +467,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() from = int(next) } @@ -484,8 +493,11 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { return } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() return @@ -501,8 +513,12 @@ func (m *Migrate) read(from int, to int, ret chan<- interface{}) { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() + from = int(prev) } } @@ -550,8 +566,11 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() from = int(firstVersion) count++ continue @@ -595,8 +614,11 @@ func (m *Migrate) readUp(from int, limit int, ret chan<- interface{}) { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() from = int(next) count++ } @@ -657,8 +679,11 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) { return } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() count++ } @@ -679,8 +704,11 @@ func (m *Migrate) readDown(from int, limit int, ret chan<- interface{}) { } ret <- migr - // nolint: errcheck - go migr.Buffer() + go func() { + if err := migr.Buffer(); err != nil { + m.logErr(err) + } + }() from = int(prev) count++ } @@ -938,3 +966,10 @@ func (m *Migrate) logVerbosePrintf(format string, v ...interface{}) { m.Log.Printf(format, v...) } } + +// logErr writes error to m.Log if not nil +func (m *Migrate) logErr(err error) { + if m.Log != nil { + m.Log.Printf("error: %v", err) + } +} diff --git a/migration.go b/migration.go index 919e01ee9..c7b378fba 100644 --- a/migration.go +++ b/migration.go @@ -4,7 +4,6 @@ import ( "bufio" "fmt" "io" - "log" "time" ) @@ -130,9 +129,7 @@ func (m *Migration) Buffer() error { // start reading from body, peek won't move the read pointer though // poor man's solution? - if _, err := b.Peek(int(m.BufferSize)); err != nil { - log.Print(err) - } + _, _ = b.Peek(int(m.BufferSize)) m.FinishedBuffering = time.Now() From 96f0e4131c799fc79cb8b86f51617f98464fb3a3 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 26 Apr 2019 13:19:55 +0300 Subject: [PATCH 30/35] Fixes --- database/mysql/mysql_test.go | 2 +- database/util.go | 1 - migrate.go | 8 +++++--- migration.go | 4 +++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/database/mysql/mysql_test.go b/database/mysql/mysql_test.go index 17eeafb8a..e5f73ff2a 100644 --- a/database/mysql/mysql_test.go +++ b/database/mysql/mysql_test.go @@ -123,7 +123,7 @@ func TestMigrate(t *testing.T) { m, err := migrate.NewWithDatabaseInstance("file://./examples/migrations", "public", d) if err != nil { - t.Error(err) + t.Fatal(err) } dt.TestMigrate(t, m, []byte("SELECT 1")) diff --git a/database/util.go b/database/util.go index 29e52c6f7..30041e70e 100644 --- a/database/util.go +++ b/database/util.go @@ -8,7 +8,6 @@ import ( const advisoryLockIDSalt uint = 1486364155 -// nolint: golint // GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error) { if len(additionalNames) > 0 { diff --git a/migrate.go b/migrate.go index 870f4eb12..a4a694b40 100644 --- a/migrate.go +++ b/migrate.go @@ -777,9 +777,11 @@ func (m *Migrate) versionExists(version uint) (result error) { // try up migration first up, _, err := m.sourceDrv.ReadUp(version) if err == nil { - if errClose := up.Close(); errClose != nil { - result = multierror.Append(result, errClose) - } + defer func() { + if errClose := up.Close(); errClose != nil { + result = multierror.Append(result, errClose) + } + }() } if os.IsExist(err) { return nil diff --git a/migration.go b/migration.go index c7b378fba..704fef49e 100644 --- a/migration.go +++ b/migration.go @@ -129,7 +129,9 @@ func (m *Migration) Buffer() error { // start reading from body, peek won't move the read pointer though // poor man's solution? - _, _ = b.Peek(int(m.BufferSize)) + if _, err := b.Peek(int(m.BufferSize)); err != nil && err != io.EOF { + return err + } m.FinishedBuffering = time.Now() From a7ca9da27a94c47cdfb780dc1d0753552528f979 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 26 Apr 2019 15:34:08 +0300 Subject: [PATCH 31/35] Firebird test disabled --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4122661ea..b1afc221b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ SOURCE ?= file go_bindata github aws_s3 google_cloud_storage godoc_vfs gitlab -DATABASE ?= postgres mysql redshift cassandra spanner cockroachdb clickhouse mongodb firebird +DATABASE ?= postgres mysql redshift cassandra spanner cockroachdb clickhouse mongodb VERSION ?= $(shell git describe --tags 2>/dev/null | cut -c 2-) TEST_FLAGS ?= REPO_OWNER ?= $(shell cd .. && basename "$$(pwd)") From ae47e064dfae89fa545a18d51f5cb5fc48fb3fee Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 26 Apr 2019 16:13:39 +0300 Subject: [PATCH 32/35] Fixed nolint comment --- database/util.go | 1 + 1 file changed, 1 insertion(+) diff --git a/database/util.go b/database/util.go index 30041e70e..233e49fcf 100644 --- a/database/util.go +++ b/database/util.go @@ -9,6 +9,7 @@ import ( const advisoryLockIDSalt uint = 1486364155 // GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT +// nolint: golint func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error) { if len(additionalNames) > 0 { databaseName = strings.Join(append(additionalNames, databaseName), "\x00") From 08edc8372ec41953a4a70cd326aaeca20798c271 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 26 Apr 2019 17:15:46 +0300 Subject: [PATCH 33/35] Updated firebird docker image version --- Makefile | 2 +- database/firebird/firebird_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b1afc221b..4122661ea 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ SOURCE ?= file go_bindata github aws_s3 google_cloud_storage godoc_vfs gitlab -DATABASE ?= postgres mysql redshift cassandra spanner cockroachdb clickhouse mongodb +DATABASE ?= postgres mysql redshift cassandra spanner cockroachdb clickhouse mongodb firebird VERSION ?= $(shell git describe --tags 2>/dev/null | cut -c 2-) TEST_FLAGS ?= REPO_OWNER ?= $(shell cd .. && basename "$$(pwd)") diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index 01872f764..564ebea4b 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -38,8 +38,8 @@ var ( }, } specs = []dktesting.ContainerSpec{ - {ImageName: "jacobalberty/firebird:2.5-ss", Options: opts}, - {ImageName: "jacobalberty/firebird:3.0", Options: opts}, + {ImageName: "jacobalberty/firebird:2.5.8-ss", Options: opts}, + {ImageName: "jacobalberty/firebird:3.0.4", Options: opts}, } ) From 84081f42faae9062f006e8dd4b8893d1cf63e47c Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 26 Apr 2019 21:58:58 +0300 Subject: [PATCH 34/35] Disabled test for firebird 2.5 --- database/firebird/firebird_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/database/firebird/firebird_test.go b/database/firebird/firebird_test.go index 564ebea4b..c6a8f1f1c 100644 --- a/database/firebird/firebird_test.go +++ b/database/firebird/firebird_test.go @@ -38,8 +38,7 @@ var ( }, } specs = []dktesting.ContainerSpec{ - {ImageName: "jacobalberty/firebird:2.5.8-ss", Options: opts}, - {ImageName: "jacobalberty/firebird:3.0.4", Options: opts}, + {ImageName: "jacobalberty/firebird:3.0", Options: opts}, } ) From 395b28e5b0a5fbd7b42587a272a9531e90bd79b1 Mon Sep 17 00:00:00 2001 From: Kirill Muratov Date: Fri, 26 Apr 2019 22:02:48 +0300 Subject: [PATCH 35/35] Fixed // nolint --- database/util.go | 3 +-- testing/docker.go | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/database/util.go b/database/util.go index 233e49fcf..976ad3534 100644 --- a/database/util.go +++ b/database/util.go @@ -9,8 +9,7 @@ import ( const advisoryLockIDSalt uint = 1486364155 // GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT -// nolint: golint -func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error) { +func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error) { // nolint: golint if len(additionalNames) > 0 { databaseName = strings.Join(append(additionalNames, databaseName), "\x00") } diff --git a/testing/docker.go b/testing/docker.go index 3b903df31..e5b9ac90c 100644 --- a/testing/docker.go +++ b/testing/docker.go @@ -212,8 +212,8 @@ func (d *DockerContainer) portMapping(selectFirst bool, cPort int) (containerPor if err != nil { return 0, "", 0, err } - // nolint: staticcheck - return uint(port.Int()), binding.HostIP, uint(hostPortUint), nil + + return uint(port.Int()), binding.HostIP, uint(hostPortUint), nil // nolint: staticcheck } }