github.com/nagyistzcons/migrate/v4@v4.14.5/database/sqlcipher/sqlcipher_test.go (about) 1 package sqlcipher 2 3 import ( 4 "database/sql" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 13 "github.com/golang-migrate/migrate/v4" 14 dt "github.com/golang-migrate/migrate/v4/database/testing" 15 _ "github.com/golang-migrate/migrate/v4/source/file" 16 _ "github.com/mutecomm/go-sqlcipher/v4" 17 ) 18 19 func Test(t *testing.T) { 20 dir, err := ioutil.TempDir("", "sqlite3-driver-test") 21 if err != nil { 22 return 23 } 24 defer func() { 25 if err := os.RemoveAll(dir); err != nil { 26 t.Error(err) 27 } 28 }() 29 t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) 30 p := &Sqlite{} 31 addr := fmt.Sprintf("sqlite3://%s", filepath.Join(dir, "sqlite3.db")) 32 d, err := p.Open(addr) 33 if err != nil { 34 t.Fatal(err) 35 } 36 dt.Test(t, d, []byte("CREATE TABLE t (Qty int, Name string);")) 37 } 38 39 func TestMigrate(t *testing.T) { 40 dir, err := ioutil.TempDir("", "sqlite3-driver-test") 41 if err != nil { 42 return 43 } 44 defer func() { 45 if err := os.RemoveAll(dir); err != nil { 46 t.Error(err) 47 } 48 }() 49 t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) 50 51 db, err := sql.Open("sqlite3", filepath.Join(dir, "sqlite3.db")) 52 if err != nil { 53 return 54 } 55 defer func() { 56 if err := db.Close(); err != nil { 57 return 58 } 59 }() 60 driver, err := WithInstance(db, &Config{}) 61 if err != nil { 62 t.Fatal(err) 63 } 64 65 m, err := migrate.NewWithDatabaseInstance( 66 "file://./examples/migrations", 67 "ql", driver) 68 if err != nil { 69 t.Fatal(err) 70 } 71 dt.TestMigrate(t, m) 72 } 73 74 func TestMigrationTable(t *testing.T) { 75 dir, err := ioutil.TempDir("", "sqlite3-driver-test-migration-table") 76 if err != nil { 77 return 78 } 79 defer func() { 80 if err := os.RemoveAll(dir); err != nil { 81 t.Error(err) 82 } 83 }() 84 85 t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) 86 87 db, err := sql.Open("sqlite3", filepath.Join(dir, "sqlite3.db")) 88 if err != nil { 89 return 90 } 91 defer func() { 92 if err := db.Close(); err != nil { 93 return 94 } 95 }() 96 97 config := &Config{ 98 MigrationsTable: "my_migration_table", 99 } 100 driver, err := WithInstance(db, config) 101 if err != nil { 102 t.Fatal(err) 103 } 104 m, err := migrate.NewWithDatabaseInstance( 105 "file://./examples/migrations", 106 "ql", driver) 107 if err != nil { 108 t.Fatal(err) 109 } 110 t.Log("UP") 111 err = m.Up() 112 if err != nil { 113 t.Fatal(err) 114 } 115 116 _, err = db.Query(fmt.Sprintf("SELECT * FROM %s", config.MigrationsTable)) 117 if err != nil { 118 t.Fatal(err) 119 } 120 } 121 122 func TestNoTxWrap(t *testing.T) { 123 dir, err := ioutil.TempDir("", "sqlite3-driver-test") 124 if err != nil { 125 return 126 } 127 defer func() { 128 if err := os.RemoveAll(dir); err != nil { 129 t.Error(err) 130 } 131 }() 132 t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) 133 p := &Sqlite{} 134 addr := fmt.Sprintf("sqlite3://%s?x-no-tx-wrap=true", filepath.Join(dir, "sqlite3.db")) 135 d, err := p.Open(addr) 136 if err != nil { 137 t.Fatal(err) 138 } 139 // An explicit BEGIN statement would ordinarily fail without x-no-tx-wrap. 140 // (Transactions in sqlite may not be nested.) 141 dt.Test(t, d, []byte("BEGIN; CREATE TABLE t (Qty int, Name string); COMMIT;")) 142 } 143 144 func TestNoTxWrapInvalidValue(t *testing.T) { 145 dir, err := ioutil.TempDir("", "sqlite3-driver-test") 146 if err != nil { 147 return 148 } 149 defer func() { 150 if err := os.RemoveAll(dir); err != nil { 151 t.Error(err) 152 } 153 }() 154 t.Logf("DB path : %s\n", filepath.Join(dir, "sqlite3.db")) 155 p := &Sqlite{} 156 addr := fmt.Sprintf("sqlite3://%s?x-no-tx-wrap=yeppers", filepath.Join(dir, "sqlite3.db")) 157 _, err = p.Open(addr) 158 if assert.Error(t, err) { 159 assert.Contains(t, err.Error(), "x-no-tx-wrap") 160 assert.Contains(t, err.Error(), "invalid syntax") 161 } 162 }