aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2019-03-14 01:01:55 +0000
committerFelix Hanley <felix@userspace.com.au>2019-03-14 01:01:55 +0000
commitd5104b2e798bb5d48035902bf480f64f2efb440d (patch)
tree52ff471167fcc15b8213b5e018a6f47cd352666c
parent3cdc17111faa9ac60c7e4444279cf18e66309af5 (diff)
downloadmigrate-d5104b2e798bb5d48035902bf480f64f2efb440d.tar.gz
migrate-d5104b2e798bb5d48035902bf480f64f2efb440d.tar.bz2
Fix tests for race failures
-rw-r--r--.drone.yml2
-rw-r--r--migrate_test.go52
2 files changed, 40 insertions, 14 deletions
diff --git a/.drone.yml b/.drone.yml
index b209840..2f1b6ec 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -6,4 +6,4 @@ steps:
commands:
- apk add --no-cache build-base ca-certificates git
- go get github.com/mattn/goveralls
- - goveralls -service drone.io || exit 0
+ - goveralls -v -service drone.io || exit 0
diff --git a/migrate_test.go b/migrate_test.go
index 17f1942..50e16e4 100644
--- a/migrate_test.go
+++ b/migrate_test.go
@@ -2,6 +2,8 @@ package migrate
import (
"database/sql"
+ "fmt"
+ "sync"
"testing"
_ "github.com/mattn/go-sqlite3"
@@ -12,6 +14,7 @@ const testDB = "file:test?mode=memory&cache=shared"
type mig struct {
version int64
sql string
+ cb ResultFunc
}
func createMigration(v int64, sql string) Migration {
@@ -32,8 +35,9 @@ var testMigrations = []struct {
// Out of order please
{version: 2, sql: "insert into test1 (pk) values (1)"},
{version: 3, sql: "insert into test1 (pk) values (2)"},
- {version: 4, sql: "insert into nonexistant (pk) values (2)"},
+ {version: 5, sql: "insert into nonexistant (pk) values (2)"},
{version: 1, sql: "create table if not exists test1 (pk bigint not null primary key)"},
+ {version: 4, sql: "insert into test1 (pk) values (3)"},
}
func TestMigrate(t *testing.T) {
@@ -42,6 +46,8 @@ func TestMigrate(t *testing.T) {
for _, m := range testMigrations {
migrations = append(migrations, createMigration(m.version, m.sql))
}
+ var output string
+ var outputMutex sync.RWMutex
db, err := sql.Open("sqlite3", testDB)
if err != nil {
@@ -53,8 +59,14 @@ func TestMigrate(t *testing.T) {
migrator := Migrator{
db: db,
migrations: migrations,
+ callback: ResultFunc(func(max, curr int64, err error) {
+ outputMutex.Lock()
+ defer outputMutex.Unlock()
+ output = fmt.Sprintf("Maximum: %d, Current: %d, Error: %s\n", max, curr, err)
+ }),
}
+ // No version yet
v, err := migrator.Version()
if err != nil {
t.Fatalf("Migrator.Version() failed: %v", err)
@@ -63,33 +75,47 @@ func TestMigrate(t *testing.T) {
t.Fatalf("Migrator.Version() should be NilVersion, got %d", v)
}
- err = migrator.MigrateTo(3)
+ // Next version
+ if err = migrator.MigrateTo(2); err != nil {
+ t.Fatalf("Migrator.MigrateTo(2) failed: %v", err)
+ }
+ v, err = migrator.Version()
if err != nil {
- t.Fatalf("Migrator.MigrateTo(3) failed: %v", err)
+ t.Fatalf("Migrator.Version() failed: %v", err)
+ }
+ if int(v) != 2 {
+ t.Errorf("expected migration version 2, got %d", v)
}
+ // Previous version
+ if err = migrator.MigrateTo(2); err != nil {
+ t.Fatalf("Migrator.MigrateTo(2) failed: %v", err)
+ }
v, err = migrator.Version()
if err != nil {
t.Fatalf("Migrator.Version() failed: %v", err)
}
-
- if int(v) != len(migrations)-1 {
- t.Errorf("expected migration version %d, got %d", len(migrations)-1, v)
+ if int(v) != 2 {
+ t.Errorf("expected migration version 2, got %d", v)
}
- err = migrator.MigrateTo(4)
- if err == nil {
- t.Fatalf("Migrator.MigrateTo(4) should have failed")
+ // All the way, with eventual failure
+ if err = migrator.Migrate(); err == nil {
+ t.Fatalf("Migrator.Migrate() should have failed")
}
-
v, err = migrator.Version()
if err != nil {
t.Fatalf("Migrator.Version() failed: %v", err)
}
-
- if int(v) != len(migrations)-1 {
- t.Errorf("expected migration version %d, got %d", len(migrations)-1, v)
+ if int(v) != 4 {
+ t.Errorf("expected migration version 4, got %d", v)
+ }
+ expected := "Maximum: 5, Current: 5, Error: migration 5 failed: no such table: nonexistant\n"
+ outputMutex.RLock()
+ if output != expected {
+ t.Errorf("expected output %q, got %q", expected, output)
}
+ outputMutex.RUnlock()
var result int64
err = db.QueryRow(`select pk from test1`).Scan(&result)