diff --git a/config/dispatcherscfg.go b/config/dispatcherscfg.go index 629fba241..2fba32855 100755 --- a/config/dispatcherscfg.go +++ b/config/dispatcherscfg.go @@ -83,38 +83,43 @@ func (dps *DispatcherSCfg) loadFromJsonCfg(jsnCfg *DispatcherSJsonCfg) (err erro return nil } -func (dps *DispatcherSCfg) AsMapInterface() map[string]interface{} { - stringIndexedFields := []string{} +func (dps *DispatcherSCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: dps.Enabled, + utils.IndexedSelectsCfg: dps.IndexedSelects, + utils.NestedFieldsCfg: dps.NestedFields, + } if dps.StringIndexedFields != nil { - stringIndexedFields = make([]string, len(*dps.StringIndexedFields)) + stringIndexedFields := make([]string, len(*dps.StringIndexedFields)) for i, item := range *dps.StringIndexedFields { stringIndexedFields[i] = item } + initialMP[utils.StringIndexedFieldsCfg] = stringIndexedFields } - prefixIndexedFields := []string{} if dps.PrefixIndexedFields != nil { - prefixIndexedFields = make([]string, len(*dps.PrefixIndexedFields)) + prefixIndexedFields := make([]string, len(*dps.PrefixIndexedFields)) for i, item := range *dps.PrefixIndexedFields { prefixIndexedFields[i] = item } + initialMP[utils.PrefixIndexedFieldsCfg] = prefixIndexedFields } - attributeSConns := make([]string, len(dps.AttributeSConns)) - for i, item := range dps.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 + if dps.SuffixIndexedFields != nil { + suffixIndexedFields := make([]string, len(*dps.SuffixIndexedFields)) + for i, item := range *dps.SuffixIndexedFields { + suffixIndexedFields[i] = item } + initialMP[utils.SuffixIndexedFieldsCfg] = suffixIndexedFields } - - return map[string]interface{}{ - utils.EnabledCfg: dps.Enabled, - utils.IndexedSelectsCfg: dps.IndexedSelects, - utils.StringIndexedFieldsCfg: stringIndexedFields, - utils.PrefixIndexedFieldsCfg: prefixIndexedFields, - utils.AttributeSConnsCfg: attributeSConns, - utils.NestedFieldsCfg: dps.NestedFields, + if dps.AttributeSConns != nil { + attributeSConns := make([]string, len(dps.AttributeSConns)) + for i, item := range dps.AttributeSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) { + attributeSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString) + } else { + attributeSConns[i] = item + } + } + initialMP[utils.AttributeSConnsCfg] = attributeSConns } - + return } diff --git a/config/dispatcherscfg_test.go b/config/dispatcherscfg_test.go index 6ede83554..211e3e65b 100644 --- a/config/dispatcherscfg_test.go +++ b/config/dispatcherscfg_test.go @@ -67,72 +67,74 @@ func TestDispatcherSCfgloadFromJsonCfg(t *testing.T) { } func TestDispatcherSCfgAsMapInterface(t *testing.T) { - var daCfg, expected DispatcherSCfg - if err := daCfg.loadFromJsonCfg(nil); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(daCfg, expected) { - t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) - } - if err := daCfg.loadFromJsonCfg(new(DispatcherSJsonCfg)); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(daCfg, expected) { - t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) - } cfgJSONStr := `{ "dispatchers":{ "enabled": false, "indexed_selects":true, - //"string_indexed_fields": [], "prefix_indexed_fields": [], + "suffix_indexed_fields": [], "nested_fields": false, "attributes_conns": [], }, }` eMap := map[string]interface{}{ - "enabled": false, - "indexed_selects": true, - "prefix_indexed_fields": []string{}, - "nested_fields": false, - "attributes_conns": []string{}, - "string_indexed_fields": []string{}, + utils.EnabledCfg: false, + utils.IndexedSelectsCfg: true, + utils.PrefixIndexedFieldsCfg: []string{}, + utils.SuffixIndexedFieldsCfg: []string{}, + utils.NestedFieldsCfg: false, + utils.AttributeSConnsCfg: []string{}, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnDaCfg, err := jsnCfg.DispatcherSJsonCfg(); err != nil { - t.Error(err) - } else if err = daCfg.loadFromJsonCfg(jsnDaCfg); err != nil { - t.Error(err) - } else if rcv := daCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.dispatcherSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) } +} - cfgJSONStr = `{ +func TestDispatcherSCfgAsMapInterface1(t *testing.T) { + cfgJSONStr := `{ "dispatchers":{ "enabled": false, "indexed_selects":true, - "string_indexed_fields": ["*req.string","*req.indexed","*req.fields"], "prefix_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"], + "suffix_indexed_fields": [], "nested_fields": false, "attributes_conns": ["*internal"], }, }` - eMap = map[string]interface{}{ - "enabled": false, - "indexed_selects": true, - "prefix_indexed_fields": []string{"*req.prefix", "*req.indexed", "*req.fields"}, - "nested_fields": false, - "attributes_conns": []string{"*internal"}, - "string_indexed_fields": []string{"*req.string", "*req.indexed", "*req.fields"}, + eMap := map[string]interface{}{ + utils.EnabledCfg: false, + utils.IndexedSelectsCfg: true, + utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"}, + utils.SuffixIndexedFieldsCfg: []string{}, + utils.NestedFieldsCfg: false, + utils.AttributeSConnsCfg: []string{"*internal"}, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnDaCfg, err := jsnCfg.DispatcherSJsonCfg(); err != nil { - t.Error(err) - } else if err = daCfg.loadFromJsonCfg(jsnDaCfg); err != nil { - t.Error(err) - } else if rcv := daCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.dispatcherSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) + } +} + +func TestDispatcherSCfgAsMapInterface2(t *testing.T) { + cfgJSONStr := `{ + "dispatchers":{}, +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: false, + utils.IndexedSelectsCfg: true, + utils.PrefixIndexedFieldsCfg: []string{}, + utils.SuffixIndexedFieldsCfg: []string{}, + utils.NestedFieldsCfg: false, + utils.AttributeSConnsCfg: []string{}, + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.dispatcherSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) } }