From ddfded6c05f865bc06b4f7f0844b97d336683ccc Mon Sep 17 00:00:00 2001 From: gezimbll Date: Thu, 13 Apr 2023 11:05:25 -0400 Subject: [PATCH] Improving unit tests coverage --- engine/account_test.go | 57 +++++++++++++++++++++++ engine/chargers_test.go | 27 +++++++++++ engine/datamanager_test.go | 93 ++++++++++++++++++++++++++++++++++++++ engine/thresholds_test.go | 24 ++++++++++ 4 files changed, 201 insertions(+) diff --git a/engine/account_test.go b/engine/account_test.go index 0aee2e44c..be3bc15a8 100644 --- a/engine/account_test.go +++ b/engine/account_test.go @@ -2553,6 +2553,63 @@ func TestAccountPublishAct(t *testing.T) { ub.ExecuteActionTriggers(a) } +func TestTestAccountActUnSetCurr(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) + }() + acc := &Account{ + ID: "cgrates.org:1001", + BalanceMap: map[string]Balances{ + utils.VOICE: { + &Balance{ + Weight: 20, + DestinationIDs: utils.StringMap{"DEST1": true}, + ExpirationDate: time.Date(2023, 3, 12, 0, 0, 0, 0, time.UTC), + }, + }, + }, + ActionTriggers: ActionTriggers{ + &ActionTrigger{ + Recurrent: true, + Balance: &BalanceFilter{ + Type: utils.StringPointer(utils.VOICE), + ExpirationDate: utils.TimePointer(time.Date(2023, 3, 12, 0, 0, 0, 0, time.UTC)), + Weight: utils.Float64Pointer(20), + DestinationIDs: &utils.StringMap{ + "DEST1": true, + }, + }, + ThresholdValue: 2, + ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, + ActionsID: "ACT_1", + Executed: false}, + }, + } + a := &Action{ + ActionType: utils.UNSET_RECURRENT, + Balance: &BalanceFilter{ + Type: utils.StringPointer(utils.VOICE), + ExpirationDate: utils.TimePointer(time.Date(2023, 3, 12, 0, 0, 0, 0, time.UTC)), + Weight: utils.Float64Pointer(20), + DestinationIDs: &utils.StringMap{ + "DEST1": true, + }, + }, + } + dm.SetActions("ACT_1", Actions{a}, utils.NonTransactional) + SetDataStorage(dm) + acc.ExecuteActionTriggers(a) + if acc, err := dm.GetAccount("cgrates.org:1001"); err != nil || acc.ActionTriggers[0].Recurrent { + t.Error(err) + } +} + /*********************************** Benchmarks *******************************/ func BenchmarkGetSecondForPrefix(b *testing.B) { diff --git a/engine/chargers_test.go b/engine/chargers_test.go index 9a055511b..e7fe3756f 100755 --- a/engine/chargers_test.go +++ b/engine/chargers_test.go @@ -354,3 +354,30 @@ func TestChargerV1ProcessEvent(t *testing.T) { } } + +func TestChSListenAndServe(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + exitChan := make(chan bool) + + go func() { + time.Sleep(3 * time.Millisecond) + exitChan <- true + }() + cS, err := NewChargerService(dm, nil, cfg, nil) + if err != nil { + t.Error(err) + } + go func() { + if err := cS.ListenAndServe(exitChan); err != nil { + t.Errorf("ListenAndServe returned an error: %v", err) + } + }() + + time.Sleep(5 * time.Millisecond) + + exitChan <- true + + time.Sleep(5 * time.Millisecond) +} diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index 280d3e871..f60eb3fcf 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -1217,5 +1217,98 @@ func TestRemoveDispatcherPrfRpl(t *testing.T) { if err := dm.RemoveDispatcherProfile("cgrates.org", "DSP_Test2", utils.NonTransactional, true); err != nil { t.Error(err) } +} + +func TestDMReconnect(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + if err := dm.Reconnect(cfg.GeneralCfg().DBDataEncoding, cfg.DataDbCfg()); err != nil { + t.Error(err) + } + +} + +func TestDMRemAccountActionPlans(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + acc := &Account{ + ID: "cgrates.org:1001", + BalanceMap: map[string]Balances{ + utils.MONETARY: { + &Balance{ + Value: 10, + }, + }}} + dm.SetAccount(acc) + apIDs := []string{"PACKAGE_10_SHARED_A_5", "USE_SHARED_A"} + if err := dm.SetAccountActionPlans(acc.ID, apIDs, false); err != nil { + t.Error(err) + } + if err := dm.RemAccountActionPlans(acc.ID, apIDs); err != nil { + t.Error(err) + } + +} + +func TestDMGetDispacherHost(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + cfg.DataDbCfg().Items[utils.MetaDispatcherHosts].Remote = true + cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1GetDispatcherHost { + + rpl := &DispatcherHost{ + Tenant: " cgrates.org", + ID: "DP_1", + } + *reply.(**DispatcherHost) = rpl + return nil + } + return utils.ErrNotImplemented + }) + connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn, + }) + dm := NewDataManager(db, cfg.CacheCfg(), connMgr) + config.SetCgrConfig(cfg) + if _, err := dm.GetDispatcherHost("cgrates.org", "DP_1", false, true, utils.NonTransactional); err != nil { + t.Error(err) + } +} + +func TestDmRemoveStatQueue(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + cfg.DataDbCfg().Items[utils.MetaStatQueues].Replicate = true + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, _ interface{}) error { + if serviceMethod == utils.ReplicatorSv1RemoveStatQueue { + return nil + } + return utils.ErrNotImplemented + }) + connMgr := NewConnManager(cfg, + map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn, + }) + dm := NewDataManager(db, cfg.CacheCfg(), connMgr) + config.SetCgrConfig(cfg) + if err := dm.RemoveStatQueue("cgrates.org", "SQ1", utils.NonTransactional); err != nil { + t.Error(err) + } } diff --git a/engine/thresholds_test.go b/engine/thresholds_test.go index 555dabe47..dd829ecf9 100644 --- a/engine/thresholds_test.go +++ b/engine/thresholds_test.go @@ -725,3 +725,27 @@ func TestThSStoreThreshold(t *testing.T) { t.Error(err) } } + +func TestV1GetThreshold(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + thS, err := NewThresholdService(dm, cfg, nil) + if err != nil { + t.Error(err) + } + dm.SetThreshold(&Threshold{ + Tenant: "cgrates.org", + ID: "TH_3", + Hits: 0, + }) + var reply Threshold + tntID := &utils.TenantID{ + Tenant: "cgrates.org", + ID: "TH_3", + } + if err := thS.V1GetThreshold(tntID, &reply); err != nil { + t.Error(err) + } + +}