New folder (tutorial2) for call test

This commit is contained in:
TeoV
2018-03-27 10:01:35 -04:00
committed by Dan Christian Bogos
parent 4a7a00e967
commit aa0da215ae
29 changed files with 243 additions and 136 deletions

View File

@@ -1840,10 +1840,12 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder,
utils.REVERSE_ALIASES_PREFIX} {
loadedIDs, _ := loader.GetLoadedIds(prfx)
if err := self.DataManager.CacheDataFromDB(prfx, loadedIDs, true); err != nil {
utils.Logger.Debug(fmt.Sprintf("Error here : %+v", err))
return utils.NewErrServerError(err)
}
}
aps, _ := loader.GetLoadedIds(utils.ACTION_PLAN_PREFIX)
utils.Logger.Debug(fmt.Sprintf("ActionPlanPrefix : %+v", aps))
cstKeys, _ := loader.GetLoadedIds(utils.CDR_STATS_PREFIX)
userKeys, _ := loader.GetLoadedIds(utils.USERS_PREFIX)

View File

@@ -4,5 +4,3 @@ cgrates.org,1002,PACKAGE_10,STANDARD_TRIGGERS,,
cgrates.org,1003,PACKAGE_10,STANDARD_TRIGGERS,,
cgrates.org,1004,PACKAGE_10,STANDARD_TRIGGERS,,
cgrates.org,1007,USE_SHARED_A,STANDARD_TRIGGERS,,
cgrates.org,1011,PACKAGE_1001,STANDARD_TRIGGERS,,
cgrates.org,1012,PACKAGE_10,STANDARD_TRIGGERS,,
1 #Tenant Account ActionPlanId ActionTriggersId AllowNegative Disabled
4 cgrates.org 1003 PACKAGE_10 STANDARD_TRIGGERS
5 cgrates.org 1004 PACKAGE_10 STANDARD_TRIGGERS
6 cgrates.org 1007 USE_SHARED_A STANDARD_TRIGGERS
cgrates.org 1011 PACKAGE_1001 STANDARD_TRIGGERS
cgrates.org 1012 PACKAGE_10 STANDARD_TRIGGERS

View File

@@ -9,6 +9,3 @@ DR_SPECIAL_1002,DST_1002,RT_1CNT,*up,4,0,
DR_1007_MAXCOST_DISC,DST_1007,RT_1CNT_PER_SEC,*up,4,0.62,*disconnect
DR_1007_MAXCOST_FREE,DST_1007,RT_1CNT_PER_SEC,*up,4,0.62,*free
DR_GENERIC,*any,RT_GENERIC_1,*up,4,0,
DR_1005_MAXCOST_DISC,DST_1005,RT_1CNT_PER_SEC,*up,4,0.12,*disconnect
DR_1011_10CNT,DST_1011,RT_10CNT,*up,4,0,
DR_1012_20CNT,DST_1012,RT_20CNT,*up,4,0,
1 #Id DestinationId RatesTag RoundingMethod RoundingDecimals MaxCost MaxCostStrategy
9 DR_1007_MAXCOST_DISC DST_1007 RT_1CNT_PER_SEC *up 4 0.62 *disconnect
10 DR_1007_MAXCOST_FREE DST_1007 RT_1CNT_PER_SEC *up 4 0.62 *free
11 DR_GENERIC *any RT_GENERIC_1 *up 4 0
DR_1005_MAXCOST_DISC DST_1005 RT_1CNT_PER_SEC *up 4 0.12 *disconnect
DR_1011_10CNT DST_1011 RT_10CNT *up 4 0
DR_1012_20CNT DST_1012 RT_20CNT *up 4 0

View File

@@ -6,6 +6,3 @@ DST_FS,10
DST_DE_MOBILE,+49151
DST_DE_MOBILE,+49161
DST_DE_MOBILE,+49171
DST_1005,1005
DST_1011,1011
DST_1012,1012
1 #Id Prefix
6 DST_DE_MOBILE +49151
7 DST_DE_MOBILE +49161
8 DST_DE_MOBILE +49171
DST_1005 1005
DST_1011 1011
DST_1012 1012

View File

@@ -29,11 +29,4 @@ cgrates.org,FLTR_RES_GR3,*string,Account,3001,2014-07-29T15:00:00Z
cgrates.org,FLTR_CDRS,*cdr_stats,,CDRST1:*min_ASR:34;CDRST_1001:*min_ASR:20,2014-07-29T15:00:00Z
cgrates.org,FLTR_STS1,*string,Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_CDR_UPDATE,*string,EventType,CDR,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_1011_1012,*string,Account,1011;1012,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_1011_1012,*string,RunID,*default,
cgrates.org,FLTR_ACNT_1011,*string,Account,1011,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_1012,*string,Account,1012,2014-07-29T15:00:00Z
cgrates.org,FLTR_2,*string,Account,1011;1012,2014-07-29T15:00:00Z
cgrates.org,FLTR_2,*prefix,Destination,10;20,
cgrates.org,FLTR_2,*rsr,,Subject(~^1.*1$);Destination(1012),
1 #Tenant[0] ID[1] FilterType[2] FilterFieldName[3] FilterFieldValues[4] ActivationInterval[5]
29 cgrates.org FLTR_CDRS *cdr_stats CDRST1:*min_ASR:34;CDRST_1001:*min_ASR:20 2014-07-29T15:00:00Z
30 cgrates.org FLTR_STS1 *string Account 1001;1002 2014-07-29T15:00:00Z
31 cgrates.org FLTR_CDR_UPDATE *string EventType CDR 2014-07-29T15:00:00Z
cgrates.org FLTR_ACNT_1011_1012 *string Account 1011;1012 2014-07-29T15:00:00Z
cgrates.org FLTR_ACNT_1011_1012 *string RunID *default
cgrates.org FLTR_ACNT_1011 *string Account 1011 2014-07-29T15:00:00Z
cgrates.org FLTR_ACNT_1012 *string Account 1012 2014-07-29T15:00:00Z
cgrates.org FLTR_2 *string Account 1011;1012 2014-07-29T15:00:00Z
cgrates.org FLTR_2 *prefix Destination 10;20
cgrates.org FLTR_2 *rsr Subject(~^1.*1$);Destination(1012)
32

View File

@@ -4,7 +4,6 @@ RP_RETAIL1,DR_FS_10CNT,OFFPEAK_MORNING,10
RP_RETAIL1,DR_FS_10CNT,OFFPEAK_EVENING,10
RP_RETAIL1,DR_FS_10CNT,OFFPEAK_WEEKEND,10
RP_RETAIL1,DR_1007_MAXCOST_DISC,*any,10
RP_RETAIL1,DR_1005_MAXCOST_DISC,*any,10
RP_RETAIL2,DR_1002_20CNT,PEAK,10
RP_RETAIL2,DR_1003_20CNT,PEAK,10
RP_RETAIL2,DR_FS_40CNT,PEAK,10
@@ -18,9 +17,5 @@ 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_RETAIL2,DR_1007_MAXCOST_FREE,*any,10
RP_RETAIL2,DR_1005_MAXCOST_DISC,*any,10
RP_SPECIAL_1002,DR_SPECIAL_1002,*any,10
RP_GENERIC,DR_GENERIC,*any,10
RP_1011,DR_1012_20CNT,*any,10
RP_1011,DR_FS_10CNT,*any,10
RP_1012,DR_1011_10CNT,*any,10
RP_GENERIC,DR_GENERIC,*any,10
1 #Id DestinationRatesId TimingTag Weight
4 RP_RETAIL1 DR_FS_10CNT OFFPEAK_EVENING 10
5 RP_RETAIL1 DR_FS_10CNT OFFPEAK_WEEKEND 10
6 RP_RETAIL1 DR_1007_MAXCOST_DISC *any 10
RP_RETAIL1 DR_1005_MAXCOST_DISC *any 10
7 RP_RETAIL2 DR_1002_20CNT PEAK 10
8 RP_RETAIL2 DR_1003_20CNT PEAK 10
9 RP_RETAIL2 DR_FS_40CNT PEAK 10
17 RP_RETAIL2 DR_FS_10CNT OFFPEAK_EVENING 10
18 RP_RETAIL2 DR_FS_10CNT OFFPEAK_WEEKEND 10
19 RP_RETAIL2 DR_1007_MAXCOST_FREE *any 10
RP_RETAIL2 DR_1005_MAXCOST_DISC *any 10
20 RP_SPECIAL_1002 DR_SPECIAL_1002 *any 10
21 RP_GENERIC DR_GENERIC *any 10
RP_1011 DR_1012_20CNT *any 10
RP_1011 DR_FS_10CNT *any 10
RP_1012 DR_1011_10CNT *any 10

View File

@@ -8,6 +8,4 @@
*out,cgrates.org,lcr_profile1,suppl2,2014-01-14T00:00:00Z,RP_RETAIL2,,STATS_SUPPL2
*out,cgrates.org,lcr_profile2,suppl1,2014-01-14T00:00:00Z,RP_RETAIL2,,STATS_SUPPL1
*out,cgrates.org,lcr_profile2,suppl2,2014-01-14T00:00:00Z,RP_RETAIL1,,STATS_SUPPL2
*out,cgrates.org,lcr_profile2,suppl3,2014-01-14T00:00:00Z,RP_SPECIAL_1002,,
*out,cgrates.org,call,1011,2014-01-14T00:00:00Z,RP_1011,,
*out,cgrates.org,call,1012,2014-01-14T00:00:00Z,RP_1012,,
*out,cgrates.org,lcr_profile2,suppl3,2014-01-14T00:00:00Z,RP_SPECIAL_1002,,
1 #Direction Tenant Category Subject ActivationTime RatingPlanId RatesFallbackSubject CdrStatQueueIds
8 *out cgrates.org lcr_profile1 suppl2 2014-01-14T00:00:00Z RP_RETAIL2 STATS_SUPPL2
9 *out cgrates.org lcr_profile2 suppl1 2014-01-14T00:00:00Z RP_RETAIL2 STATS_SUPPL1
10 *out cgrates.org lcr_profile2 suppl2 2014-01-14T00:00:00Z RP_RETAIL1 STATS_SUPPL2
11 *out cgrates.org lcr_profile2 suppl3 2014-01-14T00:00:00Z RP_SPECIAL_1002
*out cgrates.org call 1011 2014-01-14T00:00:00Z RP_1011
*out cgrates.org call 1012 2014-01-14T00:00:00Z RP_1012

View File

@@ -2,4 +2,3 @@
cgrates.org,ResGroup1,FLTR_1,2014-07-29T15:00:00Z,1s,7,,false,false,20,
cgrates.org,ResGroup2,FLTR_DST_FS,2014-07-29T15:00:00Z,3600s,8,SPECIAL_1002,false,true,10,
cgrates.org,ResGroup3,FLTR_RES_GR3,2014-07-29T15:00:00Z,*unlimited,3,,true,false,20,
cgrates.org,ResGroup4,FLTR_2,2014-07-29T15:00:00Z,1s,7,,false,false,20,
1 #Tenant[0] Id[1] FilterIDs[2] ActivationInterval[3] TTL[4] Limit[5] AllocationMessage[6] Blocker[7] Stored[8] Weight[9] ThresholdIDs[10]
2 cgrates.org ResGroup1 FLTR_1 2014-07-29T15:00:00Z 1s 7 false false 20
3 cgrates.org ResGroup2 FLTR_DST_FS 2014-07-29T15:00:00Z 3600s 8 SPECIAL_1002 false true 10
4 cgrates.org ResGroup3 FLTR_RES_GR3 2014-07-29T15:00:00Z *unlimited 3 true false 20
cgrates.org ResGroup4 FLTR_2 2014-07-29T15:00:00Z 1s 7 false false 20

2
data/tariffplans/tutorial/SharedGroups.csv Normal file → Executable file
View File

@@ -1,2 +1,2 @@
#Id,Account,Strategy,RatingSubject
#Id,Account,Strategy,RatingSubject
SHARED_A,*any,*highest,
1 #Id Account Strategy RatingSubject
2 SHARED_A *any *highest

View File

@@ -1,4 +1,3 @@
#Tenant[0],Id[1],FilterIDs[2],ActivationInterval[3],QueueLength[4],TTL[5],Metrics[6],MetricParams[7],Blocker[8],Stored[9],Weight[10],MinItems[11],ThresholdIDs[12]
cgrates.org,Stats1,FLTR_STS1,2014-07-29T15:00:00Z,100,1s,*asr;*acc;*tcc;*acd;*tcd;*pdd,,true,true,20,2,THRESH1;THRESH2
cgrates.org,Stats1,FLTR_STS1,2014-07-29T15:00:00Z,100,1s,*sum;*average,Value,true,true,20,2,THRESH1;THRESH2
cgrates.org,Stats2,FLTR_ACNT_1011_1012,2014-07-29T15:00:00Z,100,1s,*tcc;*tcd,,false,true,30,0,
cgrates.org,Stats1,FLTR_STS1,2014-07-29T15:00:00Z,100,1s,*sum;*average,Value,true,true,20,2,THRESH1;THRESH2
1 #Tenant[0] Id[1] FilterIDs[2] ActivationInterval[3] QueueLength[4] TTL[5] Metrics[6] MetricParams[7] Blocker[8] Stored[9] Weight[10] MinItems[11] ThresholdIDs[12]
2 cgrates.org Stats1 FLTR_STS1 2014-07-29T15:00:00Z 100 1s *asr;*acc;*tcc;*acd;*tcd;*pdd true true 20 2 THRESH1;THRESH2
3 cgrates.org Stats1 FLTR_STS1 2014-07-29T15:00:00Z 100 1s *sum;*average Value true true 20 2 THRESH1;THRESH2
cgrates.org Stats2 FLTR_ACNT_1011_1012 2014-07-29T15:00:00Z 100 1s *tcc;*tcd false true 30 0

View File

@@ -6,6 +6,3 @@ cgrates.org,SPL_WEIGHT_1,FLTR_ACNT_1007,,,,supplier3,FLTR_ACNT_dan,,,,,15,,,
cgrates.org,SPL_LEASTCOST_1,FLTR_1,2017-11-27T00:00:00Z,*least_cost,,supplier1,,,RP_SPECIAL_1002,,,10,false,,10
cgrates.org,SPL_LEASTCOST_1,,,,,supplier2,,,RP_RETAIL1,,,20,,,
cgrates.org,SPL_LEASTCOST_1,,,,,supplier3,,,RP_SPECIAL_1002,,,15,,,
cgrates.org,SPL_LEASTCOST_2,FLTR_2,2017-11-27T00:00:00Z,*least_cost,,supplier1,,,RP_1012,,,10,false,,10
cgrates.org,SPL_LEASTCOST_2,,,,,supplier2,,,RP_1011,,,20,,,
cgrates.org,SPL_LEASTCOST_2,,,,,supplier3,,,RP_1012,,,15,,,
1 #Tenant ID FilterIDs ActivationInterval Sorting SortingParamameters SupplierID SupplierFilterIDs SupplierAccountIDs SupplierRatingPlanIDs SupplierResourceIDs SupplierStatIDs SupplierWeight SupplierBlocker SupplierParameters Weight
6 cgrates.org SPL_LEASTCOST_1 FLTR_1 2017-11-27T00:00:00Z *least_cost supplier1 RP_SPECIAL_1002 10 false 10
7 cgrates.org SPL_LEASTCOST_1 supplier2 RP_RETAIL1 20
8 cgrates.org SPL_LEASTCOST_1 supplier3 RP_SPECIAL_1002 15
cgrates.org SPL_LEASTCOST_2 FLTR_2 2017-11-27T00:00:00Z *least_cost supplier1 RP_1012 10 false 10
cgrates.org SPL_LEASTCOST_2 supplier2 RP_1011 20
cgrates.org SPL_LEASTCOST_2 supplier3 RP_1012 15

View File

@@ -6,6 +6,3 @@ cgrates.org,THD_STATS_2,FLTR_STATS_2,2014-07-29T15:00:00Z,true,1,1s,false,10,DIS
cgrates.org,THD_STATS_3,FLTR_STATS_3,2014-07-29T15:00:00Z,false,1,1s,false,10,TOPUP_100SMS_DE_MOBILE,false
cgrates.org,THD_RES_1,FLTR_RES_1,2014-07-29T15:00:00Z,true,1,1s,false,10,LOG_WARNING,false
cgrates.org,THD_CDRS_1,FLTR_ACNT_1007;FLTR_CDR_UPDATE,2014-07-29T15:00:00Z,false,1,1s,false,10,LOG_WARNING,false
cgrates.org,THD_ACNT_1011,FLTR_ACNT_1011,2014-07-29T15:00:00Z,false,1,1s,false,10,LOG_WARNING,false
cgrates.org,THD_ACNT_1012,FLTR_ACNT_1012,2014-07-29T15:00:00Z,true,1,1s,false,10,LOG_WARNING,false
1 #Tenant[0] Id[1] FilterIDs[2] ActivationInterval[3] Recurrent[4] MinHits[5] MinSleep[6] Blocker[7] Weight[8] ActionIDs[9] Async[10]
6 cgrates.org THD_STATS_3 FLTR_STATS_3 2014-07-29T15:00:00Z false 1 1s false 10 TOPUP_100SMS_DE_MOBILE false
7 cgrates.org THD_RES_1 FLTR_RES_1 2014-07-29T15:00:00Z true 1 1s false 10 LOG_WARNING false
8 cgrates.org THD_CDRS_1 FLTR_ACNT_1007;FLTR_CDR_UPDATE 2014-07-29T15:00:00Z false 1 1s false 10 LOG_WARNING false
cgrates.org THD_ACNT_1011 FLTR_ACNT_1011 2014-07-29T15:00:00Z false 1 1s false 10 LOG_WARNING false
cgrates.org THD_ACNT_1012 FLTR_ACNT_1012 2014-07-29T15:00:00Z true 1 1s false 10 LOG_WARNING false

View File

@@ -0,0 +1,3 @@
#Tenant,Account,ActionPlanId,ActionTriggersId,AllowNegative,Disabled
cgrates.org,1001,PACKAGE_10,,,
cgrates.org,1002,PACKAGE_10,,,
1 #Tenant Account ActionPlanId ActionTriggersId AllowNegative Disabled
2 cgrates.org 1001 PACKAGE_10
3 cgrates.org 1002 PACKAGE_10

View File

@@ -0,0 +1,2 @@
#Id,ActionsId,TimingId,Weight
PACKAGE_10,TOPUP_RST_10,*asap,10
1 #Id ActionsId TimingId Weight
2 PACKAGE_10 TOPUP_RST_10 *asap 10

View File

@@ -0,0 +1,3 @@
#ActionsId[0],Action[1],ExtraParameters[2],Filter[3],BalanceId[4],BalanceType[5],Directions[6],Categories[7],DestinationIds[8],RatingSubject[9],SharedGroup[10],ExpiryTime[11],TimingIds[12],Units[13],BalanceWeight[14],BalanceBlocker[15],BalanceDisabled[16],Weight[17]
TOPUP_RST_10,*topup_reset,,,,*monetary,*out,,*any,,,*unlimited,,10,10,false,false,10
LOG_WARNING,*log,,,,,,,,,,,,,,false,false,10
1 #ActionsId[0] Action[1] ExtraParameters[2] Filter[3] BalanceId[4] BalanceType[5] Directions[6] Categories[7] DestinationIds[8] RatingSubject[9] SharedGroup[10] ExpiryTime[11] TimingIds[12] Units[13] BalanceWeight[14] BalanceBlocker[15] BalanceDisabled[16] Weight[17]
2 TOPUP_RST_10 *topup_reset *monetary *out *any *unlimited 10 10 false false 10
3 LOG_WARNING *log false false 10

View File

@@ -0,0 +1,3 @@
#Tenant,ID,Contexts,FilterIDs,ActivationInterval,FieldName,Initial,Substitute,Append,Weight
cgrates.org,ATTR_1,*sessions;*cdrs,*string:Account:1007,2014-01-14T00:00:00Z,Account,*any,1001,false,10
cgrates.org,ATTR_1,,,,Subject,*any,1001,true,
1 #Tenant ID Contexts FilterIDs ActivationInterval FieldName Initial Substitute Append Weight
2 cgrates.org ATTR_1 *sessions;*cdrs *string:Account:1007 2014-01-14T00:00:00Z Account *any 1001 false 10
3 cgrates.org ATTR_1 Subject *any 1001 true

View File

@@ -0,0 +1,5 @@
#Id,DestinationId,RatesTag,RoundingMethod,RoundingDecimals,MaxCost,MaxCostStrategy
DR_1001_10CNT,DST_1001,RT_10CNT,*up,4,0,
DR_1002_20CNT,DST_1002,RT_20CNT,*up,4,0,
DR_1003_MAXCOST_DISC,DST_1003,RT_1CNT_PER_SEC,*up,4,0.12,*disconnect
1 #Id DestinationId RatesTag RoundingMethod RoundingDecimals MaxCost MaxCostStrategy
2 DR_1001_10CNT DST_1001 RT_10CNT *up 4 0
3 DR_1002_20CNT DST_1002 RT_20CNT *up 4 0
4 DR_1003_MAXCOST_DISC DST_1003 RT_1CNT_PER_SEC *up 4 0.12 *disconnect

View File

@@ -0,0 +1,5 @@
#Id,Prefix
DST_1002,1002
DST_1001,1001
DST_FS,10
DST_1003,1003
1 #Id Prefix
2 DST_1002 1002
3 DST_1001 1001
4 DST_FS 10
5 DST_1003 1003

View File

@@ -0,0 +1,11 @@
#Tenant[0],ID[1],FilterType[2],FilterFieldName[3],FilterFieldValues[4],ActivationInterval[5]
cgrates.org,FLTR_1,*string,Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_1,*prefix,Destination,10;20,
cgrates.org,FLTR_1,*rsr,,Subject(~^1.*1$);Destination(1002),
cgrates.org,FLTR_DST_FS,*destinations,Destination,DST_FS,2014-07-29T15:00:00Z
cgrates.org,FLTR_RES_GR3,*string,Account,1003,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_1001_1002,*string,Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_1001_1002,*string,RunID,*default,
cgrates.org,FLTR_ACNT_1001,*string,Account,1001,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_1002,*string,Account,1002,2014-07-29T15:00:00Z
1 #Tenant[0] ID[1] FilterType[2] FilterFieldName[3] FilterFieldValues[4] ActivationInterval[5]
2 cgrates.org FLTR_1 *string Account 1001;1002 2014-07-29T15:00:00Z
3 cgrates.org FLTR_1 *prefix Destination 10;20
4 cgrates.org FLTR_1 *rsr Subject(~^1.*1$);Destination(1002)
5 cgrates.org FLTR_DST_FS *destinations Destination DST_FS 2014-07-29T15:00:00Z
6 cgrates.org FLTR_RES_GR3 *string Account 1003 2014-07-29T15:00:00Z
7 cgrates.org FLTR_ACNT_1001_1002 *string Account 1001;1002 2014-07-29T15:00:00Z
8 cgrates.org FLTR_ACNT_1001_1002 *string RunID *default
9 cgrates.org FLTR_ACNT_1001 *string Account 1001 2014-07-29T15:00:00Z
10 cgrates.org FLTR_ACNT_1002 *string Account 1002 2014-07-29T15:00:00Z

View File

@@ -0,0 +1,9 @@
#Id,ConnectFee,Rate,RateUnit,RateIncrement,GroupIntervalStart
RT_10CNT,0.2,0.1,60s,60s,0s
RT_10CNT,0,0.05,60s,1s,60s
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
RT_1CNT_PER_SEC,0,0.01,1s,1s,0s
1 #Id ConnectFee Rate RateUnit RateIncrement GroupIntervalStart
2 RT_10CNT 0.2 0.1 60s 60s 0s
3 RT_10CNT 0 0.05 60s 1s 60s
4 RT_20CNT 0.4 0.2 60s 60s 0s
5 RT_20CNT 0 0.1 60s 1s 60s
6 RT_40CNT 0.8 0.4 60s 30s 0s
7 RT_40CNT 0 0.2 60s 10s 60s
8 RT_1CNT 0 0.01 60s 60s 0s
9 RT_1CNT_PER_SEC 0 0.01 1s 1s 0s

View File

@@ -0,0 +1,4 @@
#Id,DestinationRatesId,TimingTag,Weight
RP_1001,DR_1002_20CNT,ALWAYS,10
RP_1001,DR_1003_MAXCOST_DISC,ALWAYS,10
RP_1002,DR_1001_10CNT,ALWAYS,10
1 #Id DestinationRatesId TimingTag Weight
2 RP_1001 DR_1002_20CNT ALWAYS 10
3 RP_1001 DR_1003_MAXCOST_DISC ALWAYS 10
4 RP_1002 DR_1001_10CNT ALWAYS 10

View File

@@ -0,0 +1,3 @@
#Direction,Tenant,Category,Subject,ActivationTime,RatingPlanId,RatesFallbackSubject,CdrStatQueueIds
*out,cgrates.org,call,1001,2014-01-14T00:00:00Z,RP_1001,,
*out,cgrates.org,call,1002,2014-01-14T00:00:00Z,RP_1002,,
1 #Direction Tenant Category Subject ActivationTime RatingPlanId RatesFallbackSubject CdrStatQueueIds
2 *out cgrates.org call 1001 2014-01-14T00:00:00Z RP_1001
3 *out cgrates.org call 1002 2014-01-14T00:00:00Z RP_1002

View File

@@ -0,0 +1,3 @@
#Tenant[0],Id[1],FilterIDs[2],ActivationInterval[3],TTL[4],Limit[5],AllocationMessage[6],Blocker[7],Stored[8],Weight[9],ThresholdIDs[10]
cgrates.org,ResGroup1,FLTR_1,2014-07-29T15:00:00Z,1s,7,,false,false,20,
cgrates.org,ResGroup2,FLTR_DST_FS,2014-07-29T15:00:00Z,3600s,8,SPECIAL_1003,false,true,10,
1 #Tenant[0] Id[1] FilterIDs[2] ActivationInterval[3] TTL[4] Limit[5] AllocationMessage[6] Blocker[7] Stored[8] Weight[9] ThresholdIDs[10]
2 cgrates.org ResGroup1 FLTR_1 2014-07-29T15:00:00Z 1s 7 false false 20
3 cgrates.org ResGroup2 FLTR_DST_FS 2014-07-29T15:00:00Z 3600s 8 SPECIAL_1003 false true 10

View File

@@ -0,0 +1,2 @@
#Tenant[0],Id[1],FilterIDs[2],ActivationInterval[3],QueueLength[4],TTL[5],Metrics[6],MetricParams[7],Blocker[8],Stored[9],Weight[10],MinItems[11],ThresholdIDs[12]
cgrates.org,Stats2,FLTR_ACNT_1001_1002,2014-07-29T15:00:00Z,100,1s,*tcc;*tcd,,false,true,30,0,
1 #Tenant[0] Id[1] FilterIDs[2] ActivationInterval[3] QueueLength[4] TTL[5] Metrics[6] MetricParams[7] Blocker[8] Stored[9] Weight[10] MinItems[11] ThresholdIDs[12]
2 cgrates.org Stats2 FLTR_ACNT_1001_1002 2014-07-29T15:00:00Z 100 1s *tcc;*tcd false true 30 0

View File

@@ -0,0 +1,5 @@
#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParamameters,SupplierID,SupplierFilterIDs,SupplierAccountIDs,SupplierRatingPlanIDs,SupplierResourceIDs,SupplierStatIDs,SupplierWeight,SupplierBlocker,SupplierParameters,Weight
cgrates.org,SPL_LEASTCOST_2,,2017-11-27T00:00:00Z,*weight,,supplier1,,,RP_1001,,,10,,,10
cgrates.org,SPL_LEASTCOST_1,FLTR_1,2017-11-27T00:00:00Z,*least_cost,,supplier1,,,RP_1002,,,10,false,,10
cgrates.org,SPL_LEASTCOST_1,,,,,supplier2,,,RP_1001,,,20,,,
cgrates.org,SPL_LEASTCOST_1,,,,,supplier3,,,RP_1002,,,15,,,
1 #Tenant ID FilterIDs ActivationInterval Sorting SortingParamameters SupplierID SupplierFilterIDs SupplierAccountIDs SupplierRatingPlanIDs SupplierResourceIDs SupplierStatIDs SupplierWeight SupplierBlocker SupplierParameters Weight
2 cgrates.org SPL_LEASTCOST_2 2017-11-27T00:00:00Z *weight supplier1 RP_1001 10 10
3 cgrates.org SPL_LEASTCOST_1 FLTR_1 2017-11-27T00:00:00Z *least_cost supplier1 RP_1002 10 false 10
4 cgrates.org SPL_LEASTCOST_1 supplier2 RP_1001 20
5 cgrates.org SPL_LEASTCOST_1 supplier3 RP_1002 15

View File

@@ -0,0 +1,4 @@
#Tenant[0],Id[1],FilterIDs[2],ActivationInterval[3],Recurrent[4],MinHits[5],MinSleep[6],Blocker[7],Weight[8],ActionIDs[9],Async[10]
cgrates.org,THD_ACNT_1001,FLTR_ACNT_1001,2014-07-29T15:00:00Z,false,1,1s,false,10,LOG_WARNING,false
cgrates.org,THD_ACNT_1002,FLTR_ACNT_1002,2014-07-29T15:00:00Z,true,1,1s,false,10,LOG_WARNING,false
1 #Tenant[0] Id[1] FilterIDs[2] ActivationInterval[3] Recurrent[4] MinHits[5] MinSleep[6] Blocker[7] Weight[8] ActionIDs[9] Async[10]
2 cgrates.org THD_ACNT_1001 FLTR_ACNT_1001 2014-07-29T15:00:00Z false 1 1s false 10 LOG_WARNING false
3 cgrates.org THD_ACNT_1002 FLTR_ACNT_1002 2014-07-29T15:00:00Z true 1 1s false 10 LOG_WARNING false

View File

@@ -0,0 +1,2 @@
#Tag,Years,Months,MonthDays,WeekDays,Time
ALWAYS,*any,*any,*any,*any,00:00:00
1 #Tag Years Months MonthDays WeekDays Time
2 ALWAYS *any *any *any *any 00:00:00

View File

@@ -6,6 +6,10 @@
// This file contains the default configuration hardcoded into CGRateS.
// This is what you get when you load CGRateS with an empty configuration file.
"general": {
"log_level":7,
},
"listen": {
"rpc_json": ":2012",
@@ -36,7 +40,7 @@
{"address": "*internal"}
],
"attributes_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
},
@@ -62,13 +66,13 @@
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"resources_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"suppliers_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"attributes_conns": [
{"address": "*internal"}
{"address": "127.0.0.1:2012", "transport": "*json"}
],
"stats_conns": [
{"address": "127.0.0.1:2012", "transport": "*json"}
@@ -114,13 +118,13 @@
"thresholds_conns": [
{"address": "*internal"}
],
"string_indexed_fields": ["Account","EventType"],
"string_indexed_fields": ["Account"],
},
"thresholds": {
"enabled": true,
"string_indexed_fields": ["Account","EventType","StatID","ResourceID"],
"string_indexed_fields": ["Account"],
},

View File

@@ -53,20 +53,23 @@ var sTestsCalls = []func(t *testing.T){
testCallRpcConn,
testCallLoadTariffPlanFromFolder,
testCallAccountsBefore,
testCallStartPjsuaListener,
testCallStatMetricsBefore,
testCallCheckResourceBeforeAllocation,
testCallCheckThreshold1001Before,
testCallCheckThreshold1002Before,
testCallStartPjsuaListener,
testCallCall1001To1002,
testCallCall1002To1001,
testCallGetActiveSessions,
testCallCall1002To1001,
testCallCall1001To1003,
testCallCheckResourceAllocation,
testCallAccount1001,
testCall1001Cdrs,
testCall1002Cdrs,
testCallStatMetrics,
testCallCheckResourceRelease,
testCallCheckThreshold1001After,
testCallCheckThreshold1002After,
testCallCheckResourceRelease,
testCall1001Cdrs,
testCallStatMetrics,
testCallStopPjsuaListener,
testCallStopCgrEngine,
testCallStopFS,
@@ -74,7 +77,6 @@ var sTestsCalls = []func(t *testing.T){
//Test start here
func TestFSCall(t *testing.T) {
for _, stest := range sTestsCalls {
t.Run("", stest)
}
@@ -140,12 +142,10 @@ func testCallRpcConn(t *testing.T) {
// Load the tariff plan, creating accounts and their balances
func testCallLoadTariffPlanFromFolder(t *testing.T) {
reply := ""
attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "tutorial")}
var reply string
attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "tutorial2")}
if err := tutFsCallsRpc.Call("ApierV1.LoadTariffPlanFromFolder", attrs, &reply); err != nil {
t.Error(err)
} else if reply != "OK" {
t.Error(reply)
}
time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups
}
@@ -156,22 +156,29 @@ func testCallAccountsBefore(t *testing.T) {
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
if err := tutFsCallsRpc.Call("ApierV2.GetAccount", attrs, &reply); err != nil {
t.Error("Got error on ApierV2.GetAccount: ", err.Error())
} else if reply.BalanceMap[utils.MONETARY].GetTotalValue() != 10.0 { // Make sure we debitted
} else if reply.BalanceMap[utils.MONETARY].GetTotalValue() != 10.0 {
t.Errorf("Calling ApierV1.GetBalance received: %f", reply.BalanceMap[utils.MONETARY].GetTotalValue())
}
var reply2 *engine.Account
attrs2 := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1002"}
if err := tutFsCallsRpc.Call("ApierV2.GetAccount", attrs2, &reply2); err != nil {
t.Error("Got error on ApierV2.GetAccount: ", err.Error())
} else if reply2.BalanceMap[utils.MONETARY].GetTotalValue() != 10.0 {
t.Errorf("Calling ApierV1.GetBalance received: %f", reply2.BalanceMap[utils.MONETARY].GetTotalValue())
}
}
// Start Pjsua as listener and register it to receive calls
func testCallStartPjsuaListener(t *testing.T) {
var err error
acnts := []*engine.PjsuaAccount{
&engine.PjsuaAccount{Id: "sip:1011@192.168.56.202",
Username: "1011", Password: "CGRateS.org", Realm: "*", Registrar: "sip:192.168.56.202:5060"},
&engine.PjsuaAccount{Id: "sip:1012@192.168.56.202",
Username: "1012", Password: "CGRateS.org", Realm: "*", Registrar: "sip:192.168.56.202:5060"}}
if tutFsCallsPjSuaListener, err = engine.StartPjsuaListener(
acnts, 5070, time.Duration(*waitRater)*time.Millisecond); err != nil {
t.Fatal(err)
func testCallStatMetricsBefore(t *testing.T) {
var metrics map[string]string
expectedMetrics := map[string]string{
utils.MetaTCC: utils.NOT_AVAILABLE,
utils.MetaTCD: utils.NOT_AVAILABLE,
}
if err := tutFsCallsRpc.Call(utils.StatSv1GetQueueStringMetrics,
&utils.TenantID{Tenant: "cgrates.org", ID: "Stats2"}, &metrics); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(expectedMetrics, metrics) {
t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics)
}
}
@@ -181,9 +188,9 @@ func testCallCheckResourceBeforeAllocation(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
Event: map[string]interface{}{
utils.Account: "1011",
utils.Subject: "1011",
utils.Destination: "1012"},
utils.Account: "1001",
utils.Subject: "1001",
utils.Destination: "1002"},
}}
if err := tutFsCallsRpc.Call(utils.ResourceSv1GetResourcesForEvent, args, &rs); err != nil {
t.Error(err)
@@ -191,7 +198,7 @@ func testCallCheckResourceBeforeAllocation(t *testing.T) {
t.Errorf("Resources: %+v", utils.ToJSON(rs))
}
for _, r := range *rs {
if r.ID == "ResGroup4" &&
if r.ID == "ResGroup1" &&
(len(r.Usages) != 0 || len(r.TTLIdx) != 0) {
t.Errorf("Unexpected resource: %+v", utils.ToJSON(r))
}
@@ -200,9 +207,9 @@ func testCallCheckResourceBeforeAllocation(t *testing.T) {
func testCallCheckThreshold1001Before(t *testing.T) {
var td engine.Threshold
eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1011", Hits: 0}
eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1001", Hits: 0}
if err := tutFsCallsRpc.Call(utils.ThresholdSv1GetThreshold,
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1011"}, &td); err != nil {
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}, &td); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eTd, td) {
t.Errorf("expecting: %+v, received: %+v", eTd, td)
@@ -211,34 +218,39 @@ func testCallCheckThreshold1001Before(t *testing.T) {
func testCallCheckThreshold1002Before(t *testing.T) {
var td engine.Threshold
eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1012", Hits: 0}
eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1002", Hits: 0}
if err := tutFsCallsRpc.Call(utils.ThresholdSv1GetThreshold,
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1012"}, &td); err != nil {
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1002"}, &td); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eTd, td) {
t.Errorf("expecting: %+v, received: %+v", eTd, td)
}
}
// Start Pjsua as listener and register it to receive calls
func testCallStartPjsuaListener(t *testing.T) {
var err error
acnts := []*engine.PjsuaAccount{
&engine.PjsuaAccount{Id: "sip:1001@192.168.56.202",
Username: "1001", Password: "CGRateS.org", Realm: "*", Registrar: "sip:192.168.56.202:5060"},
&engine.PjsuaAccount{Id: "sip:1002@192.168.56.202",
Username: "1002", Password: "CGRateS.org", Realm: "*", Registrar: "sip:192.168.56.202:5060"}}
if tutFsCallsPjSuaListener, err = engine.StartPjsuaListener(
acnts, 5070, time.Duration(*waitRater)*time.Millisecond); err != nil {
t.Fatal(err)
}
}
// Call from 1001 (prepaid) to 1002
func testCallCall1001To1002(t *testing.T) {
if err := engine.PjsuaCallUri(
&engine.PjsuaAccount{Id: "sip:1011@192.168.56.202", Username: "1011", Password: "CGRateS.org", Realm: "*"},
"sip:1012@192.168.56.202", "sip:192.168.56.202:5060", time.Duration(67)*time.Second, 5071); err != nil {
&engine.PjsuaAccount{Id: "sip:1001@192.168.56.202", Username: "1001", Password: "CGRateS.org", Realm: "*"},
"sip:1002@192.168.56.202", "sip:192.168.56.202:5060", time.Duration(67)*time.Second, 5071); err != nil {
t.Fatal(err)
}
time.Sleep(1 * time.Second)
}
// Call from 1002 (postpaid) to 1001
func testCallCall1002To1001(t *testing.T) {
if err := engine.PjsuaCallUri(
&engine.PjsuaAccount{Id: "sip:1012@192.168.56.202", Username: "1012", Password: "CGRateS.org", Realm: "*"},
"sip:1011@192.168.56.202", "sip:192.168.56.202:5060", time.Duration(65)*time.Second, 5072); err != nil {
t.Fatal(err)
}
}
// GetActiveSessions
func testCallGetActiveSessions(t *testing.T) {
var reply *[]*sessions.ActiveSession
@@ -248,9 +260,9 @@ func testCallGetActiveSessions(t *testing.T) {
ReqType: "*prepaid",
Tenant: "cgrates.org",
Category: "call",
Account: "1011",
Subject: "1011",
Destination: "1012",
Account: "1001",
Subject: "1001",
Destination: "1002",
},
}
if err := tutFsCallsRpc.Call("SessionSv1.GetActiveSessions",
@@ -270,6 +282,24 @@ func testCallGetActiveSessions(t *testing.T) {
}
}
// Call from 1002 (postpaid) to 1001
func testCallCall1002To1001(t *testing.T) {
if err := engine.PjsuaCallUri(
&engine.PjsuaAccount{Id: "sip:1002@192.168.56.202", Username: "1002", Password: "CGRateS.org", Realm: "*"},
"sip:1001@192.168.56.202", "sip:192.168.56.202:5060", time.Duration(65)*time.Second, 5072); err != nil {
t.Fatal(err)
}
}
// Call from 1001 (prepaid) to 1003 limit to 12 seconds
func testCallCall1001To1003(t *testing.T) {
if err := engine.PjsuaCallUri(
&engine.PjsuaAccount{Id: "sip:1001@192.168.56.202", Username: "1001", Password: "CGRateS.org", Realm: "*"},
"sip:1003@192.168.56.202", "sip:192.168.56.202:5060", time.Duration(60)*time.Second, 5073); err != nil {
t.Fatal(err)
}
}
// Check if the resource was Allocated
func testCallCheckResourceAllocation(t *testing.T) {
var rs *engine.Resources
@@ -277,9 +307,9 @@ func testCallCheckResourceAllocation(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
Event: map[string]interface{}{
utils.Account: "1011",
utils.Subject: "1011",
utils.Destination: "1012"},
utils.Account: "1001",
utils.Subject: "1001",
utils.Destination: "1002"},
}}
if err := tutFsCallsRpc.Call(utils.ResourceSv1GetResourcesForEvent, args, &rs); err != nil {
t.Error(err)
@@ -287,7 +317,7 @@ func testCallCheckResourceAllocation(t *testing.T) {
t.Errorf("Resources: %+v", utils.ToJSON(rs))
}
for _, r := range *rs {
if r.ID == "ResGroup4" &&
if r.ID == "ResGroup1" &&
(len(r.Usages) != 1 || len(r.TTLIdx) != 1) {
t.Errorf("Unexpected resource: %+v", utils.ToJSON(r))
}
@@ -298,7 +328,7 @@ func testCallCheckResourceAllocation(t *testing.T) {
func testCallAccount1001(t *testing.T) {
time.Sleep(time.Duration(80) * time.Second) // Allow calls to finish before start querying the results
var reply *engine.Account
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1011"}
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
if err := tutFsCallsRpc.Call("ApierV2.GetAccount", attrs, &reply); err != nil {
t.Error(err.Error())
} else if reply.BalanceMap[utils.MONETARY].GetTotalValue() == 10.0 { // Make sure we debitted
@@ -308,57 +338,47 @@ func testCallAccount1001(t *testing.T) {
}
}
func testCallCheckThreshold1001After(t *testing.T) {
var td engine.Threshold
if err := tutFsCallsRpc.Call(utils.ThresholdSv1GetThreshold,
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1011"}, &td); err != nil &&
err.Error() != utils.ErrNotFound.Error() {
t.Error(err)
}
}
// Make sure account was debited properly
func testCall1001Cdrs(t *testing.T) {
var reply []*engine.ExternalCDR
req := utils.RPCCDRsFilter{RunIDs: []string{utils.META_DEFAULT}, Accounts: []string{"1001"}}
if err := tutFsCallsRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(reply) != 2 {
t.Error("Unexpected number of CDRs returned: ", len(reply))
} else {
for _, cdr := range reply {
if cdr.Source != "freeswitch_json" {
t.Errorf("Unexpected Source for CDR: %+v", cdr.Source)
}
if cdr.RequestType != utils.META_PREPAID {
t.Errorf("Unexpected RequestType for CDR: %+v", cdr.RequestType)
}
if cdr.Destination == "1002" {
if cdr.Usage != "1m7s" && cdr.Usage != "1m8s" { // Usage as seconds
t.Errorf("Unexpected Usage for CDR: %+v", cdr.Usage)
}
if cdr.CostSource != utils.MetaSessionS {
t.Errorf("Unexpected CostSource for CDR: %+v", cdr.CostSource)
}
} else {
if cdr.Usage != "12s" && cdr.Usage != "13s" { // Usage as seconds
t.Errorf("Unexpected Usage for CDR: %+v", cdr.Usage)
}
if cdr.CostSource != utils.MetaSessionS {
t.Errorf("Unexpected CostSource for CDR: %+v", cdr.CostSource)
}
}
func testCallCheckThreshold1002After(t *testing.T) {
var td engine.Threshold
eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1012", Hits: 4}
if err := tutFsCallsRpc.Call(utils.ThresholdSv1GetThreshold,
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1012"}, &td); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eTd.Tenant, td.Tenant) {
t.Errorf("expecting: %+v, received: %+v", eTd.Tenant, td.Tenant)
} else if !reflect.DeepEqual(eTd.ID, td.ID) {
t.Errorf("expecting: %+v, received: %+v", eTd.ID, td.ID)
} else if !reflect.DeepEqual(eTd.Hits, td.Hits) {
t.Errorf("expecting: %+v, received: %+v", eTd.Hits, td.Hits)
}
}
func testCallCheckResourceRelease(t *testing.T) {
var rs *engine.Resources
args := &utils.ArgRSv1ResourceUsage{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
Event: map[string]interface{}{
utils.Account: "1011",
utils.Subject: "1011",
utils.Destination: "1012"},
}}
if err := tutFsCallsRpc.Call(utils.ResourceSv1GetResourcesForEvent, args, &rs); err != nil {
t.Error(err)
} else if len(*rs) != 2 {
t.Errorf("Resources: %+v", rs)
}
for _, r := range *rs {
if r.ID == "ResGroup4" &&
(len(r.Usages) != 0 || len(r.TTLIdx) != 0) {
t.Errorf("Unexpected resource: %+v", r)
}
}
}
// Make sure account was debited properly
func testCall1001Cdrs(t *testing.T) {
func testCall1002Cdrs(t *testing.T) {
var reply []*engine.ExternalCDR
req := utils.RPCCDRsFilter{RunIDs: []string{utils.META_DEFAULT}, Accounts: []string{"1011"}, DestinationPrefixes: []string{"1012"}}
req := utils.RPCCDRsFilter{RunIDs: []string{utils.META_DEFAULT}, Accounts: []string{"1002"}, DestinationPrefixes: []string{"1001"}}
if err := tutFsCallsRpc.Call("ApierV2.GetCdrs", req, &reply); err != nil {
t.Error("Unexpected error: ", err.Error())
} else if len(reply) != 1 {
@@ -367,13 +387,13 @@ func testCall1001Cdrs(t *testing.T) {
if reply[0].Source != "freeswitch_json" {
t.Errorf("Unexpected Source for CDR: %+v", reply[0].Source)
}
if reply[0].RequestType != utils.META_PREPAID {
if reply[0].RequestType != utils.META_POSTPAID {
t.Errorf("Unexpected RequestType for CDR: %+v", reply[0].RequestType)
}
if reply[0].Usage != "1m7s" { // Usage as seconds
if reply[0].Usage != "1m5s" { // Usage as seconds
t.Errorf("Unexpected Usage for CDR: %+v", reply[0].Usage)
}
if reply[0].CostSource != utils.MetaSessionS {
if reply[0].CostSource != utils.MetaCDRs {
t.Errorf("Unexpected CostSource for CDR: %+v", reply[0].CostSource)
}
}
@@ -393,6 +413,53 @@ func testCallStatMetrics(t *testing.T) {
}
}
func testCallCheckResourceRelease(t *testing.T) {
var rs *engine.Resources
args := &utils.ArgRSv1ResourceUsage{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
Event: map[string]interface{}{
utils.Account: "1001",
utils.Subject: "1001",
utils.Destination: "1002"},
}}
if err := tutFsCallsRpc.Call(utils.ResourceSv1GetResourcesForEvent, args, &rs); err != nil {
t.Error(err)
} else if len(*rs) != 2 {
t.Errorf("Resources: %+v", rs)
}
for _, r := range *rs {
if r.ID == "ResGroup1" &&
(len(r.Usages) != 0 || len(r.TTLIdx) != 0) {
t.Errorf("Unexpected resource: %+v", r)
}
}
}
func testCallCheckThreshold1001After(t *testing.T) {
var td engine.Threshold
if err := tutFsCallsRpc.Call(utils.ThresholdSv1GetThreshold,
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}, &td); err != nil &&
err.Error() != utils.ErrNotFound.Error() {
t.Error(err)
}
}
func testCallCheckThreshold1002After(t *testing.T) {
var td engine.Threshold
eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1002", Hits: 4}
if err := tutFsCallsRpc.Call(utils.ThresholdSv1GetThreshold,
&utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1002"}, &td); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eTd.Tenant, td.Tenant) {
t.Errorf("expecting: %+v, received: %+v", eTd.Tenant, td.Tenant)
} else if !reflect.DeepEqual(eTd.ID, td.ID) {
t.Errorf("expecting: %+v, received: %+v", eTd.ID, td.ID)
} else if !reflect.DeepEqual(eTd.Hits, td.Hits) {
t.Errorf("expecting: %+v, received: %+v", eTd.Hits, td.Hits)
}
}
func testCallStopPjsuaListener(t *testing.T) {
tutFsCallsPjSuaListener.Write([]byte("q\n")) // Close pjsua
time.Sleep(time.Duration(1) * time.Second) // Allow pjsua to finish it's tasks, eg un-REGISTER