mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
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:
committed by
Dan Christian Bogos
parent
43cdd396ba
commit
5f47df6927
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,12 +64,7 @@ func TestFsSessionOfflineInternal(t *testing.T) {
|
||||
|
||||
tutorialCallsCfg.DataFolderPath = *utils.DataDir // Share DataFolderPath through config towards StoreDb for Flush()
|
||||
config.SetCgrConfig(tutorialCallsCfg)
|
||||
if err := engine.PreInitDataDb(tutorialCallsCfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := engine.PreInitStorDb(tutorialCallsCfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
engine.FlushDBs(t, tutorialCallsCfg, true, true)
|
||||
engine.KillProcName(utils.Freeswitch, 5000)
|
||||
if err := engine.CallScript(path.Join(*fsConfig, "freeswitch", "etc", "init.d", "freeswitch"), "start", 3000); err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
@@ -65,7 +65,6 @@ func TestOfflineInternal(t *testing.T) { // run with sudo
|
||||
t.Run("OfflineInternal"+strconv.Itoa(i), func(t *testing.T) {
|
||||
ng := engine.TestEngine{
|
||||
ConfigPath: pth,
|
||||
PreInitDB: true,
|
||||
GracefulShutdown: true,
|
||||
}
|
||||
client, cfg := ng.Run(t)
|
||||
|
||||
@@ -52,7 +52,7 @@ func TestRankingSchedule(t *testing.T) {
|
||||
PreserveStorDB: true,
|
||||
PreserveDataDB: true,
|
||||
PreStartHook: func(t testing.TB, c *config.CGRConfig) {
|
||||
engine.FlushDBs(t, c, true, true, false)
|
||||
engine.FlushDBs(t, c, true, true)
|
||||
engine.LoadCSVsWithCGRLoader(t, c.ConfigPath, path.Join(*utils.DataDir, "tariffplans", "tutrankings"), nil, nil, "-caches_address=")
|
||||
},
|
||||
}
|
||||
|
||||
@@ -118,21 +118,7 @@ func testSessionSBkupInitCfg(t *testing.T) {
|
||||
|
||||
// Remove data in both rating and accounting db
|
||||
func testSessionSBkupResetDB(t *testing.T) {
|
||||
if *utils.DBType == utils.MetaInternal {
|
||||
if err := engine.PreInitDataDb(sBkupCfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := engine.PreInitStorDb(sBkupCfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
if err := engine.InitDataDb(sBkupCfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := engine.InitStorDb(sBkupCfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
engine.FlushDBs(t, sBkupCfg, true, true)
|
||||
}
|
||||
|
||||
// Start CGR Engine
|
||||
|
||||
Reference in New Issue
Block a user