From 7237d692a4668e2b28bf1f630db85a1beaa6bc54 Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Tue, 22 Sep 2020 16:52:41 +0300 Subject: [PATCH] Updated radiuscfg AsMapInterface method --- config/radiuscfg.go | 56 +++++++++++---------- config/radiuscfg_test.go | 103 +++++++++++++++++++++++++++------------ 2 files changed, 101 insertions(+), 58 deletions(-) diff --git a/config/radiuscfg.go b/config/radiuscfg.go index 99c8b4779..8fcf45d30 100644 --- a/config/radiuscfg.go +++ b/config/radiuscfg.go @@ -100,41 +100,45 @@ func (self *RadiusAgentCfg) loadFromJsonCfg(jsnCfg *RadiusAgentJsonCfg, separato return } -func (ra *RadiusAgentCfg) AsMapInterface(separator string) map[string]interface{} { - clientSecrets := make(map[string]interface{}, len(ra.ClientSecrets)) - for key, val := range ra.ClientSecrets { - clientSecrets[key] = val +func (ra *RadiusAgentCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: ra.Enabled, + utils.ListenNetCfg: ra.ListenNet, + utils.ListenAuthCfg: ra.ListenAuth, + utils.ListenAcctCfg: ra.ListenAcct, + } + if ra.ClientSecrets != nil { + clientSecrets := make(map[string]interface{}, len(ra.ClientSecrets)) + for key, val := range ra.ClientSecrets { + clientSecrets[key] = val + } + initialMP[utils.ClientSecretsCfg] = clientSecrets } - clientDictionaries := make(map[string]interface{}, len(ra.ClientDictionaries)) - for key, val := range ra.ClientDictionaries { - clientDictionaries[key] = val + if ra.ClientDictionaries != nil { + clientDictionaries := make(map[string]interface{}, len(ra.ClientDictionaries)) + for key, val := range ra.ClientDictionaries { + clientDictionaries[key] = val + } + initialMP[utils.ClientDictionariesCfg] = clientDictionaries } requestProcessors := make([]map[string]interface{}, len(ra.RequestProcessors)) for i, item := range ra.RequestProcessors { requestProcessors[i] = item.AsMapInterface(separator) } + initialMP[utils.RequestProcessorsCfg] = requestProcessors - sessionSConns := make([]string, len(ra.SessionSConns)) - for i, item := range ra.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 ra.SessionSConns != nil { + sessionSConns := make([]string, len(ra.SessionSConns)) + for i, item := range ra.SessionSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) { + sessionSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaSessionS, utils.EmptyString) + } else { + sessionSConns[i] = item + } } + initialMP[utils.SessionSConnsCfg] = sessionSConns } - - return map[string]interface{}{ - utils.EnabledCfg: ra.Enabled, - utils.ListenNetCfg: ra.ListenNet, - utils.ListenAuthCfg: ra.ListenAuth, - utils.ListenAcctCfg: ra.ListenAcct, - utils.ClientSecretsCfg: clientSecrets, - utils.ClientDictionariesCfg: clientDictionaries, - utils.SessionSConnsCfg: sessionSConns, - utils.RequestProcessorsCfg: requestProcessors, - } - + return } diff --git a/config/radiuscfg_test.go b/config/radiuscfg_test.go index 07f45b1b0..f07a1ee9f 100644 --- a/config/radiuscfg_test.go +++ b/config/radiuscfg_test.go @@ -72,45 +72,84 @@ func TestRadiusAgentCfgloadFromJsonCfg(t *testing.T) { } func TestRadiusAgentCfgAsMapInterface(t *testing.T) { - var racfg RadiusAgentCfg cfgJSONStr := `{ "radius_agent": { - "enabled": false, - "listen_net": "udp", - "listen_auth": "127.0.0.1:1812", - "listen_acct": "127.0.0.1:1813", - "client_secrets": { - "*default": "CGRateS.org" - }, - "client_dictionaries": { - "*default": "/usr/share/cgrates/radius/dict/", - }, - "sessions_conns": ["*internal"], - "request_processors": [ - ], - }, + "enabled": true, + "listen_auth": "127.0.0.1:1816", + "listen_acct": "127.0.0.1:1892", + + "client_dictionaries": { + "*default": "/usr/share/cgrates/", + }, + "sessions_conns": ["*conn1","*conn2"], + "request_processors": [ + { + "id": "OutboundAUTHDryRun", + "filters": ["*string:~*req.request_type:OutboundAUTH","*string:~*req.Msisdn:497700056231"], + "tenant": "cgrates.org", + "flags": ["*dryrun"], + "request_fields":[], + "reply_fields":[ + {"tag": "Allow", "path": "*rep.response.Allow", "type": "*constant", + "value": "1", "mandatory": true}, + ], + },], + }, }` eMap := map[string]interface{}{ - "enabled": false, - "listen_net": "udp", - "listen_auth": "127.0.0.1:1812", - "listen_acct": "127.0.0.1:1813", - "client_secrets": map[string]interface{}{ - "*default": "CGRateS.org", + utils.EnabledCfg: true, + utils.ListenNetCfg: "udp", + utils.ListenAuthCfg: "127.0.0.1:1816", + utils.ListenAcctCfg: "127.0.0.1:1892", + utils.ClientSecretsCfg: map[string]interface{}{ + utils.MetaDefault: "CGRateS.org", }, - "client_dictionaries": map[string]interface{}{ - "*default": "/usr/share/cgrates/radius/dict/", + utils.ClientDictionariesCfg: map[string]interface{}{ + utils.MetaDefault: "/usr/share/cgrates/", + }, + utils.SessionSConnsCfg: []string{"*conn1", "*conn2"}, + utils.RequestProcessorsCfg: []map[string]interface{}{ + { + utils.IdCfg: "OutboundAUTHDryRun", + utils.FilterSCfg: []string{"*string:~*req.request_type:OutboundAUTH", "*string:~*req.Msisdn:497700056231"}, + utils.TenantCfg: "cgrates.org", + utils.FlagsCfg: []string{"*dryrun"}, + utils.TimezoneCfg: "", + utils.RequestFieldsCfg: []map[string]interface{}{}, + utils.ReplyFieldsCfg: []map[string]interface{}{ + {utils.TagCfg: "Allow", utils.PathCfg: "*rep.response.Allow", utils.TypeCfg: "*constant", utils.ValueCfg: "1", utils.MandatoryCfg: true}, + }, + }, }, - "sessions_conns": []string{"*internal"}, - "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 jsnRaCfg, err := jsnCfg.RadiusAgentJsonCfg(); err != nil { - t.Error(err) - } else if err = racfg.loadFromJsonCfg(jsnRaCfg, utils.INFIELD_SEP); err != nil { - t.Error(err) - } else if rcv := racfg.AsMapInterface(utils.EmptyString); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.radiusAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expecetd %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } +} + +func TestRadiusAgentCfgAsMapInterface1(t *testing.T) { + cfgJSONStr := `{ + "radius_agent": {}, +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: false, + utils.ListenNetCfg: "udp", + utils.ListenAuthCfg: "127.0.0.1:1812", + utils.ListenAcctCfg: "127.0.0.1:1813", + utils.ClientSecretsCfg: map[string]interface{}{ + utils.MetaDefault: "CGRateS.org", + }, + utils.ClientDictionariesCfg: map[string]interface{}{ + utils.MetaDefault: "/usr/share/cgrates/radius/dict/", + }, + utils.SessionSConnsCfg: []string{"*internal"}, + utils.RequestProcessorsCfg: []map[string]interface{}{}, + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.radiusAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expecetd %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } }