Files
sqlite3/tests/vfs_test.go
2023-05-30 11:21:14 +01:00

95 lines
2.1 KiB
Go

package tests
import (
"errors"
"strings"
"testing"
_ "embed"
"github.com/ncruces/go-sqlite3"
_ "github.com/ncruces/go-sqlite3/driver"
_ "github.com/ncruces/go-sqlite3/embed"
"github.com/ncruces/go-sqlite3/sqlite3vfs"
)
//go:embed testdata/test.db
var testdata string
func TestMemoryVFS_Open_notfound(t *testing.T) {
sqlite3vfs.Register("memory", sqlite3vfs.MemoryVFS{
"test.db": &sqlite3vfs.MemoryDB{},
})
defer sqlite3vfs.Unregister("memory")
_, err := sqlite3.Open("file:demo.db?vfs=memory&mode=ro")
if err == nil {
t.Error("want error")
}
if !errors.Is(err, sqlite3.CANTOPEN) {
t.Errorf("got %v, want sqlite3.CANTOPEN", err)
}
}
func TestMemoryVFS_Open_journal(t *testing.T) {
sqlite3vfs.Register("memory", sqlite3vfs.MemoryVFS{
"test.db": &sqlite3vfs.MemoryDB{},
})
defer sqlite3vfs.Unregister("memory")
db, err := sqlite3.Open("file:test.db?vfs=memory")
if err != nil {
t.Fatal(err)
}
defer db.Close()
err = db.Exec(`CREATE TABLE IF NOT EXISTS test (col)`)
if err == nil {
t.Error("want error")
}
if !errors.Is(err, sqlite3.CANTOPEN) {
t.Errorf("got %v, want sqlite3.CANTOPEN", err)
}
}
func TestMemoryVFS_Open_errors(t *testing.T) {
sqlite3vfs.Register("memory", sqlite3vfs.MemoryVFS{
"test.db": &sqlite3vfs.MemoryDB{MaxSize: 65536},
})
defer sqlite3vfs.Unregister("memory")
db, err := sqlite3.Open("file:test.db?vfs=memory&_pragma=journal_mode(memory)")
if err != nil {
t.Fatal(err)
}
defer db.Close()
err = db.Exec(`CREATE TABLE IF NOT EXISTS test (col)`)
if err != nil {
t.Fatal(err)
}
err = db.Exec(`INSERT INTO test VALUES (zeroblob(65536))`)
if err == nil {
t.Error("want error")
}
if !errors.Is(err, sqlite3.FULL) {
t.Errorf("got %v, want sqlite3.FULL", err)
}
}
func TestReaderVFS_Open_notfound(t *testing.T) {
sqlite3vfs.Register("reader", sqlite3vfs.ReaderVFS{
"test.db": sqlite3vfs.NewSizeReaderAt(strings.NewReader(testdata)),
})
defer sqlite3vfs.Unregister("reader")
_, err := sqlite3.Open("file:demo.db?vfs=reader&mode=ro")
if err == nil {
t.Error("want error")
}
if !errors.Is(err, sqlite3.CANTOPEN) {
t.Errorf("got %v, want sqlite3.CANTOPEN", err)
}
}