From bebd8f81150f1e3fdf480c6a0150b06f91017e4d Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Wed, 16 Sep 2020 15:04:18 +0300 Subject: [PATCH] Updated configs AsMapInterface method --- config/configs.go | 9 ++++++ config/configs_test.go | 64 ++++++++++++++++++++++++++++++++++++++ config/datadbcfg.go | 29 ++++++++++------- config/datadbcfg_test.go | 25 ++++++++++++++- config/diametercfg.go | 61 +++++++++++++++++++----------------- config/diametercfg_test.go | 29 ++++++++++------- utils/consts.go | 1 + 7 files changed, 165 insertions(+), 53 deletions(-) create mode 100644 config/configs_test.go diff --git a/config/configs.go b/config/configs.go index df8336ec7..e46104df9 100644 --- a/config/configs.go +++ b/config/configs.go @@ -106,3 +106,12 @@ func handleConfigSFile(path string, w http.ResponseWriter) { } return } + +func (cScfg *ConfigSCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: cScfg.Enabled, + utils.UrlCfg: cScfg.Url, + utils.RootDirCfg: cScfg.RootDir, + } + return +} diff --git a/config/configs_test.go b/config/configs_test.go new file mode 100644 index 000000000..fd6bc3a05 --- /dev/null +++ b/config/configs_test.go @@ -0,0 +1,64 @@ +package config + +import ( + "reflect" + "testing" + + "github.com/cgrates/cgrates/utils" +) + +func TestConfigsloadFromJsonCfg(t *testing.T) { + jsonCfgs := &ConfigSCfgJson{ + Enabled: utils.BoolPointer(true), + Url: utils.StringPointer("/randomURL/"), + Root_dir: utils.StringPointer("/randomPath/"), + } + expectedCfg := &ConfigSCfg{ + Enabled: true, + Url: "/randomURL/", + RootDir: "/randomPath/", + } + if cgrCfg, err := NewDefaultCGRConfig(); err != nil { + t.Error(err) + } else if err := cgrCfg.configSCfg.loadFromJsonCfg(jsonCfgs); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(cgrCfg.configSCfg, expectedCfg) { + t.Errorf("Expected %+v, received %+v", expectedCfg, cgrCfg.configSCfg) + } +} + +func TestConfigsAsMapInterface(t *testing.T) { + cfgsJSONStr := `{ + "configs": { + "enabled": true, + "url": "", + "root_dir": "/var/spool/cgrates/configs" + }, +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: true, + utils.UrlCfg: "", + utils.RootDirCfg: "/var/spool/cgrates/configs", + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgsJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.configSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) + } +} + +func TestConfigsAsMapInterface2(t *testing.T) { + cfgsJSONStr := `{ + "configs":{} +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: false, + utils.UrlCfg: "/configs/", + utils.RootDirCfg: "/var/spool/cgrates/configs", + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgsJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.configSCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) + } +} diff --git a/config/datadbcfg.go b/config/datadbcfg.go index b7e8f6f24..6f8b289d4 100644 --- a/config/datadbcfg.go +++ b/config/datadbcfg.go @@ -129,25 +129,29 @@ func (dbcfg *DataDbCfg) Clone() *DataDbCfg { } } -func (dbcfg *DataDbCfg) AsMapInterface() map[string]interface{} { - items := make(map[string]interface{}) - for key, item := range dbcfg.Items { - items[key] = item.AsMapInterface() - } - dbPort, _ := strconv.Atoi(dbcfg.DataDbPort) - - return map[string]interface{}{ +func (dbcfg *DataDbCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ utils.DataDbTypeCfg: utils.Meta + dbcfg.DataDbType, utils.DataDbHostCfg: dbcfg.DataDbHost, - utils.DataDbPortCfg: dbPort, utils.DataDbNameCfg: dbcfg.DataDbName, utils.DataDbUserCfg: dbcfg.DataDbUser, utils.DataDbPassCfg: dbcfg.DataDbPass, utils.RmtConnsCfg: dbcfg.RmtConns, utils.RplConnsCfg: dbcfg.RplConns, - utils.ItemsCfg: items, utils.OptsCfg: dbcfg.Opts, } + if dbcfg.Items != nil { + items := make(map[string]interface{}, len(dbcfg.Items)) + for key, item := range dbcfg.Items { + items[key] = item.AsMapInterface() + } + initialMP[utils.ItemsCfg] = items + } + if dbcfg.DataDbPort != "" { + dbPort, _ := strconv.Atoi(dbcfg.DataDbPort) + initialMP[utils.DataDbPortCfg] = dbPort + } + return } type ItemOpt struct { @@ -158,13 +162,14 @@ type ItemOpt struct { APIKey string } -func (itm *ItemOpt) AsMapInterface() map[string]interface{} { - return map[string]interface{}{ +func (itm *ItemOpt) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ utils.RemoteCfg: itm.Remote, utils.ReplicateCfg: itm.Replicate, utils.RouteID: itm.RouteID, utils.APIKey: itm.APIKey, } + return } func (itm *ItemOpt) loadFromJsonCfg(jsonItm *ItemOptJson) (err error) { diff --git a/config/datadbcfg_test.go b/config/datadbcfg_test.go index 0b6a852ec..100df29a4 100644 --- a/config/datadbcfg_test.go +++ b/config/datadbcfg_test.go @@ -444,6 +444,29 @@ func TestDataDbCfgAsMapInterface(t *testing.T) { "*reverse_destinations": map[string]interface{}{"remote": false, "replicate": false, "ApiKey": "", "RouteID": ""}, }, } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else { + rcv := cgrCfg.dataDbCfg.AsMapInterface() + if !reflect.DeepEqual(eMap[utils.ItemsCfg].(map[string]interface{})[utils.MetaAccounts], + rcv[utils.ItemsCfg].(map[string]interface{})[utils.MetaAccounts]) { + t.Errorf("Expected %+v, received %+v", eMap[utils.ItemsCfg].(map[string]interface{})[utils.MetaAccounts], + rcv[utils.ItemsCfg].(map[string]interface{})[utils.MetaAccounts]) + } else if !reflect.DeepEqual(eMap[utils.ItemsCfg].(map[string]interface{})[utils.MetaReverseDestinations], + rcv[utils.ItemsCfg].(map[string]interface{})[utils.MetaReverseDestinations]) { + t.Errorf("Expected %+v, received %+v", eMap[utils.ItemsCfg].(map[string]interface{})[utils.MetaReverseDestinations], + rcv[utils.ItemsCfg].(map[string]interface{})[utils.MetaReverseDestinations]) + } + } + + /*if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.dataDbCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } + + */ + if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) } else if jsnDataDbCfg, err := jsnCfg.DbJsonCfg(DATADB_JSN); err != nil { @@ -451,6 +474,6 @@ func TestDataDbCfgAsMapInterface(t *testing.T) { } else if err = dbcfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { t.Error(err) } else if rcv := dbcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected %+v, recieved %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/diametercfg.go b/config/diametercfg.go index 4b0ddfe91..4e5ca1e23 100644 --- a/config/diametercfg.go +++ b/config/diametercfg.go @@ -118,37 +118,40 @@ func (da *DiameterAgentCfg) loadFromJsonCfg(jsnCfg *DiameterAgentJsonCfg, separa return } -func (ds *DiameterAgentCfg) AsMapInterface(separator string) map[string]interface{} { - requestProcessors := make([]map[string]interface{}, len(ds.RequestProcessors)) - for i, item := range ds.RequestProcessors { - requestProcessors[i] = item.AsMapInterface(separator) +func (ds *DiameterAgentCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: ds.Enabled, + utils.ListenNetCfg: ds.ListenNet, + utils.ListenCfg: ds.Listen, + utils.DictionariesPathCfg: ds.DictionariesPath, + utils.OriginHostCfg: ds.OriginHost, + utils.OriginRealmCfg: ds.OriginRealm, + utils.VendorIdCfg: ds.VendorId, + utils.ProductNameCfg: ds.ProductName, + utils.ConcurrentReqsCfg: ds.ConcurrentReqs, + utils.SyncedConnReqsCfg: ds.SyncedConnReqs, + utils.ASRTemplateCfg: ds.ASRTemplate, + utils.RARTemplateCfg: ds.RARTemplate, + utils.ForcedDisconnectCfg: ds.ForcedDisconnect, } - - sessionSConns := make([]string, len(ds.SessionSConns)) - for i, item := range ds.SessionSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) - if item == buf { - sessionSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaSessionS, utils.EmptyString) - } else { - sessionSConns[i] = item + if ds.RequestProcessors != nil { + requestProcessors := make([]map[string]interface{}, len(ds.RequestProcessors)) + for i, item := range ds.RequestProcessors { + requestProcessors[i] = item.AsMapInterface(separator) } + initialMP[utils.RequestProcessorsCfg] = requestProcessors } - - return map[string]interface{}{ - utils.EnabledCfg: ds.Enabled, - utils.ListenNetCfg: ds.ListenNet, - utils.ListenCfg: ds.Listen, - utils.DictionariesPathCfg: ds.DictionariesPath, - utils.SessionSConnsCfg: sessionSConns, - utils.OriginHostCfg: ds.OriginHost, - utils.OriginRealmCfg: ds.OriginRealm, - utils.VendorIdCfg: ds.VendorId, - utils.ProductNameCfg: ds.ProductName, - utils.ConcurrentReqsCfg: ds.ConcurrentReqs, - utils.SyncedConnReqsCfg: ds.SyncedConnReqs, - utils.ASRTemplateCfg: ds.ASRTemplate, - utils.RARTemplateCfg: ds.RARTemplate, - utils.ForcedDisconnectCfg: ds.ForcedDisconnect, - utils.RequestProcessorsCfg: requestProcessors, + if ds.SessionSConns != nil { + sessionSConns := make([]string, len(ds.SessionSConns)) + for i, item := range ds.SessionSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) + if item == buf { + sessionSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaSessionS, utils.EmptyString) + } else { + sessionSConns[i] = item + } + } + initialMP[utils.SessionSConnsCfg] = sessionSConns } + return } diff --git a/config/diametercfg_test.go b/config/diametercfg_test.go index 21786a9eb..93623de89 100644 --- a/config/diametercfg_test.go +++ b/config/diametercfg_test.go @@ -72,7 +72,7 @@ func TestDiameterAgentCfgloadFromJsonCfg(t *testing.T) { } func TestDiameterAgentCfgAsMapInterface(t *testing.T) { - var dacfg DiameterAgentCfg + //var dacfg DiameterAgentCfg cfgJSONStr := `{ "diameter_agent": { "enabled": false, @@ -89,12 +89,12 @@ func TestDiameterAgentCfgAsMapInterface(t *testing.T) { }` eMap := map[string]interface{}{ "asr_template": "", - "concurrent_requests": 0, + "concurrent_requests": -1, "dictionaries_path": "/usr/share/cgrates/diameter/dict/", "enabled": false, - "forced_disconnect": "", + "forced_disconnect": "*none", "listen": "127.0.0.1:3868", - "listen_net": "", + "listen_net": "tcp", "origin_host": "CGR-DA", "origin_realm": "cgrates.org", "product_name": "CGRateS", @@ -104,13 +104,20 @@ func TestDiameterAgentCfgAsMapInterface(t *testing.T) { "vendor_id": 0, "request_processors": []map[string]interface{}{}, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnDaCfg, err := jsnCfg.DiameterAgentJsonCfg(); err != nil { - t.Error(err) - } else if err = dacfg.loadFromJsonCfg(jsnDaCfg, utils.INFIELD_SEP); err != nil { - t.Error(err) - } else if rcv := dacfg.AsMapInterface(utils.EmptyString); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("Expected: %+v,\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.diameterAgentCfg.AsMapInterface(utils.EmptyString); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } + /* + if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDaCfg, err := jsnCfg.DiameterAgentJsonCfg(); err != nil { + t.Error(err) + } else if err = dacfg.loadFromJsonCfg(jsnDaCfg, utils.INFIELD_SEP); err != nil { + t.Error(err) + } else if rcv := dacfg.AsMapInterface(utils.EmptyString); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected: %+v,\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } + */ } diff --git a/utils/consts.go b/utils/consts.go index 179a28b7b..23c1e0b47 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -2152,6 +2152,7 @@ const ( // SureTax const ( + RootDirCfg = "root_dir" UrlCfg = "url" ClientNumberCfg = "client_number" ValidationKeyCfg = "validation_key"