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
b2afa909bc
commit
4b4c591288
@@ -19,6 +19,7 @@ package engine
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -1362,6 +1363,62 @@ func TestDMThresholdProfile(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDMRemoveThresholdProfileErr(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().Items = map[string]*config.ItemOpt{
|
||||
utils.MetaThresholdProfiles: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)}
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1GetThresholdProfile: func(args, reply interface{}) error {
|
||||
return fmt.Errorf("Can't Replicate")
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator): clientConn,
|
||||
})
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), connMgr)
|
||||
Cache.Set(utils.MetaThresholdProfiles, "cgrates.org:TEST_PROFILE1", nil, []string{}, true, utils.NonTransactional)
|
||||
if err := dm.RemoveThresholdProfile("cgrates.org", "TEST_PROFILE1", true); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
Cache.Remove(utils.MetaThresholdProfiles, "cgrates.org:TEST_PROFILE1", true, utils.NonTransactional)
|
||||
var dm2 *DataManager
|
||||
if err = dm2.RemoveThresholdProfile("cgrates.org", "TEST_PROFILE1", true); err == nil || err != utils.ErrNoDatabaseConn {
|
||||
t.Error(err)
|
||||
}
|
||||
dm2 = NewDataManager(db, cfg.CacheCfg(), nil)
|
||||
dm2.dataDB = &DataDBMock{
|
||||
GetThresholdProfileDrvF: func(tenant, id string) (tp *ThresholdProfile, err error) {
|
||||
return
|
||||
},
|
||||
RemThresholdProfileDrvF: func(tenant, id string) (err error) {
|
||||
return utils.ErrNotImplemented
|
||||
},
|
||||
}
|
||||
if err = dm2.RemoveThresholdProfile("cgrates.org", "TEST_PROFILE1", true); err == nil || err != utils.ErrNotImplemented {
|
||||
t.Error(err)
|
||||
}
|
||||
config.SetCgrConfig(cfg)
|
||||
if err = dm.RemoveThresholdProfile("cgrates.org", "TEST_PROFILE1", true); err == nil || err.Error() != "Can't Replicate" {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
}
|
||||
func TestDmDispatcherHost(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
tmpDm := dm
|
||||
@@ -4043,6 +4100,55 @@ func TestCacheDataFromDB(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
func TestCacheDataFromDBErr(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.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.MetaThresholdProfiles: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)}
|
||||
cfg.CacheCfg().Partitions[utils.CacheThresholdProfiles].Replicate = true
|
||||
cfg.CacheCfg().ReplicationConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1GetThresholdProfile: func(args, reply interface{}) error {
|
||||
return errors.New("Another Error")
|
||||
},
|
||||
utils.CacheSv1ReplicateSet: func(args, reply interface{}) error {
|
||||
return fmt.Errorf("New Error")
|
||||
},
|
||||
},
|
||||
}
|
||||
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)
|
||||
Cache = NewCacheS(cfg, dm, nil)
|
||||
SetConnManager(connMgr)
|
||||
thdPrf := &ThresholdProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "TH1",
|
||||
FilterIDs: []string{"*string:~*req.Account:1001", "*notstring:~*req.Destination:+49123"},
|
||||
}
|
||||
|
||||
if err := dm.CacheDataFromDB(utils.ThresholdProfilePrefix, []string{utils.ConcatenatedKey(thdPrf.Tenant, thdPrf.ID)}, false); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDMGetRouteProfile(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
@@ -4526,3 +4632,96 @@ func TestDmIndexes(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDmCheckFilters(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.MetaFilters: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1GetFilter: func(args, reply interface{}) error {
|
||||
fltr := &Filter{
|
||||
ID: "FLTR_1",
|
||||
Tenant: "cgrates.org",
|
||||
Rules: []*FilterRule{
|
||||
{
|
||||
Type: utils.MetaString,
|
||||
Element: "~*req.Account",
|
||||
Values: []string{"1001", "1002"},
|
||||
},
|
||||
},
|
||||
}
|
||||
*reply.(*Filter) = *fltr
|
||||
return nil
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator): clientConn,
|
||||
})
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), connMgr)
|
||||
config.SetCgrConfig(cfg)
|
||||
if err := dm.checkFilters("cgrates.org", []string{"FLTR_1"}); err == nil || err.Error() != "broken reference to filter: <FLTR_1>" {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveFilterIndexes(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.CacheThresholdFilterIndexes: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1GetIndexes: func(args, reply interface{}) error {
|
||||
return utils.ErrNotImplemented
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator): clientConn,
|
||||
})
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), connMgr)
|
||||
fp3 := &Filter{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "Filter3",
|
||||
Rules: []*FilterRule{
|
||||
{
|
||||
Element: "~*req.Destination",
|
||||
Type: utils.MetaString,
|
||||
Values: []string{"30", "50"},
|
||||
},
|
||||
}}
|
||||
if err := dm.SetFilter(fp3, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if err := removeFilterIndexesForFilter(dm, utils.CacheThresholdFilterIndexes, "cgrates.org", []string{"Filter3"}, utils.StringSet{
|
||||
"Filter3:THD1": {},
|
||||
}); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
config.SetCgrConfig(cfg)
|
||||
if err := removeFilterIndexesForFilter(dm, utils.CacheThresholdFilterIndexes, "cgrates.org", []string{"Filter3"}, utils.StringSet{
|
||||
"Filter3:THD1": {},
|
||||
}); err == nil || err != utils.ErrUnsupporteServiceMethod {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2061,3 +2061,142 @@ func TestTPRLoadAccountActions(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
func TestTpReaderRemoveFromDatabase(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
tpr, err := NewTpReader(db, db, "", "", nil, nil, false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
dest := &Destination{
|
||||
Id: "DST2",
|
||||
Prefixes: []string{"1001"},
|
||||
}
|
||||
tpr.destinations = map[string]*Destination{
|
||||
"GERMANY": dest,
|
||||
}
|
||||
if tpr.dm.SetDestination(dest, utils.NonTransactional); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
acc := &Account{
|
||||
ID: "cgrates.org:1001",
|
||||
}
|
||||
ap1 := &ActionPlan{
|
||||
Id: "TestActionPlansRemoveMember1",
|
||||
AccountIDs: utils.StringMap{"one": true},
|
||||
ActionTimings: []*ActionTiming{
|
||||
{
|
||||
Uuid: "uuid1",
|
||||
Timing: &RateInterval{
|
||||
Timing: &RITiming{
|
||||
Years: utils.Years{2012},
|
||||
Months: utils.Months{},
|
||||
MonthDays: utils.MonthDays{},
|
||||
WeekDays: utils.WeekDays{},
|
||||
StartTime: utils.MetaASAP,
|
||||
},
|
||||
},
|
||||
Weight: 10,
|
||||
ActionsID: "MINI",
|
||||
},
|
||||
},
|
||||
}
|
||||
if err := tpr.dm.SetAccount(acc); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := tpr.dm.SetActionPlan(ap1.Id, ap1, true, utils.NonTransactional); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err = tpr.dm.SetAccountActionPlans(acc.ID, []string{ap1.Id}, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
tpr.acntActionPlans = map[string][]string{
|
||||
acc.ID: {ap1.Id},
|
||||
}
|
||||
if err := tpr.RemoveFromDatabase(false, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := tpr.RemoveFromDatabase(false, true); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTpReaderRemoveFromDatabaseDspPrf(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
tpr, err := NewTpReader(db, db, "", "", nil, nil, false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
dspPrf := &DispatcherProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "Dsp1",
|
||||
FilterIDs: []string{"*string:~*req.Accont:1001"},
|
||||
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),
|
||||
},
|
||||
Strategy: utils.MetaRandom,
|
||||
Weight: 20,
|
||||
}
|
||||
if err := tpr.dm.SetDispatcherProfile(dspPrf, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
tpr.dispatcherProfiles = map[utils.TenantID]*utils.TPDispatcherProfile{
|
||||
{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "Dsp1",
|
||||
}: {
|
||||
Tenant: "cgrates.org",
|
||||
ID: "Dsp1",
|
||||
},
|
||||
}
|
||||
if err = tpr.RemoveFromDatabase(false, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err = tpr.RemoveFromDatabase(false, true); err == nil || err != utils.ErrDSPProfileNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTpReaderRemoveFromDatabaseDspHst(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
tpr, err := NewTpReader(db, db, "", "", nil, nil, false)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
dspHst := &DispatcherHost{
|
||||
Tenant: "cgrates.org",
|
||||
RemoteHost: &config.RemoteHost{
|
||||
ID: "Host2",
|
||||
Address: "127.0.0.1:2013",
|
||||
TLS: false,
|
||||
Transport: utils.MetaGOB,
|
||||
},
|
||||
}
|
||||
if err = tpr.dm.SetDispatcherHost(dspHst); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
tpr.dispatcherHosts = map[utils.TenantID]*utils.TPDispatcherHost{
|
||||
{}: {
|
||||
ID: "Host2",
|
||||
Tenant: "cgrates.org",
|
||||
},
|
||||
}
|
||||
if err = tpr.RemoveFromDatabase(false, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err = tpr.RemoveFromDatabase(false, true); err == nil || err != utils.ErrDSPHostNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user