From 9f56532a4cc467f6af3e7835debaf6c703611828 Mon Sep 17 00:00:00 2001 From: gezimbll Date: Thu, 20 Apr 2023 10:55:54 -0400 Subject: [PATCH] Improving coverage of unit tests --- engine/cdrs_test.go | 8 ++ engine/datamanager_test.go | 171 +++++++++++++++++++++++++++++++++++++ engine/stats_test.go | 42 +++++++-- 3 files changed, 214 insertions(+), 7 deletions(-) diff --git a/engine/cdrs_test.go b/engine/cdrs_test.go index 1fec22de2..95e2168c1 100644 --- a/engine/cdrs_test.go +++ b/engine/cdrs_test.go @@ -677,8 +677,11 @@ func TestCDRSThDSProcessEvent(t *testing.T) { // t.Error(err) // } // } +<<<<<<< HEAD <<<<<<< Updated upstream ======= +======= +>>>>>>> 9e7231e3a (Improving coverage of unit tests) func TestCDRSV1StoreSessionCostCache(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() @@ -781,6 +784,7 @@ func TestCDRsV1ProcessEventAll(t *testing.T) { if err := cdrS.V1ProcessEvent(arg, &reply); err == nil { //unfinished t.Error(err) } +<<<<<<< HEAD } func TestCDRSV2StoreCache(t *testing.T) { @@ -916,3 +920,7 @@ func TestCDRSV1ProcessCDRCache(t *testing.T) { } >>>>>>> Stashed changes +======= + +} +>>>>>>> 9e7231e3a (Improving coverage of unit tests) diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index 2cacc3c5b..8136b6fb3 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -1446,3 +1446,174 @@ func TestDmGetRatingPlanRmt(t *testing.T) { t.Error(err) } } + +func TestDMGetTimingRmt(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + cfg.DataDbCfg().Items[utils.MetaTimings].Remote = true + cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1GetTiming { + rpl := &utils.TPTiming{ + ID: "WEEKENDS", + Years: utils.Years{}, + Months: utils.Months{}, + MonthDays: utils.MonthDays{}, + WeekDays: utils.WeekDays{time.Saturday, time.Sunday}, + StartTime: "00:00:00", + } + *reply.(**utils.TPTiming) = 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.GetTiming("ALWAYS", true, utils.NonTransactional); err != nil { + t.Error(err) + } +} + +func TestSetResourceProfileRPl(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + cfg.DataDbCfg().Items[utils.MetaResourceProfile].Remote = true + cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1GetResourceProfile { + rpl := &ResourceProfile{ + Tenant: "cgrates.org", + ID: "RES_TEST", + FilterIDs: []string{"FLTR_1"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + UsageTTL: time.Duration(-1), + Limit: 2, + AllocationMessage: "", + Weight: 20, + ThresholdIDs: []string{utils.META_NONE}, + } + *reply.(**ResourceProfile) = 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.GetResourceProfile("cgrates.org", "RES_TEST", false, false, utils.NonTransactional); err != nil { + t.Error(err) + } +} + +func TestDMGetActionTriggersRmt(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + cfg.DataDbCfg().Items[utils.MetaActionTriggers].Remote = true + cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + Cache.Clear(nil) + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, reply interface{}) error { + if serviceMethod == utils.ReplicatorSv1GetActionTriggers { + rpl := 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, + }, + } + *reply.(*ActionTriggers) = 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.GetActionTriggers("ACT_1", true, ""); err == nil { + t.Error(err) + } + //unfinished +} + +func TestDMRemSQPRepl(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + defer func() { + cfg2, _ := config.NewDefaultCGRConfig() + config.SetCgrConfig(cfg2) + }() + cfg.DataDbCfg().Items[utils.MetaStatQueueProfiles].Replicate = true + cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, _ interface{}) error { + if serviceMethod == utils.ReplicatorSv1RemoveStatQueueProfile { + + 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) + dm.SetStatQueueProfile(&StatQueueProfile{ + Tenant: "cgrates.org", + ID: "SQ1", + QueueLength: 10, + TTL: time.Duration(0) * time.Second, + Metrics: []*MetricWithFilters{ + { + MetricID: utils.MetaACD, + }, + }, + Blocker: false, + Stored: true, + Weight: float64(0), + MinItems: 0}, true) + config.SetCgrConfig(cfg) + + if err := dm.RemoveStatQueueProfile("cgrates.org", "SQ1", "", true); err != nil { + t.Error(err) + } +} diff --git a/engine/stats_test.go b/engine/stats_test.go index 27615113f..77cfe1f93 100644 --- a/engine/stats_test.go +++ b/engine/stats_test.go @@ -25,6 +25,7 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" + "github.com/cgrates/rpcclient" ) var ( @@ -669,12 +670,25 @@ func TestStatProcessEvent2(t *testing.T) { defer func() { dm = tpDm }() + cfg.StatSCfg().ThresholdSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)} db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) dm := NewDataManager(db, cfg.CacheCfg(), nil) - sts, err := NewStatService(dm, cfg, nil, nil) + clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn <- clMock(func(serviceMethod string, _, _ interface{}) error { + if serviceMethod == utils.ThresholdSv1ProcessEvent { + + return nil + } + return utils.ErrNotImplemented + }) + connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): clientConn, + }) + sts, err := NewStatService(dm, cfg, NewFilterS(cfg, nil, dm), connMgr) if err != nil { t.Error(err) } + args := &StatsArgsProcessEvent{ CGREvent: &utils.CGREvent{ Tenant: "cgrates.org", @@ -696,9 +710,9 @@ func TestStatProcessEvent2(t *testing.T) { ID: "FLTR_TH_Stats1", Rules: []*FilterRule{ { - Type: "*lt", - Element: "~*req.Cost", - Values: []string{"120.0"}, + Type: utils.MetaString, + Element: "~*req.Account", + Values: []string{"1001"}, }, }, } @@ -710,15 +724,29 @@ func TestStatProcessEvent2(t *testing.T) { Metrics: []*MetricWithFilters{{ MetricID: "*sum:~*req.Usage", }}, - ThresholdIDs: []string{utils.META_NONE}, + ThresholdIDs: []string{"Th1"}, Blocker: true, Stored: true, Weight: 20, MinItems: 0, }, true) + + dm.SetStatQueue(&StatQueue{ + Tenant: "cgrates.org", + ID: "STS_PoccessCDR", + SQMetrics: map[string]StatMetric{ + utils.MetaASR: &StatASR{ + Answered: 2, + Count: 3, + Events: map[string]*StatWithCompress{ + "cgrates.org:ev1": {Stat: 1}, + }, + }, + }, + }) SetDataStorage(dm) - if _, err := sts.processEvent(args); err == nil { + if _, err := sts.processEvent(args); err != nil { t.Error(err) } - //unfinished + }