db: return database-open errors for 0.29.6

Backport #3496.
This commit is contained in:
Kristoffer Dalby committed 2026-10-24 11:15:00 +02:00
1 parent c6181989b1
commit c32e8e4c97
2 files changed
+65 -3

No files matched your search

+14 -3
View File
@@ -968,16 +968,23 @@ func openDB(cfg types.DatabaseConfig) (*gorm.DB, error) {
Logger: dbLogger,
},
)
if err != nil {
return nil, err
}
// The pure Go SQLite library does not handle locking in
// the same way as the C based one and we can't use the gorm
// connection pool as of 2022/02/23.
sqlDB, _ := db.DB()
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxIdleConns(1)
sqlDB.SetMaxOpenConns(1)
sqlDB.SetConnMaxIdleTime(time.Hour)
return db, err
return db, nil
case types.DatabasePostgres:
dbString := fmt.Sprintf(
@@ -1015,7 +1022,11 @@ func openDB(cfg types.DatabaseConfig) (*gorm.DB, error) {
return nil, err
}
sqlDB, _ := db.DB()
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxIdleConns(cfg.Postgres.MaxIdleConnections)
sqlDB.SetMaxOpenConns(cfg.Postgres.MaxOpenConnections)
sqlDB.SetConnMaxIdleTime(
+51
View File
@@ -646,3 +646,54 @@ func TestSQLiteAllTestdataMigrations(t *testing.T) {
})
}
}
func TestOpenDBReturnsOpenError(t *testing.T) {
tests := []struct {
name string
cfg func(t *testing.T) types.DatabaseConfig
}{
{
name: "sqlite-path-is-a-directory",
cfg: func(t *testing.T) types.DatabaseConfig {
t.Helper()
return types.DatabaseConfig{
Type: types.DatabaseSqlite,
Sqlite: types.SqliteConfig{Path: t.TempDir()},
}
},
},
{
name: "postgres-unreachable-host",
cfg: func(t *testing.T) types.DatabaseConfig {
t.Helper()
return types.DatabaseConfig{
Type: types.DatabasePostgres,
Postgres: types.PostgresConfig{
Host: "127.0.0.1",
Port: 1,
Name: "headscale",
User: "headscale",
Ssl: "false",
},
}
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var (
db *gorm.DB
err error
)
require.NotPanics(t, func() {
db, err = openDB(tt.cfg(t))
})
require.Error(t, err)
assert.Nil(t, db)
})
}
}