diff --git a/engine/account_test.go b/engine/account_test.go index e71c3bf4a..0aee2e44c 100644 --- a/engine/account_test.go +++ b/engine/account_test.go @@ -2445,7 +2445,6 @@ func TestAccountSetRrecurrentAction(t *testing.T) { if err := aT.Execute(ub); err != nil { t.Error(err) } - } func TestAccountEnableAccAct(t *testing.T) { @@ -2505,7 +2504,53 @@ func TestAccountEnableAccAct(t *testing.T) { if acc, err := dm.GetAccount("cgrates.org:1001"); err != nil || acc.Disabled { t.Error(err) } + dm.RemoveActions("ACT_1", utils.NonTransactional) + a.ActionType = utils.DISABLE_ACCOUNT + dm.SetActions("ACT_1", Actions{a}, utils.NonTransactional) + acc.ExecuteActionTriggers(a) + if _, err := dm.GetAccount("cgrates.org:1001"); err != nil { + t.Error(err) + } +} +func TestAccountPublishAct(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + tmpDm := dm + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + SetDataStorage(tmpDm) + }() + ub := &Account{ + ID: "cgrates.org:1002", + BalanceMap: map[string]Balances{ + utils.MONETARY: { + &Balance{ + Value: 10, + DestinationIDs: utils.StringMap{"DEST1": true, "DEST2": false}, + ExpirationDate: time.Date(2022, 12, 23, 20, 0, 0, 0, time.UTC), + }, + }}, + ActionTriggers: ActionTriggers{ + &ActionTrigger{ + Balance: &BalanceFilter{ + + Type: utils.StringPointer(utils.MONETARY), + DestinationIDs: &utils.StringMap{"DEST1": true, "DEST2": false}, + ExpirationDate: utils.TimePointer(time.Date(2022, 12, 23, 20, 0, 0, 0, time.UTC)), + }, + + ThresholdValue: 2, + ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, + ActionsID: "TEST_ACTIONS_ORDER"}, + }, + } + a := &Action{} + SetDataStorage(dm) + + ub.ExecuteActionTriggers(a) } /*********************************** Benchmarks *******************************/ diff --git a/engine/caches_test.go b/engine/caches_test.go index 151f15b9f..9351d2ab0 100644 --- a/engine/caches_test.go +++ b/engine/caches_test.go @@ -251,5 +251,16 @@ func TestCachesRPCCall(t *testing.T) { } else if !reflect.DeepEqual(reply, []string{"cgrates:TH1"}) { t.Errorf("Expected %v", []string{"cgrates:TH1"}) } - +} + +func TestCacheSPreCache(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + cfg.CacheCfg()[utils.CacheAttributeProfiles].Precache = true + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + chS := NewCacheS(cfg, dm) + Cache.Clear(nil) + if err := chS.Precache(); err != nil { + t.Error(err) + } } diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index 7b4bbc5f9..280d3e871 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -1057,3 +1057,165 @@ func TestDMGetTiming(t *testing.T) { t.Error(err) } } + +func TestDmDispatcherProfile(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + + fltr := &Filter{ + Tenant: "cgrates.org", + ID: "DSP_FLT", + Rules: []*FilterRule{ + { + Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.Account, + Type: utils.MetaString, + Values: []string{"2009"}, + }, + }, + } + fltr2 := &Filter{ + Tenant: "cgrates.org", + ID: "DSP_FLT2", + Rules: []*FilterRule{ + { + Type: utils.MetaGreaterOrEqual, + Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.Weight, + Values: []string{"15.0"}, + }, + }, + } + dm.SetFilter(fltr) + dm.SetFilter(fltr2) + dpp := &DispatcherProfile{ + Tenant: "cgrates.org", + ID: "DSP1", + FilterIDs: []string{"DSP_FLT"}, + Strategy: utils.MetaFirst, + Subsystems: []string{utils.MetaAttributes, utils.MetaSessionS}, + Weight: 20, + Hosts: DispatcherHostProfiles{ + &DispatcherHostProfile{ + ID: "ALL2", + FilterIDs: []string{}, + Weight: 20, + Params: make(map[string]interface{}), + }, + &DispatcherHostProfile{ + ID: "ALL", + FilterIDs: []string{}, + Weight: 10, + Params: make(map[string]interface{}), + }, + }, + } + dm.SetDispatcherProfile(dpp, true) + dpp.FilterIDs = []string{"DSP_FLT2"} + if err := dm.SetDispatcherProfile(dpp, true); err != nil { + t.Error(err) + } + +} + +func TestDmGetSQRemote(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + cfg.DataDbCfg().Items[utils.MetaStatQueues].Remote = true + cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConnn := make(chan rpcclient.ClientConnector, 1) + clientConnn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1GetStatQueue { + + *reply.(*StoredStatQueue) = StoredStatQueue{ + Tenant: "cgrates.org", + ID: "SQ1", + SQItems: []SQItem{}, + SQMetrics: map[string][]byte{}, + } + return nil + } + + return utils.ErrNotFound + }) + connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConnn, + }) + dm := NewDataManager(db, cfg.CacheCfg(), connMgr) + config.SetCgrConfig(cfg) + if _, err := dm.GetStatQueue("cgrates.org", "SQ1", false, true, utils.NonTransactional); err == nil { + t.Error(err) + } + // unfinished +} + +func TestRemoveThresholdRpl(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + cfg.DataDbCfg().Items[utils.MetaThresholds].Replicate = true + cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConnn := make(chan rpcclient.ClientConnector, 1) + clientConnn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1RemoveThreshold { + + return nil + } + + return utils.ErrNotFound + }) + connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConnn, + }) + dm := NewDataManager(db, cfg.CacheCfg(), connMgr) + config.SetCgrConfig(cfg) + if err := dm.RemoveThreshold("cgrates.org", "TH1", utils.NonTransactional); err != nil { + t.Error(err) + } + +} + +func TestRemoveDispatcherPrfRpl(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + cfg.DataDbCfg().Items[utils.MetaDispatcherProfiles].Replicate = true + cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConnn := make(chan rpcclient.ClientConnector, 1) + clientConnn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1RemoveDispatcherProfile { + + return nil + } + + return utils.ErrNotFound + }) + connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConnn, + }) + dm := NewDataManager(db, cfg.CacheCfg(), connMgr) + dpp := &DispatcherProfile{ + Tenant: "cgrates.org", + ID: "DSP_Test2", + Subsystems: []string{utils.MetaAttributes}, + Weight: 20, + } + dm.SetDispatcherProfile(dpp, true) + config.SetCgrConfig(cfg) + if err := dm.RemoveDispatcherProfile("cgrates.org", "DSP_Test2", utils.NonTransactional, true); err != nil { + t.Error(err) + } + +} diff --git a/engine/storage_test.go b/engine/storage_test.go index 06b61d606..80f11d106 100644 --- a/engine/storage_test.go +++ b/engine/storage_test.go @@ -1259,7 +1259,6 @@ func TestTpRLoadAll(t *testing.T) { ActionTriggersId: "STANDARD_TRIGGERS", }, } - if err := storDb.SetTPDestinations(dests); err != nil { t.Error(err) }