Examples, tests, max size.

This commit is contained in:
Nuno Cruces
2023-05-30 11:21:14 +01:00
parent 8b2e96dedc
commit a33b828e13
9 changed files with 279 additions and 134 deletions

View File

@@ -10,10 +10,12 @@ import (
)
func TestDB_memory(t *testing.T) {
t.Parallel()
testDB(t, ":memory:")
}
func TestDB_file(t *testing.T) {
t.Parallel()
testDB(t, filepath.Join(t.TempDir(), "test.db"))
}
@@ -21,12 +23,11 @@ func TestDB_VFS(t *testing.T) {
sqlite3vfs.Register("memvfs", sqlite3vfs.MemoryVFS{
"test.db": &sqlite3vfs.MemoryDB{},
})
defer sqlite3vfs.Unregister("memvfs")
testDB(t, "file:test.db?vfs=memvfs&_pragma=journal_mode(memory)")
}
func testDB(t *testing.T, name string) {
t.Parallel()
db, err := sqlite3.Open(name)
if err != nil {
t.Fatal(err)

View File

@@ -43,6 +43,7 @@ func TestMemory(t *testing.T) {
sqlite3vfs.Register("memvfs", sqlite3vfs.MemoryVFS{
"test.db": &sqlite3vfs.MemoryDB{},
})
defer sqlite3vfs.Unregister("memvfs")
name := "file:test.db?vfs=memvfs" +
"&_pragma=busy_timeout(10000)" +

BIN
tests/testdata/test.db vendored Normal file

Binary file not shown.

94
tests/vfs_test.go Normal file
View File

@@ -0,0 +1,94 @@
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)
}
}