diff --git a/config/dispatcherhcfg.go b/config/dispatcherhcfg.go index 0e4e9ecea..e07576530 100755 --- a/config/dispatcherhcfg.go +++ b/config/dispatcherhcfg.go @@ -58,19 +58,22 @@ func (dps *DispatcherHCfg) loadFromJsonCfg(jsnCfg *DispatcherHJsonCfg) (err erro return } -func (dps *DispatcherHCfg) AsMapInterface() map[string]interface{} { - hosts := make(map[string][]map[string]interface{}) - for tnt, hs := range dps.Hosts { - for _, h := range hs { - hosts[tnt] = append(hosts[tnt], h.AsMapInterface()) - } - } - return map[string]interface{}{ +func (dps *DispatcherHCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ utils.EnabledCfg: dps.Enabled, utils.DispatchersConnsCfg: dps.DispatchersConns, - utils.HostsCfg: hosts, utils.RegisterIntervalCfg: dps.RegisterInterval, } + if dps.Hosts != nil { + hosts := make(map[string][]map[string]interface{}) + for tnt, hs := range dps.Hosts { + for _, h := range hs { + hosts[tnt] = append(hosts[tnt], h.AsMapInterface()) + } + } + initialMP[utils.HostsCfg] = hosts + } + return } type DispatcherHRegistarCfg struct { @@ -94,10 +97,11 @@ func NewDispatcherHRegistarCfg(jsnCfg DispatcherHRegistarJsonCfg) (dhr *Dispatch return } -func (dhr *DispatcherHRegistarCfg) AsMapInterface() map[string]interface{} { - return map[string]interface{}{ +func (dhr *DispatcherHRegistarCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ utils.IDCfg: dhr.ID, utils.RegisterTransportCfg: dhr.RegisterTransport, utils.RegisterTLSCfg: dhr.RegisterTLS, } + return } diff --git a/config/dispatcherhcfg_test.go b/config/dispatcherhcfg_test.go index d9be5db40..efab55e70 100644 --- a/config/dispatcherhcfg_test.go +++ b/config/dispatcherhcfg_test.go @@ -113,17 +113,6 @@ func TestDispatcherHCfgloadFromJsonCfg(t *testing.T) { } func TestDispatcherHCfgAsMapInterface(t *testing.T) { - var daCfg, expected DispatcherHCfg - 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(DispatcherHJsonCfg)); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(daCfg, expected) { - t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) - } cfgJSONStr := `{ "dispatcherh":{ "enabled": true, @@ -145,33 +134,103 @@ func TestDispatcherHCfgAsMapInterface(t *testing.T) { "register_interval": "5m", }, }` - daCfg.Hosts = make(map[string][]*DispatcherHRegistarCfg) eMap := map[string]interface{}{ - "enabled": true, - "dispatchers_conns": []string{"conn1", "conn2"}, - "hosts": map[string][]map[string]interface{}{ + utils.EnabledCfg: true, + utils.DispatchersConnsCfg: []string{"conn1", "conn2"}, + utils.HostsCfg: map[string][]map[string]interface{}{ utils.MetaDefault: { { - "id": "Host1", - "register_transport": "*json", - "register_tls": false, + utils.IdCfg: "Host1", + utils.RegisterTransportCfg: "*json", + utils.RegisterTLSCfg: false, }, { - "id": "Host2", - "register_transport": "*gob", - "register_tls": false, + utils.IdCfg: "Host2", + utils.RegisterTransportCfg: "*gob", + utils.RegisterTLSCfg: false, }, }, }, - "register_interval": 5 * time.Minute, + utils.RegisterIntervalCfg: 5 * time.Minute, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnDaCfg, err := jsnCfg.DispatcherHJsonCfg(); 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.dispatcherHCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) + } +} + +func TestDispatcherHCfgAsMapInterface1(t *testing.T) { + cfgJSONStr := `{ + "dispatcherh":{ + "enabled": true, + "dispatchers_conns":["conn1"], + "hosts": { + "*default": [ + { + "ID":"", + "register_transport": "*json", + "register_tls":false, + }, + { + "ID":"host2", + "register_transport": "", + "register_tls":true, + }, + ] + }, + "register_interval": "1m", + }, + +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: true, + utils.DispatchersConnsCfg: []string{"conn1"}, + utils.HostsCfg: map[string][]map[string]interface{}{ + utils.MetaDefault: { + { + utils.IDCfg: utils.EmptyString, + utils.RegisterTransportCfg: utils.MetaJSON, + utils.RegisterTLSCfg: false, + }, + { + utils.IDCfg: "host2", + utils.RegisterTransportCfg: utils.EmptyString, + utils.RegisterTLSCfg: true, + }, + }, + }, + utils.RegisterIntervalCfg: 1 * time.Minute, + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else { + rcv := cgrCfg.dispatcherHCfg.AsMapInterface() + if !reflect.DeepEqual(eMap[utils.HostsCfg].(map[string][]map[string]interface{})[utils.IdCfg], + rcv[utils.HostsCfg].(map[string][]map[string]interface{})[utils.IdCfg]) { + t.Errorf("Expected %+v, received %+v", eMap[utils.HostsCfg].(map[string][]map[string]interface{})[utils.IdCfg], + rcv[utils.HostsCfg].(map[string][]map[string]interface{})[utils.IdCfg]) + } else if !reflect.DeepEqual(eMap[utils.HostsCfg], rcv[utils.HostsCfg]) { + t.Errorf("Expected %+v, received %+v", eMap[utils.HostsCfg], rcv[utils.HostsCfg]) + } else if !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) + } + } +} + +func TestDispatcherHCfgAsMapInterface2(t *testing.T) { + cfgJSONStr := `{ + "dispatcherh": {}, +}` + eMap := map[string]interface{}{ + utils.EnabledCfg: false, + utils.DispatchersConnsCfg: []string{}, + utils.HostsCfg: map[string][]map[string]interface{}{}, + utils.RegisterIntervalCfg: 5 * time.Minute, + } + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { + t.Error(err) + } else if rcv := cgrCfg.dispatcherHCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v, received %+v", eMap, rcv) } }