diff --git a/engine/tpreader_test.go b/engine/tpreader_test.go index 8ead30104..a211a8223 100644 --- a/engine/tpreader_test.go +++ b/engine/tpreader_test.go @@ -530,208 +530,6 @@ func TestGetLoadedIdsReverseDestinations(t *testing.T) { } } -// func TestGetLoadedIdsRatingPlans(t *testing.T) { -// tpr := &TpReader{ -// ratingPlans: map[string]*RatingPlan{ -// "RP_RETAIL1": { -// Id: "RP_1001", -// Timings: map[string]*RITiming{ -// "TIMING_1001": { -// ID: "PEAK", -// Years: []int{2021}, -// Months: []time.Month{8}, -// MonthDays: []int{31}, -// WeekDays: []time.Weekday{5}, -// StartTime: "15:00:00Z", -// EndTime: "17:00:00Z", -// cronString: "21 2 5 25 8 5 2021", //sec, min, hour, monthday, month, weekday, year -// tag: utils.MetaAny, -// }, -// }, -// Ratings: map[string]*RIRate{ -// "RATING_1001": { -// ConnectFee: 0.4, -// RoundingMethod: utils.MetaUp, -// RoundingDecimals: 4, -// MaxCost: 0.60, -// MaxCostStrategy: utils.MetaMaxCostDisconnect, -// Rates: []*RGRate{ -// { -// GroupIntervalStart: 0, -// Value: 0.2, -// RateIncrement: 60 * time.Second, -// RateUnit: 60 * time.Second, -// }, -// }, -// tag: utils.MetaAny, -// }, -// }, -// DestinationRates: map[string]RPRateList{ -// "DR_FS_40CNT": { -// { -// Timing: "TIMING_1001", -// Rating: "RATING_1001", -// Weight: 10, -// }, -// }, -// }, -// }, -// }, -// } -// rcv, err := tpr.GetLoadedIds(utils.RatingPlanPrefix) -// if err != nil { -// t.Error(err) -// } -// expRcv := []string{"RP_RETAIL1"} -// if !reflect.DeepEqual(expRcv, rcv) { -// t.Errorf("\nExpected %v but received \n%v", expRcv, rcv) -// } -// } - -// func TestGetLoadedIdsRatingProfiles(t *testing.T) { -// tpr := &TpReader{ -// ratingProfiles: map[string]*RatingProfile{ -// "1001": { -// Id: "RP_RETAIL1", -// RatingPlanActivations: []*RatingPlanActivation{ -// { -// ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), -// RatingPlanId: "RETAIL1", -// }, -// }, -// }, -// "1002": { -// Id: "RP_RETAIL2", -// RatingPlanActivations: []*RatingPlanActivation{ -// { -// ActivationTime: time.Date(2014, 7, 21, 14, 15, 0, 0, time.UTC), -// RatingPlanId: "RETAIL2", -// }, -// }, -// }, -// }, -// } -// rcv, err := tpr.GetLoadedIds(utils.RatingProfilePrefix) -// if err != nil { -// t.Error(err) -// } -// sort.Strings(rcv) -// expRcv := []string{"1001", "1002"} -// if !reflect.DeepEqual(expRcv, rcv) { -// t.Errorf("\nExpected %v but received \n%v", expRcv, rcv) -// } -// } - -// func TestGetLoadedIdsActions(t *testing.T) { -// tpr := &TpReader{ -// actions: map[string][]*Action{ -// "TOPUP_RST_10": { -// { -// Id: "ACTION_1001", -// ActionType: utils.MetaSetBalance, -// ExtraParameters: "", -// Filter: "", -// ExpirationString: "", -// Weight: 10, -// balanceValue: 9.45, -// }, -// }, -// "TOPUP_RST_5": { -// { -// Id: "ACTION_1002", -// ActionType: utils.MetaPublishAccount, -// ExtraParameters: "", -// Filter: "", -// ExpirationString: "", -// Weight: 5, -// balanceValue: 12.32, -// }, -// }, -// }, -// } -// rcv, err := tpr.GetLoadedIds(utils.ActionPrefix) -// if err != nil { -// t.Error(err) -// } -// sort.Strings(rcv) -// expRcv := []string{"TOPUP_RST_10", "TOPUP_RST_5"} -// if !reflect.DeepEqual(expRcv, rcv) { -// t.Errorf("\nExpected %v but received \n%v", expRcv, rcv) -// } -// } - -// func TestGetLoadedIdsActionPlans(t *testing.T) { -// tpr := &TpReader{ -// actionPlans: map[string]*ActionPlan{ -// "PACKAGE_1001": { -// Id: "TOPUP_RST_10", -// AccountIDs: map[string]bool{ -// "1001": true, -// "1002": false, -// }, -// }, -// "PACKAGE_1002": { -// Id: "TOPUP_RST_5", -// AccountIDs: map[string]bool{ -// "1001": false, -// "1002": true, -// }, -// }, -// }, -// } -// rcv, err := tpr.GetLoadedIds(utils.ActionPlanPrefix) -// if err != nil { -// t.Error(err) -// } -// sort.Strings(rcv) -// expRcv := []string{"PACKAGE_1001", "PACKAGE_1002"} -// if !reflect.DeepEqual(expRcv, rcv) { -// t.Errorf("\nExpected %v but received \n%v", expRcv, rcv) -// } -// } - -// func TestGetLoadedIdsSharedGroup(t *testing.T) { -// tpr := &TpReader{ -// sharedGroups: map[string]*SharedGroup{ -// "SHARED_A": { -// Id: "SHARED_ID1", -// AccountParameters: map[string]*SharingParameters{ -// "PARAM_1": { -// Strategy: utils.MetaTopUp, -// RatingSubject: "1001", -// }, -// }, -// MemberIds: map[string]bool{ -// "1001": true, -// "1002": false, -// }, -// }, -// "SHARED_B": { -// Id: "SHARED_ID2", -// AccountParameters: map[string]*SharingParameters{ -// "PARAM_1": { -// Strategy: utils.MetaTopUp, -// RatingSubject: "1002", -// }, -// }, -// MemberIds: map[string]bool{ -// "1001": true, -// "1002": false, -// }, -// }, -// }, -// } -// rcv, err := tpr.GetLoadedIds(utils.SharedGroupPrefix) -// if err != nil { -// t.Error(err) -// } -// sort.Strings(rcv) -// expRcv := []string{"SHARED_A", "SHARED_B"} -// if !reflect.DeepEqual(expRcv, rcv) { -// t.Errorf("\nExpected %v but received \n%v", expRcv, rcv) -// } -// } - func TestGetLoadedIdsResourceProfiles(t *testing.T) { tpr := &TpReader{ resProfiles: map[utils.TenantID]*utils.TPResourceProfile{ @@ -762,33 +560,6 @@ func TestGetLoadedIdsResourceProfiles(t *testing.T) { } } -// func TestGetLoadedIdsActionTriggers(t *testing.T) { -// tpr := &TpReader{ -// actionsTriggers: map[string]ActionTriggers{ -// "STANDARD_TRIGGERS": { -// { -// ID: "ID1", -// UniqueID: "", -// ThresholdType: "*max_balance", -// ThresholdValue: 20, -// Recurrent: false, -// MinSleep: 0, -// Weight: 10, -// ActionsID: "LOG_WARNING", -// }, -// }, -// }, -// } -// rcv, err := tpr.GetLoadedIds(utils.ActionTriggerPrefix) -// if err != nil { -// t.Error(err) -// } -// expRcv := []string{"STANDARD_TRIGGERS"} -// if !reflect.DeepEqual(expRcv, rcv) { -// t.Errorf("\nExpected %v but received \n%v", expRcv, rcv) -// } -// } - func TestGetLoadedIdsStatQueueProfiles(t *testing.T) { tpr := &TpReader{ sqProfiles: map[utils.TenantID]*utils.TPStatProfile{ @@ -1053,30 +824,12 @@ func TestReloadCache(t *testing.T) { utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, }) tpr := &TpReader{ - // actions: map[string][]*Action{ - // "ActionsID": {}, - // }, - // actionPlans: map[string]*ActionPlan{ - // "ActionPlansID": {}, - // }, - // actionsTriggers: map[string]ActionTriggers{ - // "ActionTriggersID": {}, - // }, destinations: map[string]*Destination{ "DestinationsID": {}, }, timings: map[string]*utils.TPTiming{ "TimingsID": {}, }, - // ratingPlans: map[string]*RatingPlan{ - // "RatingPlansID": {}, - // }, - // ratingProfiles: map[string]*RatingProfile{ - // "RatingProfilesID": {}, - // }, - // sharedGroups: map[string]*SharedGroup{ - // "SharedGroupsID": {}, - // }, resProfiles: map[utils.TenantID]*utils.TPResourceProfile{ {Tenant: "cgrates.org", ID: "resourceProfilesID"}: {}, }, diff --git a/loaders/loader_test.go b/loaders/loader_test.go index ad645d1c4..d7e22269d 100644 --- a/loaders/loader_test.go +++ b/loaders/loader_test.go @@ -27,8 +27,10 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" + "github.com/cgrates/rpcclient" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" @@ -5148,3 +5150,491 @@ func TestLoaderServiceEnabled(t *testing.T) { t.Errorf("Expected false, received %+v", rcv) } } + +type ccMock struct { + calls map[string]func(ctx *context.Context, args interface{}, reply interface{}) error +} + +func (ccM *ccMock) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) (err error) { + if call, has := ccM.calls[serviceMethod]; !has { + return rpcclient.ErrUnsupporteServiceMethod + } else { + return call(ctx, args, reply) + } +} + +func TestStoreLoadedDataAttributes(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "AttributeProfileIDs": {"cgrates.org:attributesID"}, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Attributes": { + { + "Tenant": "cgrates.org", + "ID": "attributesID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaAttributes, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataResources(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "ResourceIDs": { + "cgrates.org:resourcesID", + }, + "ResourceProfileIDs": { + "cgrates.org:resourcesID", + }, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Resources": { + { + "Tenant": "cgrates.org", + "ID": "resourcesID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaResources, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataFilters(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "FilterIDs": {"cgrates.org:filtersID"}, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Filters": { + { + "Tenant": "cgrates.org", + "ID": "filtersID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaFilters, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataStats(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "StatsQueueIDs": { + "cgrates.org:statsID", + }, + "StatsQueueProfileIDs": { + "cgrates.org:statsID", + }, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "StatsQueue": { + { + "Tenant": "cgrates.org", + "ID": "statsID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaStats, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataThresholds(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "ThresholdIDs": { + "cgrates.org:thresholdsID", + }, + "ThresholdProfileIDs": { + "cgrates.org:thresholdsID", + }, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Thresholds": { + { + "Tenant": "cgrates.org", + "ID": "thresholdsID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaThresholds, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataRoutes(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "RouteProfileIDs": {"cgrates.org:routesID"}, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Routes": { + { + "Tenant": "cgrates.org", + "ID": "routesID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaRoutes, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataChargers(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "ChargerProfileIDs": {"cgrates.org:chargersID"}, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Chargers": { + { + "Tenant": "cgrates.org", + "ID": "chargersID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaChargers, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataDispatchers(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "DispatcherProfileIDs": {"cgrates.org:dispatchersID"}, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "Dispatchers": { + { + "Tenant": "cgrates.org", + "ID": "dispatchersID", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaDispatchers, lds, utils.MetaReload); err != nil { + t.Error(err) + } +} + +func TestStoreLoadedDataDispatcherHosts(t *testing.T) { + engine.Cache.Clear(nil) + data := engine.NewInternalDB(nil, nil, false) + cfg := config.NewDefaultCGRConfig() + argExpect := utils.AttrReloadCacheWithAPIOpts{ + APIOpts: nil, + Tenant: "", + ArgsCache: map[string][]string{ + "DispatcherHostIDs": {"cgrates.org:dispatcherHostsID"}, + }, + } + cM := &ccMock{ + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReloadCache: func(ctx *context.Context, args interface{}, reply interface{}) error { + if !reflect.DeepEqual(args, argExpect) { + t.Errorf("Expected %v \nbut received %v", utils.ToJSON(argExpect), utils.ToJSON(args)) + } + return nil + }, + utils.CacheSv1Clear: func(ctx *context.Context, args interface{}, reply interface{}) error { + return nil + }, + }, + } + + rpcInternal := make(chan birpc.ClientConnector, 1) + rpcInternal <- cM + connMgr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): rpcInternal, + }) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + // ldr := &Loader{ + + // } + cacheConns := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)} + loaderCfg := config.CgrConfig().LoaderCfg() + fltrS := engine.NewFilterS(cfg, connMgr, dm) + ldr := NewLoader(dm, loaderCfg[0], "", fltrS, connMgr, cacheConns) + lds := map[string][]LoaderData{ + "DispatcherHosts": { + { + "Tenant": "cgrates.org", + "ID": "dispatcherHostsID", + "Address": "192.168.100.1", + }, + }, + } + if err := ldr.storeLoadedData(utils.MetaDispatcherHosts, lds, utils.MetaReload); err != nil { + t.Error(err) + } +}