mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
improving coverage at engine
This commit is contained in:
committed by
Dan Christian Bogos
parent
e7f646bcf6
commit
0b9cf7ba7a
@@ -20,7 +20,6 @@ package engine
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -1792,21 +1791,23 @@ func TestGetResourceRemote(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
tmpDm := dm
|
||||
tmp := Cache
|
||||
tmpConn := connMgr
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
Cache = tmp
|
||||
SetDataStorage(tmpDm)
|
||||
SetConnManager(tmpConn)
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
cfg.CacheCfg().Partitions[utils.CacheResources].Replicate = true
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)}
|
||||
cfg.DataDbCfg().RplFiltered = true
|
||||
cfg.CacheCfg().ReplicationConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.CacheResources: {
|
||||
Limit: 3,
|
||||
Replicate: true,
|
||||
APIKey: "key",
|
||||
RouteID: "route",
|
||||
Remote: true,
|
||||
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1833,11 +1834,15 @@ func TestGetResourceRemote(t *testing.T) {
|
||||
*reply.(**Resource) = rS
|
||||
return nil
|
||||
},
|
||||
utils.CacheSv1ReplicateSet: func(args, reply interface{}) error {
|
||||
return errors.New("Can't Replicate")
|
||||
},
|
||||
},
|
||||
}
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator): clientConn,
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): clientConn,
|
||||
})
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), connMgr)
|
||||
config.SetCgrConfig(cfg)
|
||||
@@ -1848,6 +1853,11 @@ func TestGetResourceRemote(t *testing.T) {
|
||||
} else if !reflect.DeepEqual(rS, val) {
|
||||
t.Errorf("expected %v,received %v", utils.ToJSON(rS), utils.ToJSON(val))
|
||||
}
|
||||
Cache = NewCacheS(cfg, dm, nil)
|
||||
SetConnManager(connMgr)
|
||||
if _, err := dm.GetResource(rS.Tenant, rS.ID, false, true, utils.NonTransactional); err == nil || err.Error() != "Can't Replicate" {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetResourceProfileRemote(t *testing.T) {
|
||||
@@ -3732,9 +3742,64 @@ func TestCacheDataFromDB(t *testing.T) {
|
||||
Cache = tmp
|
||||
SetDataStorage(tmpDm)
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), nil)
|
||||
if err := dm.CacheDataFromDB("*test_", []string{}, true); err == nil || !strings.Contains(err.Error(), "unsupported cache prefix") {
|
||||
|
||||
if err := dm.CacheDataFromDB("INVALID", nil, false); err == nil || err.Error() != utils.UnsupportedCachePrefix {
|
||||
t.Error(err)
|
||||
}
|
||||
rp := &RatingPlan{
|
||||
Id: "id",
|
||||
DestinationRates: map[string]RPRateList{
|
||||
"DestinationRates": {&RPRate{Rating: "Rating"}}},
|
||||
Ratings: map[string]*RIRate{"Ratings": {ConnectFee: 0.7}},
|
||||
Timings: map[string]*RITiming{"Timings": {Months: utils.Months{4}}},
|
||||
}
|
||||
if err := dm.SetRatingPlan(rp); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, hasIt := Cache.Get(utils.CacheRatingPlans, rp.Id); hasIt {
|
||||
t.Error("Already in cache")
|
||||
}
|
||||
if err := dm.CacheDataFromDB(utils.RatingPlanPrefix, []string{rp.Id}, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
rP := &RatingProfile{
|
||||
Id: "*out:TCDDBSWF:call:*any",
|
||||
RatingPlanActivations: RatingPlanActivations{&RatingPlanActivation{
|
||||
ActivationTime: time.Date(2015, 01, 01, 8, 0, 0, 0, time.UTC),
|
||||
RatingPlanId: rp.Id,
|
||||
}},
|
||||
}
|
||||
if err := dm.SetRatingProfile(rP); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, hasIt := Cache.Get(utils.CacheRatingProfiles, rP.Id); hasIt {
|
||||
t.Error("Already in cache")
|
||||
}
|
||||
if err := dm.CacheDataFromDB(utils.RatingProfilePrefix, []string{rP.Id}, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
as := Actions{
|
||||
&Action{
|
||||
ActionType: utils.MetaSetBalance,
|
||||
Filters: []string{"*string:~*req.BalanceMap.*monetary[0].ID:*default", "*lt:~*req.BalanceMap.*monetary[0].Value:0"},
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("*sms"),
|
||||
ID: utils.StringPointer("for_v3hsillmilld500m_sms_ill"),
|
||||
Disabled: utils.BoolPointer(true),
|
||||
},
|
||||
Weight: 9,
|
||||
},
|
||||
}
|
||||
if err := dm.SetActions("test", as); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, hasIt := Cache.Get(utils.CacheActions, "test"); hasIt {
|
||||
t.Error("Already in cache")
|
||||
}
|
||||
if err := dm.CacheDataFromDB(utils.ActionPrefix, []string{"test"}, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2042,6 +2042,131 @@ func TestPopulateSortingDataStatsErr(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPopulateSortingDataAccsErr(t *testing.T) {
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
buf := new(bytes.Buffer)
|
||||
log.SetOutput(buf)
|
||||
defer func() {
|
||||
utils.Logger.SetLogLevel(0)
|
||||
log.SetOutput(os.Stderr)
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
cfg.RouteSCfg().RALsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs)}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ResponderGetMaxSessionTimeOnAccounts: func(args, reply interface{}) error {
|
||||
rpl := map[string]interface{}{
|
||||
utils.CapMaxUsage: 50 * time.Second,
|
||||
utils.Cost: 12.12,
|
||||
}
|
||||
*reply.(*map[string]interface{}) = rpl
|
||||
return nil
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): clientConn,
|
||||
})
|
||||
ev := &utils.CGREvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "voiceEvent",
|
||||
Time: utils.TimePointer(time.Now()),
|
||||
Event: map[string]interface{}{
|
||||
utils.AccountField: "1001",
|
||||
utils.Destination: "1002",
|
||||
utils.SetupTime: "2023-03-03 11:39:32 +0100 CET",
|
||||
utils.Usage: 5 * time.Second,
|
||||
},
|
||||
APIOpts: map[string]interface{}{
|
||||
utils.OptsEEsVerbose: struct{}{},
|
||||
},
|
||||
}
|
||||
route := &Route{
|
||||
ID: "ROUTE1",
|
||||
AccountIDs: []string{"Acc"},
|
||||
RatingPlanIDs: []string{"RP_1002_LOW"},
|
||||
Weight: 10,
|
||||
Blocker: false,
|
||||
}
|
||||
extraOpts := &optsGetRoutes{
|
||||
sortingStrategy: utils.MetaLoad,
|
||||
ignoreErrors: true,
|
||||
maxCost: 11.11,
|
||||
}
|
||||
rpS := NewRouteService(dm, nil, cfg, connMgr)
|
||||
expLog := `ignoring route with ID:`
|
||||
if _, pass, err := rpS.populateSortingData(ev, route, extraOpts); err != nil || pass {
|
||||
t.Error(err)
|
||||
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
|
||||
t.Errorf("Logger %v doesn't contain %v", rcvLog, expLog)
|
||||
}
|
||||
}
|
||||
func TestPopulateSortingDataAccs2(t *testing.T) {
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
buf := new(bytes.Buffer)
|
||||
log.SetOutput(buf)
|
||||
defer func() {
|
||||
utils.Logger.SetLogLevel(0)
|
||||
log.SetOutput(os.Stderr)
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
cfg.RouteSCfg().RALsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs)}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ResponderGetMaxSessionTimeOnAccounts: func(args, reply interface{}) error {
|
||||
rpl := map[string]interface{}{}
|
||||
*reply.(*map[string]interface{}) = rpl
|
||||
return nil
|
||||
},
|
||||
utils.ResponderGetCostOnRatingPlans: func(args, reply interface{}) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): clientConn,
|
||||
})
|
||||
ev := &utils.CGREvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "voiceEvent",
|
||||
Time: utils.TimePointer(time.Now()),
|
||||
Event: map[string]interface{}{
|
||||
utils.AccountField: "1001",
|
||||
utils.Destination: "1002",
|
||||
utils.SetupTime: "2023-03-03 11:39:32 +0100 CET",
|
||||
utils.Usage: 5 * time.Second,
|
||||
},
|
||||
APIOpts: map[string]interface{}{
|
||||
utils.OptsEEsVerbose: struct{}{},
|
||||
},
|
||||
}
|
||||
route := &Route{
|
||||
ID: "ROUTE1",
|
||||
AccountIDs: []string{"Acc"},
|
||||
RatingPlanIDs: []string{"RP_1002_LOW"},
|
||||
Weight: 10,
|
||||
Blocker: false,
|
||||
}
|
||||
extraOpts := &optsGetRoutes{
|
||||
sortingStrategy: utils.MetaLoad,
|
||||
ignoreErrors: true,
|
||||
maxCost: 11.11,
|
||||
}
|
||||
rpS := NewRouteService(dm, nil, cfg, connMgr)
|
||||
expLog := `ignoring route with ID:`
|
||||
if _, pass, err := rpS.populateSortingData(ev, route, extraOpts); err != nil || pass {
|
||||
t.Error(err)
|
||||
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
|
||||
t.Errorf("Logger %v doesn't contain %v", rcvLog, expLog)
|
||||
}
|
||||
}
|
||||
func TestV1GetRoutesList(t *testing.T) {
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
|
||||
@@ -1970,20 +1970,3 @@ func TestLoadRatingPlansFiltered(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
// func TestLoadRatingProfilesErr(t *testing.T) {
|
||||
// cfg := config.NewDefaultCGRConfig()
|
||||
// defer func() {
|
||||
// config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
// }()
|
||||
// db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
// _ = NewDataManager(db, cfg.CacheCfg(), nil)
|
||||
|
||||
// tpr, err := NewTpReader(db, db, utils.EmptyString, cfg.GeneralCfg().DefaultTimezone, nil, nil, true)
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// if err := tpr.LoadRatingProfiles(); err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user