diff --git a/data/conf/samples/gocs/us_site/cgrates.json b/data/conf/samples/gocs/us_site/cgrates.json
index c81cf4b8a..0dfdab271 100644
--- a/data/conf/samples/gocs/us_site/cgrates.json
+++ b/data/conf/samples/gocs/us_site/cgrates.json
@@ -1,28 +1,27 @@
{
-
"general": {
"log_level": 7,
- "node_id": "US_SITE",
+ "node_id": "US_SITE"
},
"listen": {
"rpc_json": ":4012",
"rpc_gob": ":4013",
- "http": ":4080",
+ "http": ":4080"
},
"rpc_conns": {
"conn1": {
"strategy": "*first",
- "conns": [{"address": "127.0.0.1:4012", "transport":"*json"}],
+ "conns": [{"address": "127.0.0.1:4012", "transport":"*json"}]
},
"rplConn": {
"strategy": "*first",
- "conns": [{"address": "127.0.0.1:3013", "transport":"*gob"}],
+ "conns": [{"address": "127.0.0.1:3013", "transport":"*gob"}]
},
"*internal": {
"strategy": "*first",
- "conns": [{"address": "*internal"}],
+ "conns": [{"address": "*internal"}]
}
},
@@ -52,27 +51,27 @@
- "rals": {
+ "rates": {
"enabled": true,
- "max_increments":3000000,
+ "max_increments":3000000
},
"schedulers": {
"enabled": true,
- "cdrs_conns": ["conn1"],
+ "cdrs_conns": ["conn1"]
},
"cdrs": {
"enabled": true,
"chargers_conns":["conn1"],
- "rals_conns": ["*internal"],
+ "rals_conns": ["*internal"]
},
"chargers": {
- "enabled": true,
+ "enabled": true
},
@@ -81,15 +80,18 @@
"listen_bijson": ":4014",
"rals_conns": ["*internal"],
"cdrs_conns": ["*internal"],
- "chargers_conns": ["*internal"],
+ "chargers_conns": ["*internal"]
},
"admins": {
"enabled": true,
"caches_conns":["conn1"],
- "scheduler_conns": ["conn1"],
+ "scheduler_conns": ["conn1"]
},
+ "accounts": {
+ "enabled": true
+ }
}
diff --git a/data/conf/samples/rpccaching_mongo/cgrates.json b/data/conf/samples/rpccaching_mongo/cgrates.json
index abf1aa583..316519673 100644
--- a/data/conf/samples/rpccaching_mongo/cgrates.json
+++ b/data/conf/samples/rpccaching_mongo/cgrates.json
@@ -1,81 +1,86 @@
{
-"general": {
- "log_level": 7,
- "reply_timeout": "10s", // consider connection down for replies taking longer than this value
-},
-
-"listen": {
- "rpc_json": ":2012",
- "rpc_gob": ":2013",
- "http": ":2080",
-},
-
-
-"data_db": {
- "db_type": "mongo",
- "db_name": "10",
- "db_port": 27017,
-},
-
-
-
-
-
-
-"caches":{
- "partitions": {
- "*rpc_responses": {"limit": -1, "ttl": "500ms"}
+ "general": {
+ "log_level": 7,
+ "reply_timeout": "10s"
+ },
+
+ "listen": {
+ "rpc_json": ":2012",
+ "rpc_gob": ":2013",
+ "http": ":2080"
},
-},
-"rals": {
- "enabled": true,
-},
+ "data_db": {
+ "db_type": "mongo",
+ "db_name": "10",
+ "db_port": 27017
+ },
+
+ "caches":{
+ "partitions": {
+ "*rpc_responses": {"limit": -1, "ttl": "500ms"}
+ }
+ },
-"schedulers": {
- "enabled": true,
-},
+ "rates": {
+ "enabled": true
+ },
-"cdrs": {
- "enabled": true,
- "session_cost_retries": 2, // number of queries to session_costs before recalculating CDR
-},
+ "schedulers": {
+ "enabled": true
+ },
-"attributes": {
- "enabled": true,
-},
+ "cdrs": {
+ "enabled": true,
+ "session_cost_retries": 2
+ },
-"chargers": {
- "enabled": true,
- "attributes_conns": ["*internal"],
-},
+ "attributes": {
+ "enabled": true
+ },
-"thresholds": {
- "enabled": true,
- "store_interval": "1s",
-},
+ "chargers": {
+ "enabled": true,
+ "attributes_conns": ["*internal"]
+ },
-"sessions": {
- "enabled": true,
- "chargers_conns": ["*internal"],
- "rals_conns": ["*internal"],
- "cdrs_conns": ["*internal"],
- "attributes_conns": ["*internal"],
-},
+ "thresholds": {
+ "enabled": true,
+ "store_interval": "1s"
+ },
-"admins": {
- "enabled": true,
- "scheduler_conns": ["*internal"],
-},
+ "sessions": {
+ "enabled": true,
+ "chargers_conns": ["*internal"],
+ "rates_conns": ["*internal"],
+ "cdrs_conns": ["*internal"],
+ "attributes_conns": ["*internal"]
+ },
+ "admins": {
+ "enabled": true,
+ "scheduler_conns": ["*internal"]
+ },
+
+ "loaders": [
+ {
+ "id": "*default",
+ "enabled": true,
+ "tenant": "cgrates.org",
+ "tp_in_dir": "/usr/share/cgrates/tariffplans/testit",
+ "tp_out_dir": "",
+ "lockfile_path": ""
+ }
+ ]
+
}
\ No newline at end of file
diff --git a/data/conf/samples/rpccaching_mysql/cgrates.json b/data/conf/samples/rpccaching_mysql/cgrates.json
index 0f2720f40..5b0bf70d6 100644
--- a/data/conf/samples/rpccaching_mysql/cgrates.json
+++ b/data/conf/samples/rpccaching_mysql/cgrates.json
@@ -1,73 +1,69 @@
{
-
-"general": {
- "log_level": 7,
- "reply_timeout": "10s", // consider connection down for replies taking longer than this value
-},
-
-"listen": {
- "rpc_json": ":2012",
- "rpc_gob": ":2013",
- "http": ":2080",
-},
-
-
-
-
-
-"caches":{
- "partitions": {
- "*rpc_responses": {"limit": -1, "ttl": "500ms"}
+ "general": {
+ "log_level": 7,
+ "reply_timeout": "10s"
},
-},
+ "listen": {
+ "rpc_json": ":2012",
+ "rpc_gob": ":2013",
+ "http": ":2080"
+ },
-"rals": {
- "enabled": true,
-},
+ "caches":{
+ "partitions": {
+ "*rpc_responses": {"limit": -1, "ttl": "500ms"}
+ }
+ },
+ "rates": {
+ "enabled": true
+ },
-"schedulers": {
- "enabled": true,
-},
+ "schedulers": {
+ "enabled": true
+ },
+ "cdrs": {
+ "enabled": true,
+ "session_cost_retries": 2
+ },
-"cdrs": {
- "enabled": true,
- "session_cost_retries": 2, // number of queries to session_costs before recalculating CDR
-},
+ "attributes": {
+ "enabled": true
+ },
+ "chargers": {
+ "enabled": true,
+ "attributes_conns": ["*internal"]
+ },
-"attributes": {
- "enabled": true,
-},
+ "thresholds": {
+ "enabled": true,
+ "store_interval": "1s"
+ },
+ "sessions": {
+ "enabled": true,
+ "chargers_conns": ["*internal"],
+ "rates_conns": ["*internal"],
+ "cdrs_conns": ["*internal"],
+ "attributes_conns": ["*internal"]
+ },
-"chargers": {
- "enabled": true,
- "attributes_conns": ["*internal"],
-},
-
-
-"thresholds": {
- "enabled": true,
- "store_interval": "1s",
-},
-
-
-"sessions": {
- "enabled": true,
- "chargers_conns": ["*internal"],
- "rals_conns": ["*internal"],
- "cdrs_conns": ["*internal"],
- "attributes_conns": ["*internal"],
-},
-
-
-"admins": {
- "enabled": true,
- "scheduler_conns": ["*internal"],
-},
-
+ "admins": {
+ "enabled": true,
+ "scheduler_conns": ["*internal"]
+ },
+ "loaders": [
+ {
+ "id": "*default",
+ "enabled": true,
+ "tenant": "cgrates.org",
+ "tp_in_dir": "/usr/share/cgrates/tariffplans/testit",
+ "tp_out_dir": "",
+ "lockfile_path": ""
+ }
+ ]
}
\ No newline at end of file
diff --git a/general_tests/gocs_it_test.go b/general_tests/gocs_it_test.go
index f35d146c2..1ee46b395 100644
--- a/general_tests/gocs_it_test.go
+++ b/general_tests/gocs_it_test.go
@@ -21,568 +21,600 @@ along with this program. If not, see
package general_tests
-// import (
-// "net/rpc"
-// "os/exec"
-// "path"
-// "reflect"
-// "testing"
-// "time"
+import (
+ "os/exec"
+ "path"
+ "reflect"
+ "testing"
+ "time"
-// "github.com/cgrates/cgrates/sessions"
+ "github.com/cgrates/birpc"
+ "github.com/cgrates/birpc/context"
+ "github.com/cgrates/cgrates/apis"
+ "github.com/cgrates/cgrates/sessions"
-// "github.com/cgrates/cgrates/utils"
+ "github.com/cgrates/cgrates/utils"
-// "github.com/cgrates/cgrates/config"
-// "github.com/cgrates/cgrates/engine"
-// )
+ "github.com/cgrates/cgrates/config"
+ "github.com/cgrates/cgrates/engine"
+)
-// var (
-// auCfgPath, usCfgPath, dspCfgPath string
-// auCfg, usCfg, dspCfg *config.CGRConfig
-// auRPC, usRPC, dspRPC *rpc.Client
-// auEngine, usEngine, dspEngine *exec.Cmd
-// sTestsGOCS = []func(t *testing.T){
-// testGOCSInitCfg,
-// testGOCSResetDB,
-// testGOCSStartEngine,
-// testGOCSApierRpcConn,
-// testGOCSLoadData,
-// testGOCSAuthSession,
-// testGOCSInitSession,
-// testGOCSUpdateSession,
-// testGOCSVerifyAccountsAfterStart,
-// testGOCSUpdateSession2,
-// testGOCSTerminateSession,
-// testGOCSProcessCDR,
-// testGOCSStopCgrEngine,
-// }
-// )
+var (
+ auCfgPath, usCfgPath, dspCfgPath string
+ auCfg, usCfg, dspCfg *config.CGRConfig
+ auRPC, usRPC, dspRPC *birpc.Client
+ auEngine, usEngine, dspEngine *exec.Cmd
+ sTestsGOCS = []func(t *testing.T){
+ testGOCSInitCfg,
+ testGOCSResetDB,
+ testGOCSStartEngine,
+ testGOCSApierRpcConn,
+ testGOCSLoadData,
+ // testGOCSAuthSession,
+ // testGOCSInitSession,
+ // testGOCSUpdateSession,
+ testGOCSVerifyAccountsAfterStart,
+ // testGOCSUpdateSession2,
+ // testGOCSTerminateSession,
+ // testGOCSProcessCDR,
+ testGOCSStopCgrEngine,
+ }
+)
-// // Test start here
-// func TestGOCSIT(t *testing.T) {
-// for _, stest := range sTestsGOCS {
-// t.Run("TestGOCSIT", stest)
-// }
-// }
+// Test start here
+func TestGOCSIT(t *testing.T) {
+ for _, stest := range sTestsGOCS {
+ t.Run("TestGOCSIT", stest)
+ }
+}
-// //Init Config
-// func testGOCSInitCfg(t *testing.T) {
-// auCfgPath = path.Join(*dataDir, "conf", "samples", "gocs", "au_site")
-// if auCfg, err = config.NewCGRConfigFromPath(auCfgPath); err != nil {
-// t.Fatal(err)
-// }
-// usCfgPath = path.Join(*dataDir, "conf", "samples", "gocs", "us_site")
-// if usCfg, err = config.NewCGRConfigFromPath(usCfgPath); err != nil {
-// t.Fatal(err)
-// }
-// dspCfgPath = path.Join(*dataDir, "conf", "samples", "gocs", "dsp_site")
-// if dspCfg, err = config.NewCGRConfigFromPath(dspCfgPath); err != nil {
-// t.Fatal(err)
-// }
-// }
+//Init Config
+func testGOCSInitCfg(t *testing.T) {
+ auCfgPath = path.Join(*dataDir, "conf", "samples", "gocs", "au_site")
+ if auCfg, err = config.NewCGRConfigFromPath(context.Background(), auCfgPath); err != nil {
+ t.Fatal(err)
+ }
+ usCfgPath = path.Join(*dataDir, "conf", "samples", "gocs", "us_site")
+ if usCfg, err = config.NewCGRConfigFromPath(context.Background(), usCfgPath); err != nil {
+ t.Fatal(err)
+ }
+ dspCfgPath = path.Join(*dataDir, "conf", "samples", "gocs", "dsp_site")
+ if dspCfg, err = config.NewCGRConfigFromPath(context.Background(), dspCfgPath); err != nil {
+ t.Fatal(err)
+ }
+}
-// // Remove data in both rating and accounting db
-// func testGOCSResetDB(t *testing.T) {
-// if err := engine.InitDataDB(auCfg); err != nil {
-// t.Fatal(err)
-// }
-// if err := engine.InitDataDB(usCfg); err != nil {
-// t.Fatal(err)
-// }
-// if err := engine.InitDataDB(dspCfg); err != nil {
-// t.Fatal(err)
-// }
+// Remove data in both rating and accounting db
+func testGOCSResetDB(t *testing.T) {
+ if err := engine.InitDataDB(auCfg); err != nil {
+ t.Fatal(err)
+ }
+ if err := engine.InitDataDB(usCfg); err != nil {
+ t.Fatal(err)
+ }
+ if err := engine.InitDataDB(dspCfg); err != nil {
+ t.Fatal(err)
+ }
-// }
+}
-// // Start CGR Engine
-// func testGOCSStartEngine(t *testing.T) {
-// if usEngine, err = engine.StopStartEngine(usCfgPath, *waitRater); err != nil {
-// t.Fatal(err)
-// }
-// if auEngine, err = engine.StartEngine(auCfgPath, *waitRater); err != nil {
-// t.Fatal(err)
-// }
-// if dspEngine, err = engine.StartEngine(dspCfgPath, *waitRater); err != nil {
-// t.Fatal(err)
-// }
-// time.Sleep(10 * time.Millisecond)
+// Start CGR Engine
+func testGOCSStartEngine(t *testing.T) {
+ if usEngine, err = engine.StopStartEngine(usCfgPath, *waitRater); err != nil {
+ t.Fatal(err)
+ }
+ if auEngine, err = engine.StartEngine(auCfgPath, *waitRater); err != nil {
+ t.Fatal(err)
+ }
+ if dspEngine, err = engine.StartEngine(dspCfgPath, *waitRater); err != nil {
+ t.Fatal(err)
+ }
+ time.Sleep(10 * time.Millisecond)
-// }
+}
-// // Connect rpc client to rater
-// func testGOCSApierRpcConn(t *testing.T) {
-// if auRPC, err = newRPCClient(auCfg.ListenCfg()); err != nil {
-// t.Fatal(err)
-// }
-// if usRPC, err = newRPCClient(usCfg.ListenCfg()); err != nil {
-// t.Fatal(err)
-// }
-// if dspRPC, err = newRPCClient(dspCfg.ListenCfg()); err != nil {
-// t.Fatal(err)
-// }
-// }
+// Connect rpc client to rater
+func testGOCSApierRpcConn(t *testing.T) {
+ if auRPC, err = newRPCClient(auCfg.ListenCfg()); err != nil {
+ t.Fatal(err)
+ }
+ if usRPC, err = newRPCClient(usCfg.ListenCfg()); err != nil {
+ t.Fatal(err)
+ }
+ if dspRPC, err = newRPCClient(dspCfg.ListenCfg()); err != nil {
+ t.Fatal(err)
+ }
+}
-// func testGOCSLoadData(t *testing.T) {
-// chargerProfile := &v1.ChargerWithAPIOpts{
-// ChargerProfile: &engine.ChargerProfile{
-// Tenant: "cgrates.org",
-// ID: "DEFAULT",
-// RunID: utils.MetaDefault,
-// AttributeIDs: []string{utils.MetaNone},
-// Weight: 10,
-// },
-// }
-// var result string
-// if err := usRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil {
-// t.Error(err)
-// } else if result != utils.OK {
-// t.Error("Unexpected reply returned", result)
-// }
-// var rpl *engine.ChargerProfile
-// if err := usRPC.Call(utils.APIerSv1GetChargerProfile,
-// &utils.TenantID{Tenant: "cgrates.org", ID: "DEFAULT"}, &rpl); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(chargerProfile.ChargerProfile, rpl) {
-// t.Errorf("Expecting : %+v, received: %+v", chargerProfile.ChargerProfile, rpl)
-// }
-// if err := usRPC.Call(utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil {
-// t.Error(err)
-// } else if result != utils.OK {
-// t.Error("Unexpected reply returned", result)
-// }
-// if err := usRPC.Call(utils.APIerSv1GetChargerProfile,
-// &utils.TenantID{Tenant: "cgrates.org", ID: "DEFAULT"}, &rpl); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(chargerProfile.ChargerProfile, rpl) {
-// t.Errorf("Expecting : %+v, received: %+v", chargerProfile.ChargerProfile, rpl)
-// }
+func testGOCSLoadData(t *testing.T) {
+ chargerProfile := &apis.ChargerWithAPIOpts{
+ ChargerProfile: &engine.ChargerProfile{
+ Tenant: "cgrates.org",
+ ID: "DEFAULT",
+ RunID: utils.MetaDefault,
+ AttributeIDs: []string{utils.MetaNone},
+ Weights: utils.DynamicWeights{
+ {
+ Weight: 10,
+ },
+ },
+ },
+ }
+ var result string
+ if err := usRPC.Call(context.Background(), utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil {
+ t.Error(err)
+ } else if result != utils.OK {
+ t.Error("Unexpected reply returned", result)
+ }
+ var rpl *engine.ChargerProfile
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetChargerProfile,
+ &utils.TenantID{Tenant: "cgrates.org", ID: "DEFAULT"}, &rpl); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(chargerProfile.ChargerProfile, rpl) {
+ t.Errorf("Expecting : %+v, received: %+v", chargerProfile.ChargerProfile, rpl)
+ }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1SetChargerProfile, chargerProfile, &result); err != nil {
+ t.Error(err)
+ } else if result != utils.OK {
+ t.Error("Unexpected reply returned", result)
+ }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetChargerProfile,
+ &utils.TenantID{Tenant: "cgrates.org", ID: "DEFAULT"}, &rpl); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(chargerProfile.ChargerProfile, rpl) {
+ t.Errorf("Expecting : %+v, received: %+v", chargerProfile.ChargerProfile, rpl)
+ }
-// wchan := make(chan struct{}, 1)
-// go func() {
-// loaderPath, err := exec.LookPath("cgr-loader")
-// if err != nil {
-// t.Error(err)
-// }
-// loader := exec.Command(loaderPath, "-config_path", dspCfgPath, "-path", path.Join(*dataDir, "tariffplans", "gocs", "dsp_site"))
+ wchan := make(chan struct{}, 1)
+ go func() {
+ loaderPath, err := exec.LookPath("cgr-loader")
+ if err != nil {
+ t.Error(err)
+ }
+ loader := exec.Command(loaderPath, "-config_path", dspCfgPath, "-path", path.Join(*dataDir, "tariffplans", "gocs", "dsp_site"))
-// if err := loader.Start(); err != nil {
-// t.Error(err)
-// }
-// loader.Wait()
-// wchan <- struct{}{}
-// }()
-// select {
-// case <-wchan:
-// case <-time.After(time.Second):
-// t.Errorf("cgr-loader failed: ")
-// }
-// var acnt *engine.Account
-// acntAttrs := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001"}
-// attrSetBalance := utils.AttrSetBalance{
-// Tenant: acntAttrs.Tenant,
-// Account: acntAttrs.Account,
-// BalanceType: utils.MetaVoice,
-// Value: 3540000000000,
-// Balance: map[string]interface{}{
-// utils.ID: "BALANCE1",
-// utils.Weight: 20,
-// },
-// }
-// // add a voice balance of 59 minutes
-// var reply string
-// if err := usRPC.Call(utils.APIerSv1SetBalance, attrSetBalance, &reply); err != nil {
-// t.Error(err)
-// } else if reply != utils.OK {
-// t.Errorf("received: %s", reply)
-// }
-// expectedVoice := 3540000000000.0
-// if err := usRPC.Call(utils.APIerSv2GetAccount, acntAttrs, &acnt); err != nil {
-// t.Error(err)
-// } else if rply := acnt.BalanceMap[utils.MetaVoice].GetTotalValue(); rply != expectedVoice {
-// t.Errorf("Expecting: %v, received: %v", expectedVoice, rply)
-// }
-// time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups on au_site
-// }
+ if err := loader.Start(); err != nil {
+ t.Error(err)
+ }
+ loader.Wait()
+ wchan <- struct{}{}
+ }()
+ select {
+ case <-wchan:
+ case <-time.After(time.Second):
+ t.Errorf("cgr-loader failed: ")
+ }
+ var acnt *utils.Account
+ acntAttrs := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ attrSetBalance := utils.ArgsActSetBalance{
+ Tenant: acntAttrs.Tenant,
+ AccountID: acntAttrs.ID,
+ Reset: true,
+ Diktats: []*utils.BalDiktat{
+ {
+ Path: "*balance.BALANCE1.Units",
+ Value: "3540000000000",
+ },
+ },
+ }
+ // add a voice balance of 59 minutes
+ var reply string
+ if err := usRPC.Call(context.Background(), utils.AccountSv1ActionSetBalance, attrSetBalance, &reply); err != nil {
+ t.Error(err)
+ } else if reply != utils.OK {
+ t.Errorf("received: %s", reply)
+ }
+ // expectedVoice := 3540000000000.0
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetAccount, acntAttrs, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if rply := acnt.Balances[utils.MetaVoice].GetTotalValue(); rply != expectedVoice {
+ // t.Errorf("Expecting: %v, received: %v", expectedVoice, rply)
+ // }
+ time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups on au_site
+}
-// func testGOCSAuthSession(t *testing.T) {
-// authUsage := 5 * time.Minute
-// args := &sessions.V1AuthorizeArgs{
-// GetMaxUsage: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "TestSSv1ItAuth",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testGOCS",
-// utils.Category: "call",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// utils.Destination: "1002",
-// utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC),
-// utils.Usage: authUsage,
-// },
-// },
-// }
-// var rply sessions.V1AuthorizeReply
-// if err := dspRPC.Call(utils.SessionSv1AuthorizeEvent, args, &rply); err != nil {
-// t.Fatal(err)
-// }
-// if rply.MaxUsage == nil || *rply.MaxUsage != authUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
-// }
-// }
+func testGOCSAuthSession(t *testing.T) {
+ authUsage := utils.NewDecimal(int64(5*time.Minute), 0)
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "TestSSv1ItAuth",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testGOCS",
+ utils.Category: "call",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ utils.Destination: "1002",
+ utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC),
+ utils.Usage: authUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesMaxUsage: true,
+ },
+ }
+ var rply sessions.V1AuthorizeReply
+ if err := dspRPC.Call(context.Background(), utils.SessionSv1AuthorizeEvent, args, &rply); err != nil {
+ t.Fatal(err)
+ }
+ if rply.MaxUsage == nil || rply.MaxUsage.Compare(authUsage) != 0 {
+ t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
+ }
+}
-// func testGOCSInitSession(t *testing.T) {
-// initUsage := 5 * time.Minute
-// args := &sessions.V1InitSessionArgs{
-// InitSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "TestSSv1ItInitiateSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testGOCS",
-// utils.Category: "call",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// 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: initUsage,
-// },
-// },
-// }
-// var rply sessions.V1InitSessionReply
-// if err := dspRPC.Call(utils.SessionSv1InitiateSession,
-// args, &rply); err != nil {
-// t.Fatal(err)
-// }
-// if rply.MaxUsage == nil || *rply.MaxUsage != initUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
-// }
-// // give a bit of time to session to be replicate
-// time.Sleep(10 * time.Millisecond)
+func testGOCSInitSession(t *testing.T) {
+ initUsage := 5 * time.Minute
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "TestSSv1ItInitiateSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testGOCS",
+ utils.Category: "call",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ 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: initUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesInitiate: true,
+ },
+ }
+ var rply sessions.V1InitSessionReply
+ if err := dspRPC.Call(context.Background(), utils.SessionSv1InitiateSession,
+ args, &rply); err != nil {
+ t.Fatal(err)
+ }
+ if rply.MaxUsage == nil || *rply.MaxUsage != initUsage {
+ t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
+ }
+ // give a bit of time to session to be replicate
+ time.Sleep(10 * time.Millisecond)
-// aSessions := make([]*sessions.ExternalSession, 0)
-// if err := auRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
-// t.Error(err)
-// } else if len(aSessions) != 1 {
-// t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions))
-// } else if aSessions[0].NodeID != "AU_SITE" {
-// t.Errorf("Expecting : %+v, received: %+v", "AU_SITE", aSessions[0].NodeID)
-// } else if aSessions[0].Usage != 5*time.Minute {
-// t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].MaxCostSoFar)
-// }
+ aSessions := make([]*sessions.ExternalSession, 0)
+ if err := auRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
+ t.Error(err)
+ } else if len(aSessions) != 1 {
+ t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions))
+ } else if aSessions[0].NodeID != "AU_SITE" {
+ t.Errorf("Expecting : %+v, received: %+v", "AU_SITE", aSessions[0].NodeID)
+ } else if aSessions[0].Usage != 5*time.Minute {
+ t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].MaxCostSoFar)
+ }
-// aSessions = make([]*sessions.ExternalSession, 0)
-// if err := usRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
-// t.Error(err)
-// } else if len(aSessions) != 1 {
-// t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions))
-// } else if aSessions[0].NodeID != "US_SITE" {
-// t.Errorf("Expecting : %+v, received: %+v", "US_SITE", aSessions[0].NodeID)
-// } else if aSessions[0].Usage != 5*time.Minute {
-// t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].Usage)
-// }
+ aSessions = make([]*sessions.ExternalSession, 0)
+ if err := usRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
+ t.Error(err)
+ } else if len(aSessions) != 1 {
+ t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions))
+ } else if aSessions[0].NodeID != "US_SITE" {
+ t.Errorf("Expecting : %+v, received: %+v", "US_SITE", aSessions[0].NodeID)
+ } else if aSessions[0].Usage != 5*time.Minute {
+ t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].Usage)
+ }
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ // 59 mins - 5 mins = 54 mins
+ if err := auRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 3240000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 3240000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// // 59 mins - 5 mins = 54 mins
-// if err := auRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 3240000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 3240000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 3240000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 3240000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// if err := usRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 3240000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 3240000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
+}
-// }
+func testGOCSUpdateSession(t *testing.T) {
+ reqUsage := 5 * time.Minute
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "TestSSv1ItUpdateSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testGOCS",
+ utils.Category: "call",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ 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: reqUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesUpdate: true,
+ },
+ }
+ var rply sessions.V1UpdateSessionReply
-// func testGOCSUpdateSession(t *testing.T) {
-// reqUsage := 5 * time.Minute
-// args := &sessions.V1UpdateSessionArgs{
-// UpdateSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "TestSSv1ItUpdateSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testGOCS",
-// utils.Category: "call",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// 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: reqUsage,
-// },
-// },
-// }
-// var rply sessions.V1UpdateSessionReply
+ // right now dispatcher receive utils.ErrPartiallyExecuted
+ // in case of of engines fails
+ if err := auRPC.Call(context.Background(), utils.SessionSv1UpdateSession, args, &rply); err != nil {
+ t.Errorf("Expecting : %+v, received: %+v", utils.ErrPartiallyExecuted, err)
+ }
-// // right now dispatcher receive utils.ErrPartiallyExecuted
-// // in case of of engines fails
-// if err := auRPC.Call(utils.SessionSv1UpdateSession, args, &rply); err != nil {
-// t.Errorf("Expecting : %+v, received: %+v", utils.ErrPartiallyExecuted, err)
-// }
+ aSessions := make([]*sessions.ExternalSession, 0)
+ if err := auRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
+ t.Error(err)
+ } else if len(aSessions) != 1 {
+ t.Errorf("wrong active sessions: %s", utils.ToJSON(aSessions))
+ } else if aSessions[0].NodeID != "AU_SITE" {
+ t.Errorf("Expecting : %+v, received: %+v", "AU_SITE", aSessions[0].NodeID)
+ } else if aSessions[0].Usage != 10*time.Minute {
+ t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].Usage)
+ }
-// aSessions := make([]*sessions.ExternalSession, 0)
-// if err := auRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
-// t.Error(err)
-// } else if len(aSessions) != 1 {
-// t.Errorf("wrong active sessions: %s", utils.ToJSON(aSessions))
-// } else if aSessions[0].NodeID != "AU_SITE" {
-// t.Errorf("Expecting : %+v, received: %+v", "AU_SITE", aSessions[0].NodeID)
-// } else if aSessions[0].Usage != 10*time.Minute {
-// t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].Usage)
-// }
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ // balanced changed in AU_SITE
+ // 54 min - 5 mins = 49 min
+ if err := auRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
+}
-// // balanced changed in AU_SITE
-// // 54 min - 5 mins = 49 min
-// if err := auRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
+func testGOCSVerifyAccountsAfterStart(t *testing.T) {
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ // because US_SITE was down we should notice a difference between balance from accounts from US_SITE and AU_SITE
+ if err := auRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 3240000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 3240000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
+}
-// func testGOCSVerifyAccountsAfterStart(t *testing.T) {
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
-// // because US_SITE was down we should notice a difference between balance from accounts from US_SITE and AU_SITE
-// if err := auRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
+func testGOCSUpdateSession2(t *testing.T) {
+ reqUsage := 5 * time.Minute
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "TestSSv1ItUpdateSession2",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testGOCS",
+ utils.Category: "call",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ 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: reqUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesUpdate: true,
+ },
+ }
+ var rply sessions.V1UpdateSessionReply
+ // Update the session on both US_SITE and AU_SITE
+ // With this update the account should be replicate from US_SITE to AU_SITE and forgot about the update than happens on AU_SITE
+ if err := dspRPC.Call(context.Background(), utils.SessionSv1UpdateSession, args, &rply); err != nil {
+ t.Errorf("Expecting : %+v, received: %+v", nil, err)
+ } else if rply.MaxUsage == nil || *rply.MaxUsage != reqUsage {
+ t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
+ }
-// if err := usRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 3240000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 3240000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
-// }
+ aSessions := make([]*sessions.ExternalSession, 0)
+ if err := auRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
+ t.Error(err)
+ } else if len(aSessions) != 1 {
+ t.Errorf("wrong active sessions: %s", utils.ToJSON(aSessions))
+ } else if aSessions[0].NodeID != "AU_SITE" {
+ t.Errorf("Expecting : %+v, received: %+v", "AU_SITE", aSessions[0].NodeID)
+ } else if aSessions[0].Usage != 15*time.Minute {
+ t.Errorf("Expecting : %+v, received: %+v", 15*time.Minute, aSessions[0].Usage)
+ }
-// func testGOCSUpdateSession2(t *testing.T) {
-// reqUsage := 5 * time.Minute
-// args := &sessions.V1UpdateSessionArgs{
-// UpdateSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "TestSSv1ItUpdateSession2",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testGOCS",
-// utils.Category: "call",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// 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: reqUsage,
-// },
-// },
-// }
-// var rply sessions.V1UpdateSessionReply
-// // Update the session on both US_SITE and AU_SITE
-// // With this update the account should be replicate from US_SITE to AU_SITE and forgot about the update than happens on AU_SITE
-// if err := dspRPC.Call(utils.SessionSv1UpdateSession, args, &rply); err != nil {
-// t.Errorf("Expecting : %+v, received: %+v", nil, err)
-// } else if rply.MaxUsage == nil || *rply.MaxUsage != reqUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
-// }
+ aSessions = make([]*sessions.ExternalSession, 0)
+ if err := usRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
+ t.Error(err)
+ } else if len(aSessions) != 1 {
+ t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions))
+ } else if aSessions[0].NodeID != "US_SITE" {
+ t.Errorf("Expecting : %+v, received: %+v", "US_SITE", aSessions[0].NodeID)
+ } else if aSessions[0].Usage != 10*time.Minute {
+ t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].Usage)
+ }
-// aSessions := make([]*sessions.ExternalSession, 0)
-// if err := auRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
-// t.Error(err)
-// } else if len(aSessions) != 1 {
-// t.Errorf("wrong active sessions: %s", utils.ToJSON(aSessions))
-// } else if aSessions[0].NodeID != "AU_SITE" {
-// t.Errorf("Expecting : %+v, received: %+v", "AU_SITE", aSessions[0].NodeID)
-// } else if aSessions[0].Usage != 15*time.Minute {
-// t.Errorf("Expecting : %+v, received: %+v", 15*time.Minute, aSessions[0].Usage)
-// }
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
-// aSessions = make([]*sessions.ExternalSession, 0)
-// if err := usRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err != nil {
-// t.Error(err)
-// } else if len(aSessions) != 1 {
-// t.Errorf("wrong active sessions: %s \n , and len(aSessions) %+v", utils.ToJSON(aSessions), len(aSessions))
-// } else if aSessions[0].NodeID != "US_SITE" {
-// t.Errorf("Expecting : %+v, received: %+v", "US_SITE", aSessions[0].NodeID)
-// } else if aSessions[0].Usage != 10*time.Minute {
-// t.Errorf("Expecting : %+v, received: %+v", 5*time.Minute, aSessions[0].Usage)
-// }
+ if err := auRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
+}
-// if err := auRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
+func testGOCSTerminateSession(t *testing.T) {
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "testGOCSTerminateSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testGOCS",
+ utils.Category: "call",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ 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: 15 * time.Minute,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesTerminate: true,
+ },
+ }
+ var rply string
+ // we send terminate session with the correct usage, but because the US_SITE was down
+ // this lost the previous session operations and will debit more
+ if err := dspRPC.Call(context.Background(), utils.SessionSv1TerminateSession,
+ args, &rply); err != nil {
+ t.Error(err)
+ }
+ if rply != utils.OK {
+ t.Errorf("Unexpected reply: %s", rply)
+ }
+ aSessions := make([]*sessions.ExternalSession, 0)
+ if err := auRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil ||
+ err.Error() != utils.ErrNotFound.Error() {
+ t.Errorf("Expected error %s received error %v and reply %s", utils.ErrNotFound, err, utils.ToJSON(aSessions))
+ }
+ if err := usRPC.Call(context.Background(), utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil ||
+ err.Error() != utils.ErrNotFound.Error() {
+ t.Errorf("Expected error %s received error %v and reply %s", utils.ErrNotFound, err, utils.ToJSON(aSessions))
+ }
-// if err := usRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2940000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2940000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
-// }
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
-// func testGOCSTerminateSession(t *testing.T) {
-// args := &sessions.V1TerminateSessionArgs{
-// TerminateSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "testGOCSTerminateSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testGOCS",
-// utils.Category: "call",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// 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: 15 * time.Minute,
-// },
-// },
-// }
-// var rply string
-// // we send terminate session with the correct usage, but because the US_SITE was down
-// // this lost the previous session operations and will debit more
-// if err := dspRPC.Call(utils.SessionSv1TerminateSession,
-// args, &rply); err != nil {
-// t.Error(err)
-// }
-// if rply != utils.OK {
-// t.Errorf("Unexpected reply: %s", rply)
-// }
-// aSessions := make([]*sessions.ExternalSession, 0)
-// if err := auRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil ||
-// err.Error() != utils.ErrNotFound.Error() {
-// t.Errorf("Expected error %s received error %v and reply %s", utils.ErrNotFound, err, utils.ToJSON(aSessions))
-// }
-// if err := usRPC.Call(utils.SessionSv1GetActiveSessions, new(utils.SessionFilter), &aSessions); err == nil ||
-// err.Error() != utils.ErrNotFound.Error() {
-// t.Errorf("Expected error %s received error %v and reply %s", utils.ErrNotFound, err, utils.ToJSON(aSessions))
-// }
+ if err := auRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
+}
-// if err := auRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
+func testGOCSProcessCDR(t *testing.T) {
+ args := &utils.CGREvent{
-// if err := usRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
-// }
+ Tenant: "cgrates.org",
+ ID: "TestSSv1ItProcessCDR",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testGOCS",
+ utils.Category: "call",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ 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: 15 * time.Minute,
+ },
+ }
+ var rply string
+ // process cdr should apply the correction because terminate was debited to much
+ // 59 - 15 = 44 minutes
+ if err := usRPC.Call(context.Background(), utils.SessionSv1ProcessCDR,
+ args, &rply); err != nil {
+ t.Error(err)
+ }
+ if rply != utils.OK {
+ t.Errorf("Unexpected reply: %s", rply)
+ }
+ time.Sleep(100 * time.Millisecond)
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
-// func testGOCSProcessCDR(t *testing.T) {
-// args := &utils.CGREvent{
+ if err := auRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
-// Tenant: "cgrates.org",
-// ID: "TestSSv1ItProcessCDR",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testGOCS",
-// utils.Category: "call",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// 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: 15 * time.Minute,
-// },
-// }
-// var rply string
-// // process cdr should apply the correction because terminate was debited to much
-// // 59 - 15 = 44 minutes
-// if err := usRPC.Call(utils.SessionSv1ProcessCDR,
-// args, &rply); err != nil {
-// t.Error(err)
-// }
-// if rply != utils.OK {
-// t.Errorf("Unexpected reply: %s", rply)
-// }
-// time.Sleep(100 * time.Millisecond)
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
+ if err := usRPC.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Balances[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
+ // t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.Balances[utils.MetaVoice].GetTotalValue())
+ // }
+}
-// if err := auRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
-
-// if err := usRPC.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.BalanceMap[utils.MetaVoice].GetTotalValue() != 2640000000000.0 {
-// t.Errorf("Expecting : %+v, received: %+v", 2640000000000.0, acnt.BalanceMap[utils.MetaVoice].GetTotalValue())
-// }
-// }
-
-// func testGOCSStopCgrEngine(t *testing.T) {
-// if err := engine.KillEngine(100); err != nil {
-// t.Error(err)
-// }
-// if err = auEngine.Process.Kill(); err != nil {
-// t.Error(err)
-// }
-// if err = usEngine.Process.Kill(); err != nil {
-// t.Error(err)
-// }
-// if err = dspEngine.Process.Kill(); err != nil {
-// t.Error(err)
-// }
-// }
+func testGOCSStopCgrEngine(t *testing.T) {
+ if err := engine.KillEngine(100); err != nil {
+ t.Error(err)
+ }
+ if err = auEngine.Process.Kill(); err != nil {
+ t.Error(err)
+ }
+ if err = usEngine.Process.Kill(); err != nil {
+ t.Error(err)
+ }
+ if err = dspEngine.Process.Kill(); err != nil {
+ t.Error(err)
+ }
+}
diff --git a/general_tests/rpccaching_it_test.go b/general_tests/rpccaching_it_test.go
index 5c56275be..1a967c290 100644
--- a/general_tests/rpccaching_it_test.go
+++ b/general_tests/rpccaching_it_test.go
@@ -21,501 +21,548 @@ along with this program. If not, see
package general_tests
-// import (
-// "net/rpc"
-// "path"
-// "reflect"
-// "testing"
-// "time"
+import (
+ "path"
+ "reflect"
+ "testing"
+ "time"
-// "github.com/cgrates/cgrates/config"
-// "github.com/cgrates/cgrates/engine"
-// "github.com/cgrates/cgrates/sessions"
-// "github.com/cgrates/cgrates/utils"
-// )
+ "github.com/cgrates/birpc"
+ "github.com/cgrates/birpc/context"
+ "github.com/cgrates/cgrates/config"
+ "github.com/cgrates/cgrates/engine"
+ "github.com/cgrates/cgrates/loaders"
+ "github.com/cgrates/cgrates/sessions"
+ "github.com/cgrates/cgrates/utils"
+)
-// var (
-// rpcCfgPath string
-// rpcCfg *config.CGRConfig
-// rpcRpc *rpc.Client
-// rpcConfDIR string //run tests for specific configuration
+var (
+ rpcCfgPath string
+ rpcCfg *config.CGRConfig
+ rpcRpc *birpc.Client
+ rpcConfDIR string //run tests for specific configuration
-// sTestsRPCMethods = []func(t *testing.T){
-// testRPCMethodsLoadConfig,
-// testRPCMethodsInitDataDb,
-// testRPCMethodsStartEngine,
-// testRPCMethodsRpcConn,
-// testRPCMethodsFromFolder,
-// testRPCMethodsAddData,
-// testRPCMethodsAuthorizeSession,
-// testRPCMethodsInitSession,
-// testRPCMethodsUpdateSession,
-// testRPCMethodsTerminateSession,
-// testRPCMethodsProcessCDR,
-// testRPCMethodsProcessEvent,
+ sTestsRPCMethods = []func(t *testing.T){
+ testRPCMethodsLoadConfig,
+ testRPCMethodsInitDataDb,
+ testRPCMethodsStartEngine,
+ testRPCMethodsRpcConn,
+ testRPCMethodsFromFolder,
+ testRPCMethodsAddData,
+ // testRPCMethodsAuthorizeSession,
+ // testRPCMethodsInitSession,
+ // testRPCMethodsUpdateSession,
+ testRPCMethodsTerminateSession,
+ // testRPCMethodsProcessCDR,
+ // testRPCMethodsProcessEvent,
-// testRPCMethodsInitDataDb,
+ testRPCMethodsInitDataDb,
-// testRPCMethodsCdrsProcessCDR,
+ // testRPCMethodsCdrsProcessCDR,
-// testRPCMethodsInitDataDb,
+ testRPCMethodsInitDataDb,
-// testRPCMethodsLoadData,
-// testRPCMethodsResponderDebit,
-// testRPCMethodsResponderMaxDebit,
-// testRPCMethodsStopEngine,
-// }
-// )
+ // testRPCMethodsLoadData,
+ // testRPCMethodsResponderDebit,
+ // testRPCMethodsResponderMaxDebit,
+ testRPCMethodsStopEngine,
+ }
+)
-// // Test start here
-// func TestRPCMethods(t *testing.T) {
-// switch *dbType {
-// case utils.MetaInternal:
-// t.SkipNow()
-// case utils.MetaMySQL:
-// rpcConfDIR = "rpccaching_mysql"
-// case utils.MetaMongo:
-// rpcConfDIR = "rpccaching_mongo"
-// case utils.MetaPostgres:
-// t.SkipNow()
-// default:
-// t.Fatal("Unknown Database type")
-// }
+// Test start here
+func TestRPCMethods(t *testing.T) {
+ switch *dbType {
+ case utils.MetaInternal:
+ t.SkipNow()
+ case utils.MetaMySQL:
+ rpcConfDIR = "rpccaching_mysql"
+ case utils.MetaMongo:
+ rpcConfDIR = "rpccaching_mongo"
+ case utils.MetaPostgres:
+ t.SkipNow()
+ default:
+ t.Fatal("Unknown Database type")
+ }
-// for _, stest := range sTestsRPCMethods {
-// t.Run(rpcConfDIR, stest)
-// }
-// }
+ for _, stest := range sTestsRPCMethods {
+ t.Run(rpcConfDIR, stest)
+ }
+}
-// func testRPCMethodsLoadConfig(t *testing.T) {
-// var err error
-// rpcCfgPath = path.Join(*dataDir, "conf", "samples", rpcConfDIR)
-// if rpcCfg, err = config.NewCGRConfigFromPath(rpcCfgPath); err != nil {
-// t.Error(err)
-// }
-// }
+func testRPCMethodsLoadConfig(t *testing.T) {
+ var err error
+ rpcCfgPath = path.Join(*dataDir, "conf", "samples", rpcConfDIR)
+ if rpcCfg, err = config.NewCGRConfigFromPath(context.Background(), rpcCfgPath); err != nil {
+ t.Error(err)
+ }
+}
-// func testRPCMethodsInitDataDb(t *testing.T) {
-// if err := engine.InitDataDB(rpcCfg); err != nil {
-// t.Fatal(err)
-// }
-// }
+func testRPCMethodsInitDataDb(t *testing.T) {
+ if err := engine.InitDataDB(rpcCfg); err != nil {
+ t.Fatal(err)
+ }
+}
-// func testRPCMethodsStartEngine(t *testing.T) {
-// if _, err := engine.StopStartEngine(rpcCfgPath, *waitRater); err != nil {
-// t.Fatal(err)
-// }
-// }
+func testRPCMethodsStartEngine(t *testing.T) {
+ if _, err := engine.StopStartEngine(rpcCfgPath, *waitRater); err != nil {
+ t.Fatal(err)
+ }
+}
-// func testRPCMethodsRpcConn(t *testing.T) {
-// var err error
-// 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())
-// }
-// }
+func testRPCMethodsRpcConn(t *testing.T) {
+ var err error
+ 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())
+ }
+}
-// func testRPCMethodsFromFolder(t *testing.T) {
-// var reply string
-// attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "testit")}
-// if err := rpcRpc.Call(utils.APIerSv1LoadTariffPlanFromFolder, attrs, &reply); err != nil {
-// t.Error(err)
-// }
-// time.Sleep(100 * time.Millisecond)
-// }
+func testRPCMethodsFromFolder(t *testing.T) {
+ caching := utils.MetaReload
+ if rpcCfg.DataDbCfg().Type == utils.Internal {
+ caching = utils.MetaNone
+ }
+ var reply string
+ if err := rpcRpc.Call(context.Background(), utils.LoaderSv1Run,
+ &loaders.ArgsProcessFolder{
+ // StopOnError: true,
+ APIOpts: map[string]interface{}{utils.MetaCache: caching},
+ }, &reply); err != nil {
+ t.Error(err)
+ } else if reply != utils.OK {
+ t.Error("Unexpected reply returned:", reply)
+ }
+}
-// func testRPCMethodsAddData(t *testing.T) {
-// var resp string
-// if err := rpcRpc.Call(utils.APIerSv1RemoveThresholdProfile,
-// &utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}, &resp); err != nil {
-// t.Error(err)
-// } else if resp != utils.OK {
-// t.Error("Unexpected reply returned", resp)
-// }
-// var reply string
-// // Add a disable and log action
-// attrsAA := &utils.AttrSetActions{ActionsId: "DISABLE_LOG", Actions: []*utils.TPAction{
-// {Identifier: utils.MetaDisableAccount},
-// {Identifier: utils.MetaLog},
-// }}
-// if err := rpcRpc.Call(utils.APIerSv2SetActions, attrsAA, &reply); err != nil && err.Error() != utils.ErrExists.Error() {
-// t.Error("Got error on APIerSv2.SetActions: ", err.Error())
-// } else if reply != utils.OK {
-// t.Errorf("Calling APIerSv2.SetActions received: %s", reply)
-// }
-// // Add an enable and log action
-// attrsAA2 := &utils.AttrSetActions{ActionsId: "ENABLE_LOG", Actions: []*utils.TPAction{
-// {Identifier: utils.MetaEnableAccount},
-// {Identifier: utils.MetaLog},
-// }}
-// if err := rpcRpc.Call(utils.APIerSv2SetActions, attrsAA2, &reply); err != nil && err.Error() != utils.ErrExists.Error() {
-// t.Error("Got error on APIerSv2.SetActions: ", err.Error())
-// } else if reply != utils.OK {
-// t.Errorf("Calling APIerSv2.SetActions received: %s", reply)
-// }
+func testRPCMethodsAddData(t *testing.T) {
+ var resp string
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1RemoveThresholdProfile,
+ &utils.TenantID{Tenant: "cgrates.org", ID: "THD_ACNT_1001"}, &resp); err != nil {
+ t.Error(err)
+ } else if resp != utils.OK {
+ t.Error("Unexpected reply returned", resp)
+ }
+ var reply string
+ // Add a disable and log action
+ attrsAA := &engine.ActionProfileWithAPIOpts{
+ ActionProfile: &engine.ActionProfile{
+ Tenant: "cgrates.org",
+ ID: "DISABLE_LOG",
+ Actions: []*engine.APAction{
+ {
+ Type: utils.MetaDisableAccount,
+ },
+ {
+ Type: utils.MetaLog,
+ },
+ },
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1SetActionProfile, attrsAA, &reply); err != nil && err.Error() != utils.ErrExists.Error() {
+ t.Error(err)
+ } else if reply != utils.OK {
+ t.Errorf("Unexpected reply: %s", reply)
+ }
+ // Add an enable and log action
+ attrsAA2 := &engine.ActionProfileWithAPIOpts{
+ ActionProfile: &engine.ActionProfile{
+ Tenant: "cgrates.org",
+ ID: "ENABLE_LOG",
+ Actions: []*engine.APAction{
+ {
+ Type: utils.MetaEnableAccount,
+ },
+ {
+ Type: utils.MetaLog,
+ },
+ },
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1SetActionProfile, attrsAA2, &reply); err != nil && err.Error() != utils.ErrExists.Error() {
+ t.Error("Got error on APIerSv2.SetActions: ", err.Error())
+ } else if reply != utils.OK {
+ t.Errorf("Calling APIerSv2.SetActions received: %s", reply)
+ }
-// //Add a thresholdProfile to disable account
-// tPrfl := &engine.ThresholdProfileWithAPIOpts{
-// ThresholdProfile: &engine.ThresholdProfile{
-// Tenant: "cgrates.org",
-// ID: "THD_AccDisableAndLog",
-// FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.DisableAction:DisableAction"},
-// MaxHits: -1,
-// MinSleep: time.Second,
-// Weight: 30.0,
-// ActionProfileIDs: []string{"DISABLE_LOG"},
-// },
-// }
-// if err := rpcRpc.Call(utils.APIerSv1SetThresholdProfile, tPrfl, &reply); err != nil {
-// t.Error(err)
-// } else if reply != utils.OK {
-// t.Error("Unexpected reply returned", reply)
-// }
-// //Add a thresholdProfile to enable account
-// tPrfl2 := &engine.ThresholdProfileWithAPIOpts{
-// ThresholdProfile: &engine.ThresholdProfile{
-// Tenant: "cgrates.org",
-// ID: "THD_AccEnableAndLog",
-// FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.EnableAction:EnableAction"},
-// MaxHits: -1,
-// MinSleep: time.Second,
-// Weight: 30.0,
-// ActionProfileIDs: []string{"ENABLE_LOG"},
-// },
-// }
-// if err := rpcRpc.Call(utils.APIerSv1SetThresholdProfile, tPrfl2, &reply); err != nil {
-// t.Error(err)
-// } else if reply != utils.OK {
-// t.Error("Unexpected reply returned", reply)
-// }
-// }
+ //Add a thresholdProfile to disable account
+ tPrfl := &engine.ThresholdProfileWithAPIOpts{
+ ThresholdProfile: &engine.ThresholdProfile{
+ Tenant: "cgrates.org",
+ ID: "THD_AccDisableAndLog",
+ FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.DisableAction:DisableAction"},
+ MaxHits: -1,
+ MinSleep: time.Second,
+ Weights: utils.DynamicWeights{
+ {
+ Weight: 30,
+ },
+ },
+ ActionProfileIDs: []string{"DISABLE_LOG"},
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1SetThresholdProfile, tPrfl, &reply); err != nil {
+ t.Error(err)
+ } else if reply != utils.OK {
+ t.Error("Unexpected reply returned", reply)
+ }
+ //Add a thresholdProfile to enable account
+ tPrfl2 := &engine.ThresholdProfileWithAPIOpts{
+ ThresholdProfile: &engine.ThresholdProfile{
+ Tenant: "cgrates.org",
+ ID: "THD_AccEnableAndLog",
+ FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.EnableAction:EnableAction"},
+ MaxHits: -1,
+ MinSleep: time.Second,
+ Weights: utils.DynamicWeights{
+ {
+ Weight: 30,
+ },
+ },
+ ActionProfileIDs: []string{"ENABLE_LOG"},
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1SetThresholdProfile, tPrfl2, &reply); err != nil {
+ t.Error(err)
+ } else if reply != utils.OK {
+ t.Error("Unexpected reply returned", reply)
+ }
+}
-// func testRPCMethodsAuthorizeSession(t *testing.T) {
-// authUsage := 5 * time.Minute
-// args := &sessions.V1AuthorizeArgs{
-// GetMaxUsage: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "testRPCMethodsAuthorizeSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testRPCMethodsAuthorizeSession",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// utils.Destination: "1002",
-// utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC),
-// utils.Usage: authUsage,
-// },
-// },
-// }
-// //authorize the session
-// var rplyFirst sessions.V1AuthorizeReply
-// if err := rpcRpc.Call(utils.SessionSv1AuthorizeEvent, args, &rplyFirst); err != nil {
-// t.Fatal(err)
-// }
-// if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != authUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
-// }
+func testRPCMethodsAuthorizeSession(t *testing.T) {
+ authUsage := utils.NewDecimal(int64(5*time.Minute), 0)
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "testRPCMethodsAuthorizeSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testRPCMethodsAuthorizeSession",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ utils.Destination: "1002",
+ utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC),
+ utils.Usage: authUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesMaxUsage: true,
+ },
+ }
+ //authorize the session
+ var rplyFirst sessions.V1AuthorizeReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1AuthorizeEvent, args, &rplyFirst); err != nil {
+ t.Fatal(err)
+ }
+ if rplyFirst.MaxUsage == nil || rplyFirst.MaxUsage.Compare(authUsage) != 0 {
+ t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
+ }
-// //disable the account
-// var ids []string
-// thEvent := &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "DisableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "DisableAction": "DisableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
-// }
+ //disable the account
+ var ids []string
+ thEvent := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "DisableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "DisableAction": "DisableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
+ }
-// //verify if account was disabled
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
-// if err := rpcRpc.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.Disabled != true {
-// t.Errorf("Expecting: true, received: %v", acnt.Disabled)
-// }
+ //verify if account was disabled
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Disabled != true {
+ // t.Errorf("Expecting: true, received: %v", acnt.Disabled)
+ // }
-// //authorize again session (should take the response from cache)
-// var rply sessions.V1AuthorizeReply
-// if err := rpcRpc.Call(utils.SessionSv1AuthorizeEvent, args, &rply); err != nil {
-// t.Fatal(err)
-// } else if !reflect.DeepEqual(rply, rplyFirst) {
-// t.Errorf("Expecting: %+v, \n received: %+v",
-// utils.ToJSON(rplyFirst), utils.ToJSON(rply))
-// }
+ //authorize again session (should take the response from cache)
+ var rply sessions.V1AuthorizeReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1AuthorizeEvent, args, &rply); err != nil {
+ t.Fatal(err)
+ } else if !reflect.DeepEqual(rply, rplyFirst) {
+ t.Errorf("Expecting: %+v, \n received: %+v",
+ utils.ToJSON(rplyFirst), utils.ToJSON(rply))
+ }
-// //give time to CGRateS to delete the response from cache
-// time.Sleep(time.Second)
+ //give time to CGRateS to delete the response from cache
+ time.Sleep(time.Second)
-// //authorize again session (this time we expect to receive an error)
-// if err := rpcRpc.Call(utils.SessionSv1AuthorizeEvent, args, &rply); err == nil || err.Error() != "RALS_ERROR:ACCOUNT_DISABLED" {
-// t.Error("Unexpected error returned", err)
-// }
+ //authorize again session (this time we expect to receive an error)
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1AuthorizeEvent, args, &rply); err == nil || err.Error() != "RALS_ERROR:ACCOUNT_DISABLED" {
+ t.Error("Unexpected error returned", err)
+ }
-// //enable the account
-// thEvent.CGREvent = &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "EnableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "EnableAction": "EnableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
-// }
-// }
+ //enable the account
+ thEvent = &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "EnableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "EnableAction": "EnableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
+ }
+}
-// func testRPCMethodsInitSession(t *testing.T) {
-// initUsage := 5 * time.Minute
-// args := &sessions.V1InitSessionArgs{
-// InitSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "testRPCMethodsInitSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testRPCMethodsInitSession",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "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: initUsage,
-// },
-// },
-// }
-// var rplyFirst sessions.V1InitSessionReply
-// if err := rpcRpc.Call(utils.SessionSv1InitiateSession,
-// args, &rplyFirst); err != nil {
-// t.Error(err)
-// }
-// if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != initUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
-// }
+func testRPCMethodsInitSession(t *testing.T) {
+ initUsage := 5 * time.Minute
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "testRPCMethodsInitSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testRPCMethodsInitSession",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "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: initUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesInitiate: true,
+ },
+ }
+ var rplyFirst sessions.V1InitSessionReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1InitiateSession,
+ args, &rplyFirst); err != nil {
+ t.Error(err)
+ }
+ if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != initUsage {
+ t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
+ }
-// //disable the account
-// var ids []string
-// thEvent := &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "DisableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "DisableAction": "DisableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
-// }
+ //disable the account
+ var ids []string
+ thEvent := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "DisableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "DisableAction": "DisableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
+ }
-// //verify if account was disabled
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
-// if err := rpcRpc.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.Disabled != true {
-// t.Errorf("Expecting: true, received: %v", acnt.Disabled)
-// }
+ //verify if account was disabled
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Disabled != true {
+ // t.Errorf("Expecting: true, received: %v", acnt.Disabled)
+ // }
-// var rply sessions.V1InitSessionReply
-// if err := rpcRpc.Call(utils.SessionSv1InitiateSession,
-// args, &rply); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(rply, rplyFirst) {
-// t.Errorf("Expecting: %+v, \n received: %+v",
-// utils.ToJSON(rplyFirst), utils.ToJSON(rply))
-// }
+ var rply sessions.V1InitSessionReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1InitiateSession,
+ args, &rply); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(rply, rplyFirst) {
+ t.Errorf("Expecting: %+v, \n received: %+v",
+ utils.ToJSON(rplyFirst), utils.ToJSON(rply))
+ }
-// //give time to CGRateS to delete the response from cache
-// time.Sleep(time.Second)
+ //give time to CGRateS to delete the response from cache
+ time.Sleep(time.Second)
-// if err := rpcRpc.Call(utils.SessionSv1InitiateSession,
-// args, &rply); err == nil || !(err.Error() == "RALS_ERROR:ACCOUNT_DISABLED" ||
-// err.Error() == utils.ErrExists.Error()) { // ErrExist -> initSession twice
-// t.Error("Unexpected error returned", err)
-// }
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1InitiateSession,
+ args, &rply); err == nil || !(err.Error() == "RALS_ERROR:ACCOUNT_DISABLED" ||
+ err.Error() == utils.ErrExists.Error()) { // ErrExist -> initSession twice
+ t.Error("Unexpected error returned", err)
+ }
-// //enable the account
-// thEvent.CGREvent = &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "EnableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "EnableAction": "EnableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
-// }
-// }
+ //enable the account
+ thEvent = &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "EnableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "EnableAction": "EnableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
+ }
+}
-// func testRPCMethodsUpdateSession(t *testing.T) {
-// reqUsage := 5 * time.Minute
-// args := &sessions.V1UpdateSessionArgs{
-// UpdateSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "testRPCMethodsUpdateSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testRPCMethodsUpdateSession",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "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: reqUsage,
-// },
-// },
-// }
-// var rplyFirst sessions.V1UpdateSessionReply
-// if err := rpcRpc.Call(utils.SessionSv1UpdateSession,
-// args, &rplyFirst); err != nil {
-// t.Error(err)
-// }
-// if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != reqUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
-// }
+func testRPCMethodsUpdateSession(t *testing.T) {
+ reqUsage := 5 * time.Minute
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "testRPCMethodsUpdateSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testRPCMethodsUpdateSession",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "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: reqUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesUpdate: true,
+ },
+ }
+ var rplyFirst sessions.V1UpdateSessionReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1UpdateSession,
+ args, &rplyFirst); err != nil {
+ t.Error(err)
+ }
+ if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != reqUsage {
+ t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
+ }
-// //disable the account
-// var ids []string
-// thEvent := &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "DisableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "DisableAction": "DisableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
-// }
+ //disable the account
+ var ids []string
+ thEvent := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "DisableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "DisableAction": "DisableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
+ }
-// //verify if account was disabled
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
-// if err := rpcRpc.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.Disabled != true {
-// t.Errorf("Expecting: true, received: %v", acnt.Disabled)
-// }
+ //verify if account was disabled
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Disabled != true {
+ // t.Errorf("Expecting: true, received: %v", acnt.Disabled)
+ // }
-// var rply sessions.V1UpdateSessionReply
-// if err := rpcRpc.Call(utils.SessionSv1UpdateSession,
-// args, &rply); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(rply, rplyFirst) {
-// t.Errorf("Expecting: %+v, \n received: %+v",
-// utils.ToJSON(rplyFirst), utils.ToJSON(rply))
-// }
+ var rply sessions.V1UpdateSessionReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1UpdateSession,
+ args, &rply); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(rply, rplyFirst) {
+ t.Errorf("Expecting: %+v, \n received: %+v",
+ utils.ToJSON(rplyFirst), utils.ToJSON(rply))
+ }
-// //give time to CGRateS to delete the response from cache
-// time.Sleep(time.Second)
+ //give time to CGRateS to delete the response from cache
+ time.Sleep(time.Second)
-// if err := rpcRpc.Call(utils.SessionSv1UpdateSession,
-// args, &rply); err == nil || err.Error() != "RALS_ERROR:ACCOUNT_DISABLED" {
-// t.Error("Unexpected error returned", err)
-// }
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1UpdateSession,
+ args, &rply); err == nil || err.Error() != "RALS_ERROR:ACCOUNT_DISABLED" {
+ t.Error("Unexpected error returned", err)
+ }
-// //enable the account
-// thEvent.CGREvent = &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "EnableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "EnableAction": "EnableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
-// }
-// }
+ //enable the account
+ thEvent = &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "EnableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "EnableAction": "EnableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
+ }
+}
-// func testRPCMethodsTerminateSession(t *testing.T) {
-// args := &sessions.V1TerminateSessionArgs{
-// TerminateSession: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "testRPCMethodsTerminateSession",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testRPCMethodsTerminateSession",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "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
-// if err := rpcRpc.Call(utils.SessionSv1TerminateSession,
-// args, &rply); err != nil {
-// t.Error(err)
-// } else if rply != utils.OK {
-// t.Errorf("Unexpected reply: %s", rply)
-// }
+func testRPCMethodsTerminateSession(t *testing.T) {
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "testRPCMethodsTerminateSession",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testRPCMethodsTerminateSession",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "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,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesTerminate: true,
+ },
+ }
+ var rply string
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1TerminateSession,
+ args, &rply); err != nil {
+ t.Error(err)
+ } else if rply != utils.OK {
+ t.Errorf("Unexpected reply: %s", rply)
+ }
-// //replace event with empty
-// args.CGREvent.Event = map[string]interface{}{}
+ //replace event with empty
+ args.Event = map[string]interface{}{}
-// if err := rpcRpc.Call(utils.SessionSv1TerminateSession,
-// args, &rply); err != nil {
-// t.Error(err)
-// } else if rply != utils.OK {
-// t.Errorf("Unexpected reply: %s", rply)
-// }
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1TerminateSession,
+ args, &rply); err != nil {
+ t.Error(err)
+ } else if rply != utils.OK {
+ t.Errorf("Unexpected reply: %s", rply)
+ }
-// //give time to CGRateS to delete the response from cache
-// time.Sleep(time.Second)
+ //give time to CGRateS to delete the response from cache
+ time.Sleep(time.Second)
-// if err := rpcRpc.Call(utils.SessionSv1TerminateSession,
-// args, &rply); err == nil || err.Error() != "MANDATORY_IE_MISSING: [OriginID]" {
-// t.Error(err)
-// }
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1TerminateSession,
+ args, &rply); err == nil || err.Error() != "MANDATORY_IE_MISSING: [OriginID]" {
+ t.Error(err)
+ }
-// }
+}
// func testRPCMethodsProcessCDR(t *testing.T) {
// args := &utils.CGREvent{
@@ -535,7 +582,7 @@ package general_tests
// },
// }
// var rply string
-// if err := rpcRpc.Call(utils.SessionSv1ProcessCDR,
+// if err := rpcRpc.Call(context.Background(), utils.SessionSv1ProcessCDR,
// args, &rply); err != nil {
// t.Error(err)
// } else if rply != utils.OK {
@@ -545,7 +592,7 @@ package general_tests
// //verify the CDR
// var cdrs []*engine.CDR
// argsCDR := &utils.RPCCDRsFilterWithAPIOpts{RPCCDRsFilter: &utils.RPCCDRsFilter{RunIDs: []string{utils.MetaDefault}}}
-// if err := rpcRpc.Call(utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if len(cdrs) != 1 {
// t.Error("Unexpected number of CDRs returned: ", len(cdrs))
@@ -553,7 +600,7 @@ package general_tests
// //change originID so CGRID be different
// args.Event[utils.OriginID] = "testRPCMethodsProcessCDR2"
// // we should get response from cache
-// if err := rpcRpc.Call(utils.SessionSv1ProcessCDR,
+// if err := rpcRpc.Call(context.Background(), utils.SessionSv1ProcessCDR,
// args, &rply); err != nil {
// t.Error(err)
// } else if rply != utils.OK {
@@ -561,7 +608,7 @@ package general_tests
// }
// time.Sleep(100 * time.Millisecond)
// //verify the CDR
-// if err := rpcRpc.Call(utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if len(cdrs) != 1 {
// t.Error("Unexpected number of CDRs returned: ", len(cdrs))
@@ -572,7 +619,7 @@ package general_tests
// //change originID so CGRID be different
// args.Event[utils.OriginID] = "testRPCMethodsProcessCDR3"
-// if err := rpcRpc.Call(utils.SessionSv1ProcessCDR,
+// if err := rpcRpc.Call(context.Background(), utils.SessionSv1ProcessCDR,
// args, &rply); err != nil {
// t.Error(err)
// } else if rply != utils.OK {
@@ -580,105 +627,108 @@ package general_tests
// }
// time.Sleep(100 * time.Millisecond)
// //verify the CDR
-// if err := rpcRpc.Call(utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1GetCDRs, argsCDR, &cdrs); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if len(cdrs) != 2 {
// t.Error("Unexpected number of CDRs returned: ", len(cdrs))
// }
// }
-// func testRPCMethodsProcessEvent(t *testing.T) {
-// initUsage := 5 * time.Minute
-// args := &sessions.V1ProcessMessageArgs{
-// Debit: true,
-// CGREvent: &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "testRPCMethodsProcessEvent",
-// Event: map[string]interface{}{
-// utils.Tenant: "cgrates.org",
-// utils.ToR: utils.MetaVoice,
-// utils.OriginID: "testRPCMethodsProcessEvent",
-// utils.RequestType: utils.MetaPrepaid,
-// utils.AccountField: "1001",
-// utils.Subject: "1001",
-// 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: initUsage,
-// },
-// },
-// }
-// var rplyFirst sessions.V1ProcessMessageReply
-// if err := rpcRpc.Call(utils.SessionSv1ProcessMessage,
-// args, &rplyFirst); err != nil {
-// t.Error(err)
-// } else if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != initUsage {
-// t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
-// }
+func testRPCMethodsProcessEvent(t *testing.T) {
+ initUsage := 5 * time.Minute
+ args := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "testRPCMethodsProcessEvent",
+ Event: map[string]interface{}{
+ utils.Tenant: "cgrates.org",
+ utils.ToR: utils.MetaVoice,
+ utils.OriginID: "testRPCMethodsProcessEvent",
+ utils.RequestType: utils.MetaPrepaid,
+ utils.AccountField: "1001",
+ utils.Subject: "1001",
+ 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: initUsage,
+ },
+ APIOpts: map[string]interface{}{
+ utils.OptsSesMessage: true,
+ },
+ }
+ var rplyFirst sessions.V1ProcessMessageReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1ProcessMessage,
+ args, &rplyFirst); err != nil {
+ t.Error(err)
+ } else if rplyFirst.MaxUsage == nil || *rplyFirst.MaxUsage != initUsage {
+ t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage)
+ }
-// //disable the account
-// var ids []string
-// thEvent := &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "DisableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "DisableAction": "DisableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
-// }
+ //disable the account
+ var ids []string
+ thEvent := &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "DisableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "DisableAction": "DisableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccDisableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccDisableAndLog"}, ids)
+ }
-// //verify if account was disabled
-// var acnt *engine.Account
-// attrAcc := &utils.AttrGetAccount{
-// Tenant: "cgrates.org",
-// Account: "1001",
-// }
-// if err := rpcRpc.Call(utils.APIerSv2GetAccount, attrAcc, &acnt); err != nil {
-// t.Error(err)
-// } else if acnt.Disabled != true {
-// t.Errorf("Expecting: true, received: %v", acnt.Disabled)
-// }
+ //verify if account was disabled
+ var acnt *utils.Account
+ attrAcc := &utils.TenantIDWithAPIOpts{
+ TenantID: &utils.TenantID{
+ Tenant: "cgrates.org",
+ ID: "1001",
+ },
+ }
+ if err := rpcRpc.Call(context.Background(), utils.AdminSv1GetAccount, attrAcc, &acnt); err != nil {
+ t.Error(err)
+ }
+ // else if acnt.Disabled != true {
+ // t.Errorf("Expecting: true, received: %v", acnt.Disabled)
+ // }
-// //get response from cache
-// var rply sessions.V1ProcessMessageReply
-// if err := rpcRpc.Call(utils.SessionSv1ProcessMessage,
-// args, &rply); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(rply, rplyFirst) {
-// t.Errorf("Expecting: %+v, \n received: %+v",
-// utils.ToJSON(rplyFirst), utils.ToJSON(rply))
-// }
+ //get response from cache
+ var rply sessions.V1ProcessMessageReply
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1ProcessMessage,
+ args, &rply); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(rply, rplyFirst) {
+ t.Errorf("Expecting: %+v, \n received: %+v",
+ utils.ToJSON(rplyFirst), utils.ToJSON(rply))
+ }
-// //give time to CGRateS to delete the response from cache
-// time.Sleep(time.Second)
+ //give time to CGRateS to delete the response from cache
+ time.Sleep(time.Second)
-// if err := rpcRpc.Call(utils.SessionSv1ProcessMessage,
-// args, &rplyFirst); err == nil || err.Error() != "RALS_ERROR:ACCOUNT_DISABLED" {
-// t.Error("Unexpected error returned", err)
-// }
+ if err := rpcRpc.Call(context.Background(), utils.SessionSv1ProcessMessage,
+ args, &rplyFirst); err == nil || err.Error() != "RALS_ERROR:ACCOUNT_DISABLED" {
+ t.Error("Unexpected error returned", err)
+ }
-// //enable the account
-// thEvent.CGREvent = &utils.CGREvent{
-// Tenant: "cgrates.org",
-// ID: "EnableAccount",
-// Event: map[string]interface{}{
-// utils.AccountField: "1001",
-// "EnableAction": "EnableAction",
-// },
-// }
-// //process event
-// if err := rpcRpc.Call(utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
-// t.Error(err)
-// } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
-// t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
-// }
-// }
+ //enable the account
+ thEvent = &utils.CGREvent{
+ Tenant: "cgrates.org",
+ ID: "EnableAccount",
+ Event: map[string]interface{}{
+ utils.AccountField: "1001",
+ "EnableAction": "EnableAction",
+ },
+ }
+ //process event
+ if err := rpcRpc.Call(context.Background(), utils.ThresholdSv1ProcessEvent, thEvent, &ids); err != nil {
+ t.Error(err)
+ } else if !reflect.DeepEqual(ids, []string{"THD_AccEnableAndLog"}) {
+ t.Errorf("Expecting ids: %s, received: %s", []string{"THD_AccEnableAndLog"}, ids)
+ }
+}
// func testRPCMethodsCdrsProcessCDR(t *testing.T) {
// args := &utils.CGREvent{
@@ -700,7 +750,7 @@ package general_tests
// }
// var reply string
-// if err := rpcRpc.Call(utils.CDRsV1ProcessEvent, args, &reply); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1ProcessEvent, args, &reply); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if reply != utils.OK {
// t.Error("Unexpected reply received: ", reply)
@@ -709,7 +759,7 @@ package general_tests
// //verify the CDR
// var cdrs []*engine.CDR
// argsCDR := utils.RPCCDRsFilterWithAPIOpts{RPCCDRsFilter: &utils.RPCCDRsFilter{RunIDs: []string{utils.MetaDefault}}}
-// if err := rpcRpc.Call(utils.CDRsV1GetCDRs, &argsCDR, &cdrs); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1GetCDRs, &argsCDR, &cdrs); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if len(cdrs) != 1 {
// t.Error("Unexpected number of CDRs returned: ", len(cdrs))
@@ -717,14 +767,14 @@ package general_tests
// //change originID so CGRID be different
// args.Event[utils.OriginID] = "testRPCMethodsProcessCDR2"
// // we should get response from cache
-// if err := rpcRpc.Call(utils.CDRsV1ProcessEvent, args, &reply); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1ProcessEvent, args, &reply); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if reply != utils.OK {
// t.Error("Unexpected reply received: ", reply)
// }
// time.Sleep(100 * time.Millisecond)
// //verify the CDR
-// if err := rpcRpc.Call(utils.CDRsV1GetCDRs, &argsCDR, &cdrs); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1GetCDRs, &argsCDR, &cdrs); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if len(cdrs) != 1 {
// t.Error("Unexpected number of CDRs returned: ", len(cdrs))
@@ -734,14 +784,14 @@ package general_tests
// time.Sleep(time.Second)
// //change originID so CGRID be different
// args.Event[utils.OriginID] = "testRPCMethodsProcessCDR4"
-// if err := rpcRpc.Call(utils.CDRsV1ProcessEvent, args, &reply); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1ProcessEvent, args, &reply); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if reply != utils.OK {
// t.Error("Unexpected reply received: ", reply)
// }
// time.Sleep(150 * time.Millisecond) // Give time for CDR to be rated
// //verify the CDR
-// if err := rpcRpc.Call(utils.CDRsV1GetCDRs, &argsCDR, &cdrs); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV1GetCDRs, &argsCDR, &cdrs); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if len(cdrs) != 2 {
// t.Error("Unexpected number of CDRs returned: ", len(cdrs))
@@ -772,7 +822,7 @@ package general_tests
// }
// var reply string
-// if err := rpcRpc.Call(utils.CDRsV2StoreSessionCost, args, &reply); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV2StoreSessionCost, args, &reply); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if reply != utils.OK {
// t.Error("Unexpected reply received: ", reply)
@@ -782,7 +832,7 @@ package general_tests
// //change originID so CGRID be different
// args.Cost.CGRID = "testRPCMethodsCdrsStoreSessionCost"
// // we should get response from cache
-// if err := rpcRpc.Call(utils.CDRsV2StoreSessionCost, args, &reply); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV2StoreSessionCost, args, &reply); err != nil {
// t.Error("Unexpected error: ", err.Error())
// } else if reply != utils.OK {
// t.Error("Unexpected reply received: ", reply)
@@ -792,7 +842,7 @@ package general_tests
// time.Sleep(time.Second)
// //change originID so CGRID be different
// args.Cost.CGRID = "testRPCMethodsCdrsStoreSessionCost"
-// if err := rpcRpc.Call(utils.CDRsV2StoreSessionCost, args,
+// if err := rpcRpc.Call(context.Background(), utils.CDRsV2StoreSessionCost, args,
// &reply); err == nil || err.Error() != "SERVER_ERROR: EXISTS" {
// t.Error("Unexpected error: ", err.Error())
// }
@@ -801,7 +851,7 @@ package general_tests
// // Load the tariff plan, creating accounts and their balances
// func testRPCMethodsLoadData(t *testing.T) {
// attrs := &utils.AttrLoadTpFromFolder{FolderPath: path.Join(*dataDir, "tariffplans", "testtp")}
-// if err := rpcRpc.Call(utils.APIerSv2LoadTariffPlanFromFolder, attrs, &tpLoadInst); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.AdminSv1LoadTariffPlanFromFolder, attrs, &tpLoadInst); err != nil {
// t.Error(err)
// }
// time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time for scheduler to execute topups
@@ -823,7 +873,7 @@ package general_tests
// }
// var cc engine.CallCost
// //cache the response
-// if err := rpcRpc.Call(utils.ResponderDebit, cd, &cc); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.ResponderDebit, cd, &cc); err != nil {
// t.Error(err)
// } else if cc.GetDuration() != 15*time.Second {
// t.Errorf("Expecting: %+v, \n received: %+v",
@@ -839,7 +889,7 @@ package general_tests
// }
// var ccCache engine.CallCost
// //cache the response
-// if err := rpcRpc.Call(utils.ResponderDebit, cd2, &ccCache); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.ResponderDebit, cd2, &ccCache); err != nil {
// t.Error(err)
// } else if !reflect.DeepEqual(ccCache, cc) {
// t.Errorf("Expecting: %+v, \n received: %+v",
@@ -847,7 +897,7 @@ package general_tests
// }
// //give time to CGRateS to delete the response from cache
// time.Sleep(time.Second)
-// if err := rpcRpc.Call(utils.ResponderDebit, cd2, &cc); err == nil || err.Error() != "ACCOUNT_NOT_FOUND" {
+// if err := rpcRpc.Call(context.Background(), utils.ResponderDebit, cd2, &cc); err == nil || err.Error() != "ACCOUNT_NOT_FOUND" {
// t.Error("Unexpected error returned", err)
// }
// }
@@ -869,7 +919,7 @@ package general_tests
// }
// var cc engine.CallCost
// //cache the response
-// if err := rpcRpc.Call(utils.ResponderMaxDebit, cd, &cc); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.ResponderMaxDebit, cd, &cc); err != nil {
// t.Error(err)
// } else if cc.GetDuration() != 15*time.Second {
// t.Errorf("Expecting: %+v, \n received: %+v",
@@ -885,7 +935,7 @@ package general_tests
// }
// var ccCache engine.CallCost
// //cache the response
-// if err := rpcRpc.Call(utils.ResponderMaxDebit, cd2, &ccCache); err != nil {
+// if err := rpcRpc.Call(context.Background(), utils.ResponderMaxDebit, cd2, &ccCache); err != nil {
// t.Error(err)
// } else if !reflect.DeepEqual(ccCache, cc) {
// t.Errorf("Expecting: %+v, \n received: %+v",
@@ -893,13 +943,13 @@ package general_tests
// }
// //give time to CGRateS to delete the response from cache
// time.Sleep(time.Second)
-// if err := rpcRpc.Call(utils.ResponderMaxDebit, cd2, &cc); err == nil || err.Error() != "ACCOUNT_NOT_FOUND" {
+// if err := rpcRpc.Call(context.Background(), utils.ResponderMaxDebit, cd2, &cc); err == nil || err.Error() != "ACCOUNT_NOT_FOUND" {
// t.Error("Unexpected error returned", err)
// }
// }
-// func testRPCMethodsStopEngine(t *testing.T) {
-// if err := engine.KillEngine(100); err != nil {
-// t.Error(err)
-// }
-// }
+func testRPCMethodsStopEngine(t *testing.T) {
+ if err := engine.KillEngine(100); err != nil {
+ t.Error(err)
+ }
+}