Expand coverage for runtime and sqlite paths
This commit is contained in:
@@ -159,3 +159,115 @@ func TestReadMigrationNotFound(t *testing.T) {
|
||||
t.Fatal("readMigration('nonexistent.sql') error = nil, want error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureMigrationLedgerAndLoadAppliedMigrations(t *testing.T) {
|
||||
store := openTestDB(t)
|
||||
db := store.SQLDB()
|
||||
|
||||
tx, err := db.BeginTx(context.Background(), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("BeginTx() error = %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
if err := ensureMigrationLedger(context.Background(), tx); err != nil {
|
||||
t.Fatalf("ensureMigrationLedger() error = %v", err)
|
||||
}
|
||||
if err := ensureMigrationLedger(context.Background(), tx); err != nil {
|
||||
t.Fatalf("ensureMigrationLedger() second call error = %v", err)
|
||||
}
|
||||
if _, err := tx.ExecContext(context.Background(), "INSERT INTO schema_migrations (version) VALUES (?)", "9999_test.sql"); err != nil {
|
||||
t.Fatalf("insert schema_migrations error = %v", err)
|
||||
}
|
||||
|
||||
applied, err := loadAppliedMigrations(context.Background(), tx)
|
||||
if err != nil {
|
||||
t.Fatalf("loadAppliedMigrations() error = %v", err)
|
||||
}
|
||||
if !applied["9999_test.sql"] {
|
||||
t.Fatalf("loadAppliedMigrations() = %#v, want 9999_test.sql=true", applied)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackfillLegacySchemaIfNeededRecordsCompleteLegacySchema(t *testing.T) {
|
||||
dbPath := filepath.Join(t.TempDir(), "legacy.db")
|
||||
rawDB, err := sql.Open("sqlite", "file:"+filepath.ToSlash(dbPath))
|
||||
if err != nil {
|
||||
t.Fatalf("sql.Open() error = %v", err)
|
||||
}
|
||||
defer rawDB.Close()
|
||||
|
||||
for _, ddl := range []string{
|
||||
"CREATE TABLE hosts (id INTEGER PRIMARY KEY, host_id TEXT NOT NULL, base_url TEXT NOT NULL, host_version TEXT NOT NULL, capability_probe_json TEXT NOT NULL DEFAULT '', created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP)",
|
||||
"CREATE TABLE packs (id INTEGER PRIMARY KEY, pack_id TEXT NOT NULL, version TEXT NOT NULL, checksum TEXT NOT NULL, manifest_json TEXT NOT NULL DEFAULT '{}', metadata_json TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP)",
|
||||
"CREATE TABLE providers (id INTEGER PRIMARY KEY, pack_id INTEGER NOT NULL, provider_id TEXT NOT NULL, display_name TEXT NOT NULL, base_url TEXT NOT NULL, platform TEXT NOT NULL, account_type TEXT NOT NULL DEFAULT 'apikey', smoke_test_model TEXT NOT NULL DEFAULT '', provider_manifest_json TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP)",
|
||||
} {
|
||||
if _, err := rawDB.ExecContext(context.Background(), ddl); err != nil {
|
||||
t.Fatalf("Exec legacy ddl error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
tx, err := rawDB.BeginTx(context.Background(), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("BeginTx() error = %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
if err := ensureMigrationLedger(context.Background(), tx); err != nil {
|
||||
t.Fatalf("ensureMigrationLedger() error = %v", err)
|
||||
}
|
||||
applied, err := loadAppliedMigrations(context.Background(), tx)
|
||||
if err != nil {
|
||||
t.Fatalf("loadAppliedMigrations() error = %v", err)
|
||||
}
|
||||
if err := backfillLegacySchemaIfNeeded(context.Background(), tx, []string{"0001_init.sql"}, applied); err != nil {
|
||||
t.Fatalf("backfillLegacySchemaIfNeeded() error = %v", err)
|
||||
}
|
||||
if !applied["0001_init.sql"] {
|
||||
t.Fatalf("applied = %#v, want 0001_init.sql marked", applied)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBackfillLegacySchemaIfNeededRejectsPartialLegacySchema(t *testing.T) {
|
||||
dbPath := filepath.Join(t.TempDir(), "legacy-partial.db")
|
||||
rawDB, err := sql.Open("sqlite", "file:"+filepath.ToSlash(dbPath))
|
||||
if err != nil {
|
||||
t.Fatalf("sql.Open() error = %v", err)
|
||||
}
|
||||
defer rawDB.Close()
|
||||
|
||||
if _, err := rawDB.ExecContext(context.Background(), "CREATE TABLE hosts (id INTEGER PRIMARY KEY)"); err != nil {
|
||||
t.Fatalf("Exec partial legacy ddl error = %v", err)
|
||||
}
|
||||
|
||||
tx, err := rawDB.BeginTx(context.Background(), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("BeginTx() error = %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
if err := ensureMigrationLedger(context.Background(), tx); err != nil {
|
||||
t.Fatalf("ensureMigrationLedger() error = %v", err)
|
||||
}
|
||||
applied, err := loadAppliedMigrations(context.Background(), tx)
|
||||
if err != nil {
|
||||
t.Fatalf("loadAppliedMigrations() error = %v", err)
|
||||
}
|
||||
err = backfillLegacySchemaIfNeeded(context.Background(), tx, []string{"0001_init.sql"}, applied)
|
||||
if err == nil || err.Error() != "legacy sqlite schema is partially applied without schema_migrations" {
|
||||
t.Fatalf("backfillLegacySchemaIfNeeded() error = %v, want partial legacy schema error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRollbackMigrationReturnsOriginalErrorWhenRollbackSucceeds(t *testing.T) {
|
||||
store := openTestDB(t)
|
||||
tx, err := store.SQLDB().BeginTx(context.Background(), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("BeginTx() error = %v", err)
|
||||
}
|
||||
|
||||
baseErr := errors.New("apply failed")
|
||||
if err := rollbackMigration(tx, baseErr); !errors.Is(err, baseErr) {
|
||||
t.Fatalf("rollbackMigration() error = %v, want original error", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user