Updated some AsMapInterface methods/added tests for them

This commit is contained in:
adragusin
2020-04-24 17:59:16 +03:00
committed by Dan Christian Bogos
parent b90f6c5ac9
commit 85b1f778d4
19 changed files with 742 additions and 37 deletions

View File

@@ -64,12 +64,25 @@ func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error)
}
func (alS *AttributeSCfg) AsMapInterface() map[string]interface{} {
stringIndexedFields := []string{}
if alS.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*alS.StringIndexedFields))
for i, item := range *alS.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if alS.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*alS.PrefixIndexedFields))
for i, item := range *alS.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
return map[string]interface{}{
utils.EnabledCfg: alS.Enabled,
utils.IndexedSelectsCfg: alS.IndexedSelects,
utils.StringIndexedFieldsCfg: alS.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: alS.PrefixIndexedFields,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.ProcessRunsCfg: alS.ProcessRuns,
utils.NestedFieldsCfg: alS.NestedFields,
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestAttributeSCfgloadFromJsonCfg(t *testing.T) {
@@ -57,3 +59,31 @@ func TestAttributeSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, attscfg)
}
}
func TestAttributeSCfgAsMapInterface(t *testing.T) {
var attscfg AttributeSCfg
cfgJSONStr := `{
"attributes": {
"enabled": true,
"prefix_indexed_fields": ["index1","index2"],
"process_runs": 3,
},
}`
eMap := map[string]interface{}{
"enabled": true,
"prefix_indexed_fields": []string{"index1", "index2"},
"process_runs": 3,
"indexed_selects": false,
"nested_fields": false,
"string_indexed_fields": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnAttSCfg, err := jsnCfg.AttributeServJsonCfg(); err != nil {
t.Error(err)
} else if err = attscfg.loadFromJsonCfg(jsnAttSCfg); err != nil {
t.Error(err)
} else if rcv := attscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package config
import (
"strings"
"github.com/cgrates/cgrates/utils"
)
@@ -135,17 +137,80 @@ func (cdrscfg *CdrsCfg) AsMapInterface() map[string]interface{} {
for i, item := range cdrscfg.ExtraFields {
extraFields[i] = item.Rules
}
onlineCDRExports := make([]string, len(cdrscfg.OnlineCDRExports))
for i, item := range cdrscfg.OnlineCDRExports {
onlineCDRExports[i] = item
}
chargerSConns := make([]string, len(cdrscfg.ChargerSConns))
for i, item := range cdrscfg.ChargerSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)
if item == buf {
chargerSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaChargers, utils.EmptyString)
} else {
chargerSConns[i] = item
}
}
RALsConns := make([]string, len(cdrscfg.RaterConns))
for i, item := range cdrscfg.RaterConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)
if item == buf {
RALsConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder, utils.EmptyString)
} else {
RALsConns[i] = item
}
}
attributeSConns := make([]string, len(cdrscfg.AttributeSConns))
for i, item := range cdrscfg.AttributeSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)
if item == buf {
attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString)
} else {
attributeSConns[i] = item
}
}
thresholdSConns := make([]string, len(cdrscfg.ThresholdSConns))
for i, item := range cdrscfg.ThresholdSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)
if item == buf {
thresholdSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString)
} else {
thresholdSConns[i] = item
}
}
statSConns := make([]string, len(cdrscfg.StatSConns))
for i, item := range cdrscfg.StatSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS)
if item == buf {
statSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS, utils.EmptyString)
} else {
statSConns[i] = item
}
}
schedulerConns := make([]string, len(cdrscfg.SchedulerConns))
for i, item := range cdrscfg.SchedulerConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler)
if item == buf {
schedulerConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaScheduler, utils.EmptyString)
} else {
schedulerConns[i] = item
}
}
return map[string]interface{}{
utils.EnabledCfg: cdrscfg.Enabled,
utils.ExtraFieldsCfg: extraFields,
utils.StoreCdrsCfg: cdrscfg.StoreCdrs,
utils.SMCostRetriesCfg: cdrscfg.SMCostRetries,
utils.ChargerSConnsCfg: cdrscfg.ChargerSConns,
utils.RALsConnsCfg: cdrscfg.RaterConns,
utils.AttributeSConnsCfg: cdrscfg.AttributeSConns,
utils.ThresholdSConnsCfg: cdrscfg.ThresholdSConns,
utils.StatSConnsCfg: cdrscfg.StatSConns,
utils.OnlineCDRExportsCfg: cdrscfg.OnlineCDRExports,
utils.ChargerSConnsCfg: chargerSConns,
utils.RALsConnsCfg: RALsConns,
utils.AttributeSConnsCfg: attributeSConns,
utils.ThresholdSConnsCfg: thresholdSConns,
utils.StatSConnsCfg: statSConns,
utils.OnlineCDRExportsCfg: onlineCDRExports,
utils.SchedulerConnsCfg: schedulerConns,
}
}

View File

@@ -92,3 +92,82 @@ func TestExtraFieldsinAsMapInterface(t *testing.T) {
t.Errorf("Expecting: '%+v', received: '%+v' ", expectedExtra, rcv[utils.ExtraFieldsCfg])
}
}
func TestCdrsCfgAsMapInterface(t *testing.T) {
var cdrscfg CdrsCfg
cfgJSONStr := `{
"cdrs": {
"enabled": false,
"extra_fields": [],
"store_cdrs": true,
"session_cost_retries": 5,
"chargers_conns":["*localhost"],
"rals_conns": ["*internal"],
"attributes_conns": [],
"thresholds_conns": [],
"stats_conns": [],
"online_cdr_exports":[],
"scheduler_conns": [],
},
}`
eMap := map[string]interface{}{
"enabled": false,
"extra_fields": []string{},
"store_cdrs": true,
"session_cost_retries": 5,
"chargers_conns": []string{"*localhost"},
"rals_conns": []string{"*internal"},
"attributes_conns": []string{},
"thresholds_conns": []string{},
"stats_conns": []string{},
"online_cdr_exports": []string{},
"scheduler_conns": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnCdrsCfg, err := jsnCfg.CdrsJsonCfg(); err != nil {
t.Error(err)
} else if err = cdrscfg.loadFromJsonCfg(jsnCdrsCfg); err != nil {
t.Error(err)
} else if rcv := cdrscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"cdrs": {
"enabled": true,
"extra_fields": ["PayPalAccount", "LCRProfile", "ResourceID"],
"store_cdrs": true,
"session_cost_retries": 9,
"chargers_conns":["*internal"],
"rals_conns": ["*internal"],
"attributes_conns": ["*internal"],
"thresholds_conns": ["*internal"],
"stats_conns": ["*internal"],
"online_cdr_exports":["http_localhost", "amqp_localhost", "http_test_file", "amqp_test_file","aws_test_file","sqs_test_file","kafka_localhost","s3_test_file"],
"scheduler_conns": ["*internal"],
},
}`
eMap = map[string]interface{}{
"enabled": true,
"extra_fields": []string{"PayPalAccount", "LCRProfile", "ResourceID"},
"store_cdrs": true,
"session_cost_retries": 9,
"chargers_conns": []string{"*internal"},
"rals_conns": []string{"*internal"},
"attributes_conns": []string{"*internal"},
"thresholds_conns": []string{"*internal"},
"stats_conns": []string{"*internal"},
"online_cdr_exports": []string{"http_localhost", "amqp_localhost", "http_test_file", "amqp_test_file", "aws_test_file", "sqs_test_file", "kafka_localhost", "s3_test_file"},
"scheduler_conns": []string{"*internal"},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnCdrsCfg, err := jsnCfg.CdrsJsonCfg(); err != nil {
t.Error(err)
} else if err = cdrscfg.loadFromJsonCfg(jsnCdrsCfg); err != nil {
t.Error(err)
} else if rcv := cdrscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -18,7 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package config
import "github.com/cgrates/cgrates/utils"
import (
"strings"
"github.com/cgrates/cgrates/utils"
)
// SupplierSCfg is the configuration of supplier service
type ChargerSCfg struct {
@@ -72,12 +76,35 @@ func (cS *ChargerSCfg) loadFromJsonCfg(jsnCfg *ChargerSJsonCfg) (err error) {
}
func (cS *ChargerSCfg) AsMapInterface() map[string]interface{} {
attributeSConns := make([]string, len(cS.AttributeSConns))
for i, item := range cS.AttributeSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)
if item == buf {
attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString)
} else {
attributeSConns[i] = item
}
}
stringIndexedFields := []string{}
if cS.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*cS.StringIndexedFields))
for i, item := range *cS.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if cS.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*cS.PrefixIndexedFields))
for i, item := range *cS.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
return map[string]interface{}{
utils.EnabledCfg: cS.Enabled,
utils.IndexedSelectsCfg: cS.IndexedSelects,
utils.AttributeSConnsCfg: cS.AttributeSConns,
utils.StringIndexedFieldsCfg: cS.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: cS.PrefixIndexedFields,
utils.AttributeSConnsCfg: attributeSConns,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: cS.NestedFields,
}
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestChargerSCfgloadFromJsonCfg(t *testing.T) {
@@ -57,3 +59,60 @@ func TestChargerSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, chgscfg)
}
}
func TestChargerSCfgAsMapInterface(t *testing.T) {
var chgscfg ChargerSCfg
cfgJSONStr := `{
"chargers": {
"enabled": false,
"attributes_conns": [],
"indexed_selects":true,
"prefix_indexed_fields": [],
"nested_fields": false,
},
}`
eMap := map[string]interface{}{
"enabled": false,
"attributes_conns": []string{},
"indexed_selects": true,
"prefix_indexed_fields": []string{},
"nested_fields": false,
"string_indexed_fields": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnChgCfg, err := jsnCfg.ChargerServJsonCfg(); err != nil {
t.Error(err)
} else if err = chgscfg.loadFromJsonCfg(jsnChgCfg); err != nil {
t.Error(err)
} else if rcv := chgscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"chargers": {
"enabled": false,
"attributes_conns": ["*internal"],
"indexed_selects":true,
"prefix_indexed_fields": [],
"nested_fields": false,
},
}`
eMap = map[string]interface{}{
"enabled": false,
"attributes_conns": []string{"*internal"},
"indexed_selects": true,
"prefix_indexed_fields": []string{},
"nested_fields": false,
"string_indexed_fields": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnChgCfg, err := jsnCfg.ChargerServJsonCfg(); err != nil {
t.Error(err)
} else if err = chgscfg.loadFromJsonCfg(jsnChgCfg); err != nil {
t.Error(err)
} else if rcv := chgscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -1482,7 +1482,7 @@ func (cfg *CGRConfig) AsMapInterface(separator string) map[string]interface{} {
utils.StatsCfg: cfg.statsCfg.AsMapInterface(),
utils.ThresholdSCfg: cfg.thresholdSCfg.AsMapInterface(),
utils.SupplierSCfg: cfg.supplierSCfg.AsMapInterface(),
utils.SureTaxCfg: cfg.sureTaxCfg.AsMapInterface(),
utils.SureTaxCfg: cfg.sureTaxCfg.AsMapInterface(separator),
utils.DispatcherSCfg: cfg.dispatcherSCfg.AsMapInterface(),
utils.LoaderCgrCfg: cfg.loaderCgrCfg.AsMapInterface(),
utils.MigratorCgrCfg: cfg.migratorCgrCfg.AsMapInterface(),

View File

@@ -165,7 +165,7 @@ func (rp *RequestProcessor) AsMapInterface(separator string) map[string]interfac
for i, item := range rp.Tenant {
values[i] = item.Rules
}
tenant = strings.Join(values, utils.EmptyString)
tenant = strings.Join(values, separator)
}
flags := make(map[string][]string, len(rp.Flags))

View File

@@ -58,7 +58,7 @@ func (httpcfg *HTTPCfg) loadFromJsonCfg(jsnHttpCfg *HTTPJsonCfg) (err error) {
}
func (httpcfg *HTTPCfg) AsMapInterface() map[string]interface{} {
httpUsers := map[string]interface{}{}
httpUsers := make(map[string]interface{}, len(httpcfg.HTTPAuthUsers))
for key, item := range httpcfg.HTTPAuthUsers {
httpUsers[key] = item
}

View File

@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package config
import (
"strings"
"time"
"github.com/cgrates/cgrates/utils"
@@ -81,14 +82,40 @@ func (rlcfg *ResourceSConfig) loadFromJsonCfg(jsnCfg *ResourceSJsonCfg) (err err
}
func (rlcfg *ResourceSConfig) AsMapInterface() map[string]interface{} {
thresholdSConns := make([]string, len(rlcfg.ThresholdSConns))
for i, item := range rlcfg.ThresholdSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)
if item == buf {
thresholdSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString)
} else {
thresholdSConns[i] = item
}
}
stringIndexedFields := []string{}
if rlcfg.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*rlcfg.StringIndexedFields))
for i, item := range *rlcfg.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if rlcfg.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*rlcfg.PrefixIndexedFields))
for i, item := range *rlcfg.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
var storeInterval string = ""
if rlcfg.StoreInterval != 0 {
storeInterval = rlcfg.StoreInterval.String()
}
return map[string]interface{}{
utils.EnabledCfg: rlcfg.Enabled,
utils.IndexedSelectsCfg: rlcfg.IndexedSelects,
utils.ThresholdSConnsCfg: rlcfg.ThresholdSConns,
utils.StoreIntervalCfg: rlcfg.StoreInterval,
utils.StringIndexedFieldsCfg: rlcfg.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: rlcfg.PrefixIndexedFields,
utils.ThresholdSConnsCfg: thresholdSConns,
utils.StoreIntervalCfg: storeInterval,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: rlcfg.NestedFields,
}

View File

@@ -21,6 +21,8 @@ import (
"reflect"
"testing"
"time"
"github.com/cgrates/cgrates/utils"
)
func TestResourceSConfigloadFromJsonCfg(t *testing.T) {
@@ -60,3 +62,65 @@ func TestResourceSConfigloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, rlcfg)
}
}
func TestResourceSConfigAsMapInterface(t *testing.T) {
var rlcfg ResourceSConfig
cfgJSONStr := `{
"resources": {
"enabled": false,
"store_interval": "",
"thresholds_conns": [],
"indexed_selects":true,
"prefix_indexed_fields": [],
"nested_fields": false,
},
}`
eMap := map[string]interface{}{
"enabled": false,
"store_interval": "",
"thresholds_conns": []string{},
"indexed_selects": true,
"string_indexed_fields": []string{},
"prefix_indexed_fields": []string{},
"nested_fields": false,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnRlcCfg, err := jsnCfg.ResourceSJsonCfg(); err != nil {
t.Error(err)
} else if err = rlcfg.loadFromJsonCfg(jsnRlcCfg); err != nil {
t.Error(err)
} else if rcv := rlcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"resources": {
"enabled": false,
"store_interval": "7m",
"thresholds_conns": ["*internal"],
"indexed_selects":true,
"prefix_indexed_fields": ["prefix_indexed_fields1","prefix_indexed_fields2"],
"nested_fields": false,
},
}`
eMap = map[string]interface{}{
"enabled": false,
"store_interval": "7m0s",
"thresholds_conns": []string{"*internal"},
"indexed_selects": true,
"string_indexed_fields": []string{},
"prefix_indexed_fields": []string{"prefix_indexed_fields1", "prefix_indexed_fields2"},
"nested_fields": false,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnRlcCfg, err := jsnCfg.ResourceSJsonCfg(); err != nil {
t.Error(err)
} else if err = rlcfg.loadFromJsonCfg(jsnRlcCfg); err != nil {
t.Error(err)
} else if rcv := rlcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestSchedulerCfgloadFromJsonCfg(t *testing.T) {
@@ -54,3 +56,28 @@ func TestSchedulerCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, schdcfg)
}
}
func TestSchedulerCfgAsMapInterface(t *testing.T) {
var schdcfg SchedulerCfg
cfgJSONStr := `{
"schedulers": {
"enabled": true,
"cdrs_conns": [],
"filters": [],
},
}`
eMap := map[string]interface{}{
"enabled": true,
"cdrs_conns": []string{},
"filters": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnSchCfg, err := jsnCfg.SchedulerJsonCfg(); err != nil {
t.Error(err)
} else if err = schdcfg.loadFromJsonCfg(jsnSchCfg); err != nil {
t.Error(err)
} else if rcv := schdcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package config
import (
"strings"
"time"
"github.com/cgrates/cgrates/utils"
@@ -85,15 +86,42 @@ func (st *StatSCfg) loadFromJsonCfg(jsnCfg *StatServJsonCfg) (err error) {
}
func (st *StatSCfg) AsMapInterface() map[string]interface{} {
var storeInterval string = ""
if st.StoreInterval != 0 {
storeInterval = st.StoreInterval.String()
}
stringIndexedFields := []string{}
if st.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*st.StringIndexedFields))
for i, item := range *st.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if st.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*st.PrefixIndexedFields))
for i, item := range *st.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
thresholdSConns := make([]string, len(st.ThresholdSConns))
for i, item := range st.ThresholdSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)
if item == buf {
thresholdSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString)
} else {
thresholdSConns[i] = item
}
}
return map[string]interface{}{
utils.EnabledCfg: st.Enabled,
utils.IndexedSelectsCfg: st.IndexedSelects,
utils.StoreIntervalCfg: st.StoreInterval,
utils.StoreIntervalCfg: storeInterval,
utils.StoreUncompressedLimitCfg: st.StoreUncompressedLimit,
utils.ThresholdSConnsCfg: st.ThresholdSConns,
utils.StringIndexedFieldsCfg: st.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: st.PrefixIndexedFields,
utils.ThresholdSConnsCfg: thresholdSConns,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: st.NestedFields,
}

View File

@@ -21,6 +21,8 @@ import (
"reflect"
"testing"
"time"
"github.com/cgrates/cgrates/utils"
)
func TestStatSCfgloadFromJsonCfg(t *testing.T) {
@@ -59,3 +61,78 @@ func TestStatSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, statscfg)
}
}
func TestStatSCfgAsMapInterface(t *testing.T) {
var statscfg, expected StatSCfg
if err := statscfg.loadFromJsonCfg(nil); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(statscfg, expected) {
t.Errorf("Expected: %+v ,recived: %+v", expected, statscfg)
}
if err := statscfg.loadFromJsonCfg(new(StatServJsonCfg)); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(statscfg, expected) {
t.Errorf("Expected: %+v ,recived: %+v", expected, statscfg)
}
cfgJSONStr := `{
"stats": {
"enabled": false,
"store_interval": "",
"store_uncompressed_limit": 0,
"thresholds_conns": [],
"indexed_selects":true,
"prefix_indexed_fields": [],
"nested_fields": false,
},
}`
eMap := map[string]interface{}{
"enabled": false,
"store_interval": "",
"store_uncompressed_limit": 0,
"thresholds_conns": []string{},
"indexed_selects": true,
"prefix_indexed_fields": []string{},
"nested_fields": false,
"string_indexed_fields": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnStatSCfg, err := jsnCfg.StatSJsonCfg(); err != nil {
t.Error(err)
} else if err = statscfg.loadFromJsonCfg(jsnStatSCfg); err != nil {
t.Error(err)
} else if rcv := statscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"stats": {
"enabled": false,
"store_interval": "72h",
"store_uncompressed_limit": 0,
"thresholds_conns": ["*internal"],
"indexed_selects":true,
"prefix_indexed_fields": ["prefix_indexed_fields1","prefix_indexed_fields2"],
"nested_fields": false,
},
}`
eMap = map[string]interface{}{
"enabled": false,
"store_interval": "72h0m0s",
"store_uncompressed_limit": 0,
"thresholds_conns": []string{"*internal"},
"indexed_selects": true,
"prefix_indexed_fields": []string{"prefix_indexed_fields1", "prefix_indexed_fields2"},
"nested_fields": false,
"string_indexed_fields": []string{},
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnStatSCfg, err := jsnCfg.StatSJsonCfg(); err != nil {
t.Error(err)
} else if err = statscfg.loadFromJsonCfg(jsnStatSCfg); err != nil {
t.Error(err)
} else if rcv := statscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -18,7 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package config
import "github.com/cgrates/cgrates/utils"
import (
"strings"
"github.com/cgrates/cgrates/utils"
)
// SupplierSCfg is the configuration of supplier service
type SupplierSCfg struct {
@@ -112,16 +116,67 @@ func (spl *SupplierSCfg) loadFromJsonCfg(jsnCfg *SupplierSJsonCfg) (err error) {
}
func (spl *SupplierSCfg) AsMapInterface() map[string]interface{} {
stringIndexedFields := []string{}
if spl.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*spl.StringIndexedFields))
for i, item := range *spl.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if spl.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*spl.PrefixIndexedFields))
for i, item := range *spl.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
attributeSConns := make([]string, len(spl.AttributeSConns))
for i, item := range spl.AttributeSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)
if item == buf {
attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString)
} else {
attributeSConns[i] = item
}
}
responderSConns := make([]string, len(spl.ResponderSConns))
for i, item := range spl.ResponderSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)
if item == buf {
responderSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder, utils.EmptyString)
} else {
responderSConns[i] = item
}
}
resourceSConns := make([]string, len(spl.ResourceSConns))
for i, item := range spl.ResourceSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources)
if item == buf {
resourceSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResources, utils.EmptyString)
} else {
resourceSConns[i] = item
}
}
statSConns := make([]string, len(spl.StatSConns))
for i, item := range spl.StatSConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS)
if item == buf {
statSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS, utils.EmptyString)
} else {
statSConns[i] = item
}
}
return map[string]interface{}{
utils.EnabledCfg: spl.Enabled,
utils.IndexedSelectsCfg: spl.IndexedSelects,
utils.StringIndexedFieldsCfg: spl.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: spl.PrefixIndexedFields,
utils.AttributeSConnsCfg: spl.AttributeSConns,
utils.ResourceSConnsCfg: spl.ResourceSConns,
utils.StatSConnsCfg: spl.StatSConns,
utils.RALsConnsCfg: spl.ResponderSConns,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.AttributeSConnsCfg: attributeSConns,
utils.ResourceSConnsCfg: resourceSConns,
utils.StatSConnsCfg: statSConns,
utils.RALsConnsCfg: responderSConns,
utils.DefaultRatioCfg: spl.DefaultRatio,
utils.NestedFieldsCfg: spl.NestedFields,
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestSupplierSCfgloadFromJsonCfg(t *testing.T) {
@@ -62,3 +64,76 @@ func TestSupplierSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, supscfg)
}
}
func TestSupplierSCfgAsMapInterface(t *testing.T) {
var supscfg SupplierSCfg
cfgJSONStr := `{
"suppliers": {
"enabled": false,
"indexed_selects":true,
"prefix_indexed_fields": [],
"nested_fields": false,
"attributes_conns": [],
"resources_conns": [],
"stats_conns": [],
"rals_conns": [],
"default_ratio":1
},
}`
eMap := map[string]interface{}{
"enabled": false,
"indexed_selects": true,
"prefix_indexed_fields": []string{},
"string_indexed_fields": []string{},
"nested_fields": false,
"attributes_conns": []string{},
"resources_conns": []string{},
"stats_conns": []string{},
"rals_conns": []string{},
"default_ratio": 1,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnSupSCfg, err := jsnCfg.SupplierSJsonCfg(); err != nil {
t.Error(err)
} else if err = supscfg.loadFromJsonCfg(jsnSupSCfg); err != nil {
t.Error(err)
} else if rcv := supscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"suppliers": {
"enabled": false,
"indexed_selects":true,
"prefix_indexed_fields": ["prefix","indexed","fields"],
"nested_fields": false,
"attributes_conns": ["*internal"],
"resources_conns": ["*internal"],
"stats_conns": ["*internal"],
"rals_conns": ["*internal"],
"default_ratio":1
},
}`
eMap = map[string]interface{}{
"enabled": false,
"indexed_selects": true,
"prefix_indexed_fields": []string{"prefix", "indexed", "fields"},
"string_indexed_fields": []string{},
"nested_fields": false,
"attributes_conns": []string{"*internal"},
"resources_conns": []string{"*internal"},
"stats_conns": []string{"*internal"},
"rals_conns": []string{"*internal"},
"default_ratio": 1,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnSupSCfg, err := jsnCfg.SupplierSJsonCfg(); err != nil {
t.Error(err)
} else if err = supscfg.loadFromJsonCfg(jsnSupSCfg); err != nil {
t.Error(err)
} else if rcv := supscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -69,12 +69,30 @@ func (t *ThresholdSCfg) loadFromJsonCfg(jsnCfg *ThresholdSJsonCfg) (err error) {
}
func (t *ThresholdSCfg) AsMapInterface() map[string]interface{} {
var storeInterval string = ""
if t.StoreInterval != 0 {
storeInterval = t.StoreInterval.String()
}
stringIndexedFields := []string{}
if t.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*t.StringIndexedFields))
for i, item := range *t.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if t.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*t.PrefixIndexedFields))
for i, item := range *t.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
return map[string]interface{}{
utils.EnabledCfg: t.Enabled,
utils.IndexedSelectsCfg: t.IndexedSelects,
utils.StoreIntervalCfg: t.StoreInterval,
utils.StringIndexedFieldsCfg: t.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: t.PrefixIndexedFields,
utils.StoreIntervalCfg: storeInterval,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.NestedFieldsCfg: t.NestedFields,
}
}

View File

@@ -21,6 +21,8 @@ import (
"reflect"
"testing"
"time"
"github.com/cgrates/cgrates/utils"
)
func TestThresholdSCfgloadFromJsonCfg(t *testing.T) {
@@ -57,3 +59,62 @@ func TestThresholdSCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, thscfg)
}
}
func TestThresholdSCfgAsMapInterface(t *testing.T) {
var thscfg ThresholdSCfg
cfgJSONStr := `{
"thresholds": {
"enabled": false,
"store_interval": "",
"indexed_selects":true,
"prefix_indexed_fields": [],
"nested_fields": false,
},
}`
eMap := map[string]interface{}{
"enabled": false,
"store_interval": "",
"indexed_selects": true,
"string_indexed_fields": []string{},
"prefix_indexed_fields": []string{},
"nested_fields": false,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnThSCfg, err := jsnCfg.ThresholdSJsonCfg(); err != nil {
t.Error(err)
} else if err = thscfg.loadFromJsonCfg(jsnThSCfg); err != nil {
t.Error(err)
} else if rcv := thscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"thresholds": {
"enabled": true,
"store_interval": "96h",
"indexed_selects":true,
"string_indexed_fields": ["string","indexed","fields"],
"prefix_indexed_fields": ["prefix_indexed_fields1","prefix_indexed_fields2"],
"nested_fields": true,
},
}`
eMap = map[string]interface{}{
"enabled": true,
"store_interval": "96h0m0s",
"indexed_selects": true,
"string_indexed_fields": []string{"string", "indexed", "fields"},
"prefix_indexed_fields": []string{"prefix_indexed_fields1", "prefix_indexed_fields2"},
"nested_fields": true,
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnThSCfg, err := jsnCfg.ThresholdSJsonCfg(); err != nil {
t.Error(err)
} else if err = thscfg.loadFromJsonCfg(jsnThSCfg); err != nil {
t.Error(err)
} else if rcv := thscfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -1931,8 +1931,8 @@ const (
BillToNumberCfg = "bill_to_number"
ZipcodeCfg = "zipcode"
Plus4Cfg = "plus4"
P2PZipcodeCfg = "p2PZipcode"
P2PPlus4Cfg = "p2PPlus4"
P2PZipcodeCfg = "p2pzipcode"
P2PPlus4Cfg = "p2pplus4"
UnitsCfg = "units"
UnitTypeCfg = "unit_type"
TaxIncludedCfg = "tax_included"