diff --git a/engine/account.go b/engine/account.go index 852aa0df5..75ca2e26e 100644 --- a/engine/account.go +++ b/engine/account.go @@ -42,6 +42,7 @@ type Account struct { ActionTriggers ActionTriggers AllowNegative bool Disabled bool + UpdateTime time.Time executingTriggers bool } diff --git a/engine/storage_internal_datadb.go b/engine/storage_internal_datadb.go index cfab65bcc..4e1e35517 100644 --- a/engine/storage_internal_datadb.go +++ b/engine/storage_internal_datadb.go @@ -742,7 +742,7 @@ func (iDB *InternalDB) SetAccountDrv(acc *Account) (err error) { acc = ac } } - + acc.UpdateTime = time.Now() iDB.db.Set(utils.CacheAccounts, acc.ID, acc, nil, cacheCommit(utils.NonTransactional), utils.NonTransactional) return diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 1037af511..cc8c33c99 100644 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -1173,6 +1173,7 @@ func (ms *MongoStorage) SetAccountDrv(acc *Account) error { acc = ac } } + acc.UpdateTime = time.Now() return ms.query(func(sctx mongo.SessionContext) (err error) { _, err = ms.getCol(ColAcc).UpdateOne(sctx, bson.M{"id": acc.ID}, bson.M{"$set": acc}, diff --git a/engine/storage_redis.go b/engine/storage_redis.go index 8496b8691..178dd9ecd 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -26,6 +26,7 @@ import ( "io/ioutil" "strconv" "sync" + "time" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/guardian" @@ -753,21 +754,22 @@ func (rs *RedisStorage) GetAccountDrv(key string) (*Account, error) { return ub, nil } -func (rs *RedisStorage) SetAccountDrv(ub *Account) (err error) { +func (rs *RedisStorage) SetAccountDrv(acc *Account) (err error) { // never override existing account with an empty one // UPDATE: if all balances expired and were cleaned it makes // sense to write empty balance map - if len(ub.BalanceMap) == 0 { - if ac, err := rs.GetAccountDrv(ub.ID); err == nil && !ac.allBalancesExpired() { - ac.ActionTriggers = ub.ActionTriggers - ac.UnitCounters = ub.UnitCounters - ac.AllowNegative = ub.AllowNegative - ac.Disabled = ub.Disabled - ub = ac + if len(acc.BalanceMap) == 0 { + if ac, err := rs.GetAccountDrv(acc.ID); err == nil && !ac.allBalancesExpired() { + ac.ActionTriggers = acc.ActionTriggers + ac.UnitCounters = acc.UnitCounters + ac.AllowNegative = acc.AllowNegative + ac.Disabled = acc.Disabled + acc = ac } } - result, err := rs.ms.Marshal(ub) - err = rs.Cmd(redis_SET, utils.ACCOUNT_PREFIX+ub.ID, result).Err + acc.UpdateTime = time.Now() + result, err := rs.ms.Marshal(acc) + err = rs.Cmd(redis_SET, utils.ACCOUNT_PREFIX+acc.ID, result).Err return } diff --git a/migrator/accounts2_it_test.go b/migrator/accounts2_it_test.go index d0420d043..5e3d08e93 100755 --- a/migrator/accounts2_it_test.go +++ b/migrator/accounts2_it_test.go @@ -241,8 +241,14 @@ func testAcc2ITMigrate(t *testing.T) { if err != nil { t.Error("Error when getting Accounts ", err.Error()) } - if !reflect.DeepEqual(testAccount, result) { - t.Errorf("Expecting: %+v, received: %+v", testAccount, result) + if !reflect.DeepEqual(testAccount.ID, result.ID) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.ID, result.ID) + } else if !reflect.DeepEqual(testAccount.ActionTriggers, result.ActionTriggers) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.ActionTriggers, result.ActionTriggers) + } else if !reflect.DeepEqual(testAccount.BalanceMap, result.BalanceMap) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.BalanceMap, result.BalanceMap) + } else if !reflect.DeepEqual(testAccount.UnitCounters, result.UnitCounters) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.UnitCounters, result.UnitCounters) } //check if old account was deleted if _, err = acc2Migrator.dmIN.getv1Account(); err != utils.ErrNoMoreData { diff --git a/migrator/accounts_it_test.go b/migrator/accounts_it_test.go index a43c301a8..aeef9136b 100755 --- a/migrator/accounts_it_test.go +++ b/migrator/accounts_it_test.go @@ -311,8 +311,14 @@ func testAccITMigrateAndMove(t *testing.T) { if err != nil { t.Error("Error when getting Accounts ", err.Error()) } - if !reflect.DeepEqual(testAccount, result) { - t.Errorf("Expecting: %+v, received: %+v", testAccount, result) + if !reflect.DeepEqual(testAccount.ID, result.ID) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.ID, result.ID) + } else if !reflect.DeepEqual(testAccount.ActionTriggers, result.ActionTriggers) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.ActionTriggers, result.ActionTriggers) + } else if !reflect.DeepEqual(testAccount.BalanceMap, result.BalanceMap) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.BalanceMap, result.BalanceMap) + } else if !reflect.DeepEqual(testAccount.UnitCounters, result.UnitCounters) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.UnitCounters, result.UnitCounters) } //check if old account was deleted if _, err = accMigrator.dmIN.getv1Account(); err != utils.ErrNoMoreData { @@ -339,8 +345,14 @@ func testAccITMigrateAndMove(t *testing.T) { if err != nil { t.Error(err) } - if !reflect.DeepEqual(testAccount, result) { - t.Errorf("Expecting: %+v, received: %+v", testAccount, result) + if !reflect.DeepEqual(testAccount.ID, result.ID) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.ID, result.ID) + } else if !reflect.DeepEqual(testAccount.ActionTriggers, result.ActionTriggers) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.ActionTriggers, result.ActionTriggers) + } else if !reflect.DeepEqual(testAccount.BalanceMap, result.BalanceMap) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.BalanceMap, result.BalanceMap) + } else if !reflect.DeepEqual(testAccount.UnitCounters, result.UnitCounters) { + t.Errorf("Expecting: %+v, received: %+v", testAccount.UnitCounters, result.UnitCounters) } //check if old account was deleted result, err = accMigrator.dmIN.DataManager().GetAccount(testAccount.ID) diff --git a/services/cdrs_it_test.go b/services/cdrs_it_test.go index fddbdcec8..e7cbb393e 100644 --- a/services/cdrs_it_test.go +++ b/services/cdrs_it_test.go @@ -58,10 +58,6 @@ func TestCdrsReload(t *testing.T) { close(chS.GetPrecacheChannel(utils.CacheTimings)) cfg.ChargerSCfg().Enabled = true - internalChan := make(chan rpcclient.ClientConnector, 1) - internalChan <- nil - cacheSChan := make(chan rpcclient.ClientConnector, 1) - cacheSChan <- chS server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) @@ -78,7 +74,6 @@ func TestCdrsReload(t *testing.T) { cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) - engine.NewConnManager(cfg, nil) srvMngr.AddServices(cdrS, ralS, schS, chrS, NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db, stordb) diff --git a/services/rals_it_test.go b/services/rals_it_test.go index 5f7a3c388..39bb56c19 100644 --- a/services/rals_it_test.go +++ b/services/rals_it_test.go @@ -58,10 +58,6 @@ func TestRalsReload(t *testing.T) { close(chS.GetPrecacheChannel(utils.CacheTimings)) cfg.ThresholdSCfg().Enabled = true - internalChan := make(chan rpcclient.ClientConnector, 1) - internalChan <- nil - cacheSChan := make(chan rpcclient.ClientConnector, 1) - cacheSChan <- chS server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) @@ -75,7 +71,6 @@ func TestRalsReload(t *testing.T) { make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), schS, engineShutdown, nil) - engine.NewConnManager(cfg, nil) srvMngr.AddServices(ralS, schS, tS, NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db, stordb) if err = srvMngr.StartServices(); err != nil { diff --git a/utils/coreutils_test.go b/utils/coreutils_test.go index 2d9549d6c..8b4ac8190 100644 --- a/utils/coreutils_test.go +++ b/utils/coreutils_test.go @@ -1091,7 +1091,7 @@ Date: Fri Dec 30 19:48:09 2016 +0100 Fixes for db driver to avoid returning new values in case of errors ` - eVers := "CGRateS 0.9.1~rc8 git+73014da (2016-12-30T19:48:09+01:00)" + eVers := "CGRateS@v0.9.1~rc8-20161230184809-73014daa0c1d" if vers, err := GetCGRVersion(); err != nil { t.Error(err) } else if vers != eVers { @@ -1100,35 +1100,35 @@ Date: Fri Dec 30 19:48:09 2016 +0100 GitLastLog = "" if vers, err := GetCGRVersion(); err != nil { t.Error(err) - } else if vers != "CGRateS 0.9.1~rc8" { - t.Errorf("Expecting: , received: <%s>", vers) + } else if vers != "CGRateS@v0.9.1~rc8" { + t.Errorf("Expecting: , received: <%s>", vers) } GitLastLog = "\n" if vers, err := GetCGRVersion(); err == nil || err.Error() != "Building version - error: reading line from file" { t.Error(err) - } else if vers != "CGRateS 0.9.1~rc8" { - t.Errorf("Expecting: , received: <%s>", vers) + } else if vers != "CGRateS@v0.9.1~rc8" { + t.Errorf("Expecting: , received: <%s>", vers) } GitLastLog = `commit . . . ` if vers, err := GetCGRVersion(); err == nil || err.Error() != "Building version - cannot extract commit hash" { t.Error(err) - } else if vers != "CGRateS 0.9.1~rc8" { - t.Errorf("Expecting: , received: <%s>", vers) + } else if vers != "CGRateS@v0.9.1~rc8" { + t.Errorf("Expecting: , received: <%s>", vers) } GitLastLog = `Date: : : ` if vers, err := GetCGRVersion(); err == nil || err.Error() != "Building version - cannot split commit date" { t.Error(err) - } else if vers != "CGRateS 0.9.1~rc8" { - t.Errorf("Expecting: , received: <%s>", vers) + } else if vers != "CGRateS@v0.9.1~rc8" { + t.Errorf("Expecting: , received: <%s>", vers) } GitLastLog = `Date: wrong format ` if vers, err := GetCGRVersion(); err == nil || err.Error() != `Building version - error: compiling commit date` { t.Error(err) - } else if vers != "CGRateS 0.9.1~rc8" { - t.Errorf("Expecting: , received: <%s>", vers) + } else if vers != "CGRateS@v0.9.1~rc8" { + t.Errorf("Expecting: , received: <%s>", vers) } GitLastLog = `ommit 73014daa0c1d7edcb532d5fe600b8a20d588cdf8 Author: DanB @@ -1138,8 +1138,8 @@ Date: Fri Dec 30 19:48:09 2016 +0100 ` if vers, err := GetCGRVersion(); err == nil || err.Error() != "Cannot find commitHash or commitDate information" { t.Error(err) - } else if vers != "CGRateS 0.9.1~rc8" { - t.Errorf("Expecting: , received: <%s>", vers) + } else if vers != "CGRateS@v0.9.1~rc8" { + t.Errorf("Expecting: , received: <%s>", vers) } }