1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
package migrate
import (
"database/sql"
"testing"
_ "github.com/mattn/go-sqlite3"
)
const testDB = "file:test?mode=memory&cache=shared"
type mig struct {
version int64
sql string
}
func createMigration(v int64, sql string) Migration {
return &mig{version: v, sql: sql}
}
func (m mig) Version() int64 { return m.version }
func (m mig) Run(tx *sql.Tx) error {
_, err := tx.Exec(m.sql)
return err
}
var testMigrations = []struct {
version int64
sql string
}{
// Out of order please
{version: 2, sql: "insert into test1 (pk) values (1)"},
{version: 3, sql: "insert into test1 (pk) values (2)"},
{version: 1, sql: "create table if not exists test1 (pk bigint not null primary key)"},
}
func TestMigrate(t *testing.T) {
// Load migrations
var migrations []Migration
for _, m := range testMigrations {
migrations = append(migrations, createMigration(m.version, m.sql))
}
db, err := sql.Open("sqlite3", testDB)
if err != nil {
t.Fatalf("DB setup failed: %v", err)
}
defer db.Close()
//db.SetMaxOpenConns(1)
migrator := Migrator{
db: db,
migrations: migrations,
}
v, err := migrator.Version()
if err != nil {
t.Fatalf("Migrator.Version() failed: %v", err)
}
if v != NilVersion {
t.Fatalf("Migrator.Version() should be NilVersion, got %d", v)
}
err = migrator.Migrate()
if err != nil {
t.Fatalf("Migrator.Migrate() failed: %v", err)
}
v, err = migrator.Version()
if err != nil {
t.Fatalf("Migrator.Version() failed: %v", err)
}
if int(v) != len(migrations) {
t.Errorf("expected migration version %d, got %d", len(migrations), v)
}
var result int64
err = db.QueryRow(`select pk from test1`).Scan(&result)
if err != nil {
t.Fatal(err)
}
}
|