diff --git a/services/datadb.go b/services/datadb.go index 588072b6a..1d0a831dc 100644 --- a/services/datadb.go +++ b/services/datadb.go @@ -72,7 +72,6 @@ func (db *DataDBService) Start() (err error) { err = nil // reset the error in case of only SessionS active return } - db.dm = engine.NewDataManager(d, db.cfg.CacheCfg(), db.connMgr) engine.SetDataStorage(db.dm) if err = engine.CheckVersions(db.dm.DataDB()); err != nil { diff --git a/services/datadb_it_test.go b/services/datadb_it_test.go index d4edff7ac..0b945ad6e 100644 --- a/services/datadb_it_test.go +++ b/services/datadb_it_test.go @@ -204,233 +204,176 @@ func TestDataDBReload(t *testing.T) { shdChan.CloseOnce() time.Sleep(10 * time.Millisecond) } -func TestDataDBReload2(t *testing.T) { - cfg := config.NewDefaultCGRConfig() +func TestDataDBReloadBadType(t *testing.T) { + cfg, err := config.NewCGRConfigFromPath(path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo")) + if err != nil { + t.Fatal(err) + } + dbConn, err := engine.NewDataDBConn(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + cfg.DataDbCfg().Opts) + if err != nil { + t.Fatal(err) + } + defer func() { + dbConn.Flush("") + dbConn.Close() + }() + + err = dbConn.SetVersions(engine.Versions{ + utils.StatS: 4, + utils.Accounts: 3, + utils.Actions: 2, + utils.ActionTriggers: 2, + utils.ActionPlans: 3, + utils.SharedGroups: 2, + utils.Thresholds: 4, + utils.Routes: 2, + // old version for Attributes + utils.Attributes: 5, + utils.Timing: 1, + utils.RQF: 5, + utils.Resource: 1, + utils.Subscribers: 1, + utils.Destinations: 1, + utils.ReverseDestinations: 1, + utils.RatingPlan: 1, + utils.RatingProfile: 1, + utils.Chargers: 2, + utils.Dispatchers: 2, + utils.LoadIDsVrs: 1, + utils.RateProfiles: 1, + utils.ActionProfiles: 1, + }, true) + if err != nil { + t.Fatal(err) + } utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) utils.Logger.SetLogLevel(7) - shdChan := utils.NewSyncedChan() - shdWg := new(sync.WaitGroup) - chS := engine.NewCacheS(cfg, nil, nil) filterSChan := make(chan *engine.FilterS, 1) filterSChan <- nil - close(chS.GetPrecacheChannel(utils.CacheAttributeProfiles)) - close(chS.GetPrecacheChannel(utils.CacheAttributeFilterIndexes)) - server := cores.NewServer(nil) srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} - srvMngr := servmanager.NewServiceManager(cfg, shdChan, shdWg) cM := engine.NewConnManager(cfg, nil) db := NewDataDBService(cfg, cM, srvDep) - anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) - srvMngr.AddServices(NewAttributeService(cfg, db, - chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), anz, srvDep), - NewLoaderService(cfg, db, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil, anz, srvDep), db) - if err := srvMngr.StartServices(); err != nil { - t.Error(err) + db.oldDBCfg = &config.DataDbCfg{ + DataDbType: utils.Mongo, + DataDbHost: "127.0.0.1", + DataDbPort: "27017", + DataDbName: "10", + DataDbUser: "cgrates", + Opts: map[string]interface{}{ + utils.QueryTimeoutCfg: "10s", + utils.RedisClusterOnDownDelayCfg: "0", + utils.RedisClusterSyncCfg: "5s", + utils.RedisClusterCfg: false, + utils.RedisSentinelNameCfg: "", + utils.RedisTLS: false, + utils.RedisClientCertificate: "", + utils.RedisClientKey: "", + utils.RedisCACertificate: "", + }, + RmtConns: []string{}, + RplConns: []string{}, + Items: map[string]*config.ItemOpt{ + utils.MetaAccounts: { + Replicate: false, + Remote: false}, + utils.MetaReverseDestinations: { + Replicate: false, + Remote: false}, + utils.MetaDestinations: { + Replicate: false, + Remote: false}, + utils.MetaRatingPlans: { + Replicate: false, + Remote: false}, + utils.MetaRatingProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActions: { + Replicate: false, + Remote: false}, + utils.MetaActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaAccountActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaActionTriggers: { + Replicate: false, + Remote: false}, + utils.MetaSharedGroups: { + Replicate: false, + Remote: false}, + utils.MetaTimings: { + Replicate: false, + Remote: false}, + utils.MetaResourceProfile: { + Replicate: false, + Remote: false}, + utils.MetaStatQueues: { + Replicate: false, + Remote: false}, + utils.MetaResources: { + Replicate: false, + Remote: false}, + utils.MetaStatQueueProfiles: { + Replicate: false, + Remote: false}, + utils.MetaThresholds: { + Replicate: false, + Remote: false}, + utils.MetaThresholdProfiles: { + Replicate: false, + Remote: false}, + utils.MetaFilters: { + Replicate: false, + Remote: false}, + utils.MetaRouteProfiles: { + Replicate: false, + Remote: false}, + utils.MetaAttributeProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherHosts: { + Replicate: false, + Remote: false}, + utils.MetaChargerProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherProfiles: { + Replicate: false, + Remote: false}, + utils.MetaLoadIDs: { + Replicate: false, + Remote: false}, + utils.MetaIndexes: { + Replicate: false, + Remote: false}, + utils.MetaRateProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActionProfiles: { + Replicate: false, + Remote: false}, + }, } - if db.IsRunning() { - t.Errorf("Expected service to be down") - } - var reply string - cfg.AttributeSCfg().Enabled = true - if err := cfg.V1ReloadConfig(&config.ReloadArgs{ - Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), - Section: config.DATADB_JSN, - }, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Expecting OK ,received %s", reply) - } - time.Sleep(10 * time.Millisecond) //need to switch to gorutine - if !db.IsRunning() { - t.Errorf("Expected service to be running") - } - - err := db.Reload() - if err != nil { - t.Errorf("\nExpecting ,\n Received <%+v>", err) - } - if err := cfg.V1ReloadConfig(&config.ReloadArgs{ - Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmysql"), - Section: config.DATADB_JSN, - }, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Expecting OK ,received %s", reply) - } - + cfg.DataDbCfg().DataDbType = "dbtype" + db.dm = nil err = db.Reload() - if err != nil { - t.Errorf("\nExpecting ,\n Received <%+v>", err) - } - cfg.AttributeSCfg().Enabled = false - cfg.GetReloadChan(config.DATADB_JSN) <- struct{}{} - time.Sleep(10 * time.Millisecond) - if db.IsRunning() { - t.Errorf("Expected service to be down") + if err == nil || err.Error() != "unsupported db_type " { + t.Fatal(err) } + shdChan.CloseOnce() time.Sleep(10 * time.Millisecond) } -func TestDataDBReload3(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - - utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) - utils.Logger.SetLogLevel(7) - cfg.DataDbCfg().DataDbType = "" - shdChan := utils.NewSyncedChan() - shdWg := new(sync.WaitGroup) - chS := engine.NewCacheS(cfg, nil, nil) - filterSChan := make(chan *engine.FilterS, 1) - filterSChan <- nil - close(chS.GetPrecacheChannel(utils.CacheAttributeProfiles)) - close(chS.GetPrecacheChannel(utils.CacheAttributeFilterIndexes)) - server := cores.NewServer(nil) - srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} - srvMngr := servmanager.NewServiceManager(cfg, shdChan, shdWg) - cM := engine.NewConnManager(cfg, nil) - db := NewDataDBService(cfg, cM, srvDep) - anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) - srvMngr.AddServices(NewAttributeService(cfg, db, - chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), anz, srvDep), - NewLoaderService(cfg, db, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil, anz, srvDep), db) - if err := srvMngr.StartServices(); err != nil { - t.Error(err) - } - cfg.AttributeSCfg().Enabled = true - err := db.Start() - if err == nil { - t.Errorf("\nExpecting <%+v>,\n Received <%+v>", "unsupported db_type <>", err) - } - cfg.AttributeSCfg().Enabled = false - cfg.GetReloadChan(config.DATADB_JSN) <- struct{}{} - time.Sleep(10 * time.Millisecond) - if db.IsRunning() { - t.Errorf("Expected service to be down") - } - shdChan.CloseOnce() - time.Sleep(10 * time.Millisecond) -} -func TestDataDBReload4(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - - utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) - utils.Logger.SetLogLevel(7) - cfg.DataDbCfg().DataDbType = "" - shdChan := utils.NewSyncedChan() - shdWg := new(sync.WaitGroup) - chS := engine.NewCacheS(cfg, nil, nil) - filterSChan := make(chan *engine.FilterS, 1) - filterSChan <- nil - close(chS.GetPrecacheChannel(utils.CacheAttributeProfiles)) - close(chS.GetPrecacheChannel(utils.CacheAttributeFilterIndexes)) - server := cores.NewServer(nil) - srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} - srvMngr := servmanager.NewServiceManager(cfg, shdChan, shdWg) - cM := engine.NewConnManager(cfg, nil) - db := NewDataDBService(cfg, cM, srvDep) - anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) - srvMngr.AddServices(NewAttributeService(cfg, db, - chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), anz, srvDep), - NewLoaderService(cfg, db, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil, anz, srvDep), db) - if err := srvMngr.StartServices(); err != nil { - t.Error(err) - } - cfg.SessionSCfg().Enabled = true - cfg.SessionSCfg().ListenBijson = "" - err := db.Start() - if err != nil { - t.Errorf("\nExpecting ,\n Received <%+v>", err) - } - cfg.SessionSCfg().Enabled = false - cfg.GetReloadChan(config.DATADB_JSN) <- struct{}{} - time.Sleep(10 * time.Millisecond) - if db.IsRunning() { - t.Errorf("Expected service to be down") - } - shdChan.CloseOnce() - time.Sleep(10 * time.Millisecond) -} - -func TestDataDBReload5(t *testing.T) { - cfg := config.NewDefaultCGRConfig() - - utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) - utils.Logger.SetLogLevel(7) - - shdChan := utils.NewSyncedChan() - shdWg := new(sync.WaitGroup) - chS := engine.NewCacheS(cfg, nil, nil) - filterSChan := make(chan *engine.FilterS, 1) - filterSChan <- nil - close(chS.GetPrecacheChannel(utils.CacheAttributeProfiles)) - close(chS.GetPrecacheChannel(utils.CacheAttributeFilterIndexes)) - server := cores.NewServer(nil) - srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} - srvMngr := servmanager.NewServiceManager(cfg, shdChan, shdWg) - cM := engine.NewConnManager(cfg, nil) - db := NewDataDBService(cfg, cM, srvDep) - anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) - srvMngr.AddServices(NewAttributeService(cfg, db, - chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), anz, srvDep), - NewLoaderService(cfg, db, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil, anz, srvDep), db) - if err := srvMngr.StartServices(); err != nil { - t.Error(err) - } - if db.IsRunning() { - t.Errorf("Expected service to be down") - } - var reply string - cfg.AttributeSCfg().Enabled = true - if err := cfg.V1ReloadConfig(&config.ReloadArgs{ - Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), - Section: config.DATADB_JSN, - }, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Expecting OK ,received %s", reply) - } - time.Sleep(10 * time.Millisecond) //need to switch to gorutine - if !db.IsRunning() { - t.Errorf("Expected service to be running") - } - - err := db.Reload() - if err != nil { - t.Errorf("\nExpecting ,\n Received <%+v>", err) - } - if err := cfg.V1ReloadConfig(&config.ReloadArgs{ - Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmysql"), - Section: config.DATADB_JSN, - }, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Expecting OK ,received %s", reply) - } - err = db.Reload() - if err != nil { - t.Errorf("\nExpecting ,\n Received <%+v>", err) - } - - cfg.DataDbCfg().DataDbType = "bad_type" - err = db.Reload() - if err == nil { - t.Errorf("\nExpecting >,\n Received <%+v>", err) - } - - cfg.AttributeSCfg().Enabled = false - cfg.GetReloadChan(config.DATADB_JSN) <- struct{}{} - time.Sleep(10 * time.Millisecond) - if db.IsRunning() { - t.Errorf("Expected service to be down") - } - shdChan.CloseOnce() - time.Sleep(10 * time.Millisecond) -} - -func TestDataDBReload6(t *testing.T) { +func TestDataDBReloadErrorMarsheler(t *testing.T) { cfg := config.NewDefaultCGRConfig() cfg.GeneralCfg().DBDataEncoding = "" utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) @@ -557,7 +500,7 @@ func TestDataDBReload6(t *testing.T) { time.Sleep(10 * time.Millisecond) } -func TestDataDBReloadVersion(t *testing.T) { +func TestDataDBStartVersion(t *testing.T) { cfg, err := config.NewCGRConfigFromPath(path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo")) if err != nil { t.Fatal(err) @@ -786,3 +729,316 @@ func TestDataDBReloadCastError(t *testing.T) { shdChan.CloseOnce() time.Sleep(10 * time.Millisecond) } + +func TestDataDBReloadIfaceAsDurationError(t *testing.T) { + cfg, err := config.NewCGRConfigFromPath(path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo")) + if err != nil { + t.Fatal(err) + } + dbConn, err := engine.NewDataDBConn(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + cfg.DataDbCfg().Opts) + if err != nil { + t.Fatal(err) + } + defer func() { + dbConn.Flush("") + dbConn.Close() + }() + + err = dbConn.SetVersions(engine.Versions{ + utils.StatS: 4, + utils.Accounts: 3, + utils.Actions: 2, + utils.ActionTriggers: 2, + utils.ActionPlans: 3, + utils.SharedGroups: 2, + utils.Thresholds: 4, + utils.Routes: 2, + // old version for Attributes + utils.Attributes: 5, + utils.Timing: 1, + utils.RQF: 5, + utils.Resource: 1, + utils.Subscribers: 1, + utils.Destinations: 1, + utils.ReverseDestinations: 1, + utils.RatingPlan: 1, + utils.RatingProfile: 1, + utils.Chargers: 2, + utils.Dispatchers: 2, + utils.LoadIDsVrs: 1, + utils.RateProfiles: 1, + utils.ActionProfiles: 1, + }, true) + if err != nil { + t.Fatal(err) + } + utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) + utils.Logger.SetLogLevel(7) + shdChan := utils.NewSyncedChan() + filterSChan := make(chan *engine.FilterS, 1) + filterSChan <- nil + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + cM := engine.NewConnManager(cfg, nil) + db := NewDataDBService(cfg, cM, srvDep) + db.oldDBCfg = &config.DataDbCfg{ + DataDbType: utils.Mongo, + DataDbHost: "127.0.0.1", + DataDbPort: "27017", + DataDbName: "10", + DataDbUser: "cgrates", + Opts: map[string]interface{}{ + utils.QueryTimeoutCfg: "10s", + utils.RedisClusterOnDownDelayCfg: "0", + utils.RedisClusterSyncCfg: "5s", + utils.RedisClusterCfg: false, + utils.RedisSentinelNameCfg: "", + utils.RedisTLS: false, + utils.RedisClientCertificate: "", + utils.RedisClientKey: "", + utils.RedisCACertificate: "", + }, + RmtConns: []string{}, + RplConns: []string{}, + Items: map[string]*config.ItemOpt{ + utils.MetaAccounts: { + Replicate: false, + Remote: false}, + utils.MetaReverseDestinations: { + Replicate: false, + Remote: false}, + utils.MetaDestinations: { + Replicate: false, + Remote: false}, + utils.MetaRatingPlans: { + Replicate: false, + Remote: false}, + utils.MetaRatingProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActions: { + Replicate: false, + Remote: false}, + utils.MetaActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaAccountActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaActionTriggers: { + Replicate: false, + Remote: false}, + utils.MetaSharedGroups: { + Replicate: false, + Remote: false}, + utils.MetaTimings: { + Replicate: false, + Remote: false}, + utils.MetaResourceProfile: { + Replicate: false, + Remote: false}, + utils.MetaStatQueues: { + Replicate: false, + Remote: false}, + utils.MetaResources: { + Replicate: false, + Remote: false}, + utils.MetaStatQueueProfiles: { + Replicate: false, + Remote: false}, + utils.MetaThresholds: { + Replicate: false, + Remote: false}, + utils.MetaThresholdProfiles: { + Replicate: false, + Remote: false}, + utils.MetaFilters: { + Replicate: false, + Remote: false}, + utils.MetaRouteProfiles: { + Replicate: false, + Remote: false}, + utils.MetaAttributeProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherHosts: { + Replicate: false, + Remote: false}, + utils.MetaChargerProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherProfiles: { + Replicate: false, + Remote: false}, + utils.MetaLoadIDs: { + Replicate: false, + Remote: false}, + utils.MetaIndexes: { + Replicate: false, + Remote: false}, + utils.MetaRateProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActionProfiles: { + Replicate: false, + Remote: false}, + }, + } + cfg.DataDbCfg().Opts[utils.QueryTimeoutCfg] = true + db.dm = nil + err = db.Reload() + if err == nil || err.Error() != "cannot convert field: true to time.Duration" { + t.Fatal(err) + } + + shdChan.CloseOnce() + time.Sleep(10 * time.Millisecond) +} + +func TestDataDBStartSessionSCfgErr(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + cM := engine.NewConnManager(cfg, nil) + db := NewDataDBService(cfg, cM, srvDep) + cfg.DataDbCfg().DataDbType = "badtype" + cfg.SessionSCfg().Enabled = true + cfg.SessionSCfg().ListenBijson = "" + err := db.Start() + if err != nil { + t.Errorf("\nExpecting <%+v>,\n Received <%+v>", nil, err) + } +} + +func TestDataDBStartRalsSCfgErr(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + cM := engine.NewConnManager(cfg, nil) + db := NewDataDBService(cfg, cM, srvDep) + cfg.DataDbCfg().DataDbType = "badtype" + db.cfg.RalsCfg().Enabled = true + cfg.SessionSCfg().ListenBijson = "" + err := db.Start() + if err == nil || err.Error() != "unsupported db_type " { + t.Errorf("\nExpecting <%+v>,\n Received <%+v>", "unsupported db_type ", err) + } +} + +func TestDataDBReloadError(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + cM := engine.NewConnManager(cfg, nil) + db := NewDataDBService(cfg, cM, srvDep) + cfg.GeneralCfg().DBDataEncoding = utils.JSON + db.oldDBCfg = &config.DataDbCfg{ + DataDbType: utils.Mongo, + DataDbHost: "127.0.0.1", + DataDbPort: "27017", + DataDbName: "10", + DataDbUser: "cgrates", + Opts: map[string]interface{}{ + utils.QueryTimeoutCfg: "10s", + utils.RedisClusterOnDownDelayCfg: "0", + utils.RedisClusterSyncCfg: "5s", + utils.RedisClusterCfg: false, + utils.RedisSentinelNameCfg: "", + utils.RedisTLS: false, + utils.RedisClientCertificate: "", + utils.RedisClientKey: "", + utils.RedisCACertificate: "", + }, + RmtConns: []string{}, + RplConns: []string{}, + Items: map[string]*config.ItemOpt{ + utils.MetaAccounts: { + Replicate: false, + Remote: false}, + utils.MetaReverseDestinations: { + Replicate: false, + Remote: false}, + utils.MetaDestinations: { + Replicate: false, + Remote: false}, + utils.MetaRatingPlans: { + Replicate: false, + Remote: false}, + utils.MetaRatingProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActions: { + Replicate: false, + Remote: false}, + utils.MetaActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaAccountActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaActionTriggers: { + Replicate: false, + Remote: false}, + utils.MetaSharedGroups: { + Replicate: false, + Remote: false}, + utils.MetaTimings: { + Replicate: false, + Remote: false}, + utils.MetaResourceProfile: { + Replicate: false, + Remote: false}, + utils.MetaStatQueues: { + Replicate: false, + Remote: false}, + utils.MetaResources: { + Replicate: false, + Remote: false}, + utils.MetaStatQueueProfiles: { + Replicate: false, + Remote: false}, + utils.MetaThresholds: { + Replicate: false, + Remote: false}, + utils.MetaThresholdProfiles: { + Replicate: false, + Remote: false}, + utils.MetaFilters: { + Replicate: false, + Remote: false}, + utils.MetaRouteProfiles: { + Replicate: false, + Remote: false}, + utils.MetaAttributeProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherHosts: { + Replicate: false, + Remote: false}, + utils.MetaChargerProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherProfiles: { + Replicate: false, + Remote: false}, + utils.MetaLoadIDs: { + Replicate: false, + Remote: false}, + utils.MetaIndexes: { + Replicate: false, + Remote: false}, + utils.MetaRateProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActionProfiles: { + Replicate: false, + Remote: false}, + }, + } + data := engine.NewInternalDB(nil, nil, true) + db.dm = engine.NewDataManager(data, nil, nil) + err := db.Reload() + if err != nil { + t.Errorf("\nExpecting <%+v>,\n Received <%+v>", nil, err) + } +}