From 2217d1525cdfb3a57f580b916f35ada228db458b Mon Sep 17 00:00:00 2001 From: gezimbll Date: Fri, 27 Jan 2023 10:52:02 -0500 Subject: [PATCH] improving coverage at engine --- engine/cdrs_test.go | 107 +++++++++++++++++++++++++++++++++++++ engine/datadbmock.go | 13 ++++- engine/datamanager_test.go | 104 +++++++++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+), 2 deletions(-) diff --git a/engine/cdrs_test.go b/engine/cdrs_test.go index b28c25f4b..612e36708 100644 --- a/engine/cdrs_test.go +++ b/engine/cdrs_test.go @@ -2181,3 +2181,110 @@ func TestCDRServerListenAndServe2(t *testing.T) { }() cdrS.ListenAndServe(stopChan) } + +func TestStoreSMCostErr(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + tmpConnMgr := connMgr + tmpCache := Cache + defer func() { + connMgr = tmpConnMgr + config.SetCgrConfig(config.NewDefaultCGRConfig()) + Cache = tmpCache + }() + Cache.Clear(nil) + cfg.DataDbCfg().Items = map[string]*config.ItemOpt{ + utils.CacheSessionCostsTBL: { + Replicate: true, + }, + } + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + db.db.Set(utils.CacheSessionCostsTBL, "CGRID:CGRID", nil, []string{"GRP_1"}, true, utils.NonTransactional) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + cdrS := &CDRServer{ + cgrCfg: cfg, + connMgr: connMgr, + dm: dm, + cdrDb: db, + guard: guardian.Guardian, + } + smCost := &SMCost{ + CGRID: "CGRID", + RunID: utils.MetaDefault, + OriginHost: utils.FreeSWITCHAgent, + OriginID: "Origin1", + Usage: time.Second, + CostSource: utils.MetaSessionS, + CostDetails: &EventCost{ + CGRID: "164b0422fdc6a5117031b427439482c6a4f90e41", + RunID: utils.MetaDefault, + StartTime: time.Date(2017, 1, 9, 16, 18, 21, 0, time.UTC), + Charges: []*ChargingInterval{ + { + RatingID: "c1a5ab9", + Increments: []*ChargingIncrement{ + { + Usage: 0, + Cost: 0.1, + AccountingID: "9bdad10", + CompressFactor: 1, + }, + }, + CompressFactor: 1, + }, + }, + AccountSummary: &AccountSummary{ + Tenant: "cgrates.org", + ID: "dan", + BalanceSummaries: []*BalanceSummary{ + { + UUID: "8c54a9e9-d610-4c82-bcb5-a315b9a65010", + Type: utils.MetaMonetary, + Value: 50, + }, + }, + AllowNegative: false, + Disabled: false, + }, + Rating: Rating{ + "3cd6425": &RatingUnit{ + RoundingMethod: "*up", + RoundingDecimals: 5, + TimingID: "7f324ab", + RatesID: "4910ecf", + RatingFiltersID: "43e77dc", + }, + }, + Accounting: Accounting{ + "a012888": &BalanceCharge{ + AccountID: "cgrates.org:dan", + BalanceUUID: "8c54a9e9-d610-4c82-bcb5-a315b9a65010", + Units: 0.01, + }, + }, + RatingFilters: RatingFilters{ + "43e77dc": RatingMatchedFilters{ + "DestinationID": "GERMANY", + "DestinationPrefix": "+49", + "RatingPlanID": "RPL_RETAIL1", + "Subject": "*out:cgrates.org:call:*any", + }, + }, + Rates: ChargedRates{ + "ec1a177": RateGroups{ + &RGRate{ + GroupIntervalStart: 0, + Value: 0.01, + RateIncrement: time.Minute, + RateUnit: time.Second}, + }, + }, + Timings: ChargedTimings{ + "7f324ab": &ChargedTiming{ + StartTime: "00:00:00", + }}}} + + if err := cdrS.storeSMCost(smCost, true); err != nil { + t.Error(err) + } + +} diff --git a/engine/datadbmock.go b/engine/datadbmock.go index aef114913..57a9ed4f4 100644 --- a/engine/datadbmock.go +++ b/engine/datadbmock.go @@ -41,6 +41,8 @@ type DataDBMock struct { GetActionPlanDrvF func(key string) (ap *ActionPlan, err error) SetActionPlanDrvF func(key string, ap *ActionPlan) (err error) RemoveActionPlanDrvF func(key string) (err error) + GetRouteProfileDrvF func(tenant, id string) (rp *RouteProfile, err error) + RemoveRouteProfileDrvF func(tenant, id string) error } // Storage methods @@ -379,7 +381,10 @@ func (dbM *DataDBMock) RemoveFilterDrv(string, string) error { return utils.ErrNotImplemented } -func (dbM *DataDBMock) GetRouteProfileDrv(string, string) (*RouteProfile, error) { +func (dbM *DataDBMock) GetRouteProfileDrv(tenant, id string) (*RouteProfile, error) { + if dbM.GetRouteProfileDrvF != nil { + return dbM.GetRouteProfileDrvF(tenant, id) + } return nil, utils.ErrNotImplemented } @@ -387,7 +392,11 @@ func (dbM *DataDBMock) SetRouteProfileDrv(*RouteProfile) error { return utils.ErrNotImplemented } -func (dbM *DataDBMock) RemoveRouteProfileDrv(string, string) error { +func (dbM *DataDBMock) RemoveRouteProfileDrv(tenant, id string) error { + + if dbM.RemoveRouteProfileDrvF != nil { + return dbM.RemoveRouteProfileDrvF(tenant, id) + } return utils.ErrNotImplemented } diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index 0cff0c7d0..f624d0b0c 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -4775,3 +4775,107 @@ func TestGetDispatcherProfileErr(t *testing.T) { t.Error(err) } } + +func TestRemoveIndexFiltersItem(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + tmpCache := Cache + defer func() { + config.SetCgrConfig(config.NewDefaultCGRConfig()) + Cache = tmpCache + }() + Cache.Clear(nil) + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + fltr := &Filter{ + Tenant: "cgrates.org", + ID: "FLTR_ACCOUNT_1001", + Rules: []*FilterRule{ + { + Type: utils.MetaString, + Element: "~*req.Account", + Values: []string{"1001"}, + }, + }, + } + if err := dm.SetFilter(fltr, false); err != nil { + t.Error(err) + } + thd := &ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THD_ACNT_1001", + FilterIDs: []string{"FLTR_ACCOUNT_1001"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 29, 15, 0, 0, 0, time.UTC), + }, + MaxHits: -1, + MinHits: 0, + MinSleep: 0, + Blocker: false, + Weight: 10.0, + ActionIDs: []string{"TOPUP_MONETARY_10"}, + Async: false, + } + if err := dm.SetThresholdProfile(thd, false); err != nil { + t.Error(err) + } + indexes := map[string]utils.StringSet{ + "*string:*req.Account:1001": { + "THD_ACNT_1001": struct{}{}, + }, + } + + if err := dm.SetIndexes(utils.CacheReverseFilterIndexes, "cgrates.org:FLTR_ACCOUNT_1001:*threshold_filter_indexes", + indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if err := removeIndexFiltersItem(dm, utils.CacheThresholdFilterIndexes, "cgrates", "THD_ACNT_1001", []string{"FLTR_ACCOUNT_1001"}); err != nil { + t.Error(err) + } + +} + +func TestDmRemoveRouteProfileErr(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + defer func() { + config.SetCgrConfig(config.NewDefaultCGRConfig()) + }() + db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + oldRp := &RouteProfile{ + Tenant: "cgrates.org", + ID: "RouteProfilePrefix4", + Sorting: utils.MetaWeight, + Routes: []*Route{ + { + ID: "route1", + Weight: 10.0, + RouteParameters: "param1", + }, + }, + Weight: 0, + } + dm.dataDB = &DataDBMock{ + GetRouteProfileDrvF: func(tenant, id string) (rp *RouteProfile, err error) { + return oldRp, nil + }, + RemoveRouteProfileDrvF: func(tenant, id string) error { + return nil + }, + } + if err := dm.RemoveRouteProfile("cgrates.org", "RP1", true); err == nil || err != utils.ErrNotImplemented { + t.Error(err) + } + dm.dataDB = &DataDBMock{ + GetRouteProfileDrvF: func(tenant, id string) (rp *RouteProfile, err error) { + return oldRp, nil + }, + } + if err := dm.RemoveRouteProfile("cgrates.org", "RP1", true); err == nil || err != utils.ErrNotImplemented { + t.Error(err) + } + dm.dataDB = &DataDBMock{} + if err := dm.RemoveRouteProfile("cgrates.org", "RP1", true); err == nil || err != utils.ErrNotImplemented { + t.Error(err) + } +}