continuous-integration/drone Build is failing
Migrate the workspace to React and Ant Design, improve account forms and responsive layouts, support outbound diagnostics and SSH fingerprint confirmation, and persist the management startup port. Preserve database migrations, remove S3 settings storage, and improve gateway audit handling.
84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package store
|
|
|
|
import (
|
|
"bytes"
|
|
"database/sql"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestUnsupportedDatabaseIsRejectedWithoutChanges(t *testing.T) {
|
|
for _, schema := range []string{
|
|
"CREATE TABLE local_metadata(name TEXT PRIMARY KEY,value BLOB); PRAGMA user_version=4;",
|
|
} {
|
|
path := filepath.Join(t.TempDir(), "old.sqlite")
|
|
database, err := sql.Open("sqlite", path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err = database.Exec(schema); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
database.Close()
|
|
before, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
opened, err := OpenPortable(path)
|
|
if err == nil {
|
|
opened.Close()
|
|
t.Fatal("accepted unsupported database")
|
|
}
|
|
if !strings.Contains(err.Error(), "unsupported LinkPort database version") {
|
|
t.Fatal(err)
|
|
}
|
|
after, err := os.ReadFile(path)
|
|
if err != nil || !bytes.Equal(before, after) {
|
|
t.Fatalf("old database changed: %v", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCurrentDatabaseReopensWithoutRetiredSettingsTables(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "current.sqlite")
|
|
database, err := OpenPortable(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var version, oldTables int
|
|
if err = database.db.QueryRow("PRAGMA user_version").Scan(&version); err != nil || version != currentSchemaVersion {
|
|
t.Fatalf("version %d: %v", version, err)
|
|
}
|
|
if err = database.db.QueryRow("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name IN ('commands','events','s3_backup_settings','s3_sync_settings')").Scan(&oldTables); err != nil || oldTables != 0 {
|
|
t.Fatalf("old tables %d: %v", oldTables, err)
|
|
}
|
|
database.Close()
|
|
database, err = OpenPortable(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
database.Close()
|
|
}
|
|
|
|
func TestOldConfigurationBundleIsRejected(t *testing.T) {
|
|
database, err := OpenPortable(filepath.Join(t.TempDir(), "current.sqlite"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer database.Close()
|
|
for _, version := range []int{0, 1, 3} {
|
|
bundle := Bundle{Version: version}
|
|
if err := database.RestoreBundle(bundle); err == nil {
|
|
t.Fatalf("restored version %d", version)
|
|
}
|
|
if _, err := database.PreviewBundle(bundle); err == nil {
|
|
t.Fatalf("preview accepted version %d", version)
|
|
}
|
|
if _, err := database.SaveTemplate("old", bundle); err == nil {
|
|
t.Fatalf("template accepted version %d", version)
|
|
}
|
|
}
|
|
}
|