From 8566de1a080b96a7c5c42e419f87c70d1fb1a550 Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Wed, 6 Apr 2022 18:32:38 +0300 Subject: [PATCH] Repair tests in general_tests --- data/conf/samples/gocs/us_site/cgrates.json | 28 +- .../samples/rpccaching_mongo/cgrates.json | 123 +- .../samples/rpccaching_mysql/cgrates.json | 114 +- general_tests/gocs_it_test.go | 1076 +++++++-------- general_tests/rpccaching_it_test.go | 1180 +++++++++-------- 5 files changed, 1303 insertions(+), 1218 deletions(-) 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) + } +}