86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package db
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestOpenCreatesDatabase(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dbPath := filepath.Join(dir, "test.db")
|
|
|
|
db, err := Open(dbPath)
|
|
if err != nil {
|
|
t.Fatalf("Open() error: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
if _, err := os.Stat(dbPath); os.IsNotExist(err) {
|
|
t.Fatal("database file was not created")
|
|
}
|
|
}
|
|
|
|
func TestOpenSetsWALMode(t *testing.T) {
|
|
dir := t.TempDir()
|
|
db, err := Open(filepath.Join(dir, "test.db"))
|
|
if err != nil {
|
|
t.Fatalf("Open() error: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
var mode string
|
|
err = db.QueryRow("PRAGMA journal_mode").Scan(&mode)
|
|
if err != nil {
|
|
t.Fatalf("PRAGMA query error: %v", err)
|
|
}
|
|
if mode != "wal" {
|
|
t.Errorf("journal_mode = %q, want %q", mode, "wal")
|
|
}
|
|
}
|
|
|
|
func TestOpenSetsBusyTimeout(t *testing.T) {
|
|
dir := t.TempDir()
|
|
db, err := Open(filepath.Join(dir, "test.db"))
|
|
if err != nil {
|
|
t.Fatalf("Open() error: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
var timeout int
|
|
err = db.QueryRow("PRAGMA busy_timeout").Scan(&timeout)
|
|
if err != nil {
|
|
t.Fatalf("PRAGMA query error: %v", err)
|
|
}
|
|
if timeout != 5000 {
|
|
t.Errorf("busy_timeout = %d, want %d", timeout, 5000)
|
|
}
|
|
}
|
|
|
|
func TestMigrateCreatesAllTables(t *testing.T) {
|
|
dir := t.TempDir()
|
|
db, err := Open(filepath.Join(dir, "test.db"))
|
|
if err != nil {
|
|
t.Fatalf("Open() error: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
if err := Migrate(db); err != nil {
|
|
t.Fatalf("Migrate() error: %v", err)
|
|
}
|
|
|
|
expectedTables := []string{
|
|
"groups", "connections", "credentials", "ssh_keys",
|
|
"themes", "connection_history", "host_keys", "settings",
|
|
}
|
|
for _, table := range expectedTables {
|
|
var name string
|
|
err := db.QueryRow(
|
|
"SELECT name FROM sqlite_master WHERE type='table' AND name=?", table,
|
|
).Scan(&name)
|
|
if err != nil {
|
|
t.Errorf("table %q not found: %v", table, err)
|
|
}
|
|
}
|
|
}
|