Files
sqlite3/vfs/cksmvfs/api_test.go

134 lines
2.7 KiB
Go
Raw Normal View History

2024-10-25 00:12:29 +01:00
package cksmvfs_test
import (
_ "embed"
"log"
"path/filepath"
"strings"
"testing"
"github.com/ncruces/go-sqlite3"
"github.com/ncruces/go-sqlite3/driver"
_ "github.com/ncruces/go-sqlite3/embed"
_ "github.com/ncruces/go-sqlite3/internal/testcfg"
"github.com/ncruces/go-sqlite3/util/ioutil"
"github.com/ncruces/go-sqlite3/vfs"
"github.com/ncruces/go-sqlite3/vfs/cksmvfs"
"github.com/ncruces/go-sqlite3/vfs/memdb"
"github.com/ncruces/go-sqlite3/vfs/readervfs"
)
//go:embed testdata/cksm.db
var cksmDB string
func Test_fileformat(t *testing.T) {
readervfs.Create("test.db", ioutil.NewSizeReaderAt(strings.NewReader(cksmDB)))
vfs.Register("rcksm", cksmvfs.Wrap(vfs.Find("reader")))
db, err := driver.Open("file:test.db?vfs=rcksm")
if err != nil {
t.Fatal(err)
}
defer db.Close()
var enabled bool
err = db.QueryRow(`PRAGMA checksum_verification`).Scan(&enabled)
if err != nil {
t.Fatal(err)
}
if !enabled {
t.Error("want true")
}
db.SetMaxIdleConns(0) // Clears the page cache.
_, err = db.Exec(`PRAGMA integrity_check`)
if err != nil {
t.Fatal(err)
}
}
//go:embed testdata/test.db
var testDB []byte
func Test_enable(t *testing.T) {
memdb.Create("nockpt.db", testDB)
vfs.Register("mcksm", cksmvfs.Wrap(vfs.Find("memdb")))
db, err := driver.Open("file:/nockpt.db?vfs=mcksm",
func(db *sqlite3.Conn) error {
return cksmvfs.EnableChecksums(db, "")
})
if err != nil {
t.Fatal(err)
}
defer db.Close()
var enabled bool
err = db.QueryRow(`PRAGMA checksum_verification`).Scan(&enabled)
if err != nil {
t.Fatal(err)
}
if !enabled {
t.Error("want true")
}
db.SetMaxIdleConns(0) // Clears the page cache.
_, err = db.Exec(`PRAGMA integrity_check`)
if err != nil {
t.Fatal(err)
}
}
func Test_new(t *testing.T) {
if !vfs.SupportsFileLocking {
t.Skip("skipping without locks")
}
name := "file:" +
filepath.ToSlash(filepath.Join(t.TempDir(), "test.db")) +
"?vfs=cksmvfs&_pragma=journal_mode(wal)"
db, err := driver.Open(name)
if err != nil {
t.Fatal(err)
}
defer db.Close()
var enabled bool
err = db.QueryRow(`PRAGMA checksum_verification`).Scan(&enabled)
if err != nil {
t.Fatal(err)
}
if !enabled {
t.Error("want true")
}
var size int
err = db.QueryRow(`PRAGMA page_size=1024`).Scan(&size)
if err != nil {
t.Fatal(err)
}
if size != 4096 {
t.Errorf("got %d, want 4096", size)
}
_, err = db.Exec(`CREATE TABLE users (id INT, name VARCHAR(10))`)
if err != nil {
log.Fatal(err)
}
_, err = db.Exec(`INSERT INTO users (id, name) VALUES (0, 'go'), (1, 'zig'), (2, 'whatever')`)
if err != nil {
log.Fatal(err)
}
db.SetMaxIdleConns(0) // Clears the page cache.
_, err = db.Exec(`PRAGMA integrity_check`)
if err != nil {
t.Fatal(err)
}
}