mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Adding *voice balance and derived charging inside fs_json tutorial, fixup loading of derived charging from csv
This commit is contained in:
@@ -169,7 +169,7 @@ func TestFsJsonLoadTariffPlans(t *testing.T) {
|
||||
}
|
||||
time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups
|
||||
var rcvStats *utils.CacheStats
|
||||
expectedStats := &utils.CacheStats{Destinations: 3, RatingPlans: 2, RatingProfiles: 2, Actions: 5, SharedGroups: 1, RatingAliases: 1, AccountAliases: 1}
|
||||
expectedStats := &utils.CacheStats{Destinations: 3, RatingPlans: 3, RatingProfiles: 3, Actions: 5, SharedGroups: 1, RatingAliases: 1, AccountAliases: 1, DerivedChargers: 1}
|
||||
var args utils.AttrCacheStats
|
||||
if err := rater.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil {
|
||||
t.Error("Got error on ApierV1.GetCacheStats: ", err.Error())
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#Tenant,Tor,Direction,Account,Subject,RunId,ReqTypeField,DirectionField,TenantField,TorField,AccountField,SubjectField,DestinationField,SetupTimeField,AnswerTimeField,DurationField
|
||||
cgrates.org,call,*out,dan,dan,extra1,^prepaid,,,,^rif,^rif,,,,^1s
|
||||
cgrates.org,call,*out,dan,dan,extra2,,,,,^ivo,^ivo,,,,
|
||||
cgrates.org,call,*out,dan,*any,extra1,,,,,^rif2,^rif2,,,,
|
||||
#Direction,Tenant,Tor,Account,Subject,RunId,ReqTypeField,DirectionField,TenantField,TorField,AccountField,SubjectField,DestinationField,SetupTimeField,AnswerTimeField,DurationField
|
||||
*out,cgrates.org,call,dan,dan,extra1,^prepaid,,,,^rif,^rif,,,,^1s
|
||||
*out,cgrates.org,call,dan,dan,extra2,,,,,^ivo,^ivo,,,,
|
||||
*out,cgrates.org,call,dan,*any,extra1,,,,,^rif2,^rif2,,,,
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#ActionsTag,Action,BalanceType,Direction,Units,ExpiryTime,DestinationTag,RatingSubject,BalanceWeight,SharedGroup,ExtraParameters,Weight
|
||||
TOPUP_RST_10,*topup_reset,*monetary,*out,10,*unlimited,*any,,10,,,10
|
||||
TOPUP_RST_5,*topup_reset,*monetary,*out,5,*unlimited,*any,,20,,,10
|
||||
TOPUP_RST_5,*topup_reset,*voice,*out,5,*unlimited,DST_1002,SPECIAL_1002,20,,,10
|
||||
TOPUP_RST_SHARED_5,*topup,*monetary,*out,5,*unlimited,*any,,10,SHARED_A,,10
|
||||
SHARED_A_0,*topup_reset,*monetary,*out,0,*unlimited,*any,,10,SHARED_A,,10
|
||||
LOG_WARNING,*log,,,,,,,,,,10
|
||||
|
||||
|
@@ -0,0 +1,2 @@
|
||||
#Direction,Tenant,Category,Account,Subject,RunId,ReqTypeField,DirectionField,TenantField,TorField,AccountField,SubjectField,DestinationField,SetupTimeField,AnswerTimeField,UsageField
|
||||
*out,cgrates.org,call,1001,1001,fs_json_run,^rated,*default,*default,*default,1010,1010,*default,*default,*default,*default
|
||||
|
@@ -5,3 +5,4 @@ DR_1003_20CNT,DST_1003,RT_40CNT,*up,4
|
||||
DR_1003_10CNT,DST_1003,RT_10CNT,*up,4
|
||||
DR_FS_40CNT,DST_FS,RT_40CNT,*up,4
|
||||
DR_FS_10CNT,DST_FS,RT_10CNT,*up,4
|
||||
DR_SPECIAL_1002,DST_1002,RT_1CNT,*up,4
|
||||
|
||||
|
@@ -5,3 +5,4 @@ RT_20CNT,0.4,0.2,60s,60s,0s
|
||||
RT_20CNT,0,0.1,60s,1s,60s
|
||||
RT_40CNT,0.8,0.4,60s,30s,0s
|
||||
RT_40CNT,0,0.2,60s,10s,60s
|
||||
RT_1CNT,0,0.01,60s,60s,0s
|
||||
|
||||
|
@@ -15,3 +15,4 @@ RP_RETAIL2,DR_1003_10CNT,OFFPEAK_WEEKEND,10
|
||||
RP_RETAIL2,DR_FS_10CNT,OFFPEAK_MORNING,10
|
||||
RP_RETAIL2,DR_FS_10CNT,OFFPEAK_EVENING,10
|
||||
RP_RETAIL2,DR_FS_10CNT,OFFPEAK_WEEKEND,10
|
||||
RP_SPECIAL_1002,DR_SPECIAL_1002,ALWAYS,10
|
||||
|
||||
|
@@ -1,3 +1,4 @@
|
||||
#Direction,Tenant,Category,Subject,ActivationTime,RatingPlanId,RatesFallbackSubject
|
||||
*out,cgrates.org,call,*any,2014-01-14T00:00:00Z,RP_RETAIL1,
|
||||
*out,cgrates.org,call,1001;1006,2014-01-14T00:00:00Z,RP_RETAIL2,
|
||||
*out,cgrates.org,call,SPECIAL_1002,2014-01-14T00:00:00Z,RP_SPECIAL_1002,
|
||||
|
||||
|
@@ -208,8 +208,8 @@ var FileValidators = map[string]*FileLineRegexValidator{
|
||||
regexp.MustCompile(`(?:\w+\s*),(?:(\w+;?)+\s*),(?:\*out\s*),(?:\w+\s*),(?:\w+\s*)$`),
|
||||
"Tenant([0-9A-Za-z_]),Account([0-9A-Za-z_.]),Direction(*out),ActionTimingsTag([0-9A-Za-z_]),ActionTriggersTag([0-9A-Za-z_])"},
|
||||
utils.DERIVED_CHARGERS_CSV: &FileLineRegexValidator{utils.DERIVED_CHARGERS_NRCOLS,
|
||||
regexp.MustCompile(`(?:\w+\s*),(?:\w+\s*),(?:\*out),(?:\w+\s*),(?:\*any\s*|\w+\s*),(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?`),
|
||||
"Tenant[0-9A-Za-z_],Tor([0-9A-Za-z_]),Direction(*out),Account[0-9A-Za-z_],Subject([0-9A-Za-z_]|*any),RunId([^0-9A-Za-z_]|*default),ReqTypeField([^0-9A-Za-z_]|*default),DirectionField([^0-9A-Za-z_]|*default),TenantField([^0-9A-Za-z_]|*default),TorField([^0-9A-Za-z_]|*default),AccountField([^0-9A-Za-z_]|*default),SubjectField([^0-9A-Za-z_]|*default),DestinationField([^0-9A-Za-z_]|*default),SetupTimeField([^0-9A-Za-z_]|*default),AnswerTimeField([^0-9A-Za-z_]|*default),DurationField([^0-9A-Za-z_]|*default)"},
|
||||
regexp.MustCompile(`^(?:\*out),(?:[0-9A-Za-z_\.]+\s*),(?:\w+\s*),(?:\w+\s*),(?:\*any\s*|\w+\s*),(?:\w+\s*),(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?,(?:\*default\s*|\^*\w+\s*)?$`),
|
||||
"Direction(*out),Tenant[0-9A-Za-z_],Category([0-9A-Za-z_]),Account[0-9A-Za-z_],Subject([0-9A-Za-z_]|*any),RunId([^0-9A-Za-z_]),ReqTypeField([^0-9A-Za-z_]|*default),DirectionField([^0-9A-Za-z_]|*default),TenantField([^0-9A-Za-z_]|*default),TorField([^0-9A-Za-z_]|*default),AccountField([^0-9A-Za-z_]|*default),SubjectField([^0-9A-Za-z_]|*default),DestinationField([^0-9A-Za-z_]|*default),SetupTimeField([^0-9A-Za-z_]|*default),AnswerTimeField([^0-9A-Za-z_]|*default),DurationField([^0-9A-Za-z_]|*default)"},
|
||||
}
|
||||
|
||||
func NewTPCSVFileParser(dirPath, fileName string) (*TPCSVFileParser, error) {
|
||||
|
||||
@@ -92,18 +92,18 @@ cgrates.org,1001,*out,PREPAID_10,STANDARD_TRIGGERS
|
||||
DUMMY,INVALID;DATA
|
||||
cgrates.org,1002;1006,*out,PACKAGE_10,STANDARD_TRIGGERS
|
||||
`
|
||||
var derivedChargesSample = `#Tenant,Tor,Direction,Account,Subject,RunId,ReqTypeField,DirectionField,TenantField,TorField,AccountField,SubjectField,DestinationField,SetupTimeField,AnswerTimeField,DurationField
|
||||
cgrates.org,call,*out,dan,dan,extra1,^prepaid,,,,rif,rif,,,,
|
||||
cgrates.org,,*out,dan,dan,extra1,^prepaid,,,,rif,rif,,,,
|
||||
cgrates.org,call,*in,dan,dan,extra1,^prepaid,,,,rif,rif,,,,
|
||||
var derivedChargesSample = `#Direction,Tenant,Tor,Account,Subject,RunId,ReqTypeField,DirectionField,TenantField,TorField,AccountField,SubjectField,DestinationField,SetupTimeField,AnswerTimeField,DurationField
|
||||
*out,cgrates.org,call,dan,dan,extra1,^prepaid,,,,rif,rif,,,,
|
||||
*out,cgrates.org,,dan,dan,extra1,^prepaid,,,,rif,rif,,,,
|
||||
*in,cgrates.org,call,dan,dan,extra1,^prepaid,,,,rif,rif,,,,
|
||||
DUMMY_DATA
|
||||
cgrates.org,call,*out,dan,dan,extra2,,,,,ivo,ivo,,,,
|
||||
cgrates.org,call,*out,dan,*any,extra1,,,,,rif2,rif2,,,,
|
||||
cgrates.org,call,*out,dan,*any,*any,,,,,rif2,rif2,,,,
|
||||
cgrates.org,call,*out,dan,*any,*default,*default,*default,*default,*default,rif2,rif2,*default,*default,*default,*default
|
||||
cgrates.org,call,*out,dan,*any,^test,^test,^test,^test,^test,^test,^test,^test,^test,^test,^test
|
||||
cgrates.org,call,*out,dan,*any,,,,,,,,,,,
|
||||
cgrates.org,call,*out,dan,*default,,,,,,,,,,,
|
||||
*out,cgrates.org,call,dan,dan,extra2,,,,,ivo,ivo,,,,
|
||||
*out,cgrates.org,call,dan,*any,extra1,,,,,rif2,rif2,,,,
|
||||
*out,cgrates.org,call,dan,*any,*any,,,,,rif2,rif2,,,,
|
||||
*out,cgrates.org,call,dan,*any,*default,*default,*default,*default,*default,rif2,rif2,*default,*default,*default,*default
|
||||
*out,cgrates.org,call,dan,*any,test,^test,^test,^test,^test,^test,^test,^test,^test,^test,^test
|
||||
*out,cgrates.org,call,dan,*any,run1,,,,,,,,,,
|
||||
*out,cgrates.org,call,dan,*default,,,,,,,,,,,
|
||||
`
|
||||
|
||||
func TestTimingsValidator(t *testing.T) {
|
||||
@@ -382,11 +382,11 @@ func TestDerivedChargersValidator(t *testing.T) {
|
||||
}
|
||||
valid := lnValidator.Rule.Match(ln)
|
||||
switch lineNr {
|
||||
case 1, 3, 4, 5, 8, 12:
|
||||
case 1, 3, 4, 5, 8, 9, 12:
|
||||
if valid {
|
||||
t.Error("Validation passed for invalid line", string(ln))
|
||||
}
|
||||
case 2, 6, 7, 9, 10, 11:
|
||||
case 2, 6, 7, 10, 11:
|
||||
if !valid {
|
||||
t.Error("Validation did not pass for valid line", string(ln))
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ func TestPostCdrs(t *testing.T) {
|
||||
return
|
||||
}
|
||||
cdrForm1 := url.Values{utils.TOR: []string{utils.VOICE}, utils.ACCID: []string{"dsafdsaf"}, utils.CDRHOST: []string{"192.168.1.1"}, utils.REQTYPE: []string{"rated"}, utils.DIRECTION: []string{"*out"},
|
||||
utils.TENANT: []string{"cgrates.org"}, utils.CATEGORY: []string{"call"}, utils.ACCOUNT: []string{"1001"}, utils.SUBJECT: []string{"1001"},
|
||||
utils.TENANT: []string{"cgrates.org"}, utils.CATEGORY: []string{"call"}, utils.ACCOUNT: []string{"2001"}, utils.SUBJECT: []string{"2001"},
|
||||
utils.DESTINATION: []string{"+4986517174963"},
|
||||
utils.ANSWER_TIME: []string{"2013-11-07T08:42:26Z"}, utils.USAGE: []string{"10"}, "field_extr1": []string{"val_extr1"}, "fieldextr2": []string{"valextr2"}}
|
||||
cdrForm2 := url.Values{utils.TOR: []string{utils.VOICE}, utils.ACCID: []string{"adsafdsaf"}, utils.CDRHOST: []string{"192.168.1.1"}, utils.REQTYPE: []string{"rated"}, utils.DIRECTION: []string{"*out"},
|
||||
@@ -227,7 +227,7 @@ func TestRateCdrs(t *testing.T) {
|
||||
}
|
||||
if errRatedCdrs, err := cdrStor.GetStoredCdrs(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, 0, time.Time{}, time.Time{}, false, true, false); err != nil {
|
||||
t.Error(err)
|
||||
} else if len(errRatedCdrs) != 6 { // The first 2 with errors should be still there before rerating
|
||||
} else if len(errRatedCdrs) != 8 { // The first 2 with errors should be still there before rerating
|
||||
t.Error(fmt.Sprintf("Unexpected number of CDRs with errors: %d", len(errRatedCdrs)))
|
||||
}
|
||||
if err := cgrRpc.Call("MediatorV1.RateCdrs", utils.AttrRateCdrs{RerateErrors: true}, &reply); err != nil {
|
||||
@@ -237,7 +237,7 @@ func TestRateCdrs(t *testing.T) {
|
||||
}
|
||||
if errRatedCdrs, err := cdrStor.GetStoredCdrs(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, 0, time.Time{}, time.Time{}, false, true, false); err != nil {
|
||||
t.Error(err)
|
||||
} else if len(errRatedCdrs) != 2 {
|
||||
} else if len(errRatedCdrs) != 4 {
|
||||
t.Error(fmt.Sprintf("Unexpected number of CDRs with errors: %d", len(errRatedCdrs)))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user