From 92c90cf72df8a33584074fe6335586fa955e00c9 Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Tue, 22 Sep 2020 17:39:05 +0300 Subject: [PATCH] Updated ralscfg AsMapInterface method --- config/ralscfg.go | 85 +++++++++++++++++++++++-------------- config/ralscfg_test.go | 96 ++++++++++++++++++++++++------------------ 2 files changed, 109 insertions(+), 72 deletions(-) diff --git a/config/ralscfg.go b/config/ralscfg.go index 8b445037a..0380012fb 100644 --- a/config/ralscfg.go +++ b/config/ralscfg.go @@ -112,41 +112,64 @@ func (ralsCfg *RalsCfg) loadFromJsonCfg(jsnRALsCfg *RalsJsonCfg) (err error) { return nil } -func (ralsCfg *RalsCfg) AsMapInterface() map[string]interface{} { - maxComputed := make(map[string]interface{}) - for key, item := range ralsCfg.MaxComputedUsage { - if key == utils.ANY || key == utils.VOICE { - maxComputed[key] = item.String() - } else { - maxComputed[key] = strconv.Itoa(int(item)) - } - } - - cacheSConns := make([]string, len(ralsCfg.CacheSConns)) - for i, item := range ralsCfg.CacheSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches) - if item == buf { - cacheSConns[i] = strings.ReplaceAll(item, ":*caches", utils.EmptyString) - } else { - cacheSConns[i] = item - } - } - - balanceRating := make(map[string]interface{}) - for key, item := range ralsCfg.BalanceRatingSubject { - balanceRating[key] = item - } - - return map[string]interface{}{ +func (ralsCfg *RalsCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ utils.EnabledCfg: ralsCfg.Enabled, - utils.ThresholdSConnsCfg: ralsCfg.ThresholdSConns, - utils.StatSConnsCfg: ralsCfg.StatSConns, - utils.CacheSConnsCfg: cacheSConns, utils.RpSubjectPrefixMatchingCfg: ralsCfg.RpSubjectPrefixMatching, utils.RemoveExpiredCfg: ralsCfg.RemoveExpired, - utils.MaxComputedUsageCfg: maxComputed, - utils.BalanceRatingSubjectCfg: balanceRating, utils.MaxIncrementsCfg: ralsCfg.MaxIncrements, utils.Dynaprepaid_actionplansCfg: ralsCfg.DynaprepaidActionPlans, } + if ralsCfg.ThresholdSConns != nil { + threSholds := make([]string, len(ralsCfg.ThresholdSConns)) + for i, item := range ralsCfg.ThresholdSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) { + threSholds[i] = strings.ReplaceAll(item, ":*thresholds", utils.EmptyString) + } else { + threSholds[i] = item + } + } + initialMP[utils.ThresholdSConnsCfg] = threSholds + } + if ralsCfg.StatSConns != nil { + statS := make([]string, len(ralsCfg.StatSConns)) + for i, item := range ralsCfg.StatSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) { + statS[i] = strings.ReplaceAll(item, ":*stats", utils.EmptyString) + } else { + statS[i] = item + } + } + initialMP[utils.StatSConnsCfg] = statS + } + if ralsCfg.MaxComputedUsage != nil { + maxComputed := make(map[string]interface{}) + for key, item := range ralsCfg.MaxComputedUsage { + if key == utils.ANY || key == utils.VOICE { + maxComputed[key] = item.String() + } else { + maxComputed[key] = strconv.Itoa(int(item)) + } + } + initialMP[utils.MaxComputedUsageCfg] = maxComputed + } + if ralsCfg.CacheSConns != nil { + cacheSConns := make([]string, len(ralsCfg.CacheSConns)) + for i, item := range ralsCfg.CacheSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches) { + cacheSConns[i] = strings.ReplaceAll(item, ":*caches", utils.EmptyString) + } else { + cacheSConns[i] = item + } + } + initialMP[utils.CachesConnsCfg] = cacheSConns + } + if ralsCfg.BalanceRatingSubject != nil { + balanceRating := make(map[string]interface{}) + for key, item := range ralsCfg.BalanceRatingSubject { + balanceRating[key] = item + } + initialMP[utils.BalanceRatingSubjectCfg] = balanceRating + } + return } diff --git a/config/ralscfg_test.go b/config/ralscfg_test.go index d705f1317..70b8fe2aa 100644 --- a/config/ralscfg_test.go +++ b/config/ralscfg_test.go @@ -77,61 +77,75 @@ func TestRalsCfgFromJsonCfg(t *testing.T) { } func TestRalsCfgAsMapInterface(t *testing.T) { - var ralscfg RalsCfg - ralscfg.MaxComputedUsage = make(map[string]time.Duration) - ralscfg.BalanceRatingSubject = make(map[string]string) cfgJSONStr := `{ "rals": { - "enabled": false, - "thresholds_conns": [], - "stats_conns": [], - "caches_conns":["*internal"], - "rp_subject_prefix_matching": false, - "remove_expired":true, - "max_computed_usage": { - "*any": "189h", - "*voice": "72h", - "*data": "107374182400", - "*sms": "10000", - "*mms": "10000" - }, - "max_increments": 1000000, - "balance_rating_subject":{ - "*any": "*zero1ns", - "*voice": "*zero1s" - }, - "dynaprepaid_actionplans": [], - }, + "enabled": true, + "thresholds_conns": ["*internal"], + "stats_conns": ["*conn1","*conn2"], + "users_conns": ["*internal"], + "rp_subject_prefix_matching": true, + "max_computed_usage": { // do not compute usage higher than this, prevents memory overload + "*voice": "48h", + "*sms": "5000" + }, + }, }` eMap := map[string]interface{}{ - "enabled": false, - "thresholds_conns": []string{}, - "stats_conns": []string{}, - "caches_conns": []string{"*internal"}, - "rp_subject_prefix_matching": false, - "remove_expired": true, - "max_computed_usage": map[string]interface{}{ + utils.EnabledCfg: true, + utils.ThresholdSConnsCfg: []string{"*internal"}, + utils.StatSConnsCfg: []string{"*conn1", "*conn2"}, + utils.CachesConnsCfg: []string{"*internal"}, + utils.RpSubjectPrefixMatchingCfg: true, + utils.RemoveExpiredCfg: true, + utils.MaxComputedUsageCfg: map[string]interface{}{ + "*any": "189h0m0s", + "*voice": "48h0m0s", + "*data": "107374182400", + "*sms": "5000", + "*mms": "10000", + }, + utils.MaxIncrementsCfg: 1000000, + utils.BalanceRatingSubjectCfg: map[string]interface{}{ + "*any": "*zero1ns", + "*voice": "*zero1s", + }, + utils.Dynaprepaid_actionplansCfg: []string{}, + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.ralsCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } +} + +func TestRalsCfgAsMapInterface1(t *testing.T) { + cfgJSONStr := `{ + "rals": {} +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: false, + utils.ThresholdSConnsCfg: []string{}, + utils.StatSConnsCfg: []string{}, + utils.CachesConnsCfg: []string{"*internal"}, + utils.RpSubjectPrefixMatchingCfg: false, + utils.RemoveExpiredCfg: true, + utils.MaxComputedUsageCfg: map[string]interface{}{ "*any": "189h0m0s", "*voice": "72h0m0s", "*data": "107374182400", "*sms": "10000", "*mms": "10000", }, - "max_increments": 1000000, - "balance_rating_subject": map[string]interface{}{ + utils.MaxIncrementsCfg: 1000000, + utils.BalanceRatingSubjectCfg: map[string]interface{}{ "*any": "*zero1ns", "*voice": "*zero1s", }, - "dynaprepaid_actionplans": []string{}, + utils.Dynaprepaid_actionplansCfg: []string{}, } - - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnRalsCfg, err := jsnCfg.RalsJsonCfg(); err != nil { - t.Error(err) - } else if err = ralscfg.loadFromJsonCfg(jsnRalsCfg); err != nil { - t.Error(err) - } else if rcv := ralscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("Expected: %+v ,\n recived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.ralsCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } }