Improving coverage at engine

This commit is contained in:
gezimbll
2023-01-09 10:57:54 -05:00
committed by Dan Christian Bogos
parent 26327bb5cf
commit db4dda2c10
3 changed files with 333 additions and 3 deletions

View File

@@ -2095,7 +2095,6 @@ func TestChrgrSProcessEvent(t *testing.T) {
func TestCdrSCall123(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
tmpConnMgr := connMgr
defer func() {
connMgr = tmpConnMgr
@@ -2131,3 +2130,54 @@ func TestCdrSCall123(t *testing.T) {
t.Error(err)
}
}
func TestCDRServerListenAndServe(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
tmpConnMgr := connMgr
defer func() {
connMgr = tmpConnMgr
config.SetCgrConfig(config.NewDefaultCGRConfig())
}()
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
cdrS := &CDRServer{
cgrCfg: cfg,
connMgr: connMgr,
dm: dm,
cdrDb: db,
}
stopChan := make(chan struct{}, 1)
go func() {
time.Sleep(10 * time.Millisecond)
stopChan <- struct{}{}
}()
cdrS.ListenAndServe(stopChan)
}
func TestCDRServerListenAndServe2(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
tmpConnMgr := connMgr
defer func() {
connMgr = tmpConnMgr
config.SetCgrConfig(config.NewDefaultCGRConfig())
}()
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
cdrS := &CDRServer{
cgrCfg: cfg,
connMgr: connMgr,
dm: dm,
cdrDb: db,
}
stopChan := make(chan struct{}, 1)
go func() {
time.Sleep(20 * time.Millisecond)
stopChan <- struct{}{}
}()
go func() {
time.Sleep(10 * time.Millisecond)
cdrS.storDBChan <- db
}()
cdrS.ListenAndServe(stopChan)
}

View File

@@ -1772,11 +1772,76 @@ func TestGetActionTriggers(t *testing.T) {
config.SetCgrConfig(cfg)
SetDataStorage(dm)
Cache.Set(utils.CacheActionTriggers, "Test", ActionTriggers{}, []string{}, false, utils.NonTransactional)
if _, err := dm.GetActionTriggers(aT[0].ID, false, utils.NonTransactional); err != nil {
if val, err := dm.GetActionTriggers(aT[0].ID, false, utils.NonTransactional); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(val, aT) {
t.Errorf("Expected %v,Received %v", utils.ToJSON(aT), utils.ToJSON(val))
}
}
func TestGetActionTriggersErr(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
tmpDm := dm
tmp := Cache
defer func() {
config.SetCgrConfig(config.NewDefaultCGRConfig())
Cache = tmp
SetDataStorage(tmpDm)
}()
Cache.Clear(nil)
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
cfg.DataDbCfg().RplFiltered = true
cfg.CacheCfg().Partitions[utils.CacheActionTriggers].Replicate = true
cfg.CacheCfg().ReplicationConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
utils.CacheActionTriggers: {
Limit: 3,
Replicate: true,
APIKey: "key",
RouteID: "route",
Remote: true,
},
}
aT := ActionTriggers{
&ActionTrigger{
ID: "Test",
},
}
clientConn := make(chan rpcclient.ClientConnector, 1)
clientConn <- &ccMock{
calls: map[string]func(args interface{}, reply interface{}) error{
utils.ReplicatorSv1GetActionTriggers: func(args, reply interface{}) error {
return utils.ErrNotFound
},
utils.CacheSv1ReplicateSet: func(args, reply interface{}) error {
return errors.New("Can't Replicate")
},
},
}
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
connMgr1 := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn,
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): clientConn,
})
dm := NewDataManager(db, cfg.CacheCfg(), connMgr1)
config.SetCgrConfig(cfg)
SetDataStorage(dm)
if _, err := dm.GetActionTriggers(aT[0].ID, true, utils.NonTransactional); err == nil {
t.Error(err)
}
Cache.Set(utils.CacheActionTriggers, "Test", nil, []string{}, false, utils.NonTransactional)
if _, err := dm.GetActionTriggers(aT[0].ID, false, utils.NonTransactional); err == nil || err != utils.ErrNotFound {
t.Error(err)
}
SetConnManager(connMgr1)
if _, err := dm.GetActionTriggers(aT[0].ID, true, utils.NonTransactional); err == nil || err != utils.ErrNotFound {
t.Error(err)
}
var dm2 *DataManager
if _, err = dm2.GetActionTriggers("test", false, utils.NonTransactional); err == nil || err != utils.ErrNoDatabaseConn {
t.Error(err)
}
}
func TestGetSharedGroupRemote(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
tmpDm := dm
@@ -3238,7 +3303,7 @@ func TestDMRatingProfile(t *testing.T) {
// },
// },
// }
// if err := dm.SetDispatcherProfile(disp, true); err != nil {
// if err := dm.SetDispatcherHost(disp.); err != nil {
// t.Error(err)
// }
@@ -3614,3 +3679,132 @@ func TestUpdateFilterIndexRemoveThresholdErr1(t *testing.T) {
t.Errorf("Expected error <%v>, Received error <%v>", utils.ErrNotImplemented, err)
}
}
func TestDMAttributeProfile(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
tmpDm := dm
tmp := Cache
tmpConn := connMgr
defer func() {
config.SetCgrConfig(config.NewDefaultCGRConfig())
Cache = tmp
SetConnManager(tmpConn)
SetDataStorage(tmpDm)
}()
Cache.Clear(nil)
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
utils.CacheAttributeProfiles: {
Limit: 3,
Remote: true,
APIKey: "key",
RouteID: "route",
Replicate: true,
},
}
attrPrf := &AttributeProfile{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "ATTR_1001_SIMPLEAUTH",
FilterIDs: []string{"*string:~*req.Account:1001"},
Contexts: []string{"simpleauth"},
Attributes: []*Attribute{
{
FilterIDs: []string{},
Path: utils.MetaReq + utils.NestingSep + "Password",
Type: utils.MetaConstant,
Value: config.NewRSRParsersMustCompile("CGRateS.org", utils.InfieldSep),
},
},
Weight: 20.0,
}
clientConn := make(chan rpcclient.ClientConnector, 1)
clientConn <- &ccMock{
calls: map[string]func(args interface{}, reply interface{}) error{
utils.ReplicatorSv1GetAttributeProfile: func(args, reply interface{}) error {
*reply.(**AttributeProfile) = attrPrf
return nil
},
utils.ReplicatorSv1SetAttributeProfile: func(args, reply interface{}) error {
attrPrfApiOpts, cancast := args.(*AttributeProfileWithAPIOpts)
if !cancast {
return utils.ErrNotConvertible
}
dm.DataDB().SetAttributeProfileDrv(attrPrfApiOpts.AttributeProfile)
return nil
},
utils.ReplicatorSv1RemoveAttributeProfile: func(args, reply interface{}) error {
tntApiOpts, cancast := args.(*utils.TenantIDWithAPIOpts)
if !cancast {
return utils.ErrNotConvertible
}
dm.DataDB().RemoveAttributeProfileDrv(tntApiOpts.Tenant, tntApiOpts.ID)
return nil
},
},
}
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn,
})
dm := NewDataManager(db, cfg.CacheCfg(), connMgr)
config.SetCgrConfig(cfg)
SetDataStorage(dm)
if err := dm.SetAttributeProfile(attrPrf, false); err != nil {
t.Error(err)
}
if err := dm.RemoveAttributeProfile(attrPrf.Tenant, attrPrf.ID, false); err != nil {
t.Error(err)
}
if _, has := db.db.Get(utils.CacheAttributeProfiles, utils.ConcatenatedKey(attrPrf.Tenant, attrPrf.ID)); has {
t.Error("Should been removed from db")
}
}
func TestUpdateFilterResourceIndex(t *testing.T) {
tmp := Cache
tmpDm := dm
defer func() {
Cache = tmp
dm = tmpDm
config.SetCgrConfig(config.NewDefaultCGRConfig())
}()
Cache.Clear(nil)
cfg := config.NewDefaultCGRConfig()
dataDB := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := NewDataManager(dataDB, cfg.CacheCfg(), nil)
oldFlt := &Filter{
Tenant: "cgrates.org",
ID: "RSC_FLTR1",
Rules: []*FilterRule{{Type: utils.MetaString, Element: "~*req.Destination", Values: []string{"ACC1", "ACC2", "~*req.Account"}}},
}
if err := oldFlt.Compile(); err != nil {
t.Error(err)
}
if err := dm.SetFilter(oldFlt, true); err != nil {
t.Error(err)
}
rs := &ResourceProfile{
Tenant: "cgrates.org",
ID: "RES_ULTIMITED",
FilterIDs: []string{"RSC_FLTR1"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
}
if err := dm.SetResourceProfile(rs, true); err != nil {
t.Error(err)
}
expindx := map[string]utils.StringSet{
"*string:*req.Destination:ACC1": {"RES_ULTIMITED": {}},
"*string:*req.Destination:ACC2": {"RES_ULTIMITED": {}},
}
if getidx, err := dm.GetIndexes(utils.CacheResourceFilterIndexes, "cgrates.org", utils.EmptyString, true, true); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(expindx, getidx) {
t.Errorf("Expected %v, Received %v", utils.ToJSON(expindx), utils.ToJSON(getidx))
}
}

View File

@@ -1206,3 +1206,89 @@ func TestResponderCall(t *testing.T) {
t.Error(err)
}
}
func TestGetMaxSessionTime(t *testing.T) {
tmpdm := dm
cfg := config.NewDefaultCGRConfig()
defer func() {
dm = tmpdm
config.SetCgrConfig(config.NewDefaultCGRConfig())
}()
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
acc := &Account{
ID: "cgrates.org:acc_id",
AllowNegative: true,
BalanceMap: map[string]Balances{
utils.MetaSMS: {&Balance{Value: 14}},
utils.MetaData: {&Balance{Value: 1024}},
utils.MetaVoice: {
&Balance{
Value: 15, Weight: 20,
DestinationIDs: utils.StringMap{"NAT": true}},
&Balance{Weight: 10,
DestinationIDs: utils.StringMap{"RET": true}}}},
}
if err := dm.SetAccount(acc); err != nil {
t.Error(err)
}
rsponder.MaxComputedUsage = map[string]time.Duration{
utils.MetaAny: 10 * time.Second,
utils.MetaVoice: 800 * time.Second,
}
tStart, _ := utils.ParseTimeDetectLayout("2013-08-07T17:30:00Z", "")
tEnd, _ := utils.ParseTimeDetectLayout("2013-08-07T17:31:21Z", "")
cd := &CallDescriptorWithAPIOpts{
CallDescriptor: &CallDescriptor{
Category: "call",
ToR: utils.MetaVoice,
Account: "acc_id",
Destination: "+4917621621391",
DurationIndex: 9,
TimeStart: tStart,
TimeEnd: tEnd,
},
}
var reply time.Duration
if err := rsponder.GetMaxSessionTime(cd, &reply); err == nil || err != utils.ErrAccountNotFound {
t.Errorf("Expected %+v, received :", err)
}
}
func TestResponderShutDown(t *testing.T) {
tempDm := dm
defer func() {
SetCdrStorage(cdrStorage)
dm = tempDm
}()
Cache.Clear(nil)
cfg := config.NewDefaultCGRConfig()
cfg.CacheCfg().Partitions[utils.CacheRPCResponses].Limit = 1
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
Cache = NewCacheS(cfg, dm, nil)
config.SetCgrConfig(cfg)
SetCdrStorage(db)
rs := &Responder{
Timezone: "UTC",
FilterS: &FilterS{
cfg: cfg,
dm: dm,
connMgr: nil,
},
MaxComputedUsage: map[string]time.Duration{},
}
rs.ShdChan = utils.NewSyncedChan()
arg := &utils.TenantWithAPIOpts{
Tenant: "cgrates.org",
APIOpts: map[string]interface{}{
utils.OptsAPIKey: "thr12345",
},
}
var reply string
if err := rs.Shutdown(arg, &reply); err != nil {
t.Error(err)
} else if reply != "Done!" {
t.Errorf("Expected Done!,Received %v", reply)
}
}