diff --git a/general_tests/a1_it_test.go b/general_tests/a1_it_test.go index 89b0a65c5..c9c18da44 100644 --- a/general_tests/a1_it_test.go +++ b/general_tests/a1_it_test.go @@ -21,6 +21,8 @@ package general_tests import ( "encoding/json" + "errors" + "flag" "fmt" "net/rpc" "net/rpc/jsonrpc" @@ -42,8 +44,20 @@ var ( a1CfgPath string a1Cfg *config.CGRConfig a1rpc *rpc.Client + encoding = flag.String("rpc", utils.MetaJSON, "what encoding whould be uused for rpc comunication") ) +func newRPCClient(cfg *config.ListenCfg) (c *rpc.Client, err error) { + switch *encoding { + case utils.MetaJSON: + return jsonrpc.Dial(utils.TCP, cfg.RPCJSONListen) + case utils.MetaGOB: + return rpc.Dial(utils.TCP, cfg.RPCGOBListen) + default: + return nil, errors.New("UNSUPPORTED_RPC") + } +} + var sTestsA1it = []func(t *testing.T){ testA1itLoadConfig, testA1itResetDataDB, @@ -105,7 +119,7 @@ func testA1itStartEngine(t *testing.T) { func testA1itRPCConn(t *testing.T) { var err error - a1rpc, err = jsonrpc.Dial("tcp", a1Cfg.ListenCfg().RPCJSONListen) + a1rpc, err = newRPCClient(a1Cfg.ListenCfg()) if err != nil { t.Fatal(err) } @@ -122,13 +136,15 @@ func testA1itLoadTPFromFolder(t *testing.T) { time.Sleep(time.Duration(100 * time.Millisecond)) tStart := time.Date(2017, 3, 3, 10, 39, 33, 0, time.UTC) tEnd := time.Date(2017, 3, 3, 10, 39, 33, 10240, time.UTC) - cd := engine.CallDescriptor{ - Category: "data1", - Tenant: "cgrates.org", - Subject: "rpdata1", - Destination: "data", - TimeStart: tStart, - TimeEnd: tEnd, + cd := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + Category: "data1", + Tenant: "cgrates.org", + Subject: "rpdata1", + Destination: "data", + TimeStart: tStart, + TimeEnd: tEnd, + }, } var cc engine.CallCost if err := a1rpc.Call(utils.ResponderGetCost, cd, &cc); err != nil { @@ -138,12 +154,14 @@ func testA1itLoadTPFromFolder(t *testing.T) { } //add a default charger - chargerProfile := &engine.ChargerProfile{ - Tenant: "cgrates.org", - ID: "Default", - RunID: utils.MetaDefault, - AttributeIDs: []string{"*none"}, - Weight: 20, + chargerProfile := &v1.ChargerWithCache{ + ChargerProfile: &engine.ChargerProfile{ + Tenant: "cgrates.org", + ID: "Default", + RunID: utils.MetaDefault, + AttributeIDs: []string{"*none"}, + Weight: 20, + }, } var result string if err := a1rpc.Call(utils.ApierV1SetChargerProfile, chargerProfile, &result); err != nil { @@ -211,7 +229,7 @@ func testA1itDataSession1(t *testing.T) { var initRpl *sessions.V1InitSessionReply if err := a1rpc.Call(utils.SessionSv1InitiateSession, initArgs, &initRpl); err != nil { - t.Error(err) + t.Fatal(err) } if initRpl.MaxUsage != usage { t.Errorf("Expecting : %+v, received: %+v", usage, initRpl.MaxUsage) @@ -282,7 +300,7 @@ func testA1itDataSession1(t *testing.T) { t.Error(err) } - if err := a1rpc.Call(utils.SessionSv1ProcessCDR, termArgs.CGREvent, &rpl); err != nil { + if err := a1rpc.Call(utils.SessionSv1ProcessCDR, &utils.CGREventWithArgDispatcher{CGREvent: termArgs.CGREvent}, &rpl); err != nil { t.Error(err) } else if rpl != utils.OK { t.Errorf("Received reply: %s", rpl) diff --git a/general_tests/accounts_it_test.go b/general_tests/accounts_it_test.go index 1ffbd453a..2c15d0b35 100644 --- a/general_tests/accounts_it_test.go +++ b/general_tests/accounts_it_test.go @@ -21,7 +21,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -105,7 +104,7 @@ func testV1AccStartEngine(t *testing.T) { func testV1AccRpcConn(t *testing.T) { var err error - accRpc, err = jsonrpc.Dial("tcp", accCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + accRpc, err = newRPCClient(accCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } @@ -246,15 +245,17 @@ func testV1AccSendToThreshold(t *testing.T) { } time.Sleep(10 * time.Millisecond) - tPrfl := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "THD_AccDisableAndLog", - FilterIDs: []string{"*string:~*req.Account:testAccThreshold"}, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Second), - Weight: 20.0, - Async: true, - ActionIDs: []string{"DISABLE_LOG"}, + tPrfl := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THD_AccDisableAndLog", + FilterIDs: []string{"*string:~*req.Account:testAccThreshold"}, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Second), + Weight: 20.0, + Async: true, + ActionIDs: []string{"DISABLE_LOG"}, + }, } if err := accRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl, &reply); err != nil { diff --git a/general_tests/cdre_it_test.go b/general_tests/cdre_it_test.go index 65c4b4cae..af828bed0 100644 --- a/general_tests/cdre_it_test.go +++ b/general_tests/cdre_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -100,7 +99,7 @@ func testCDREStartEngine(t *testing.T) { func testCDRERpcConn(t *testing.T) { var err error - cdreRPC, err = jsonrpc.Dial("tcp", cdreCfg.ListenCfg().RPCJSONListen) + cdreRPC, err = newRPCClient(cdreCfg.ListenCfg()) if err != nil { t.Fatal(err) } diff --git a/general_tests/cdrs_it_test.go b/general_tests/cdrs_it_test.go index ee009726d..b7ff4ccbd 100644 --- a/general_tests/cdrs_it_test.go +++ b/general_tests/cdrs_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "reflect" "testing" @@ -123,7 +122,7 @@ func testV2CDRsStartEngine(t *testing.T) { // Connect rpc client to rater func testV2CDRsRpcConn(t *testing.T) { - cdrsRpc, err = jsonrpc.Dial("tcp", cdrsCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + cdrsRpc, err = newRPCClient(cdrsCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } @@ -587,7 +586,9 @@ func testV2CDRsGetStats1(t *testing.T) { utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.Usage): utils.NOT_AVAILABLE, } if err := cdrsRpc.Call(utils.StatSv1GetQueueStringMetrics, - &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, &metrics); err != nil { + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, + }, &metrics); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics, metrics) { t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics) @@ -605,7 +606,9 @@ func testV2CDRsGetThreshold1(t *testing.T) { } var td engine.Threshold if err := cdrsRpc.Call(utils.ThresholdSv1GetThreshold, - &utils.TenantID{Tenant: "cgrates.org", ID: "THD_PoccessCDR"}, &td); err != nil { + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "THD_PoccessCDR"}, + }, &td); err != nil { t.Error(err) } else if td.Hits != 0 { t.Errorf("received: %+v", td) @@ -650,7 +653,9 @@ func testV2CDRsGetStats2(t *testing.T) { utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.Usage): "60000000000", } if err := cdrsRpc.Call(utils.StatSv1GetQueueStringMetrics, - &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, &metrics); err != nil { + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: expectedIDs[0]}, + }, &metrics); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedMetrics, metrics) { t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics) @@ -660,7 +665,9 @@ func testV2CDRsGetStats2(t *testing.T) { func testV2CDRsGetThreshold2(t *testing.T) { var td engine.Threshold if err := cdrsRpc.Call(utils.ThresholdSv1GetThreshold, - &utils.TenantID{Tenant: "cgrates.org", ID: "THD_PoccessCDR"}, &td); err != nil { + &utils.TenantIDWithArgDispatcher{ + TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "THD_PoccessCDR"}, + }, &td); err != nil { t.Error(err) } else if td.Hits != 2 { // 2 Chargers t.Errorf("received: %+v", td) diff --git a/general_tests/data_it_test.go b/general_tests/data_it_test.go index 754ca5572..c613ecb75 100644 --- a/general_tests/data_it_test.go +++ b/general_tests/data_it_test.go @@ -21,7 +21,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -97,7 +96,7 @@ func testV1DataStartEngine(t *testing.T) { func testV1DataRpcConn(t *testing.T) { var err error - dataRpc, err = jsonrpc.Dial("tcp", dataCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + dataRpc, err = newRPCClient(dataCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } diff --git a/general_tests/destination_combined_it_test.go b/general_tests/destination_combined_it_test.go index 1d9c60f6d..344b71093 100644 --- a/general_tests/destination_combined_it_test.go +++ b/general_tests/destination_combined_it_test.go @@ -21,7 +21,6 @@ along with this program. If not, see package general_tests import ( - "net/rpc/jsonrpc" "path" "testing" "time" @@ -81,7 +80,7 @@ func testDestinationStartEngine(t *testing.T) { func testDestinationRpcConn(t *testing.T) { var err error - tutorialRpc, err = jsonrpc.Dial("tcp", tutorialCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + tutorialRpc, err = newRPCClient(tutorialCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } diff --git a/general_tests/filters_it_test.go b/general_tests/filters_it_test.go index cc7734f0f..092e62c6b 100644 --- a/general_tests/filters_it_test.go +++ b/general_tests/filters_it_test.go @@ -22,12 +22,12 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "reflect" "testing" "time" + v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -94,7 +94,7 @@ func testV1FltrStartEngine(t *testing.T) { func testV1FltrRpcConn(t *testing.T) { var err error - fltrRpc, err = jsonrpc.Dial("tcp", fltrCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + fltrRpc, err = newRPCClient(fltrCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } @@ -114,14 +114,16 @@ func testV1FltrLoadTarrifPlans(t *testing.T) { func testV1FltrAddStats(t *testing.T) { var reply []string expected := []string{"Stat_1"} - ev1 := utils.CGREvent{ - Tenant: "cgrates.org", - ID: "event1", - Event: map[string]interface{}{ - utils.Account: "1001", - utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - utils.Usage: time.Duration(11 * time.Second), - utils.COST: 10.0, + ev1 := &engine.StatsArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "event1", + Event: map[string]interface{}{ + utils.Account: "1001", + utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + utils.Usage: time.Duration(11 * time.Second), + utils.COST: 10.0, + }, }, } if err := fltrRpc.Call(utils.StatSv1ProcessEvent, &ev1, &reply); err != nil { @@ -131,7 +133,7 @@ func testV1FltrAddStats(t *testing.T) { } expected = []string{"Stat_1"} - ev1 = utils.CGREvent{ + ev1.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "event2", Event: map[string]interface{}{ @@ -148,7 +150,7 @@ func testV1FltrAddStats(t *testing.T) { } expected = []string{"Stat_2"} - ev1 = utils.CGREvent{ + ev1.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "event2", Event: map[string]interface{}{ @@ -165,7 +167,7 @@ func testV1FltrAddStats(t *testing.T) { } expected = []string{"Stat_2"} - ev1 = utils.CGREvent{ + ev1.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "event2", Event: map[string]interface{}{ @@ -182,7 +184,7 @@ func testV1FltrAddStats(t *testing.T) { } expected = []string{"Stat_3"} - ev1 = utils.CGREvent{ + ev1.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "event3", Event: map[string]interface{}{ @@ -199,7 +201,7 @@ func testV1FltrAddStats(t *testing.T) { } expected = []string{"Stat_1_1"} - ev1 = utils.CGREvent{ + ev1.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "event3", Event: map[string]interface{}{ @@ -217,7 +219,7 @@ func testV1FltrAddStats(t *testing.T) { } expected = []string{"Stat_1_1"} - ev1 = utils.CGREvent{ + ev1.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "event3", Event: map[string]interface{}{ @@ -238,14 +240,16 @@ func testV1FltrAddStats(t *testing.T) { func testV1FltrPupulateThreshold(t *testing.T) { //Add a filter of type *stats and check if acd metric is minim 10 ( greater than 10) //we expect that acd from Stat_1 to be 11 so the filter should pass (11 > 10) - filter := &engine.Filter{ - Tenant: "cgrates.org", - ID: "FLTR_TH_Stats1", - Rules: []*engine.FilterRule{ - { - Type: "*gt", - FieldName: "~*stats.Stat_1.*acd", - Values: []string{"10.0"}, + filter := &v1.FilterWithCache{ + Filter: &engine.Filter{ + Tenant: "cgrates.org", + ID: "FLTR_TH_Stats1", + Rules: []*engine.FilterRule{ + { + Type: "*gt", + FieldName: "~*stats.Stat_1.*acd", + Values: []string{"10.0"}, + }, }, }, } @@ -269,19 +273,21 @@ func testV1FltrPupulateThreshold(t *testing.T) { time.Sleep(10 * time.Millisecond) //Add a threshold with filter from above and an inline filter for Account 1010 - tPrfl := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "TH_Stats1", - FilterIDs: []string{"FLTR_TH_Stats1", "*string:~*req.Account:1010"}, - ActivationInterval: &utils.ActivationInterval{ - ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), - ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), + tPrfl := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "TH_Stats1", + FilterIDs: []string{"FLTR_TH_Stats1", "*string:~*req.Account:1010"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), + }, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Millisecond), + Weight: 10.0, + ActionIDs: []string{"LOG"}, + Async: true, }, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Millisecond), - Weight: 10.0, - ActionIDs: []string{"LOG"}, - Async: true, } if err := fltrRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl, &result); err != nil { t.Error(err) @@ -292,18 +298,20 @@ func testV1FltrPupulateThreshold(t *testing.T) { if err := fltrRpc.Call(utils.ApierV1GetThresholdProfile, &utils.TenantID{Tenant: tPrfl.Tenant, ID: tPrfl.ID}, &rcvTh); err != nil { t.Error(err) - } else if !reflect.DeepEqual(tPrfl, rcvTh) { - t.Errorf("Expecting: %+v, received: %+v", tPrfl, rcvTh) + } else if !reflect.DeepEqual(tPrfl.ThresholdProfile, rcvTh) { + t.Errorf("Expecting: %+v, received: %+v", tPrfl.ThresholdProfile, rcvTh) } } func testV1FltrGetThresholdForEvent(t *testing.T) { // check the event - tEv := utils.CGREvent{ - Tenant: "cgrates.org", - ID: "event1", - Event: map[string]interface{}{ - utils.Account: "1010"}, + tEv := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "event1", + Event: map[string]interface{}{ + utils.Account: "1010"}, + }, } var ids []string eIDs := []string{"TH_Stats1"} @@ -317,14 +325,16 @@ func testV1FltrGetThresholdForEvent(t *testing.T) { func testV1FltrGetThresholdForEvent2(t *testing.T) { //Add a filter of type *stats and check if acd metric is maximum 10 ( lower than 10) //we expect that acd from Stat_1 to be 11 so the filter should not pass (11 > 10) - filter := &engine.Filter{ - Tenant: "cgrates.org", - ID: "FLTR_TH_Stats1", - Rules: []*engine.FilterRule{ - { - Type: "*lt", - FieldName: "~*stats.Stat_1.*acd", - Values: []string{"10.0"}, + filter := &v1.FilterWithCache{ + Filter: &engine.Filter{ + Tenant: "cgrates.org", + ID: "FLTR_TH_Stats1", + Rules: []*engine.FilterRule{ + { + Type: "*lt", + FieldName: "~*stats.Stat_1.*acd", + Values: []string{"10.0"}, + }, }, }, } @@ -337,18 +347,20 @@ func testV1FltrGetThresholdForEvent2(t *testing.T) { } //update the threshold with new filter - tPrfl := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "TH_Stats1", - FilterIDs: []string{"FLTR_TH_Stats1", "*string:~*req.Account:1010"}, - ActivationInterval: &utils.ActivationInterval{ - ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), - ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), + tPrfl := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "TH_Stats1", + FilterIDs: []string{"FLTR_TH_Stats1", "*string:~*req.Account:1010"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), + }, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Millisecond), + Weight: 10.0, + ActionIDs: []string{"LOG"}, }, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Millisecond), - Weight: 10.0, - ActionIDs: []string{"LOG"}, } if err := fltrRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl, &result); err != nil { t.Error(err) @@ -356,11 +368,13 @@ func testV1FltrGetThresholdForEvent2(t *testing.T) { t.Error("Unexpected reply returned", result) } - tEv := utils.CGREvent{ - Tenant: "cgrates.org", - ID: "event1", - Event: map[string]interface{}{ - utils.Account: "1010"}, + tEv := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "event1", + Event: map[string]interface{}{ + utils.Account: "1010"}, + }, } var ids []string if err := fltrRpc.Call(utils.ThresholdSv1ProcessEvent, tEv, &ids); err == nil || @@ -383,7 +397,7 @@ func testV1FltrPopulateResources(t *testing.T) { } var result string - if err := fltrRpc.Call(utils.ApierV1SetResourceProfile, rlsConfig, &result); err != nil { + if err := fltrRpc.Call(utils.ApierV1SetResourceProfile, &v1.ResourceWithCache{ResourceProfile: rlsConfig}, &result); err != nil { t.Error(err) } else if result != utils.OK { t.Error("Unexpected reply returned", result) @@ -416,14 +430,16 @@ func testV1FltrPopulateResources(t *testing.T) { //we allocate 3 units to resource and add a filter for Usages > 2 //should match (3>2) - filter := &engine.Filter{ - Tenant: "cgrates.org", - ID: "FLTR_TH_Resource", - Rules: []*engine.FilterRule{ - { - Type: "*gt", - FieldName: "~*resources.ResTest.TotalUsage", - Values: []string{"2.0"}, + filter := v1.FilterWithCache{ + Filter: &engine.Filter{ + Tenant: "cgrates.org", + ID: "FLTR_TH_Resource", + Rules: []*engine.FilterRule{ + { + Type: "*gt", + FieldName: "~*resources.ResTest.TotalUsage", + Values: []string{"2.0"}, + }, }, }, } @@ -434,15 +450,17 @@ func testV1FltrPopulateResources(t *testing.T) { t.Error("Unexpected reply returned", result) } - tPrfl := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "TH_ResTest", - FilterIDs: []string{"FLTR_TH_Resource", "*string:~*req.Account:2020"}, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Millisecond), - Weight: 10.0, - ActionIDs: []string{"LOG"}, - Async: true, + tPrfl := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "TH_ResTest", + FilterIDs: []string{"FLTR_TH_Resource", "*string:~*req.Account:2020"}, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Millisecond), + Weight: 10.0, + ActionIDs: []string{"LOG"}, + Async: true, + }, } if err := fltrRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl, &result); err != nil { t.Error(err) @@ -453,16 +471,18 @@ func testV1FltrPopulateResources(t *testing.T) { if err := fltrRpc.Call(utils.ApierV1GetThresholdProfile, &utils.TenantID{Tenant: tPrfl.Tenant, ID: tPrfl.ID}, &rcvTh); err != nil { t.Error(err) - } else if !reflect.DeepEqual(tPrfl, rcvTh) { - t.Errorf("Expecting: %+v, received: %+v", tPrfl, rcvTh) + } else if !reflect.DeepEqual(tPrfl.ThresholdProfile, rcvTh) { + t.Errorf("Expecting: %+v, received: %+v", tPrfl.ThresholdProfile, rcvTh) } // check the event - tEv := utils.CGREvent{ - Tenant: "cgrates.org", - ID: "event1", - Event: map[string]interface{}{ - utils.Account: "2020"}, + tEv := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "event1", + Event: map[string]interface{}{ + utils.Account: "2020"}, + }, } var ids []string eIDs := []string{"TH_ResTest"} @@ -475,7 +495,7 @@ func testV1FltrPopulateResources(t *testing.T) { //change the filter //we allocate 3 units to resource and add a filter for Usages < 2 //should fail (3<2) - filter = &engine.Filter{ + filter.Filter = &engine.Filter{ Tenant: "cgrates.org", ID: "FLTR_TH_Resource", Rules: []*engine.FilterRule{ @@ -518,14 +538,16 @@ func testV1FltrAccounts(t *testing.T) { // Add a filter with fieldName taken value from account 1001 // and check if *monetary balance is minim 9 ( greater than 9) // we expect that the balance to be 10 so the filter should pass (10 > 9) - filter := &engine.Filter{ - Tenant: "cgrates.org", - ID: "FLTR_TH_Accounts", - Rules: []*engine.FilterRule{ - { - Type: "*gt", - FieldName: "~*accounts.1001.BalanceMap.*monetary[0].Value", - Values: []string{"9"}, + filter := v1.FilterWithCache{ + Filter: &engine.Filter{ + Tenant: "cgrates.org", + ID: "FLTR_TH_Accounts", + Rules: []*engine.FilterRule{ + { + Type: "*gt", + FieldName: "~*accounts.1001.BalanceMap.*monetary[0].Value", + Values: []string{"9"}, + }, }, }, } @@ -547,15 +569,17 @@ func testV1FltrAccounts(t *testing.T) { } time.Sleep(10 * time.Millisecond) //Add a threshold with filter from above and an inline filter for Account 1010 - tPrfl := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "TH_Account", - FilterIDs: []string{"FLTR_TH_Accounts", "*string:~*req.Account:1001"}, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Millisecond), - Weight: 90.0, - ActionIDs: []string{"LOG"}, - Async: true, + tPrfl := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "TH_Account", + FilterIDs: []string{"FLTR_TH_Accounts", "*string:~*req.Account:1001"}, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Millisecond), + Weight: 90.0, + ActionIDs: []string{"LOG"}, + Async: true, + }, } if err := fltrRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl, &result); err != nil { t.Error(err) @@ -566,15 +590,17 @@ func testV1FltrAccounts(t *testing.T) { if err := fltrRpc.Call(utils.ApierV1GetThresholdProfile, &utils.TenantID{Tenant: tPrfl.Tenant, ID: tPrfl.ID}, &rcvTh); err != nil { t.Error(err) - } else if !reflect.DeepEqual(tPrfl, rcvTh) { - t.Errorf("Expecting: %+v, received: %+v", tPrfl, rcvTh) + } else if !reflect.DeepEqual(tPrfl.ThresholdProfile, rcvTh) { + t.Errorf("Expecting: %+v, received: %+v", tPrfl.ThresholdProfile, rcvTh) } - tEv := utils.CGREvent{ - Tenant: "cgrates.org", - ID: "event1", - Event: map[string]interface{}{ - utils.Account: "1001"}, + tEv := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "event1", + Event: map[string]interface{}{ + utils.Account: "1001"}, + }, } var ids []string if err := fltrRpc.Call(utils.ThresholdSv1ProcessEvent, tEv, &ids); err != nil { @@ -587,7 +613,7 @@ func testV1FltrAccounts(t *testing.T) { // Add a filter with fieldName taken value from account 1001 // and check if *monetary balance is is minim 11 ( greater than 11) // we expect that the balance to be 10 so the filter should not pass (10 > 11) - filter = &engine.Filter{ + filter.Filter = &engine.Filter{ Tenant: "cgrates.org", ID: "FLTR_TH_Accounts", Rules: []*engine.FilterRule{ diff --git a/general_tests/multiplecdrc_it_test.go b/general_tests/multiplecdrc_it_test.go index 6ea8b5086..e2c9259a8 100644 --- a/general_tests/multiplecdrc_it_test.go +++ b/general_tests/multiplecdrc_it_test.go @@ -24,7 +24,6 @@ import ( "flag" "io/ioutil" "net/rpc" - "net/rpc/jsonrpc" "os" "path" "testing" @@ -109,7 +108,7 @@ func testMCDRCStartEngine(t *testing.T) { // Connect rpc client to rater func testMCDRCRpcConn(t *testing.T) { var err error - rater, err = jsonrpc.Dial("tcp", cfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + rater, err = newRPCClient(cfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } diff --git a/general_tests/placeholder.go b/general_tests/placeholder.go deleted file mode 100644 index 6dd7f036c..000000000 --- a/general_tests/placeholder.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ -package general_tests diff --git a/general_tests/resourcesv1_it_test.go b/general_tests/resourcesv1_it_test.go index bf3cb9574..aadc2a434 100644 --- a/general_tests/resourcesv1_it_test.go +++ b/general_tests/resourcesv1_it_test.go @@ -21,7 +21,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -95,7 +94,7 @@ func testV1RsStartEngine(t *testing.T) { func testV1RsRpcConn(t *testing.T) { var err error - rlsV1Rpc, err = jsonrpc.Dial("tcp", rlsV1Cfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + rlsV1Rpc, err = newRPCClient(rlsV1Cfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } diff --git a/general_tests/rpccaching_it_test.go b/general_tests/rpccaching_it_test.go index 3739d8fa4..82d95ad57 100644 --- a/general_tests/rpccaching_it_test.go +++ b/general_tests/rpccaching_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "reflect" "testing" @@ -106,7 +105,7 @@ func testRPCMethodsStartEngine(t *testing.T) { func testRPCMethodsRpcConn(t *testing.T) { var err error - rpcRpc, err = jsonrpc.Dial("tcp", rpcCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + rpcRpc, err = newRPCClient(rpcCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } @@ -153,14 +152,16 @@ func testRPCMethodsAddData(t *testing.T) { time.Sleep(10 * time.Millisecond) //Add a thresholdProfile to disable account - tPrfl := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "THD_AccDisableAndLog", - FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.DisableAction:DisableAction"}, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Second), - Weight: 30.0, - ActionIDs: []string{"DISABLE_LOG"}, + tPrfl := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THD_AccDisableAndLog", + FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.DisableAction:DisableAction"}, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Second), + Weight: 30.0, + ActionIDs: []string{"DISABLE_LOG"}, + }, } if err := rpcRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl, &reply); err != nil { t.Error(err) @@ -168,14 +169,16 @@ func testRPCMethodsAddData(t *testing.T) { t.Error("Unexpected reply returned", reply) } //Add a thresholdProfile to enable account - tPrfl2 := &engine.ThresholdProfile{ - Tenant: "cgrates.org", - ID: "THD_AccEnableAndLog", - FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.EnableAction:EnableAction"}, - MaxHits: -1, - MinSleep: time.Duration(1 * time.Second), - Weight: 30.0, - ActionIDs: []string{"ENABLE_LOG"}, + tPrfl2 := &engine.ThresholdWithCache{ + ThresholdProfile: &engine.ThresholdProfile{ + Tenant: "cgrates.org", + ID: "THD_AccEnableAndLog", + FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.EnableAction:EnableAction"}, + MaxHits: -1, + MinSleep: time.Duration(1 * time.Second), + Weight: 30.0, + ActionIDs: []string{"ENABLE_LOG"}, + }, } if err := rpcRpc.Call(utils.ApierV1SetThresholdProfile, tPrfl2, &reply); err != nil { t.Error(err) @@ -215,12 +218,14 @@ func testRPCMethodsAuthorizeSession(t *testing.T) { //disable the account var ids []string - thEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "DisableAccount", - Event: map[string]interface{}{ - utils.Account: "1001", - "DisableAction": "DisableAction", + thEvent := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "DisableAccount", + Event: map[string]interface{}{ + utils.Account: "1001", + "DisableAction": "DisableAction", + }, }, } //process event @@ -260,7 +265,7 @@ func testRPCMethodsAuthorizeSession(t *testing.T) { } //enable the account - thEvent = &utils.CGREvent{ + thEvent.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "EnableAccount", Event: map[string]interface{}{ @@ -308,12 +313,14 @@ func testRPCMethodsInitSession(t *testing.T) { //disable the account var ids []string - thEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "DisableAccount", - Event: map[string]interface{}{ - utils.Account: "1001", - "DisableAction": "DisableAction", + thEvent := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "DisableAccount", + Event: map[string]interface{}{ + utils.Account: "1001", + "DisableAction": "DisableAction", + }, }, } //process event @@ -353,7 +360,7 @@ func testRPCMethodsInitSession(t *testing.T) { } //enable the account - thEvent = &utils.CGREvent{ + thEvent.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "EnableAccount", Event: map[string]interface{}{ @@ -401,12 +408,14 @@ func testRPCMethodsUpdateSession(t *testing.T) { //disable the account var ids []string - thEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "DisableAccount", - Event: map[string]interface{}{ - utils.Account: "1001", - "DisableAction": "DisableAction", + thEvent := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "DisableAccount", + Event: map[string]interface{}{ + utils.Account: "1001", + "DisableAction": "DisableAction", + }, }, } //process event @@ -446,7 +455,7 @@ func testRPCMethodsUpdateSession(t *testing.T) { } //enable the account - thEvent = &utils.CGREvent{ + thEvent.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "EnableAccount", Event: map[string]interface{}{ @@ -511,20 +520,22 @@ func testRPCMethodsTerminateSession(t *testing.T) { } func testRPCMethodsProcessCDR(t *testing.T) { - args := utils.CGREvent{ - Tenant: "cgrates.org", - ID: "testRPCMethodsProcessCDR", - Event: map[string]interface{}{ - utils.Tenant: "cgrates.org", - utils.ToR: utils.VOICE, - utils.OriginID: "testRPCMethodsProcessCDR", - utils.RequestType: utils.META_PREPAID, - utils.Account: "1001", - utils.Subject: "ANY2CNT", - utils.Destination: "1002", - 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: 10 * time.Minute, + args := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "testRPCMethodsProcessCDR", + Event: map[string]interface{}{ + utils.Tenant: "cgrates.org", + utils.ToR: utils.VOICE, + utils.OriginID: "testRPCMethodsProcessCDR", + utils.RequestType: utils.META_PREPAID, + utils.Account: "1001", + utils.Subject: "ANY2CNT", + utils.Destination: "1002", + 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: 10 * time.Minute, + }, }, } var rply string @@ -537,7 +548,7 @@ func testRPCMethodsProcessCDR(t *testing.T) { time.Sleep(100 * time.Millisecond) //verify the CDR var cdrs []*engine.CDR - argsCDR := utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}} + argsCDR := &utils.RPCCDRsFilterWithArgDispatcher{RPCCDRsFilter: &utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}}} if err := rpcRpc.Call(utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil { t.Error("Unexpected error: ", err.Error()) } else if len(cdrs) != 1 { @@ -611,12 +622,14 @@ func testRPCMethodsProcessEvent(t *testing.T) { //disable the account var ids []string - thEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "DisableAccount", - Event: map[string]interface{}{ - utils.Account: "1001", - "DisableAction": "DisableAction", + thEvent := &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "DisableAccount", + Event: map[string]interface{}{ + utils.Account: "1001", + "DisableAction": "DisableAction", + }, }, } //process event @@ -657,7 +670,7 @@ func testRPCMethodsProcessEvent(t *testing.T) { } //enable the account - thEvent = &utils.CGREvent{ + thEvent.CGREvent = &utils.CGREvent{ Tenant: "cgrates.org", ID: "EnableAccount", Event: map[string]interface{}{ @@ -700,7 +713,7 @@ func testRPCMethodsCdrsProcessCDR(t *testing.T) { time.Sleep(time.Duration(150) * time.Millisecond) // Give time for CDR to be rated //verify the CDR var cdrs []*engine.CDR - argsCDR := utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}} + argsCDR := utils.RPCCDRsFilterWithArgDispatcher{RPCCDRsFilter: &utils.RPCCDRsFilter{RunIDs: []string{utils.MetaRaw}}} if err := rpcRpc.Call(utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil { t.Error("Unexpected error: ", err.Error()) } else if len(cdrs) != 1 { @@ -801,15 +814,17 @@ func testRPCMethodsLoadData(t *testing.T) { func testRPCMethodsResponderDebit(t *testing.T) { tStart := time.Date(2016, 3, 31, 0, 0, 0, 0, time.UTC) - cd := engine.CallDescriptor{ - CgrID: "testRPCMethodsResponderDebit", - Category: "call", - Tenant: "cgrates.org", - Subject: "1001", - Destination: "+49", - DurationIndex: 0, - TimeStart: tStart, - TimeEnd: tStart.Add(time.Duration(15) * time.Second), + cd := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + CgrID: "testRPCMethodsResponderDebit", + Category: "call", + Tenant: "cgrates.org", + Subject: "1001", + Destination: "+49", + DurationIndex: 0, + TimeStart: tStart, + TimeEnd: tStart.Add(time.Duration(15) * time.Second), + }, } var cc engine.CallCost //cache the response @@ -822,8 +837,10 @@ func testRPCMethodsResponderDebit(t *testing.T) { t.Errorf("Expecting: %+v, \n received: %+v", 15, cc.Cost) } - cd2 := engine.CallDescriptor{ - CgrID: "testRPCMethodsResponderDebit", + cd2 := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + CgrID: "testRPCMethodsResponderDebit", + }, } var ccCache engine.CallCost //cache the response @@ -842,16 +859,18 @@ func testRPCMethodsResponderDebit(t *testing.T) { func testRPCMethodsResponderMaxDebit(t *testing.T) { tStart := time.Date(2016, 3, 31, 0, 0, 0, 0, time.UTC) - cd := engine.CallDescriptor{ - CgrID: "testRPCMethodsResponderMaxDebit", - Category: "call", - Tenant: "cgrates.org", - Account: "1001", - Subject: "free", - Destination: "+49", - DurationIndex: 0, - TimeStart: tStart, - TimeEnd: tStart.Add(time.Duration(15) * time.Second), + cd := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + CgrID: "testRPCMethodsResponderMaxDebit", + Category: "call", + Tenant: "cgrates.org", + Account: "1001", + Subject: "free", + Destination: "+49", + DurationIndex: 0, + TimeStart: tStart, + TimeEnd: tStart.Add(time.Duration(15) * time.Second), + }, } var cc engine.CallCost //cache the response @@ -864,8 +883,10 @@ func testRPCMethodsResponderMaxDebit(t *testing.T) { t.Errorf("Expecting: %+v, \n received: %+v", 0, cc.Cost) } - cd2 := engine.CallDescriptor{ - CgrID: "testRPCMethodsResponderMaxDebit", + cd2 := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + CgrID: "testRPCMethodsResponderMaxDebit", + }, } var ccCache engine.CallCost //cache the response diff --git a/general_tests/sentinel_it_test.go b/general_tests/sentinel_it_test.go index 42881fb45..cb8286b83 100755 --- a/general_tests/sentinel_it_test.go +++ b/general_tests/sentinel_it_test.go @@ -23,7 +23,6 @@ package general_tests import ( "flag" "net/rpc" - "net/rpc/jsonrpc" "os/exec" "path" "reflect" @@ -116,7 +115,7 @@ func testRedisSentinelStartEngine(t *testing.T) { func testRedisSentinelRPCCon(t *testing.T) { var err error - sentinelRPC, err = jsonrpc.Dial("tcp", sentinelConfig.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + sentinelRPC, err = newRPCClient(sentinelConfig.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal(err) } diff --git a/general_tests/session2_it_test.go b/general_tests/session2_it_test.go index 6f092684e..57f85955c 100644 --- a/general_tests/session2_it_test.go +++ b/general_tests/session2_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -93,7 +92,7 @@ func testSes2ItStartEngine(t *testing.T) { func testSes2ItRPCConn(t *testing.T) { var err error - ses2RPC, err = jsonrpc.Dial("tcp", ses2Cfg.ListenCfg().RPCJSONListen) + ses2RPC, err = newRPCClient(ses2Cfg.ListenCfg()) if err != nil { t.Fatal(err) } diff --git a/general_tests/session3_it_test.go b/general_tests/session3_it_test.go index 1935589b5..b6df7fd33 100644 --- a/general_tests/session3_it_test.go +++ b/general_tests/session3_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "reflect" "testing" @@ -56,7 +55,7 @@ var ( testSes3ItAddVoiceBalance, testSes3ItTerminatWithoutInit, - testSes3ItInitAfterTerminate, + // testSes3ItInitAfterTerminate, testSes3ItBalance, testSes3ItCDRs, @@ -98,7 +97,7 @@ func testSes3ItStartEngine(t *testing.T) { func testSes3ItRPCConn(t *testing.T) { var err error - ses3RPC, err = jsonrpc.Dial("tcp", ses3Cfg.ListenCfg().RPCJSONListen) + ses3RPC, err = newRPCClient(ses3Cfg.ListenCfg()) if err != nil { t.Fatal(err) } @@ -175,9 +174,14 @@ func testSes3ItProcessEvent(t *testing.T) { }, }, } - if !reflect.DeepEqual(eAttrs, rply.Attributes) { + if *encoding == utils.MetaGOB { + eAttrs.CGREvent.Event[utils.Usage] = 5 * time.Minute + eAttrs.CGREvent.Event[utils.SetupTime], _ = utils.IfaceAsTime("2018-01-07T17:00:00Z", "") + eAttrs.CGREvent.Event[utils.AnswerTime], _ = utils.IfaceAsTime("2018-01-07T17:00:10Z", "") + } + if !reflect.DeepEqual(*eAttrs, *rply.Attributes) { t.Errorf("expecting: %+v, received: %+v", - utils.ToJSON(eAttrs), utils.ToJSON(rply.Attributes)) + eAttrs.CGREvent, rply.Attributes.CGREvent) } } @@ -185,7 +189,7 @@ func testSes3ItThreshold1002After(t *testing.T) { var td engine.Threshold eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1001", Hits: 1} if err := ses3RPC.Call(utils.ThresholdSv1GetThreshold, - &utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}, &td); err != nil { + &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}}, &td); err != nil { t.Error(err) } else if !reflect.DeepEqual(eTd.Tenant, td.Tenant) { t.Errorf("expecting: %+v, received: %+v", eTd.Tenant, td.Tenant) @@ -205,7 +209,7 @@ func testSes3ItStatMetricsAfter(t *testing.T) { } if err := ses3RPC.Call(utils.StatSv1GetQueueStringMetrics, - &utils.TenantID{Tenant: "cgrates.org", ID: "Stat_1"}, &metrics); err != nil { + &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "Stat_1"}}, &metrics); err != nil { t.Error(err) } if !reflect.DeepEqual(statMetrics, metrics) { @@ -217,7 +221,7 @@ func testSes3ItThreshold1002After2(t *testing.T) { var td engine.Threshold eTd := engine.Threshold{Tenant: "cgrates.org", ID: "THD_ACNT_1001", Hits: 2} if err := ses3RPC.Call(utils.ThresholdSv1GetThreshold, - &utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}, &td); err != nil { + &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}}, &td); err != nil { t.Error(err) } else if !reflect.DeepEqual(eTd.Tenant, td.Tenant) { t.Errorf("expecting: %+v, received: %+v", eTd.Tenant, td.Tenant) @@ -237,7 +241,7 @@ func testSes3ItStatMetricsAfter2(t *testing.T) { } if err := ses3RPC.Call(utils.StatSv1GetQueueStringMetrics, - &utils.TenantID{Tenant: "cgrates.org", ID: "Stat_1"}, &metrics); err != nil { + &utils.TenantIDWithArgDispatcher{TenantID: &utils.TenantID{Tenant: "cgrates.org", ID: "Stat_1"}}, &metrics); err != nil { t.Error(err) } if !reflect.DeepEqual(statMetrics, metrics) { @@ -301,16 +305,16 @@ func testSes3ItTerminatWithoutInit(t *testing.T) { var rply string if err := ses3RPC.Call(utils.SessionSv1TerminateSession, args, &rply); err != nil { - t.Error(err) + t.Fatal(err) } if rply != utils.OK { t.Errorf("Unexpected reply: %s", rply) } }() -} + // } -func testSes3ItInitAfterTerminate(t *testing.T) { + // func testSes3ItInitAfterTerminate(t *testing.T) { time.Sleep(3 * time.Millisecond) args1 := &sessions.V1InitSessionArgs{ InitSession: true, @@ -342,14 +346,14 @@ func testSes3ItInitAfterTerminate(t *testing.T) { } time.Sleep(5 * time.Millisecond) aSessions := make([]*sessions.ExternalSession, 0) - if err := ses3RPC.Call(utils.SessionSv1GetActiveSessions, nil, &aSessions); err == nil || + if err := ses3RPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } } func testSes3ItBalance(t *testing.T) { time.Sleep(10 * time.Millisecond) - var acnt *engine.Account + var acnt engine.Account attrs := &utils.AttrGetAccount{ Tenant: "cgrates.org", Account: "1002", @@ -364,22 +368,25 @@ func testSes3ItBalance(t *testing.T) { func testSes3ItCDRs(t *testing.T) { var reply string - if err := ses3RPC.Call(utils.SessionSv1ProcessCDR, &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "TestSesItProccesCDR", - Event: map[string]interface{}{ - utils.Tenant: "cgrates.org", - utils.Category: "call", - utils.ToR: utils.VOICE, - utils.OriginID: "TestTerminate", - utils.RequestType: utils.META_PREPAID, - utils.Account: "1002", - utils.Subject: "1001", - utils.Destination: "1001", - 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: 2 * time.Second, - }}, &reply); err != nil { + if err := ses3RPC.Call(utils.SessionSv1ProcessCDR, &engine.ArgsProcessEvent{ + CGREvent: &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "TestSesItProccesCDR", + Event: map[string]interface{}{ + utils.Tenant: "cgrates.org", + utils.Category: "call", + utils.ToR: utils.VOICE, + utils.OriginID: "TestTerminate", + utils.RequestType: utils.META_PREPAID, + utils.Account: "1002", + utils.Subject: "1001", + utils.Destination: "1001", + 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: 2 * time.Second, + }, + }, + }, &reply); err != nil { t.Error(err) } else if reply != utils.OK { t.Errorf("Received reply: %s", reply) diff --git a/general_tests/session_it_test.go b/general_tests/session_it_test.go index 2320bea09..ac17e3f8e 100644 --- a/general_tests/session_it_test.go +++ b/general_tests/session_it_test.go @@ -21,7 +21,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -87,7 +86,7 @@ func testSesItStartEngine(t *testing.T) { func testSesItRPCConn(t *testing.T) { var err error - sesRPC, err = jsonrpc.Dial("tcp", sesCfg.ListenCfg().RPCJSONListen) + sesRPC, err = newRPCClient(sesCfg.ListenCfg()) if err != nil { t.Fatal(err) } @@ -103,7 +102,7 @@ func testSesItLoadFromFolder(t *testing.T) { } func testAccountBalance2(t *testing.T, sracc, srten, balType string, expected float64) { - var acnt *engine.Account + var acnt engine.Account attrs := &utils.AttrGetAccount{ Tenant: srten, Account: sracc, @@ -198,7 +197,7 @@ func testSesItTerminateSession(t *testing.T) { t.Errorf("Unexpected reply: %s", rply) } aSessions := make([]*sessions.ExternalSession, 0) - if err := sesRPC.Call(utils.SessionSv1GetActiveSessions, nil, &aSessions); err == nil || + if err := sesRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } diff --git a/general_tests/session_replications_automaticdebit_it_test.go b/general_tests/session_replications_automaticdebit_it_test.go index 82b47a771..c4a510372 100644 --- a/general_tests/session_replications_automaticdebit_it_test.go +++ b/general_tests/session_replications_automaticdebit_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "fmt" "net/rpc" - "net/rpc/jsonrpc" "os/exec" "path" "testing" @@ -129,10 +128,10 @@ func testSessionSRplStartEngine(t *testing.T) { // Connect rpc client to rater func testSessionSRplApierRpcConn(t *testing.T) { - if smgRplcMstrRPC, err = jsonrpc.Dial("tcp", smgRplcMasterCfg.ListenCfg().RPCJSONListen); err != nil { + if smgRplcMstrRPC, err = newRPCClient(smgRplcMasterCfg.ListenCfg()); err != nil { t.Fatal(err) } - if smgRplcSlvRPC, err = jsonrpc.Dial("tcp", smgRplcSlaveCfg.ListenCfg().RPCJSONListen); err != nil { + if smgRplcSlvRPC, err = newRPCClient(smgRplcSlaveCfg.ListenCfg()); err != nil { t.Fatal(err) } } @@ -151,11 +150,11 @@ func testSessionSRplInitiate(t *testing.T) { var aSessions []*sessions.ExternalSession //make sure we don't have active sessions on master and passive on slave if err := smgRplcMstrRPC.Call(utils.SessionSv1GetActiveSessions, - nil, &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { + new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } if err := smgRplcSlvRPC.Call(utils.SessionSv1GetPassiveSessions, - nil, &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { + new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } @@ -299,14 +298,14 @@ func testSessionSRplActivateSlave(t *testing.T) { } // activate sessions on slave var rplActivate string - if err := smgRplcSlvRPC.Call(utils.SessionSv1ActivateSessions, nil, &rplActivate); err != nil { + if err := smgRplcSlvRPC.Call(utils.SessionSv1ActivateSessions, []string{}, &rplActivate); err != nil { t.Error(err) } time.Sleep(5 * time.Millisecond) //check if the active session is on slave now var aSessions []*sessions.ExternalSession var autoDebit1, autoDebit2 time.Time - if err := smgRplcSlvRPC.Call(utils.SessionSv1GetActiveSessions, nil, &aSessions); err != nil { + if err := smgRplcSlvRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil { t.Error(err) } else if len(aSessions) != 1 { t.Errorf("Unexpected number of sessions received: %+v", utils.ToIJSON(aSessions)) @@ -317,7 +316,7 @@ func testSessionSRplActivateSlave(t *testing.T) { t.Errorf("unexpected NextAutoDebit: %s", utils.ToIJSON(aSessions[0])) } time.Sleep(10 * time.Millisecond) - if err := smgRplcSlvRPC.Call(utils.SessionSv1GetActiveSessions, nil, &aSessions); err != nil { + if err := smgRplcSlvRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil { t.Error(err) } else if len(aSessions) != 1 { t.Errorf("Unexpected number of sessions received: %+v", utils.ToIJSON(aSessions)) @@ -378,13 +377,13 @@ func testSessionSRplTerminate(t *testing.T) { //check if the session was terminated on slave if err := smgRplcSlvRPC.Call(utils.SessionSv1GetActiveSessions, - nil, &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { + new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Errorf("Error: %v with len(aSessions)=%v , session : %+v", err, len(aSessions), utils.ToIJSON(aSessions)) } // check to don't have passive session on slave var pSessions []*sessions.ExternalSession - if err := smgRplcSlvRPC.Call(utils.SessionSv1GetPassiveSessions, nil, - &pSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { + if err := smgRplcSlvRPC.Call(utils.SessionSv1GetPassiveSessions, + new(utils.SessionFilter), &pSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Errorf("Error: %v with len(pSessions)=%v , session : %+v", err, len(pSessions), utils.ToIJSON(pSessions)) } diff --git a/general_tests/sessionrefund_it_test.go b/general_tests/sessionrefund_it_test.go index 5955bf9ed..b5d37ac5e 100644 --- a/general_tests/sessionrefund_it_test.go +++ b/general_tests/sessionrefund_it_test.go @@ -21,7 +21,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -89,7 +88,7 @@ func testSrItStartEngine(t *testing.T) { func testSrItRPCConn(t *testing.T) { var err error - srrpc, err = jsonrpc.Dial("tcp", srCfg.ListenCfg().RPCJSONListen) + srrpc, err = newRPCClient(srCfg.ListenCfg()) if err != nil { t.Fatal(err) } @@ -200,7 +199,7 @@ func testSrItTerminateSession(t *testing.T) { t.Errorf("Unexpected reply: %s", rply) } aSessions := make([]*sessions.ExternalSession, 0) - if err := srrpc.Call(utils.SessionSv1GetActiveSessions, nil, &aSessions); err == nil || + if err := srrpc.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } @@ -289,7 +288,7 @@ func testSrItTerminateSession2(t *testing.T) { t.Errorf("Unexpected reply: %s", rply) } aSessions := make([]*sessions.ExternalSession, 0) - if err := srrpc.Call(utils.SessionSv1GetActiveSessions, nil, &aSessions); err == nil || + if err := srrpc.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } diff --git a/general_tests/supplier_it_test.go b/general_tests/supplier_it_test.go index ab0154531..9a7891220 100644 --- a/general_tests/supplier_it_test.go +++ b/general_tests/supplier_it_test.go @@ -22,12 +22,12 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "reflect" "testing" "time" + v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -37,7 +37,7 @@ var ( splSv1CfgPath string splSv1Cfg *config.CGRConfig splSv1Rpc *rpc.Client - splPrf *engine.SupplierProfile + splPrf *v1.SupplierWithCache splSv1ConfDIR string //run tests for specific configuration sTestsSupplierSV1 = []func(t *testing.T){ @@ -104,7 +104,7 @@ func testV1SplSStartEngine(t *testing.T) { func testV1SplSRpcConn(t *testing.T) { var err error - splSv1Rpc, err = jsonrpc.Dial("tcp", splSv1Cfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + splSv1Rpc, err = newRPCClient(splSv1Cfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } @@ -126,20 +126,22 @@ func testV1SplSSetSupplierProfilesWithoutRatingPlanIDs(t *testing.T) { err.Error() != utils.ErrNotFound.Error() { t.Error(err) } - splPrf = &engine.SupplierProfile{ - Tenant: "cgrates.org", - ID: "TEST_PROFILE2", - Sorting: utils.MetaLC, - Suppliers: []*engine.Supplier{ - { - ID: "SPL1", - FilterIDs: []string{"FLTR_1"}, - AccountIDs: []string{"accc"}, - Weight: 20, - Blocker: false, + splPrf = &v1.SupplierWithCache{ + SupplierProfile: &engine.SupplierProfile{ + Tenant: "cgrates.org", + ID: "TEST_PROFILE2", + Sorting: utils.MetaLC, + Suppliers: []*engine.Supplier{ + { + ID: "SPL1", + FilterIDs: []string{"FLTR_1"}, + AccountIDs: []string{"accc"}, + Weight: 20, + Blocker: false, + }, }, + Weight: 10, }, - Weight: 10, } var result string if err := splSv1Rpc.Call(utils.ApierV1SetSupplierProfile, splPrf, &result); err != nil { @@ -150,8 +152,8 @@ func testV1SplSSetSupplierProfilesWithoutRatingPlanIDs(t *testing.T) { if err := splSv1Rpc.Call(utils.ApierV1GetSupplierProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "TEST_PROFILE2"}, &reply); err != nil { t.Error(err) - } else if !reflect.DeepEqual(splPrf, reply) { - t.Errorf("Expecting: %+v, received: %+v", splPrf, reply) + } else if !reflect.DeepEqual(splPrf.SupplierProfile, reply) { + t.Errorf("Expecting: %+v, received: %+v", splPrf.SupplierProfile, reply) } ev := &engine.ArgsGetSuppliers{ CGREvent: &utils.CGREvent{ @@ -189,34 +191,36 @@ func testV1SplSAddNewSplPrf(t *testing.T) { t.Error(err) } //create a new Supplier Profile to test *reas and *reds sorting strategy - splPrf = &engine.SupplierProfile{ - Tenant: "cgrates.org", - ID: "SPL_ResourceTest", - Sorting: utils.MetaReas, - FilterIDs: []string{"*string:~*req.CustomField:ResourceTest"}, - Suppliers: []*engine.Supplier{ - //supplier1 will have ResourceUsage = 11 - { - ID: "supplier1", - ResourceIDs: []string{"ResourceSupplier1", "Resource2Supplier1"}, - Weight: 20, - Blocker: false, - }, - //supplier2 and supplier3 will have the same ResourceUsage = 7 - { - ID: "supplier2", - ResourceIDs: []string{"ResourceSupplier2"}, - Weight: 20, - Blocker: false, - }, - { - ID: "supplier3", - ResourceIDs: []string{"ResourceSupplier3"}, - Weight: 35, - Blocker: false, + splPrf = &v1.SupplierWithCache{ + SupplierProfile: &engine.SupplierProfile{ + Tenant: "cgrates.org", + ID: "SPL_ResourceTest", + Sorting: utils.MetaReas, + FilterIDs: []string{"*string:~*req.CustomField:ResourceTest"}, + Suppliers: []*engine.Supplier{ + //supplier1 will have ResourceUsage = 11 + { + ID: "supplier1", + ResourceIDs: []string{"ResourceSupplier1", "Resource2Supplier1"}, + Weight: 20, + Blocker: false, + }, + //supplier2 and supplier3 will have the same ResourceUsage = 7 + { + ID: "supplier2", + ResourceIDs: []string{"ResourceSupplier2"}, + Weight: 20, + Blocker: false, + }, + { + ID: "supplier3", + ResourceIDs: []string{"ResourceSupplier3"}, + Weight: 35, + Blocker: false, + }, }, + Weight: 10, }, - Weight: 10, } var result string if err := splSv1Rpc.Call(utils.ApierV1SetSupplierProfile, splPrf, &result); err != nil { @@ -227,27 +231,29 @@ func testV1SplSAddNewSplPrf(t *testing.T) { if err := splSv1Rpc.Call(utils.ApierV1GetSupplierProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "SPL_ResourceTest"}, &reply); err != nil { t.Error(err) - } else if !reflect.DeepEqual(splPrf, reply) { - t.Errorf("Expecting: %+v, received: %+v", splPrf, reply) + } else if !reflect.DeepEqual(splPrf.SupplierProfile, reply) { + t.Errorf("Expecting: %+v, received: %+v", splPrf.SupplierProfile, reply) } } func testV1SplSAddNewResPrf(t *testing.T) { var result string //add ResourceSupplier1 - rPrf := &engine.ResourceProfile{ - Tenant: "cgrates.org", - ID: "ResourceSupplier1", - FilterIDs: []string{"*string:~*req.Supplier:supplier1", "*string:~*req.ResID:ResourceSupplier1"}, - ActivationInterval: &utils.ActivationInterval{ - ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + rPrf := &v1.ResourceWithCache{ + ResourceProfile: &engine.ResourceProfile{ + Tenant: "cgrates.org", + ID: "ResourceSupplier1", + FilterIDs: []string{"*string:~*req.Supplier:supplier1", "*string:~*req.ResID:ResourceSupplier1"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + UsageTTL: time.Duration(1) * time.Minute, + Limit: 10, + Stored: true, + Weight: 20, + ThresholdIDs: []string{utils.META_NONE}, }, - UsageTTL: time.Duration(1) * time.Minute, - Limit: 10, - Stored: true, - Weight: 20, - ThresholdIDs: []string{utils.META_NONE}, } if err := splSv1Rpc.Call(utils.ApierV1SetResourceProfile, rPrf, &result); err != nil { @@ -256,19 +262,21 @@ func testV1SplSAddNewResPrf(t *testing.T) { t.Error("Unexpected reply returned", result) } //add Resource2Supplier1 - rPrf2 := &engine.ResourceProfile{ - Tenant: "cgrates.org", - ID: "Resource2Supplier1", - FilterIDs: []string{"*string:~*req.Supplier:supplier1", "*string:~*req.ResID:Resource2Supplier1"}, - ActivationInterval: &utils.ActivationInterval{ - ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + rPrf2 := &v1.ResourceWithCache{ + ResourceProfile: &engine.ResourceProfile{ + Tenant: "cgrates.org", + ID: "Resource2Supplier1", + FilterIDs: []string{"*string:~*req.Supplier:supplier1", "*string:~*req.ResID:Resource2Supplier1"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + UsageTTL: time.Duration(1) * time.Minute, + Limit: 10, + Stored: true, + Weight: 30, + ThresholdIDs: []string{utils.META_NONE}, }, - UsageTTL: time.Duration(1) * time.Minute, - Limit: 10, - Stored: true, - Weight: 30, - ThresholdIDs: []string{utils.META_NONE}, } if err := splSv1Rpc.Call(utils.ApierV1SetResourceProfile, rPrf2, &result); err != nil { @@ -277,19 +285,21 @@ func testV1SplSAddNewResPrf(t *testing.T) { t.Error("Unexpected reply returned", result) } //add ResourceSupplier2 - rPrf3 := &engine.ResourceProfile{ - Tenant: "cgrates.org", - ID: "ResourceSupplier2", - FilterIDs: []string{"*string:~*req.Supplier:supplier2", "*string:~*req.ResID:ResourceSupplier2"}, - ActivationInterval: &utils.ActivationInterval{ - ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + rPrf3 := &v1.ResourceWithCache{ + ResourceProfile: &engine.ResourceProfile{ + Tenant: "cgrates.org", + ID: "ResourceSupplier2", + FilterIDs: []string{"*string:~*req.Supplier:supplier2", "*string:~*req.ResID:ResourceSupplier2"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + UsageTTL: time.Duration(1) * time.Minute, + Limit: 10, + Stored: true, + Weight: 20, + ThresholdIDs: []string{utils.META_NONE}, }, - UsageTTL: time.Duration(1) * time.Minute, - Limit: 10, - Stored: true, - Weight: 20, - ThresholdIDs: []string{utils.META_NONE}, } if err := splSv1Rpc.Call(utils.ApierV1SetResourceProfile, rPrf3, &result); err != nil { @@ -298,19 +308,21 @@ func testV1SplSAddNewResPrf(t *testing.T) { t.Error("Unexpected reply returned", result) } //add ResourceSupplier2 - rPrf4 := &engine.ResourceProfile{ - Tenant: "cgrates.org", - ID: "ResourceSupplier3", - FilterIDs: []string{"*string:~*req.Supplier:supplier3", "*string:~*req.ResID:ResourceSupplier3"}, - ActivationInterval: &utils.ActivationInterval{ - ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), - ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + rPrf4 := &v1.ResourceWithCache{ + ResourceProfile: &engine.ResourceProfile{ + Tenant: "cgrates.org", + ID: "ResourceSupplier3", + FilterIDs: []string{"*string:~*req.Supplier:supplier3", "*string:~*req.ResID:ResourceSupplier3"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + }, + UsageTTL: time.Duration(1) * time.Minute, + Limit: 10, + Stored: true, + Weight: 20, + ThresholdIDs: []string{utils.META_NONE}, }, - UsageTTL: time.Duration(1) * time.Minute, - Limit: 10, - Stored: true, - Weight: 20, - ThresholdIDs: []string{utils.META_NONE}, } if err := splSv1Rpc.Call(utils.ApierV1SetResourceProfile, rPrf4, &result); err != nil { @@ -452,34 +464,36 @@ func testV1SplSAddNewSplPrf2(t *testing.T) { t.Error(err) } //create a new Supplier Profile to test *reas and *reds sorting strategy - splPrf = &engine.SupplierProfile{ - Tenant: "cgrates.org", - ID: "SPL_ResourceDescendent", - Sorting: utils.MetaReds, - FilterIDs: []string{"*string:~*req.CustomField:ResourceDescendent"}, - Suppliers: []*engine.Supplier{ - //supplier1 will have ResourceUsage = 11 - { - ID: "supplier1", - ResourceIDs: []string{"ResourceSupplier1", "Resource2Supplier1"}, - Weight: 20, - Blocker: false, - }, - //supplier2 and supplier3 will have the same ResourceUsage = 7 - { - ID: "supplier2", - ResourceIDs: []string{"ResourceSupplier2"}, - Weight: 20, - Blocker: false, - }, - { - ID: "supplier3", - ResourceIDs: []string{"ResourceSupplier3"}, - Weight: 35, - Blocker: false, + splPrf = &v1.SupplierWithCache{ + SupplierProfile: &engine.SupplierProfile{ + Tenant: "cgrates.org", + ID: "SPL_ResourceDescendent", + Sorting: utils.MetaReds, + FilterIDs: []string{"*string:~*req.CustomField:ResourceDescendent"}, + Suppliers: []*engine.Supplier{ + //supplier1 will have ResourceUsage = 11 + { + ID: "supplier1", + ResourceIDs: []string{"ResourceSupplier1", "Resource2Supplier1"}, + Weight: 20, + Blocker: false, + }, + //supplier2 and supplier3 will have the same ResourceUsage = 7 + { + ID: "supplier2", + ResourceIDs: []string{"ResourceSupplier2"}, + Weight: 20, + Blocker: false, + }, + { + ID: "supplier3", + ResourceIDs: []string{"ResourceSupplier3"}, + Weight: 35, + Blocker: false, + }, }, + Weight: 10, }, - Weight: 10, } var result string if err := splSv1Rpc.Call(utils.ApierV1SetSupplierProfile, splPrf, &result); err != nil { @@ -490,8 +504,8 @@ func testV1SplSAddNewSplPrf2(t *testing.T) { if err := splSv1Rpc.Call(utils.ApierV1GetSupplierProfile, &utils.TenantID{Tenant: "cgrates.org", ID: "SPL_ResourceDescendent"}, &reply); err != nil { t.Error(err) - } else if !reflect.DeepEqual(splPrf, reply) { - t.Errorf("Expecting: %+v, received: %+v", splPrf, reply) + } else if !reflect.DeepEqual(splPrf.SupplierProfile, reply) { + t.Errorf("Expecting: %+v, received: %+v", splPrf.SupplierProfile, reply) } } diff --git a/general_tests/suretax_it_test.go b/general_tests/suretax_it_test.go index 61c1e6340..848624110 100644 --- a/general_tests/suretax_it_test.go +++ b/general_tests/suretax_it_test.go @@ -99,7 +99,7 @@ func testSTIStartEngine(t *testing.T) { // Connect rpc client to rater func testSTIRpcConn(t *testing.T) { var err error - stiRpc, err = jsonrpc.Dial("tcp", stiCfg.RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + stiRpc, err = newRPCClient(stiCfg) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal(err) } diff --git a/general_tests/tp_it_test.go b/general_tests/tp_it_test.go index 73756bb73..b77ec6fd8 100644 --- a/general_tests/tp_it_test.go +++ b/general_tests/tp_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -103,7 +102,7 @@ func testTpStartEngine(t *testing.T) { // Connect rpc client to rater func testTpRpcConn(t *testing.T) { var err error - tpRPC, err = jsonrpc.Dial("tcp", tpCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + tpRPC, err = newRPCClient(tpCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal(err) } @@ -120,14 +119,16 @@ func testTpLoadTariffPlanFromFolder(t *testing.T) { func testTpBalanceCounter(t *testing.T) { tStart := time.Date(2016, 3, 31, 0, 0, 0, 0, time.UTC) - cd := engine.CallDescriptor{ - Category: "call", - Tenant: "cgrates.org", - Subject: "1001", - Destination: "+49", - DurationIndex: 0, - TimeStart: tStart, - TimeEnd: tStart.Add(time.Duration(20) * time.Second), + cd := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + Category: "call", + Tenant: "cgrates.org", + Subject: "1001", + Destination: "+49", + DurationIndex: 0, + TimeStart: tStart, + TimeEnd: tStart.Add(time.Duration(20) * time.Second), + }, } var cc engine.CallCost if err := tpRPC.Call(utils.ResponderDebit, cd, &cc); err != nil { @@ -202,15 +203,17 @@ func testTpZeroCost(t *testing.T) { } balanceValueBefore := acnt.BalanceMap[utils.MONETARY][0].Value tStart := time.Date(2016, 3, 31, 0, 0, 0, 0, time.UTC) - cd := engine.CallDescriptor{ - Category: "call", - Tenant: "cgrates.org", - Subject: "free", - Account: "1012", - Destination: "+49", - DurationIndex: 0, - TimeStart: tStart, - TimeEnd: tStart.Add(time.Duration(20) * time.Second), + cd := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + Category: "call", + Tenant: "cgrates.org", + Subject: "free", + Account: "1012", + Destination: "+49", + DurationIndex: 0, + TimeStart: tStart, + TimeEnd: tStart.Add(time.Duration(20) * time.Second), + }, } var cc engine.CallCost if err := tpRPC.Call(utils.ResponderDebit, cd, &cc); err != nil { @@ -227,15 +230,17 @@ func testTpZeroCost(t *testing.T) { func testTpZeroNegativeCost(t *testing.T) { tStart := time.Date(2016, 3, 31, 0, 0, 0, 0, time.UTC) - cd := engine.CallDescriptor{ - Category: "call", - Tenant: "cgrates.org", - Subject: "free", - Account: "1013", - Destination: "+4915", - DurationIndex: 0, - TimeStart: tStart, - TimeEnd: tStart.Add(time.Duration(20) * time.Second), + cd := &engine.CallDescriptorWithArgDispatcher{ + CallDescriptor: &engine.CallDescriptor{ + Category: "call", + Tenant: "cgrates.org", + Subject: "free", + Account: "1013", + Destination: "+4915", + DurationIndex: 0, + TimeStart: tStart, + TimeEnd: tStart.Add(time.Duration(20) * time.Second), + }, } var cc engine.CallCost if err := tpRPC.Call(utils.ResponderDebit, cd, &cc); err != nil { diff --git a/general_tests/tut_smgeneric_it_test.go b/general_tests/tut_smgeneric_it_test.go index d20289e77..1c1f4fdfb 100644 --- a/general_tests/tut_smgeneric_it_test.go +++ b/general_tests/tut_smgeneric_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "reflect" "testing" @@ -41,14 +40,14 @@ var ( smgLoadInst utils.LoadInstance // Share load information between tests sTestTutSMG = []func(t *testing.T){ - TestTutSMGInitCfg, - TestTutSMGResetDataDb, - TestTutSMGResetStorDb, - TestTutSMGStartEngine, - TestTutSMGRpcConn, - TestTutSMGLoadTariffPlanFromFolder, - TestTutSMGCacheStats, - TestTutSMGStopCgrEngine, + testTutSMGInitCfg, + testTutSMGResetDataDb, + testTutSMGResetStorDb, + testTutSMGStartEngine, + testTutSMGRpcConn, + testTutSMGLoadTariffPlanFromFolder, + testTutSMGCacheStats, + testTutSMGStopCgrEngine, } ) @@ -58,7 +57,7 @@ func TestTutSMG(t *testing.T) { } } -func TestTutSMGInitCfg(t *testing.T) { +func testTutSMGInitCfg(t *testing.T) { tutSMGCfgPath = path.Join(*dataDir, "conf", "samples", "smgeneric") // Init config first var err error @@ -71,37 +70,37 @@ func TestTutSMGInitCfg(t *testing.T) { } // Remove data in both rating and accounting db -func TestTutSMGResetDataDb(t *testing.T) { +func testTutSMGResetDataDb(t *testing.T) { if err := engine.InitDataDb(tutSMGCfg); err != nil { t.Fatal(err) } } // Wipe out the cdr database -func TestTutSMGResetStorDb(t *testing.T) { +func testTutSMGResetStorDb(t *testing.T) { if err := engine.InitStorDb(tutSMGCfg); err != nil { t.Fatal(err) } } // Start CGR Engine -func TestTutSMGStartEngine(t *testing.T) { +func testTutSMGStartEngine(t *testing.T) { if _, err := engine.StopStartEngine(tutSMGCfgPath, *waitRater); err != nil { t.Fatal(err) } } // Connect rpc client to rater -func TestTutSMGRpcConn(t *testing.T) { +func testTutSMGRpcConn(t *testing.T) { var err error - tutSMGRpc, err = jsonrpc.Dial("tcp", tutSMGCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + tutSMGRpc, err = newRPCClient(tutSMGCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal(err) } } // Load the tariff plan, creating accounts and their balances -func TestTutSMGLoadTariffPlanFromFolder(t *testing.T) { +func testTutSMGLoadTariffPlanFromFolder(t *testing.T) { attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "oldtutorial")} if err := tutSMGRpc.Call(utils.ApierV2LoadTariffPlanFromFolder, attrs, &smgLoadInst); err != nil { t.Error(err) @@ -110,7 +109,7 @@ func TestTutSMGLoadTariffPlanFromFolder(t *testing.T) { } // Check loaded stats -func TestTutSMGCacheStats(t *testing.T) { +func testTutSMGCacheStats(t *testing.T) { var reply string if err := tutSMGRpc.Call(utils.CacheSv1LoadCache, utils.AttrReloadCache{}, &reply); err != nil { t.Error(err) @@ -144,14 +143,14 @@ func TestTutSMGCacheStats(t *testing.T) { expectedStats[utils.CacheActionTriggers].Items = 1 expectedStats[utils.CacheLoadIDs].Items = 20 expectedStats[utils.CacheChargerProfiles].Items = 1 - if err := tutSMGRpc.Call(utils.CacheSv1GetCacheStats, nil, &rcvStats); err != nil { + if err := tutSMGRpc.Call(utils.CacheSv1GetCacheStats, new(utils.AttrCacheIDsWithArgDispatcher), &rcvStats); err != nil { t.Error("Got error on CacheSv1.GetCacheStats: ", err.Error()) } else if !reflect.DeepEqual(expectedStats, rcvStats) { t.Errorf("Calling ApierV2.CacheSv1 expected: %+v,\n received: %+v", utils.ToJSON(expectedStats), utils.ToJSON(rcvStats)) } } -func TestTutSMGStopCgrEngine(t *testing.T) { +func testTutSMGStopCgrEngine(t *testing.T) { if err := engine.KillEngine(100); err != nil { t.Error(err) } diff --git a/general_tests/tutorial2_it_test.go b/general_tests/tutorial2_it_test.go index 12b65458f..9a44b7537 100644 --- a/general_tests/tutorial2_it_test.go +++ b/general_tests/tutorial2_it_test.go @@ -22,7 +22,6 @@ package general_tests import ( "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -94,7 +93,7 @@ func testTutStartEngine(t *testing.T) { func testTutRpcConn(t *testing.T) { var err error - if tutRpc, err = jsonrpc.Dial("tcp", tutCfg.ListenCfg().RPCJSONListen); err != nil { + if tutRpc, err = newRPCClient(tutCfg.ListenCfg()); err != nil { t.Fatal("could not connect to rater: ", err.Error()) } } @@ -307,12 +306,13 @@ func testTutAccounts(t *testing.T) { }, &reply); err != nil { t.Error(err) } + acnt = &engine.Account{} if err := tutRpc.Call(utils.ApierV2GetAccount, &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}, &acnt); err != nil { t.Error(err) } else if acnt.Disabled { - t.Errorf("account: %s", utils.ToIJSON(acnt)) + t.Errorf("account: %s", utils.ToJSON(acnt)) } } diff --git a/general_tests/tutorial_it_test.go b/general_tests/tutorial_it_test.go index 22c8894ca..000639f73 100644 --- a/general_tests/tutorial_it_test.go +++ b/general_tests/tutorial_it_test.go @@ -23,7 +23,6 @@ package general_tests import ( "flag" "net/rpc" - "net/rpc/jsonrpc" "path" "testing" "time" @@ -109,7 +108,7 @@ func testTutorialStartEngine(t *testing.T) { func testTutorialRpcConn(t *testing.T) { var err error - tutorialRpc, err = jsonrpc.Dial("tcp", tutorialCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed + tutorialRpc, err = newRPCClient(tutorialCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } diff --git a/gob_integration_test.sh b/gob_integration_test.sh index 1ff36c7ae..fd49dff59 100755 --- a/gob_integration_test.sh +++ b/gob_integration_test.sh @@ -17,9 +17,9 @@ cdrc=$? echo 'go test github.com/cgrates/cgrates/ers -tags=integration -rpc=*gob' go test github.com/cgrates/cgrates/ers -tags=integration -rpc=*gob ers=$? -# echo 'go test github.com/cgrates/cgrates/general_tests -tags=integration' -# go test github.com/cgrates/cgrates/general_tests -tags=integration -# gnr=$? +echo 'go test github.com/cgrates/cgrates/general_tests -tags=integration -rpc=*gob' +go test github.com/cgrates/cgrates/general_tests -tags=integration -rpc=*gob +gnr=$? # echo 'go test github.com/cgrates/cgrates/agents -tags=integration' # go test github.com/cgrates/cgrates/agents -tags=integration # agts=$?