Refactored tests in engine

This commit is contained in:
andronache
2021-01-19 16:59:13 +02:00
committed by Dan Christian Bogos
parent d6ca7aa0c7
commit fcbd0f19fe
13 changed files with 465 additions and 194 deletions

View File

@@ -23,13 +23,13 @@ import (
"time"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
)
var (
chargerSrv *ChargerService
dmCharger *DataManager
cPPs = ChargerProfiles{
func TestChargerSetChargerProfiles(t *testing.T) {
var dmCharger *DataManager
cPPs := ChargerProfiles{
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_1",
@@ -64,51 +64,9 @@ var (
Weight: 20,
},
}
chargerEvents = []*utils.CGREvent{
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "ChargerProfile1",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
"UsageInterval": "1s",
utils.Weight: "200.0",
},
Opts: map[string]interface{}{
utils.Subsys: utils.MetaChargers,
},
},
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "ChargerProfile2",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
},
},
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "DistinctMatch",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
},
},
}
)
func TestChargerPopulateChargerService(t *testing.T) {
defaultCfg := config.NewDefaultCGRConfig()
data := NewInternalDB(nil, nil, true)
dmCharger = NewDataManager(data, config.CgrConfig().CacheCfg(), nil)
chargerSrv, err = NewChargerService(dmCharger,
&FilterS{dm: dmCharger, cfg: defaultCfg}, defaultCfg, nil)
if err != nil {
t.Errorf("Error: %+v", err)
}
}
func TestChargerAddFilter(t *testing.T) {
fltrCP1 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_1",
@@ -165,9 +123,6 @@ func TestChargerAddFilter(t *testing.T) {
},
}
dmCharger.SetFilter(fltrCP4, true)
}
func TestChargerSetChargerProfiles(t *testing.T) {
for _, cp := range cPPs {
if err = dmCharger.SetChargerProfile(cp, true); err != nil {
t.Errorf("Error: %+v", err)
@@ -185,6 +140,156 @@ func TestChargerSetChargerProfiles(t *testing.T) {
}
func TestChargerMatchingChargerProfilesForEvent(t *testing.T) {
var chargerSrv *ChargerService
var dmCharger *DataManager
cPPs := ChargerProfiles{
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_1",
FilterIDs: []string{"FLTR_CP_1", "FLTR_CP_4", "*string:~*opts.*subsys:*chargers"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
RunID: "TestRunID",
AttributeIDs: []string{"*none"},
Weight: 20,
},
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_2",
FilterIDs: []string{"FLTR_CP_2"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
RunID: "*rated",
AttributeIDs: []string{"ATTR_1"},
Weight: 20,
},
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_3",
FilterIDs: []string{"FLTR_CP_3"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
RunID: "*rated",
AttributeIDs: []string{"ATTR_1"},
Weight: 20,
},
}
chargerEvents := []*utils.CGREvent{
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "ChargerProfile1",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
"UsageInterval": "1s",
utils.Weight: "200.0",
},
Opts: map[string]interface{}{
utils.Subsys: utils.MetaChargers,
},
},
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "ChargerProfile2",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
},
},
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "DistinctMatch",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
},
},
}
defaultCfg := config.NewDefaultCGRConfig()
data := NewInternalDB(nil, nil, true)
dmCharger = NewDataManager(data, config.CgrConfig().CacheCfg(), nil)
chargerSrv, err = NewChargerService(dmCharger,
&FilterS{dm: dmCharger, cfg: defaultCfg}, defaultCfg, nil)
if err != nil {
t.Errorf("Error: %+v", err)
}
fltrCP1 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_1",
Rules: []*FilterRule{
{
Type: utils.MetaString,
Element: "~*req.Charger",
Values: []string{"ChargerProfile1"},
},
{
Type: utils.MetaGreaterOrEqual,
Element: "~*req.UsageInterval",
Values: []string{(time.Second).String()},
},
},
}
if err := fltrCP1.Compile(); err != nil {
t.Error(err)
}
dmCharger.SetFilter(fltrCP1, true)
fltrCP2 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_2",
Rules: []*FilterRule{
{
Type: utils.MetaString,
Element: "~*req.Charger",
Values: []string{"ChargerProfile2"},
},
},
}
dmCharger.SetFilter(fltrCP2, true)
fltrCPPrefix := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_3",
Rules: []*FilterRule{
{
Type: utils.MetaPrefix,
Element: "~*req.harger",
Values: []string{"Charger"},
},
},
}
dmCharger.SetFilter(fltrCPPrefix, true)
fltrCP4 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_4",
Rules: []*FilterRule{
{
Type: utils.MetaGreaterOrEqual,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.Weight,
Values: []string{"200.00"},
},
},
}
dmCharger.SetFilter(fltrCP4, true)
for _, cp := range cPPs {
if err = dmCharger.SetChargerProfile(cp, true); err != nil {
t.Errorf("Error: %+v", err)
}
}
//verify each charger from cache
for _, cp := range cPPs {
if tempCp, err := dmCharger.GetChargerProfile(cp.Tenant, cp.ID,
true, false, utils.NonTransactional); err != nil {
t.Errorf("Error: %+v", err)
} else if !reflect.DeepEqual(cp, tempCp) {
t.Errorf("Expecting: %+v, received: %+v", cp, tempCp)
}
}
if _, err = chargerSrv.matchingChargerProfilesForEvent(chargerEvents[2].Tenant, chargerEvents[2]); err == nil ||
err.Error() != utils.ErrNotFound.Error() {
t.Errorf("Error: %+v", err)
@@ -205,6 +310,172 @@ func TestChargerMatchingChargerProfilesForEvent(t *testing.T) {
}
func TestChargerProcessEvent(t *testing.T) {
var chargerSrv *ChargerService
var dmCharger *DataManager
cPPs := ChargerProfiles{
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_1",
FilterIDs: []string{"FLTR_CP_1", "FLTR_CP_4", "*string:~*opts.*subsys:*chargers"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
RunID: "TestRunID",
AttributeIDs: []string{"*none"},
Weight: 20,
},
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_2",
FilterIDs: []string{"FLTR_CP_2"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
RunID: "*rated",
AttributeIDs: []string{"ATTR_1"},
Weight: 20,
},
&ChargerProfile{
Tenant: "cgrates.org",
ID: "CPP_3",
FilterIDs: []string{"FLTR_CP_3"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
},
RunID: "*rated",
AttributeIDs: []string{"ATTR_1"},
Weight: 20,
},
}
chargerEvents := []*utils.CGREvent{
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "ChargerProfile1",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
"UsageInterval": "1s",
utils.Weight: "200.0",
},
Opts: map[string]interface{}{
utils.Subsys: utils.MetaChargers,
},
},
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "ChargerProfile2",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
},
},
{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: utils.GenUUID(),
Event: map[string]interface{}{
"Charger": "DistinctMatch",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC),
},
},
}
defaultCfg := config.NewDefaultCGRConfig()
data := NewInternalDB(nil, nil, true)
dmCharger = NewDataManager(data, config.CgrConfig().CacheCfg(), nil)
chargerSrv, err = NewChargerService(dmCharger,
&FilterS{dm: dmCharger, cfg: defaultCfg}, defaultCfg, nil)
if err != nil {
t.Errorf("Error: %+v", err)
}
fltrCP1 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_1",
Rules: []*FilterRule{
{
Type: utils.MetaString,
Element: "~*req.Charger",
Values: []string{"ChargerProfile1"},
},
{
Type: utils.MetaGreaterOrEqual,
Element: "~*req.UsageInterval",
Values: []string{(time.Second).String()},
},
},
}
if err := fltrCP1.Compile(); err != nil {
t.Error(err)
}
dmCharger.SetFilter(fltrCP1, true)
fltrCP2 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_2",
Rules: []*FilterRule{
{
Type: utils.MetaString,
Element: "~*req.Charger",
Values: []string{"ChargerProfile2"},
},
},
}
dmCharger.SetFilter(fltrCP2, true)
fltrCPPrefix := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_3",
Rules: []*FilterRule{
{
Type: utils.MetaPrefix,
Element: "~*req.harger",
Values: []string{"Charger"},
},
},
}
dmCharger.SetFilter(fltrCPPrefix, true)
fltrCP4 := &Filter{
Tenant: config.CgrConfig().GeneralCfg().DefaultTenant,
ID: "FLTR_CP_4",
Rules: []*FilterRule{
{
Type: utils.MetaGreaterOrEqual,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.Weight,
Values: []string{"200.00"},
},
},
}
dmCharger.SetFilter(fltrCP4, true)
for _, cp := range cPPs {
if err = dmCharger.SetChargerProfile(cp, true); err != nil {
t.Errorf("Error: %+v", err)
}
}
//verify each charger from cache
for _, cp := range cPPs {
if tempCp, err := dmCharger.GetChargerProfile(cp.Tenant, cp.ID,
true, false, utils.NonTransactional); err != nil {
t.Errorf("Error: %+v", err)
} else if !reflect.DeepEqual(cp, tempCp) {
t.Errorf("Expecting: %+v, received: %+v", cp, tempCp)
}
}
if _, err = chargerSrv.matchingChargerProfilesForEvent(chargerEvents[2].Tenant, chargerEvents[2]); err == nil ||
err.Error() != utils.ErrNotFound.Error() {
t.Errorf("Error: %+v", err)
}
if rcv, err := chargerSrv.matchingChargerProfilesForEvent(chargerEvents[0].Tenant, chargerEvents[0]); err != nil {
t.Errorf("Error: %+v", err)
} else if !reflect.DeepEqual(cPPs[0], rcv[0]) {
t.Errorf("Expecting: %+v, received: %+v ", cPPs[0], rcv[0])
}
if rcv, err := chargerSrv.matchingChargerProfilesForEvent(chargerEvents[1].Tenant, chargerEvents[1]); err != nil {
t.Errorf("Error: %+v", err)
} else if !reflect.DeepEqual(cPPs[1], rcv[0]) {
t.Errorf("Expecting: %+v, received: %+v", utils.ToJSON(cPPs[1]), utils.ToJSON(rcv))
}
rpl := []*ChrgSProcessEventReply{
{
ChargerSProfile: "CPP_1",

View File

@@ -3089,10 +3089,10 @@ func APItoRateProfile(tpRp *utils.TPRateProfile, timezone string) (rp *RateProfi
}
rp.Rates[key].IntervalRates[i].FixedFee = utils.NewDecimalFromFloat64(iRate.FixedFee)
rp.Rates[key].IntervalRates[i].RecurrentFee = utils.NewDecimalFromFloat64(iRate.RecurrentFee)
if rp.Rates[key].IntervalRates[i].Unit, err = utils.NewDecimalFromUnit(iRate.Unit); err != nil {
if rp.Rates[key].IntervalRates[i].Unit, err = utils.NewDecimalFromUsage(iRate.Unit); err != nil {
return nil, err
}
if rp.Rates[key].IntervalRates[i].Increment, err = utils.NewDecimalFromUnit(iRate.Increment); err != nil {
if rp.Rates[key].IntervalRates[i].Increment, err = utils.NewDecimalFromUsage(iRate.Increment); err != nil {
return nil, err
}
}

View File

@@ -4292,11 +4292,11 @@ func TestTPRoutesAsTPRouteProfile2(t *testing.T) {
}
func TestRateProfileToAPI(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -4424,11 +4424,11 @@ func TestRateProfileToAPI(t *testing.T) {
}
func TestAPIToRateProfile(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}

View File

@@ -31,11 +31,11 @@ import (
)
func TestRateProfileSort(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -474,11 +474,11 @@ func TestRateProfileRunTimesPassingActivationTIme(t *testing.T) {
}
func TestCostForIntervals(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -569,11 +569,11 @@ func TestCostForIntervals(t *testing.T) {
}
func TestCostForIntervalsWIthFixedFee(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -716,11 +716,11 @@ func TestRateProfileCostCorrectCostMaxCost(t *testing.T) {
}
func TestRateSIncrementCompressEquals(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -764,7 +764,7 @@ func TestRateSIncrementCompressEquals(t *testing.T) {
}
func TestRateSIncrementCompressEqualsCase1(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
@@ -816,7 +816,7 @@ func TestRateSIncrementCompressEqualsCase1(t *testing.T) {
}
}
func TestRateSIncrementCompressEqualsCase2(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
@@ -854,7 +854,7 @@ func TestRateSIncrementCompressEqualsCase2(t *testing.T) {
}
func TestRateSIncrementCompressEqualsCase3(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
@@ -892,11 +892,11 @@ func TestRateSIncrementCompressEqualsCase3(t *testing.T) {
}
func TestRateSIntervalCompressEqualsCase1(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -960,11 +960,11 @@ func TestRateSIntervalCompressEqualsCase1(t *testing.T) {
}
func TestRateSIntervalCompressEqualsCase2(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}
secDecimal, err := utils.NewDecimalFromUnit("1s")
secDecimal, err := utils.NewDecimalFromUsage("1s")
if err != nil {
t.Error(err)
}
@@ -1054,7 +1054,7 @@ func TestRateSIntervalCompressEqualsCase2(t *testing.T) {
}
func TestRateSIntervalCompressEqualsCase3(t *testing.T) {
minDecimal, err := utils.NewDecimalFromUnit("1m")
minDecimal, err := utils.NewDecimalFromUsage("1m")
if err != nil {
t.Error(err)
}