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  }