From 8f126ec293283a22f1b7408d82813d8955bd7cc4 Mon Sep 17 00:00:00 2001 From: adragusin Date: Mon, 16 Dec 2019 18:01:00 +0200 Subject: [PATCH] Updated tests for process event --- .../samples/cdrsv1processevent/cgrates.json | 7 + .../cdrsv1processeventmongo/cgrates.json | 56 +++++++ .../cdrsv1processeventmysql/cgrates.json | 54 +++++++ general_tests/cdrs_processevent_it_test.go | 142 ++++++++++++++++-- 4 files changed, 248 insertions(+), 11 deletions(-) create mode 100644 data/conf/samples/cdrsv1processeventmongo/cgrates.json create mode 100644 data/conf/samples/cdrsv1processeventmysql/cgrates.json diff --git a/data/conf/samples/cdrsv1processevent/cgrates.json b/data/conf/samples/cdrsv1processevent/cgrates.json index 1f27f1459..5a84c2c1a 100644 --- a/data/conf/samples/cdrsv1processevent/cgrates.json +++ b/data/conf/samples/cdrsv1processevent/cgrates.json @@ -19,6 +19,12 @@ "chargers":{ "enabled": true, + "attributes_conns": ["*internal"], +}, + +"stats": { + "enabled": true, + "store_interval": "-1", }, "rals": { @@ -36,6 +42,7 @@ "rals_conns": ["*internal"], "attributes_conns": ["*internal"], "chargers_conns": ["*internal"], + "stats_conns": ["*internal"], }, diff --git a/data/conf/samples/cdrsv1processeventmongo/cgrates.json b/data/conf/samples/cdrsv1processeventmongo/cgrates.json new file mode 100644 index 000000000..e6d24fee5 --- /dev/null +++ b/data/conf/samples/cdrsv1processeventmongo/cgrates.json @@ -0,0 +1,56 @@ +{ +// CGRateS Configuration file +// +// Used in general_tests + +"data_db": { + "db_type": "mongo", + "db_name": "10", + "db_port": 27017, +}, + + +"stor_db": { + "db_type": "mongo", + "db_name": "cgrates", + "db_port": 27017, +}, + +"attributes": { + "enabled": true, +}, + +"chargers":{ + "enabled": true, + "attributes_conns": ["*internal"], +}, + +"stats": { + "enabled": true, + "store_interval": "-1", +}, + +"rals": { + "enabled": true +}, + + +"scheduler": { + "enabled": true +}, + + +"cdrs": { + "enabled": true, + "rals_conns": ["*internal"], + "attributes_conns": ["*internal"], + "chargers_conns": ["*internal"], + "stats_conns": ["*internal"], +}, + + +"apier": { + "scheduler_conns": ["*internal"], +}, + +} diff --git a/data/conf/samples/cdrsv1processeventmysql/cgrates.json b/data/conf/samples/cdrsv1processeventmysql/cgrates.json new file mode 100644 index 000000000..62c0e5cfb --- /dev/null +++ b/data/conf/samples/cdrsv1processeventmysql/cgrates.json @@ -0,0 +1,54 @@ +{ +// CGRateS Configuration file +// +// Used in general_tests + + +"data_db": { // database used to store runtime data (eg: accounts, cdr stats) + "db_type": "redis", // data_db type: + "db_port": 6379, // data_db port to reach the database + "db_name": "10", // data_db database name to connect to +}, + +"stor_db": { + "db_password": "CGRateS.org", +}, + +"attributes": { + "enabled": true, +}, + +"chargers":{ + "enabled": true, + "attributes_conns": ["*internal"], +}, + +"stats": { + "enabled": true, + "store_interval": "-1", +}, + +"rals": { + "enabled": true +}, + + +"scheduler": { + "enabled": true +}, + + +"cdrs": { + "enabled": true, + "rals_conns": ["*internal"], + "attributes_conns": ["*internal"], + "chargers_conns": ["*internal"], + "stats_conns": ["*internal"], +}, + + +"apier": { + "scheduler_conns": ["*internal"], +}, + +} diff --git a/general_tests/cdrs_processevent_it_test.go b/general_tests/cdrs_processevent_it_test.go index 88aa00c32..4c6177589 100644 --- a/general_tests/cdrs_processevent_it_test.go +++ b/general_tests/cdrs_processevent_it_test.go @@ -44,8 +44,10 @@ var sTestsCDRsIT_ProcessEvent = []func(t *testing.T){ testV1CDRsStartEngine, testV1CDRsRpcConn, testV1CDRsLoadTariffPlanFromFolder, - // testV1CDRsProcessEventAttrS, + testV1CDRsProcessEventAttrS, testV1CDRsProcessEventChrgS, + testV1CDRsProcessEventRalS, + testV1CDRsProcessEventSts, testV1CDRsKillEngine, } @@ -142,7 +144,7 @@ func testV1CDRsProcessEventAttrS(t *testing.T) { t.Errorf("Expecting: %v, received: %v", expectedVoice, rply) } argsEv := &engine.ArgV1ProcessEvent{ - Flags: []string{utils.MetaAttributes, utils.MetaStore}, + Flags: []string{utils.MetaAttributes, utils.MetaStore, "*chargers:false"}, CGREvent: utils.CGREvent{ Tenant: "cgrates.org", ID: "test1", @@ -158,7 +160,7 @@ func testV1CDRsProcessEventAttrS(t *testing.T) { }, }, } - var cdrs []*engine.ExternalCDR + var cdrs []*engine.CDR alsPrf := &engine.AttributeProfile{ Tenant: "cgrates.org", ID: "ApierTest", @@ -194,12 +196,14 @@ func testV1CDRsProcessEventAttrS(t *testing.T) { t.Error("Unexpected reply received: ", reply) } // check if the CDR was correctly processed - if err := pecdrsRpc.Call(utils.ApierV1GetCDRs, utils.RPCCDRsFilter{OriginHosts: []string{"OriginHost1"}}, &cdrs); err != nil { + if err := pecdrsRpc.Call(utils.CDRsV1GetCDRs, utils.RPCCDRsFilter{OriginHosts: []string{"OriginHost1"}}, &cdrs); err != nil { t.Fatal("Unexpected error: ", err.Error()) + } else if len(cdrs) != 1 { + t.Errorf("Expecting: 1, received: %+v", len(cdrs)) } else if !reflect.DeepEqual(argsEv.Event["Account"], cdrs[0].Account) { t.Errorf("Expecting: %+v, received: %+v", argsEv.Event["Account"], cdrs[0].Account) - } else if !reflect.DeepEqual("2019-11-27T12:21:26Z", cdrs[0].AnswerTime) { - t.Errorf("Expecting: %+v, received: %+v", "2019-11-27T12:21:26Z", cdrs[0].AnswerTime) + } else if !reflect.DeepEqual(argsEv.Event["AnswerTime"], cdrs[0].AnswerTime) { + t.Errorf("Expecting: %+v, received: %+v", argsEv.Event["AnswerTime"], cdrs[0].AnswerTime) } else if !reflect.DeepEqual(argsEv.Event["Destination"], cdrs[0].Destination) { t.Errorf("Expecting: %+v, received: %+v", argsEv.Event["Destination"], cdrs[0].Destination) } else if !reflect.DeepEqual(argsEv.Event["OriginID"], cdrs[0].OriginID) { @@ -208,8 +212,8 @@ func testV1CDRsProcessEventAttrS(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", argsEv.Event["RequestType"], cdrs[0].RequestType) } else if !reflect.DeepEqual(argsEv.Event["RunID"], cdrs[0].RunID) { t.Errorf("Expecting: %+v, received: %+v", argsEv.Event["RunID"], cdrs[0].RunID) - } else if !reflect.DeepEqual("2m0s", cdrs[0].Usage) { - t.Errorf("Expecting: %+v, received: %+v", "2m0s", cdrs[0].Usage) + } else if !reflect.DeepEqual(argsEv.Event["Usage"], cdrs[0].Usage) { + t.Errorf("Expecting: %+v, received: %+v", argsEv.Event["Usage"], cdrs[0].Usage) } else if !reflect.DeepEqual(argsEv.Tenant, cdrs[0].Tenant) { t.Errorf("Expecting: %+v, received: %+v", argsEv.Tenant, cdrs[0].Tenant) } else if !reflect.DeepEqual(alsPrf.Attributes[0].Value[0].Rules, cdrs[0].Subject) { @@ -221,7 +225,7 @@ func testV1CDRsProcessEventAttrS(t *testing.T) { func testV1CDRsProcessEventChrgS(t *testing.T) { argsEv := &engine.ArgV1ProcessEvent{ - Flags: []string{utils.MetaChargers, "*attributes:false"}, //utils.MetaStore}, + Flags: []string{utils.MetaChargers, "*attributes:false"}, CGREvent: utils.CGREvent{ Tenant: "cgrates.org", ID: "test2", @@ -243,8 +247,8 @@ func testV1CDRsProcessEventChrgS(t *testing.T) { } else if reply != utils.OK { t.Error("Unexpected reply received: ", reply) } - var cdrs []*engine.ExternalCDR - if err := pecdrsRpc.Call(utils.ApierV1GetCDRs, utils.RPCCDRsFilter{OriginHosts: []string{"OriginHost2"}}, &cdrs); err != nil { + var cdrs []*engine.CDR + if err := pecdrsRpc.Call(utils.CDRsV1GetCDRs, utils.RPCCDRsFilter{OriginHosts: []string{"OriginHost2"}}, &cdrs); err != nil { t.Fatal("Unexpected error: ", err.Error()) } else if len(cdrs) != 3 { t.Errorf("Expecting: 3, received: %+v", len(cdrs)) @@ -261,6 +265,122 @@ func testV1CDRsProcessEventChrgS(t *testing.T) { } } +func testV1CDRsProcessEventRalS(t *testing.T) { + argsEv := &engine.ArgV1ProcessEvent{ + Flags: []string{utils.MetaRALs, "*attributes:false", "*chargers:false"}, + CGREvent: utils.CGREvent{ + Tenant: "cgrates.org", + ID: "test3", + Event: map[string]interface{}{ + utils.RunID: "testv1", + utils.OriginID: "test3_processEvent", + utils.OriginHost: "OriginHost3", + utils.RequestType: utils.META_PSEUDOPREPAID, + utils.Account: "1001", + utils.Destination: "+4986517174963", + utils.AnswerTime: time.Date(2019, 11, 27, 12, 21, 26, 0, time.UTC), + utils.Usage: 2 * time.Minute, + }, + }, + } + var reply string + if err := pecdrsRpc.Call(utils.CDRsV1ProcessEvent, argsEv, &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Error("Unexpected reply received: ", reply) + } + var cdrs []*engine.CDR + if err := pecdrsRpc.Call(utils.CDRsV1GetCDRs, utils.RPCCDRsFilter{OriginHosts: []string{"OriginHost3"}}, &cdrs); err != nil { + t.Fatal("Unexpected error: ", err.Error()) + } else if len(cdrs) != 1 { + t.Errorf("Expecting: 1, received: %+v", len(cdrs)) + } else if !reflect.DeepEqual(cdrs[0].Cost, 0.0204) { + t.Errorf("\nExpected: %+v,\nreceived: %+v", 0.0204, utils.ToJSON(cdrs[0])) + } +} + +func testV1CDRsProcessEventSts(t *testing.T) { + argsEv := &engine.ArgV1ProcessEvent{ + Flags: []string{utils.MetaStatS, "*rals:false", "*attributes:false", "*chargers:false"}, + CGREvent: utils.CGREvent{ + Tenant: "cgrates.org", + ID: "test4", + Event: map[string]interface{}{ + utils.RunID: "testv1", + utils.CGRID: "c87609aa1cb6e9529ab1836cfeeebaab7aa7ebaf", + utils.Tenant: "cgrates.org", + utils.Category: "call", + utils.ToR: utils.VOICE, + utils.OriginID: "test4_processEvent", + utils.OriginHost: "OriginHost4", + utils.RequestType: utils.META_PSEUDOPREPAID, + utils.Account: "1001", + utils.Destination: "+4986517174963", + utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC), + utils.AnswerTime: time.Date(2018, time.January, 7, 16, 60, 10, 0, time.UTC), + utils.Usage: 5 * time.Minute, + }, + }, + } + var reply string + if err := pecdrsRpc.Call(utils.CDRsV1ProcessEvent, argsEv, &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Error("Unexpected reply received: ", reply) + } + var cdrs []*engine.CDR + eOut := []*engine.CDR{ + &engine.CDR{ + CGRID: "c87609aa1cb6e9529ab1836cfeeebaab7aa7ebaf", + RunID: "testv1", + OrderID: 0, + OriginHost: "OriginHost4", + Source: "", + OriginID: "test4_processEvent", + ToR: "*voice", + RequestType: "*pseudoprepaid", + Tenant: "cgrates.org", + Category: "call", + Account: "1001", + Subject: "1001", + Destination: "+4986517174963", + SetupTime: time.Date(2018, 01, 07, 17, 00, 00, 0, time.UTC), + AnswerTime: time.Date(2018, 01, 07, 17, 00, 10, 0, time.UTC), + Usage: 300000000000, + ExtraFields: map[string]string{}, + ExtraInfo: "", + Partial: false, + PreRated: false, + CostSource: "", + Cost: -1, + CostDetails: nil, + }, + } + if err := pecdrsRpc.Call(utils.CDRsV1GetCDRs, utils.RPCCDRsFilter{OriginHosts: []string{"OriginHost4"}}, &cdrs); err != nil { + t.Fatal("Unexpected error: ", err.Error()) + } else if len(cdrs) != 1 { + t.Errorf("Expecting: 1, received: %+v", len(cdrs)) + } + cdrs[0].OrderID = 0 + if !reflect.DeepEqual(eOut[0], cdrs[0]) { + t.Errorf("\nExpected: %+v,\nreceived: %+v", utils.ToJSON(eOut[0]), utils.ToJSON(cdrs[0])) + } + var metrics map[string]string + statMetrics := map[string]string{ + utils.MetaACD: "2m30s", + utils.MetaASR: "100%", + utils.MetaTCD: "15m0s", + } + + if err := pecdrsRpc.Call(utils.StatSv1GetQueueStringMetrics, + &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "Stat_1"}}, &metrics); err != nil { + t.Error(err) + } + if !reflect.DeepEqual(statMetrics, metrics) { + t.Errorf("expecting: %+v, received: %+v", statMetrics, metrics) + } +} + func testV1CDRsKillEngine(t *testing.T) { if err := engine.KillEngine(*waitRater); err != nil { t.Error(err)