Expand coverage for runtime and sqlite paths

This commit is contained in:
phamnazage-jpg
2026-05-23 10:55:57 +08:00
parent 2ad277743d
commit bcc67c4a8a
17 changed files with 3393 additions and 1 deletions

View File

@@ -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)
}
}