Add Stats to call test

This commit is contained in:
TeoV
2018-03-21 09:45:40 -04:00
committed by Dan Christian Bogos
parent ae233df00b
commit 1c57cb90bf
3 changed files with 87 additions and 21 deletions

View File

@@ -29,3 +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_1001_1002,*string,Account,1001;1002,2014-07-29T15:00:00Z
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
32 cgrates.org FLTR_ACNT_1001_1002 *string Account 1001;1002 2014-07-29T15:00:00Z

View File

@@ -1,3 +1,4 @@
#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_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 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
4 cgrates.org Stats2 FLTR_ACNT_1001_1002 2014-07-29T15:00:00Z 100 1s *tcc;*tcd false true 30 0

View File

@@ -76,7 +76,7 @@ func TestFSCallStartFS(t *testing.T) {
}
// Start CGR Engine
func TestTutFsCallsStartEngine(t *testing.T) {
func TestFSCallStartEngine(t *testing.T) {
engine.KillProcName("cgr-engine", *waitRater)
if err := engine.CallScript(path.Join(*dataDir, "tutorials", "fs_evsock", "cgrates", "etc", "init.d", "cgrates"), "start", 100); err != nil {
t.Fatal(err)
@@ -97,6 +97,7 @@ func TestFSCallRpcConn(t *testing.T) {
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups
}
// Load the tariff plan, creating accounts and their balances
@@ -136,6 +137,29 @@ func TestFSCallStartPjsuaListener(t *testing.T) {
}
}
func TestFSCallCheckResourceBeforeAllocation(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)
}
}
}
// Call from 1001 (prepaid) to 1002
func TestFSCallCall1001To1002(t *testing.T) {
if err := engine.PjsuaCallUri(
@@ -143,11 +167,20 @@ func TestFSCallCall1001To1002(t *testing.T) {
"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 TestFSCallCall1002To1001(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)
}
}
// GetActiveSessions
func TestFSCallGetActiveSessions(t *testing.T) {
time.Sleep(time.Duration(200 * time.Millisecond)) // Allow Session to start
var reply *[]*sessions.ActiveSession
expected := &[]*sessions.ActiveSession{
&sessions.ActiveSession{
@@ -181,29 +214,26 @@ func TestFSCallCheckResourceAllocation(t *testing.T) {
var rs *engine.Resources
args := &utils.ArgRSv1ResourceUsage{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
Context: utils.StringPointer("*sessions"),
Tenant: "cgrates.org",
Event: map[string]interface{}{
"Account": "1001",
"Category": "call",
"Destination": "1002",
"RequestType": "*prepaid",
"Source": "FS_CHANNEL_ANSWER",
"Subject": "1001",
"Supplier": "",
"Tenant": "cgrates.org",
"ToR": "*voice"},
utils.Account: "1001",
utils.Subject: "1001",
utils.Destination: "1002"},
}}
if err := tutFsCallsRpc.Call(utils.ResourceSv1GetResourcesForEvent, args, &rs); err != nil {
t.Error(err)
} else {
t.Errorf("Resources: %+v", utils.ToJSON(rs))
} else if len(*rs) != 2 {
t.Errorf("Resources: %+v", rs)
}
for _, r := range *rs {
if r.ID == "ResGroup1" &&
(len(r.Usages) != 1 || len(r.TTLIdx) != 1) {
t.Errorf("Unexpected resource: %+v", r)
}
}
}
// get account while call is on
// check resource for alocation
// add threshold non recurent
// while call is on threshold is there
// for 1001 -> 1002 non recurent
@@ -211,7 +241,7 @@ func TestFSCallCheckResourceAllocation(t *testing.T) {
// Make sure account was debited properly
func TestFSCallAccount1001(t *testing.T) {
time.Sleep(time.Duration(75) * time.Second) // Allow calls to finish before start querying the results
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: "1001"}
if err := tutFsCallsRpc.Call("ApierV2.GetAccount", attrs, &reply); err != nil {
@@ -223,9 +253,32 @@ func TestFSCallAccount1001(t *testing.T) {
}
}
func TestFSCallCheckResourceRelease(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)
}
}
}
// after call end threshold should't be there
//get cdr and check source of cdr to be *sessions
// get cdr and check source of cdr to be *sessions
// Make sure account was debited properly
func TestTutFsCalls1001Cdrs(t *testing.T) {
@@ -252,8 +305,19 @@ func TestTutFsCalls1001Cdrs(t *testing.T) {
// verifica CDR in sessions_cost si daca il gaseste il scrie cu *sessions la cost_source
}
// check resource for release
// check stats for ACD & ACC
func TestFSCallStatMetrics2(t *testing.T) {
var metrics map[string]string
expectedMetrics := map[string]string{
utils.MetaTCC: "0",
utils.MetaTCD: "2m12s",
}
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)
}
}
func TestFSCallStopPjsuaListener(t *testing.T) {
tutFsCallsPjSuaListener.Write([]byte("q\n")) // Close pjsua