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
ceae4ab3e8
commit
15f2a9ff75
@@ -18,14 +18,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
package engine
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"log"
|
||||
"os"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/config"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
"github.com/cgrates/rpcclient"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -2897,26 +2903,32 @@ func TestAccountSummary(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAccountGetCreditForPrefix(t *testing.T) {
|
||||
tmp := Cache
|
||||
defer func() {
|
||||
Cache = tmp
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
acc := &Account{
|
||||
ID: "cgrates.org:account1",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]Balances{
|
||||
utils.MetaSMS: {&Balance{ID: "sms1", Value: 14,
|
||||
SharedGroups: utils.StringMap{
|
||||
"group": true,
|
||||
}}},
|
||||
utils.MetaMMS: {&Balance{ID: "mms1", Value: 140, SharedGroups: utils.StringMap{
|
||||
"group": true,
|
||||
}}},
|
||||
utils.MetaData: {&Balance{ID: "data1", Value: 1204, SharedGroups: utils.StringMap{
|
||||
"group": true,
|
||||
}}},
|
||||
utils.MetaVoice: {
|
||||
&Balance{ID: "voice1", Weight: 20, DestinationIDs: utils.StringMap{"NAT": true}, Value: 3600},
|
||||
&Balance{ID: "voice2", Weight: 10, DestinationIDs: utils.StringMap{"RET": true}, Value: 1200},
|
||||
utils.MetaMonetary: {
|
||||
&Balance{
|
||||
ID: "voice1",
|
||||
Weight: 20,
|
||||
DestinationIDs: utils.StringMap{utils.MetaAny: false},
|
||||
precision: 0,
|
||||
SharedGroups: utils.NewStringMap("SG_TEST"),
|
||||
Value: 3600},
|
||||
},
|
||||
},
|
||||
}
|
||||
Cache.Set(utils.CacheSharedGroups, "SG_TEST", &SharedGroup{
|
||||
Id: "SG_TEST", MemberIds: utils.NewStringMap("cgrates.org:account1"),
|
||||
AccountParameters: map[string]*SharingParameters{
|
||||
"*any": {Strategy: STRATEGY_MINE_RANDOM},
|
||||
},
|
||||
}, []string{}, true, utils.NonTransactional)
|
||||
cd := &CallDescriptor{
|
||||
Category: "0",
|
||||
Tenant: "vdf",
|
||||
@@ -2925,11 +2937,9 @@ func TestAccountGetCreditForPrefix(t *testing.T) {
|
||||
LoopIndex: 0,
|
||||
DurationIndex: 10 * time.Second,
|
||||
Destination: "0723",
|
||||
ToR: utils.MetaVoice,
|
||||
ToR: utils.MetaMonetary,
|
||||
}
|
||||
|
||||
if _, _, balances := acc.getCreditForPrefix(cd); len(balances) == 0 {
|
||||
|
||||
t.Errorf("received %+v", utils.ToJSON(balances))
|
||||
}
|
||||
}
|
||||
@@ -2998,8 +3008,151 @@ func TestAcountSetBalanceAction(t *testing.T) {
|
||||
} else if !reflect.DeepEqual(val.MemberIds, exp) {
|
||||
t.Errorf("expected %v,received %v", utils.ToJSON(exp), utils.ToJSON(val.MemberIds))
|
||||
}
|
||||
|
||||
if err = acc.setBalanceAction(nil, fltrs); err == nil || err.Error() != "nil action" {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitCreditBalance(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), nil)
|
||||
fltrs := NewFilterS(cfg, nil, dm)
|
||||
tmpConn := connMgr
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
buf := new(bytes.Buffer)
|
||||
log.SetOutput(buf)
|
||||
defer func() {
|
||||
utils.Logger.SetLogLevel(0)
|
||||
log.SetOutput(os.Stderr)
|
||||
connMgr = tmpConn
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
}()
|
||||
cfg.RalsCfg().ThresholdSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ThresholdSv1ProcessEvent: func(args, reply interface{}) error {
|
||||
rpl := &[]string{"id"}
|
||||
*reply.(*[]string) = *rpl
|
||||
return errors.New("Can't process Event")
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): clientConn,
|
||||
})
|
||||
cd := &CallDescriptor{
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
TimeStart: time.Date(2015, 9, 24, 10, 48, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2015, 9, 24, 10, 58, 1, 0, time.UTC),
|
||||
Destination: "4444",
|
||||
Subject: "dy",
|
||||
Account: "dy",
|
||||
ToR: utils.MetaVoice,
|
||||
DurationIndex: 600,
|
||||
}
|
||||
acc := &Account{
|
||||
ID: "vdf:broker",
|
||||
BalanceMap: map[string]Balances{
|
||||
utils.MetaVoice: {
|
||||
&Balance{Value: 20 * float64(time.Second),
|
||||
DestinationIDs: utils.NewStringMap("NAT"),
|
||||
Weight: 10, RatingSubject: "rif"},
|
||||
&Balance{Value: 100 * float64(time.Second),
|
||||
DestinationIDs: utils.NewStringMap("RET"), Weight: 20},
|
||||
}},
|
||||
}
|
||||
config.SetCgrConfig(cfg)
|
||||
SetConnManager(connMgr)
|
||||
expLog := `processing balance event`
|
||||
if _, err := acc.debitCreditBalance(cd, true, true, true, fltrs); err != nil {
|
||||
t.Error(err)
|
||||
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
|
||||
t.Errorf("Logger %v,doesn't contain %v", utils.ToJSON(rcvLog), utils.ToJSON(expLog))
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccGetAllBalancesForPrefixLogg(t *testing.T) {
|
||||
tmp := Cache
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
buf := new(bytes.Buffer)
|
||||
log.SetOutput(buf)
|
||||
defer func() {
|
||||
utils.Logger.SetLogLevel(0)
|
||||
log.SetOutput(os.Stderr)
|
||||
Cache = tmp
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
acc := &Account{
|
||||
ID: "cgrates.org:account1",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]Balances{
|
||||
utils.MetaMonetary: {
|
||||
&Balance{
|
||||
ID: "voice1",
|
||||
Weight: 20,
|
||||
DestinationIDs: utils.StringMap{utils.MetaAny: false},
|
||||
precision: 0,
|
||||
SharedGroups: utils.NewStringMap("SG_TEST"),
|
||||
Value: 3600},
|
||||
},
|
||||
},
|
||||
}
|
||||
Cache.Set(utils.CacheSharedGroups, "SG_TEST", nil, []string{}, true, utils.NonTransactional)
|
||||
acc.getAlldBalancesForPrefix("0723", "0", utils.MetaMonetary, time.Date(2013, 10, 4, 15, 46, 0, 0, time.UTC))
|
||||
expLog := "Could not get shared group:"
|
||||
if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
|
||||
t.Errorf("Logger %v doesn't containe %v ", rcvLog, expLog)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetUniqueSharedGroupMemebersErr(t *testing.T) {
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
buf := new(bytes.Buffer)
|
||||
log.SetOutput(buf)
|
||||
tmp := Cache
|
||||
defer func() {
|
||||
utils.Logger.SetLogLevel(0)
|
||||
log.SetOutput(os.Stderr)
|
||||
Cache = tmp
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
acc := &Account{
|
||||
ID: "cgrates.org:account1",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]Balances{
|
||||
utils.MetaMonetary: {
|
||||
&Balance{
|
||||
ID: "voice1",
|
||||
Weight: 20,
|
||||
DestinationIDs: utils.StringMap{utils.MetaAny: false},
|
||||
precision: 0,
|
||||
SharedGroups: utils.NewStringMap("SG_TEST"),
|
||||
Value: 3600},
|
||||
},
|
||||
},
|
||||
}
|
||||
Cache.Set(utils.CacheSharedGroups, "SG_TEST", nil, []string{}, true, utils.NonTransactional)
|
||||
cd := &CallDescriptor{
|
||||
Category: "0",
|
||||
Tenant: "vdf",
|
||||
TimeStart: time.Date(2013, 10, 4, 15, 46, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 4, 15, 46, 10, 0, time.UTC),
|
||||
LoopIndex: 0,
|
||||
DurationIndex: 10 * time.Second,
|
||||
Destination: "0723",
|
||||
ToR: utils.MetaMonetary,
|
||||
}
|
||||
expLog := `Could not get shared group: `
|
||||
if _, err := acc.GetUniqueSharedGroupMembers(cd); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
|
||||
t.Errorf("Logger %v doesn't contain %v", rcvLog, expLog)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3057,9 +3057,15 @@ func TestActionSetDDestinations(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestActionPublishAccount(t *testing.T) {
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
buf := new(bytes.Buffer)
|
||||
log.SetOutput(buf)
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
tmpCfg := cfg
|
||||
defer func() {
|
||||
utils.Logger.SetLogLevel(0)
|
||||
log.SetOutput(os.Stderr)
|
||||
config.SetCgrConfig(tmpCfg)
|
||||
SetConnManager(nil)
|
||||
}()
|
||||
@@ -3070,11 +3076,11 @@ func TestActionPublishAccount(t *testing.T) {
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ThresholdSv1ProcessEvent: func(args, reply interface{}) error {
|
||||
*reply.(*[]string) = []string{"*thr"}
|
||||
return nil
|
||||
return errors.New("Can't publish!")
|
||||
},
|
||||
utils.StatSv1ProcessEvent: func(args, reply interface{}) error {
|
||||
*reply.(*[]string) = []string{"*stat"}
|
||||
return nil
|
||||
return errors.New("Can't publish!")
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -3101,7 +3107,6 @@ func TestActionPublishAccount(t *testing.T) {
|
||||
},
|
||||
BalanceMap: map[string]Balances{
|
||||
utils.MetaMonetary: {
|
||||
|
||||
&Balance{Value: 10,
|
||||
DestinationIDs: utils.StringMap{
|
||||
|
||||
@@ -3145,8 +3150,14 @@ func TestActionPublishAccount(t *testing.T) {
|
||||
balanceValue: 10,
|
||||
},
|
||||
}
|
||||
expLog := ` with ThresholdS`
|
||||
expLog2 := `with StatS.`
|
||||
if err := publishAccount(ub, a, acs, nil, nil); err != nil {
|
||||
t.Errorf("received %v", err)
|
||||
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
|
||||
t.Errorf("Logger %v doesn't contain %v", rcvLog, expLog)
|
||||
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog2) {
|
||||
t.Errorf("Logger %v doesn't contain %v", rcvLog, expLog2)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3446,7 +3457,7 @@ func TestResetAccountCDRSuccesful(t *testing.T) {
|
||||
func TestRemoveSessionCost(t *testing.T) {
|
||||
tmp := Cache
|
||||
tmpCdr := cdrStorage
|
||||
tmpDm := dm
|
||||
|
||||
utils.Logger.SetLogLevel(4)
|
||||
utils.Logger.SetSyslog(nil)
|
||||
buf := new(bytes.Buffer)
|
||||
@@ -3456,26 +3467,15 @@ func TestRemoveSessionCost(t *testing.T) {
|
||||
log.SetOutput(os.Stderr)
|
||||
Cache = tmp
|
||||
cdrStorage = tmpCdr
|
||||
dm = tmpDm
|
||||
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.CacheFilters: {
|
||||
Limit: 3,
|
||||
Replicate: true,
|
||||
},
|
||||
utils.CacheSessionCostsTBL: {
|
||||
Limit: 2,
|
||||
},
|
||||
}
|
||||
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), nil)
|
||||
SetDataStorage(dm)
|
||||
|
||||
action := &Action{
|
||||
ExtraParameters: "*acnt.BalanceID;*act.ActionID",
|
||||
}
|
||||
db.db.Set(utils.CacheFilters, utils.ConcatenatedKey(cfg.GeneralCfg().DefaultTenant, "*acnt.BalanceID"), &Filter{
|
||||
Cache.Set(utils.CacheFilters, utils.ConcatenatedKey(cfg.GeneralCfg().DefaultTenant, "*acnt.BalanceID"), &Filter{
|
||||
Tenant: "tnt",
|
||||
Rules: []*FilterRule{
|
||||
{
|
||||
@@ -3484,17 +3484,7 @@ func TestRemoveSessionCost(t *testing.T) {
|
||||
Element: utils.MetaScPrefix + utils.CGRID},
|
||||
},
|
||||
}, []string{"grpId"}, true, utils.NonTransactional)
|
||||
db.db.Set(utils.CacheFilters, utils.ConcatenatedKey(cfg.GeneralCfg().DefaultTenant, "*act.ActionID"), &Filter{
|
||||
Tenant: "tnt",
|
||||
Rules: []*FilterRule{
|
||||
{
|
||||
Values: []string{"val1,vla2"},
|
||||
Type: utils.MetaString,
|
||||
Element: utils.MetaScPrefix + utils.CGRID,
|
||||
},
|
||||
},
|
||||
}, []string{"grpId"}, true, utils.NonTransactional)
|
||||
SetCdrStorage(db)
|
||||
|
||||
expLog := `for filter`
|
||||
if err := removeSessionCosts(nil, action, nil, nil, nil); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
@@ -3953,5 +3943,38 @@ func TestTransferMonetaryDefaultAction(t *testing.T) {
|
||||
if err := transferMonetaryDefaultAction(ub, a, acs, nil, "data"); err == nil || err != utils.ErrNotFound {
|
||||
t.Errorf("expected <%v>,received <%v>", utils.ErrNotFound, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveBalanceActionErr(t *testing.T) {
|
||||
acc := &Account{
|
||||
ID: "vdf:minu",
|
||||
BalanceMap: map[string]Balances{
|
||||
utils.MetaMonetary: {&Balance{Value: 50}},
|
||||
utils.MetaVoice: {
|
||||
&Balance{Value: 200 * float64(time.Second),
|
||||
ExpirationDate: time.Date(2022, 11, 22, 2, 0, 0, 0, time.UTC),
|
||||
DestinationIDs: utils.NewStringMap("NAT"), Weight: 10},
|
||||
&Balance{Value: 100 * float64(time.Second),
|
||||
DestinationIDs: utils.NewStringMap("RET"), Weight: 20},
|
||||
},
|
||||
},
|
||||
}
|
||||
acs := &Action{
|
||||
Balance: &BalanceFilter{},
|
||||
}
|
||||
if err := removeBalanceAction(nil, acs, nil, nil, nil); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := removeBalanceAction(acc, acs, nil, nil, nil); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
acs.Balance = &BalanceFilter{
|
||||
ExpirationDate: utils.TimePointer(time.Date(2022, 11, 12, 2, 0, 0, 0, time.UTC)),
|
||||
Type: utils.StringPointer(utils.MetaMonetary),
|
||||
Value: &utils.ValueFormula{Static: 10},
|
||||
}
|
||||
if err := removeBalanceAction(acc, acs, nil, nil, nil); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package engine
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -1021,3 +1022,26 @@ func TestV1LoadCache(t *testing.T) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestCacheSBeginTransaction(t *testing.T) {
|
||||
tmp := Cache
|
||||
defer func() {
|
||||
Cache = tmp
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
db := NewInternalDB(nil, nil, false, cfg.DataDbCfg().Items)
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), nil)
|
||||
|
||||
cacheS := NewCacheS(cfg, dm, nil)
|
||||
|
||||
expFormat := `........-....-....-....-............`
|
||||
rcv := cacheS.BeginTransaction()
|
||||
if matched, err := regexp.Match(expFormat, []byte(rcv)); err != nil {
|
||||
t.Error(err)
|
||||
} else if !matched {
|
||||
t.Errorf("Unexpected transaction format, Received <%v>", rcv)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1676,7 +1676,7 @@ func TestV2StoreSessionCost2(t *testing.T) {
|
||||
Charges: []*ChargingInterval{
|
||||
{
|
||||
|
||||
RatingID: "acc_id",
|
||||
RatingID: utils.MetaRounding,
|
||||
Increments: []*ChargingIncrement{
|
||||
{
|
||||
|
||||
@@ -1698,7 +1698,7 @@ func TestV2StoreSessionCost2(t *testing.T) {
|
||||
cost: utils.Float64Pointer(38),
|
||||
},
|
||||
{
|
||||
RatingID: "acc_id2",
|
||||
RatingID: utils.MetaRounding,
|
||||
|
||||
Increments: []*ChargingIncrement{
|
||||
{
|
||||
@@ -1730,10 +1730,10 @@ func TestV2StoreSessionCost2(t *testing.T) {
|
||||
|
||||
Accounting: Accounting{
|
||||
"acc_id": &BalanceCharge{
|
||||
RatingID: "acc_id",
|
||||
RatingID: utils.MetaRounding,
|
||||
},
|
||||
"acc_id2": &BalanceCharge{
|
||||
RatingID: "acc_id2",
|
||||
RatingID: utils.MetaRounding,
|
||||
},
|
||||
},
|
||||
RatingFilters: RatingFilters{
|
||||
@@ -1753,7 +1753,7 @@ func TestV2StoreSessionCost2(t *testing.T) {
|
||||
Rates: ChargedRates{},
|
||||
Timings: ChargedTimings{},
|
||||
Rating: Rating{
|
||||
"acc_id": &RatingUnit{
|
||||
utils.MetaRounding: &RatingUnit{
|
||||
ConnectFee: 21,
|
||||
RoundingMethod: "method",
|
||||
RoundingDecimals: 3,
|
||||
@@ -1762,16 +1762,6 @@ func TestV2StoreSessionCost2(t *testing.T) {
|
||||
RatesID: "rates",
|
||||
RatingFiltersID: "filtersid",
|
||||
},
|
||||
|
||||
"acc_id2": &RatingUnit{
|
||||
ConnectFee: 21,
|
||||
RoundingMethod: "method",
|
||||
RoundingDecimals: 3,
|
||||
MaxCost: 22,
|
||||
MaxCostStrategy: "sr",
|
||||
RatesID: "rates",
|
||||
RatingFiltersID: "ratefilter",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -2178,3 +2178,245 @@ func TestGetReverseDestinationRemote(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDMRemoveDestination(t *testing.T) {
|
||||
cfg := config.NewDefaultCGRConfig()
|
||||
tmpDm := dm
|
||||
tmp := Cache
|
||||
tmpConn := connMgr
|
||||
defer func() {
|
||||
config.SetCgrConfig(config.NewDefaultCGRConfig())
|
||||
Cache = tmp
|
||||
SetDataStorage(tmpDm)
|
||||
connMgr = tmpConn
|
||||
}()
|
||||
Cache.Clear(nil)
|
||||
cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
|
||||
cfg.DataDbCfg().RplFiltered = true
|
||||
cfg.CacheCfg().Partitions[utils.CacheDestinations].Replicate = true
|
||||
cfg.CacheCfg().ReplicationConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.CacheDestinations: {
|
||||
Limit: 3,
|
||||
Replicate: true,
|
||||
APIKey: "key",
|
||||
RouteID: "route",
|
||||
},
|
||||
utils.CacheReverseDestinations: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
dest := &Destination{
|
||||
Id: "nat", Prefixes: []string{"0257", "0256", "0723"},
|
||||
}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1RemoveDestination: func(args, reply interface{}) error {
|
||||
strApiOpts, cancast := args.(utils.StringWithAPIOpts)
|
||||
if !cancast {
|
||||
return utils.ErrNotConvertible
|
||||
}
|
||||
dm.DataDB().RemoveDestinationDrv(strApiOpts.Arg, utils.NonTransactional)
|
||||
return nil
|
||||
},
|
||||
utils.ReplicatorSv1GetReverseDestination: func(args, reply interface{}) error {
|
||||
strApiOpts, cancast := args.(utils.StringWithAPIOpts)
|
||||
if !cancast {
|
||||
return utils.ErrNotConvertible
|
||||
}
|
||||
dm.DataDB().GetReverseDestinationDrv(strApiOpts.Arg, utils.NonTransactional)
|
||||
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)
|
||||
dm.DataDB().SetDestinationDrv(dest, utils.NonTransactional)
|
||||
if err := dm.RemoveDestination(dest.Id, utils.NonTransactional); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := dm.RemoveDestination(dest.Id, utils.NonTransactional); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
Cache = NewCacheS(cfg, dm, nil)
|
||||
clientConn2 := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn2 <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.CacheSv1ReplicateRemove: func(args, reply interface{}) error {
|
||||
return errors.New("Can't replicate")
|
||||
},
|
||||
},
|
||||
}
|
||||
connMgr2 := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{
|
||||
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): clientConn2,
|
||||
})
|
||||
SetConnManager(connMgr2)
|
||||
if err := dm.RemoveDestination(dest.Id, utils.NonTransactional); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
var dm2 *DataManager
|
||||
if err := dm2.RemoveDestination(dest.Id, utils.NonTransactional); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDMRemoveFilter(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().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.CacheFilters: {
|
||||
Limit: 3,
|
||||
Replicate: true,
|
||||
APIKey: "key",
|
||||
RouteID: "route",
|
||||
Remote: false,
|
||||
},
|
||||
utils.CacheReverseFilterIndexes: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1RemoveFilter: func(args, reply interface{}) error {
|
||||
tntApiOpts, cancast := args.(utils.TenantIDWithAPIOpts)
|
||||
if !cancast {
|
||||
return utils.ErrNotConvertible
|
||||
}
|
||||
dm.dataDB.RemoveFilterDrv(tntApiOpts.TenantID.Tenant, tntApiOpts.TenantID.ID)
|
||||
return nil
|
||||
},
|
||||
utils.ReplicatorSv1GetIndexes: func(args, reply interface{}) error {
|
||||
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)
|
||||
fltr := &Filter{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "Filter1",
|
||||
Rules: []*FilterRule{
|
||||
{
|
||||
Element: "~*req.Account",
|
||||
Type: utils.MetaString,
|
||||
Values: []string{"1001", "1002"},
|
||||
},
|
||||
},
|
||||
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),
|
||||
},
|
||||
}
|
||||
dm.DataDB().SetFilterDrv(fltr)
|
||||
if err := dm.RemoveFilter(fltr.Tenant, fltr.ID, true); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := dm.RemoveFilter(fltr.Tenant, fltr.ID, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := dm.RemoveFilter(fltr.Tenant, fltr.ID, false); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
var dm2 *DataManager
|
||||
if err := dm2.RemoveFilter(fltr.Tenant, fltr.ID, false); err == nil || err != utils.ErrNoDatabaseConn {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveStatQueueProfile(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().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
|
||||
cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)}
|
||||
cfg.DataDbCfg().RplFiltered = true
|
||||
cfg.DataDbCfg().Items = map[string]*config.ItemOpt{
|
||||
utils.CacheStatQueueProfiles: {
|
||||
Limit: 3,
|
||||
Replicate: true,
|
||||
APIKey: "key",
|
||||
RouteID: "route",
|
||||
},
|
||||
utils.CacheStatQueues: {
|
||||
Limit: 3,
|
||||
Replicate: true,
|
||||
APIKey: "key",
|
||||
RouteID: "route",
|
||||
},
|
||||
utils.CacheReverseFilterIndexes: {
|
||||
Remote: true,
|
||||
},
|
||||
}
|
||||
sQ := &StatQueueProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "STATS_RES_TEST12",
|
||||
FilterIDs: []string{"FLTR_ST_Resource1", "*string:~*req.Account:1001"},
|
||||
Weight: 50,
|
||||
}
|
||||
clientConn := make(chan rpcclient.ClientConnector, 1)
|
||||
clientConn <- &ccMock{
|
||||
calls: map[string]func(args interface{}, reply interface{}) error{
|
||||
utils.ReplicatorSv1RemoveStatQueueProfile: func(args, reply interface{}) error {
|
||||
tntApiOpts, cancast := args.(utils.TenantIDWithAPIOpts)
|
||||
if !cancast {
|
||||
return utils.ErrNotConvertible
|
||||
}
|
||||
dm.DataDB().RemStatQueueProfileDrv(tntApiOpts.Tenant, tntApiOpts.ID)
|
||||
return nil
|
||||
},
|
||||
utils.ReplicatorSv1GetIndexes: 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.ReplicatorSv1): clientConn,
|
||||
})
|
||||
dm := NewDataManager(db, cfg.CacheCfg(), connMgr)
|
||||
config.SetCgrConfig(cfg)
|
||||
SetDataStorage(dm)
|
||||
dm.DataDB().SetStatQueueProfileDrv(sQ)
|
||||
if err = dm.RemoveStatQueueProfile(sQ.Tenant, sQ.ID, true); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
dm.DataDB().SetStatQueueProfileDrv(sQ)
|
||||
if err = dm.RemoveStatQueueProfile(sQ.Tenant, sQ.ID, false); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err = dm.RemoveStatQueueProfile(sQ.Tenant, sQ.ID, true); err == nil || err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
var dm2 *DataManager
|
||||
if err = dm2.RemoveStatQueueProfile(sQ.Tenant, sQ.ID, true); err == nil || err != utils.ErrNoDatabaseConn {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user