close db connections in test flush helpers

Previously, database connections would stay alive until "go test"
would finish, sometimes leading to max conn errors.
This commit is contained in:
ionutboangiu
2025-05-26 18:56:58 +03:00
committed by Dan Christian Bogos
parent 43cdd396ba
commit 5f47df6927
5 changed files with 16 additions and 96 deletions

View File

@@ -45,7 +45,7 @@ import (
)
func InitDataDb(cfg *config.CGRConfig) error {
d, err := NewDataDBConn(cfg.DataDbCfg().Type,
dataDB, err := NewDataDBConn(cfg.DataDbCfg().Type,
cfg.DataDbCfg().Host, cfg.DataDbCfg().Port,
cfg.DataDbCfg().Name, cfg.DataDbCfg().User,
cfg.DataDbCfg().Password, cfg.GeneralCfg().DBDataEncoding,
@@ -53,7 +53,8 @@ func InitDataDb(cfg *config.CGRConfig) error {
if err != nil {
return err
}
dm := NewDataManager(d, cfg.CacheCfg(), connMgr)
defer dataDB.Close()
dm := NewDataManager(dataDB, cfg.CacheCfg(), connMgr)
if err := dm.DataDB().Flush(""); err != nil {
return err
@@ -65,31 +66,8 @@ func InitDataDb(cfg *config.CGRConfig) error {
return nil
}
// Initiates DataDB, flushes it, and closes the connection after
func PreInitDataDb(cfg *config.CGRConfig) error {
d, err := NewDataDBConn(cfg.DataDbCfg().Type,
cfg.DataDbCfg().Host, cfg.DataDbCfg().Port,
cfg.DataDbCfg().Name, cfg.DataDbCfg().User,
cfg.DataDbCfg().Password, cfg.GeneralCfg().DBDataEncoding,
cfg.DataDbCfg().Opts, cfg.DataDbCfg().Items)
if err != nil {
return err
}
dm := NewDataManager(d, cfg.CacheCfg(), connMgr)
if err := dm.DataDB().Flush(""); err != nil {
return err
}
// Write version before starting
if err := OverwriteDBVersions(dm.dataDB); err != nil {
return err
}
d.Close()
return nil
}
func InitStorDb(cfg *config.CGRConfig) error {
storDb, err := NewStorDBConn(cfg.StorDbCfg().Type,
storDB, err := NewStorDBConn(cfg.StorDbCfg().Type,
cfg.StorDbCfg().Host, cfg.StorDbCfg().Port,
cfg.StorDbCfg().Name, cfg.StorDbCfg().User,
cfg.StorDbCfg().Password, cfg.GeneralCfg().DBDataEncoding,
@@ -98,46 +76,21 @@ func InitStorDb(cfg *config.CGRConfig) error {
if err != nil {
return err
}
defer storDB.Close()
dbPath := strings.Trim(cfg.StorDbCfg().Type, "*")
if err := storDb.Flush(path.Join(cfg.DataFolderPath, "storage",
if err := storDB.Flush(path.Join(cfg.DataFolderPath, "storage",
dbPath)); err != nil {
return err
}
if slices.Contains([]string{utils.MetaMongo, utils.MetaMySQL, utils.MetaPostgres},
cfg.StorDbCfg().Type) {
if err := SetDBVersions(storDb); err != nil {
if err := SetDBVersions(storDB); err != nil {
return err
}
}
return nil
}
// Initiates StorDB, flushes it, and closed the connection after
func PreInitStorDb(cfg *config.CGRConfig) error {
storDb, err := NewStorDBConn(cfg.StorDbCfg().Type,
cfg.StorDbCfg().Host, cfg.StorDbCfg().Port,
cfg.StorDbCfg().Name, cfg.StorDbCfg().User,
cfg.StorDbCfg().Password, cfg.GeneralCfg().DBDataEncoding,
cfg.StorDbCfg().StringIndexedFields, cfg.StorDbCfg().PrefixIndexedFields,
cfg.StorDbCfg().Opts, cfg.StorDbCfg().Items)
if err != nil {
return err
}
dbPath := strings.Trim(cfg.StorDbCfg().Type, "*")
if err := storDb.Flush(path.Join(cfg.DataFolderPath, "storage",
dbPath)); err != nil {
return err
}
if slices.Contains([]string{utils.MetaMongo, utils.MetaMySQL, utils.MetaPostgres},
cfg.StorDbCfg().Type) {
if err := SetDBVersions(storDb); err != nil {
return err
}
}
storDb.Close()
return nil
}
// Return reference towards the command started so we can stop it if necessary
func StartEngine(cfgPath string, waitEngine int) (*exec.Cmd, error) {
enginePath, err := exec.LookPath("cgr-engine")
@@ -395,7 +348,6 @@ type TestEngine struct {
TpPath string // path to the tariff plans
TpFiles map[string]string // CSV data for tariff plans: filename -> content
GracefulShutdown bool // shutdown the engine gracefuly, otherwise use process.Kill
PreInitDB bool // close db connections after initiating and flushing db
// PreStartHook executes custom logic relying on CGRConfig
// before starting cgr-engine.
@@ -408,7 +360,7 @@ type TestEngine struct {
func (ng TestEngine) Run(t testing.TB, extraFlags ...string) (*birpc.Client, *config.CGRConfig) {
t.Helper()
cfg := parseCfg(t, ng.ConfigPath, ng.ConfigJSON, ng.DBCfg)
FlushDBs(t, cfg, !ng.PreserveDataDB, !ng.PreserveStorDB, ng.PreInitDB)
FlushDBs(t, cfg, !ng.PreserveDataDB, !ng.PreserveStorDB)
if ng.PreStartHook != nil {
ng.PreStartHook(t, cfg)
}
@@ -582,28 +534,16 @@ func LoadCSVs(t testing.TB, client *birpc.Client, tpPath string, csvFiles map[st
}
// flushDBs resets the databases specified in the configuration if the corresponding flags are true.
func FlushDBs(t testing.TB, cfg *config.CGRConfig, flushDataDB, flushStorDB bool, preInitDB bool) {
func FlushDBs(t testing.TB, cfg *config.CGRConfig, flushDataDB, flushStorDB bool) {
t.Helper()
if flushDataDB {
if preInitDB {
if err := PreInitDataDb(cfg); err != nil {
t.Fatalf("failed to flush %s dataDB: %v", cfg.DataDbCfg().Type, err)
}
} else {
if err := InitDataDb(cfg); err != nil {
t.Fatalf("failed to flush %s dataDB: %v", cfg.DataDbCfg().Type, err)
}
if err := InitDataDb(cfg); err != nil {
t.Fatalf("failed to flush %s dataDB: %v", cfg.DataDbCfg().Type, err)
}
}
if flushStorDB {
if preInitDB {
if err := PreInitStorDb(cfg); err != nil {
t.Fatalf("failed to flush %s storDB: %v", cfg.StorDbCfg().Type, err)
}
} else {
if err := InitStorDb(cfg); err != nil {
t.Fatalf("failed to flush %s storDB: %v", cfg.StorDbCfg().Type, err)
}
if err := InitStorDb(cfg); err != nil {
t.Fatalf("failed to flush %s storDB: %v", cfg.StorDbCfg().Type, err)
}
}
}