From 2605c34d79b80e01cd20c0b5abcab504a9ccb0f0 Mon Sep 17 00:00:00 2001 From: TeoV Date: Mon, 7 Sep 2020 17:08:40 +0300 Subject: [PATCH] Add integration test for starting engine from ConfigS from http --- apier/v1/config_it_test.go | 60 ++++++++++ config/config_it_test.go | 14 ++- data/conf/samples/configs_active/cgrates.json | 108 ++---------------- engine/libtest.go | 2 +- 4 files changed, 79 insertions(+), 105 deletions(-) diff --git a/apier/v1/config_it_test.go b/apier/v1/config_it_test.go index 4bea21e43..377de1660 100644 --- a/apier/v1/config_it_test.go +++ b/apier/v1/config_it_test.go @@ -21,7 +21,10 @@ along with this program. If not, see package v1 import ( + "fmt" "net/rpc" + "net/rpc/jsonrpc" + "os/exec" "path" "reflect" "testing" @@ -47,6 +50,9 @@ var ( testConfigSReloadConfigFromJSONSessionS, testConfigSReloadConfigFromJSONEEs, testConfigSKillEngine, + testConfigStartEngineWithConfigs, + testConfigStartEngineFromHTTP, + testConfigSKillEngine, } ) @@ -242,3 +248,57 @@ func testConfigSKillEngine(t *testing.T) { t.Error(err) } } + +func testConfigStartEngineWithConfigs(t *testing.T) { + var err error + configCfgPath = path.Join(*dataDir, "conf", "samples", "configs_active") + configCfg, err = config.NewCGRConfigFromPath(configCfgPath) + if err != nil { + t.Error(err) + } + if _, err := engine.StopStartEngine(configCfgPath, *waitRater); err != nil { + t.Fatal(err) + } + configRPC, err = newRPCClient(configCfg.ListenCfg()) // We connect over JSON so we can also troubleshoot if needed + if err != nil { + t.Fatal(err) + } + var rply map[string]interface{} + if err := configRPC.Call(utils.CoreSv1Status, &utils.TenantWithOpts{}, &rply); err != nil { + t.Error(err) + } else if rply[utils.NodeID] != "EngineWithConfigSActive" { + t.Errorf("Expected %+v , received: %+v ", "EngineWithConfigSActive", rply) + } +} + +func testConfigStartEngineFromHTTP(t *testing.T) { + enginePath, err := exec.LookPath("cgr-engine") + if err != nil { + t.Error(err) + } + engine := exec.Command(enginePath, "-config_path", "http://127.0.0.1:3080/configs/tutmysql/cgrates.json") + if err := engine.Start(); err != nil { + t.Error(err) + } + fib := utils.Fib() + var jsonClnt *rpc.Client + var connected bool + for i := 0; i < 200; i++ { + time.Sleep(time.Duration(fib()) * time.Millisecond) + if jsonClnt, err = jsonrpc.Dial(utils.TCP, "localhost:2012"); err != nil { + utils.Logger.Warning(fmt.Sprintf("Error <%s> when opening test connection to: <%s>", + err.Error(), "localhost:2012")) + } else { + connected = true + break + } + } + if !connected { + t.Errorf("engine did not open port <%s>", "localhost:2012") + } + time.Sleep(time.Duration(500) * time.Millisecond) + var rply map[string]interface{} + if err := jsonClnt.Call(utils.CoreSv1Status, &utils.TenantWithOpts{}, &rply); err != nil { + t.Error(err) + } +} diff --git a/config/config_it_test.go b/config/config_it_test.go index 3ff6e5678..b1851f909 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -1021,7 +1021,8 @@ func testCGRConfigReloadAll(t *testing.T) { } func testHttpHandlerConfigSForNotExistFile(t *testing.T) { - req := httptest.NewRequest("GET", "http://127.0.0.1/usr/share/cgrates/conf/samples/NotExists/cgrates.json", nil) + cgrCfg.configSCfg.RootDir = "/usr/share/cgrates/" + req := httptest.NewRequest("GET", "http://127.0.0.1/conf/samples/NotExists/cgrates.json", nil) w := httptest.NewRecorder() HandlerConfigS(w, req) @@ -1038,7 +1039,8 @@ func testHttpHandlerConfigSForNotExistFile(t *testing.T) { } func testHttpHandlerConfigSForFile(t *testing.T) { - req := httptest.NewRequest("GET", "http://127.0.0.1/usr/share/cgrates/conf/samples/tutmysql/cgrates.json", nil) + cgrCfg.configSCfg.RootDir = "/usr/share/cgrates/" + req := httptest.NewRequest("GET", "http://127.0.0.1/conf/samples/tutmysql/cgrates.json", nil) w := httptest.NewRecorder() HandlerConfigS(w, req) @@ -1056,7 +1058,8 @@ func testHttpHandlerConfigSForFile(t *testing.T) { } func testHttpHandlerConfigSForNotExistFolder(t *testing.T) { - req := httptest.NewRequest("GET", "http://127.0.0.1/usr/share/cgrates/conf/samples/NotExists/", nil) + cgrCfg.configSCfg.RootDir = "/usr/share/cgrates/" + req := httptest.NewRequest("GET", "http://127.0.0.1/conf/samples/NotExists/", nil) w := httptest.NewRecorder() HandlerConfigS(w, req) @@ -1066,14 +1069,15 @@ func testHttpHandlerConfigSForNotExistFolder(t *testing.T) { if resp.Status != "404 Not Found" { t.Errorf("Expected %+v , received: %+v ", "200 OK", resp.Status) } - httpBodyMsgError := "stat /usr/share/cgrates/conf/samples/NotExists/: no such file or directory" + httpBodyMsgError := "stat /usr/share/cgrates/conf/samples/NotExists: no such file or directory" if httpBodyMsgError != string(body) { t.Errorf("Expected %s , received: %s ", httpBodyMsgError, string(body)) } } func testHttpHandlerConfigSForFolder(t *testing.T) { - req := httptest.NewRequest("GET", "http://127.0.0.1/usr/share/cgrates/conf/samples/diamagent_internal/", nil) + cgrCfg.configSCfg.RootDir = "/usr/share/cgrates/" + req := httptest.NewRequest("GET", "http://127.0.0.1/conf/samples/diamagent_internal/", nil) w := httptest.NewRecorder() HandlerConfigS(w, req) diff --git a/data/conf/samples/configs_active/cgrates.json b/data/conf/samples/configs_active/cgrates.json index 96695e066..a8c031ab5 100644 --- a/data/conf/samples/configs_active/cgrates.json +++ b/data/conf/samples/configs_active/cgrates.json @@ -2,116 +2,26 @@ "general": { + "node_id": "EngineWithConfigSActive", "log_level": 7, "reply_timeout": "50s", }, "listen": { - "rpc_json": ":2012", - "rpc_gob": ":2013", - "http": ":2080", + "rpc_json": ":3012", + "rpc_gob": ":3013", + "http": ":3080", }, -"data_db": { // database used to store runtime data (eg: accounts, cdr stats) - "db_type": "redis", // data_db type: - "db_port": 6379, // data_db port to reach the database - "db_name": "10", // data_db database name to connect to + +"data_db": { + "db_type": "*internal", }, + "stor_db": { - "db_password": "CGRateS.org", -}, - - -"rals": { - "enabled": true, - "thresholds_conns": ["*internal"], - "max_increments":3000000, -}, - - -"schedulers": { - "enabled": true, - "cdrs_conns": ["*internal"], -}, - - -"cdrs": { - "enabled": true, - "chargers_conns":["*internal"], -}, - - -"attributes": { - "enabled": true, -}, - - -"chargers": { - "enabled": true, - "attributes_conns": ["*internal"], -}, - - -"resources": { - "enabled": true, - "store_interval": "1s", - "thresholds_conns": ["*internal"] -}, - - -"stats": { - "enabled": true, - "store_interval": "1s", - "thresholds_conns": ["*internal"], -}, - -"thresholds": { - "enabled": true, - "store_interval": "1s", -}, - - -"routes": { - "enabled": true, - "prefix_indexed_fields":["*req.Destination"], - "stats_conns": ["*internal"], - "resources_conns": ["*internal"], - "rals_conns": ["*internal"], -}, - - -"sessions": { - "enabled": true, - "routes_conns": ["*internal"], - "resources_conns": ["*internal"], - "attributes_conns": ["*internal"], - "rals_conns": ["*internal"], - "cdrs_conns": ["*internal"], - "chargers_conns": ["*internal"], -}, - - -"migrator":{ - "out_stordb_password": "CGRateS.org", - "users_filters":["Account"], -}, - - - -"apiers": { - "enabled": true, - "scheduler_conns": ["*internal"], -}, - - -"rates": { - "enabled": true -}, - -"filters": { - "apiers_conns": ["*internal"], + "db_type": "*internal" }, diff --git a/engine/libtest.go b/engine/libtest.go index f63466406..3a69917ba 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -363,7 +363,7 @@ func StartEngine(cfgPath string, waitEngine int) (*exec.Cmd, error) { if !connected { return nil, fmt.Errorf("engine did not open port <%s>", cfg.ListenCfg().RPCJSONListen) } - time.Sleep(time.Duration(waitEngine) * time.Millisecond) // wait for rater to register all subsistems + time.Sleep(time.Duration(waitEngine) * time.Millisecond) // wait for rater to register all subsystems return engine, nil }