Updated some AsMapInterface methods/added tests for them

This commit is contained in:
adragusin
2020-04-27 17:57:44 +03:00
committed by Dan Christian Bogos
parent e6ead643ca
commit df4756729f
8 changed files with 378 additions and 28 deletions

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"
)
// ApierCfg is the configuration of Apier service
type ApierCfg struct {
@@ -73,11 +77,39 @@ func (aCfg *ApierCfg) loadFromJsonCfg(jsnCfg *ApierJsonCfg) (err error) {
}
func (aCfg *ApierCfg) AsMapInterface() map[string]interface{} {
cachesConns := make([]string, len(aCfg.CachesConns))
for i, item := range aCfg.CachesConns {
buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)
if item == buf {
cachesConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaCaches, utils.EmptyString)
} else {
cachesConns[i] = item
}
}
schedulerConns := make([]string, len(aCfg.SchedulerConns))
for i, item := range aCfg.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
}
}
attributeSConns := make([]string, len(aCfg.AttributeSConns))
for i, item := range aCfg.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
}
}
return map[string]interface{}{
utils.EnabledCfg: aCfg.Enabled,
utils.CachesConnsCfg: aCfg.CachesConns,
utils.SchedulerConnsCfg: aCfg.SchedulerConns,
utils.AttributeSConnsCfg: aCfg.AttributeSConns,
utils.CachesConnsCfg: cachesConns,
utils.SchedulerConnsCfg: schedulerConns,
utils.AttributeSConnsCfg: attributeSConns,
}
}

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"
)
// DispatcherSCfg is the configuration of dispatcher service
type DispatcherSCfg struct {
@@ -72,12 +76,36 @@ func (dps *DispatcherSCfg) loadFromJsonCfg(jsnCfg *DispatcherSJsonCfg) (err erro
}
func (dps *DispatcherSCfg) AsMapInterface() map[string]interface{} {
stringIndexedFields := []string{}
if dps.StringIndexedFields != nil {
stringIndexedFields = make([]string, len(*dps.StringIndexedFields))
for i, item := range *dps.StringIndexedFields {
stringIndexedFields[i] = item
}
}
prefixIndexedFields := []string{}
if dps.PrefixIndexedFields != nil {
prefixIndexedFields = make([]string, len(*dps.PrefixIndexedFields))
for i, item := range *dps.PrefixIndexedFields {
prefixIndexedFields[i] = item
}
}
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
}
}
return map[string]interface{}{
utils.EnabledCfg: dps.Enabled,
utils.IndexedSelectsCfg: dps.IndexedSelects,
utils.StringIndexedFieldsCfg: dps.StringIndexedFields,
utils.PrefixIndexedFieldsCfg: dps.PrefixIndexedFields,
utils.AttributeSConnsCfg: dps.AttributeSConns,
utils.StringIndexedFieldsCfg: stringIndexedFields,
utils.PrefixIndexedFieldsCfg: prefixIndexedFields,
utils.AttributeSConnsCfg: attributeSConns,
utils.NestedFieldsCfg: dps.NestedFields,
}

View File

@@ -331,3 +331,97 @@ func TestEventReaderSameID(t *testing.T) {
}
}
func testERsCfgAsMapInterface(t *testing.T) {
cfgJSONStr := `{
"ers": {
"enabled": true,
"sessions_conns":["conn1","conn3"],
"readers": [
{
"id": "file_reader1",
"run_delay": "-1",
"type": "*file_csv",
"source_path": "/tmp/ers/in",
"processed_path": "/tmp/ers/out",
"cache_dump_fields": [],
},
],
}
}`
eMap := map[string]interface{}{
"enabled": true,
"sessions_conns": []string{"conn1", "conn3"},
"readers": []map[string]interface{}{
{
"filters": []string{},
"flags": map[string]interface{}{},
"id": "*default",
"partial_record_cache": 0,
"processed_path": "/var/spool/cgrates/cdrc/out",
"row_length": 0,
"run_delay": 0,
"soome": "",
"source_path": "/var/spool/cgrates/cdrc/in",
"tenant": []string{},
"timezone": "",
"xml_root_path": []string{""},
"cache_dump_fields": []string{},
"concurrent_requests": 1024,
"db_type": "*none",
"failed_calls_prefix": "",
"field_separator": ",",
"fields": []map[string]interface{}{
{"mandatory": true, "path": "*cgreq.ToR", "tag": "ToR", "type": "*variable", "value": "~*req.2"},
{"mandatory": true, "path": "*cgreq.OriginID", "tag": "OriginID", "type": "*variable", "value": "~*req.3"},
{"mandatory": true, "path": "*cgreq.RequestType", "tag": "RequestType", "type": "*variable", "value": "~*req.4"},
{"mandatory": true, "path": "*cgreq.Tenant", "tag": "Tenant", "type": "*variable", "value": "~*req.6"},
{"mandatory": true, "path": "*cgreq.Category", "tag": "Category", "type": "*variable", "value": "~*req.7"},
{"mandatory": true, "path": "*cgreq.Account", "tag": "Account", "type": "*variable", "value": "~*req.8"},
{"mandatory": true, "path": "*cgreq.Subject", "tag": "Subject", "type": "*variable", "value": "~*req.9"},
{"mandatory": true, "path": "*cgreq.Destination", "tag": "Destination", "type": "*variable", "value": "~*req.10"},
{"mandatory": true, "path": "*cgreq.SetupTime", "tag": "SetupTime", "type": "*variable", "value": "~*req.11"},
{"mandatory": true, "path": "*cgreq.AnswerTime", "tag": "AnswerTime", "type": "*variable", "value": "~*req.12"},
{"mandatory": true, "path": "*cgreq.Usage", "tag": "Usage", "type": "*variable", "value": "~*req.13"},
},
},
{
"cache_dump_fields": []string{},
"concurrent_requests": 1024,
"db_type": "*file_csv",
"failed_calls_prefix": "",
"field_separator": ",",
"fields": []map[string]interface{}{
{"mandatory": true, "path": "*cgreq.ToR", "tag": "ToR", "type": "*variable", "value": "~*req.2"},
{"mandatory": true, "path": "*cgreq.OriginID", "tag": "OriginID", "type": "*variable", "value": "~*req.3"},
{"mandatory": true, "path": "*cgreq.RequestType", "tag": "RequestType", "type": "*variable", "value": "~*req.4"},
{"mandatory": true, "path": "*cgreq.Tenant", "tag": "Tenant", "type": "*variable", "value": "~*req.6"},
{"mandatory": true, "path": "*cgreq.Category", "tag": "Category", "type": "*variable", "value": "~*req.7"},
{"mandatory": true, "path": "*cgreq.Account", "tag": "Account", "type": "*variable", "value": "~*req.8"},
{"mandatory": true, "path": "*cgreq.Subject", "tag": "Subject", "type": "*variable", "value": "~*req.9"},
{"mandatory": true, "path": "*cgreq.Destination", "tag": "Destination", "type": "*variable", "value": "~*req.10"},
{"mandatory": true, "path": "*cgreq.SetupTime", "tag": "SetupTime", "type": "*variable", "value": "~*req.11"},
{"mandatory": true, "path": "*cgreq.AnswerTime", "tag": "AnswerTime", "type": "*variable", "value": "~*req.12"},
{"mandatory": true, "path": "*cgreq.Usage", "tag": "Usage", "type": "*variable", "value": "~*req.13"},
},
"filters": nil,
"flags": map[string]interface{}{},
"id": "file_reader1",
"partial_record_cache": 0,
"processed_path": "/tmp/ers/out",
"row_length": 0,
"run_delay": -1,
"soome": "",
"source_path": "/tmp/ers/in",
"tenant": []string{},
"timezone": "",
"xml_root_path": []string{""},
},
},
}
if cfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
} else if rcv := cfg.ersCfg.AsMapInterface(utils.EmptyString); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -98,7 +98,7 @@ func (ld *LoaderCgrCfg) AsMapInterface() map[string]interface{} {
utils.TpIDCfg: ld.TpID,
utils.DataPathCfg: ld.DataPath,
utils.DisableReverseCfg: ld.DisableReverse,
utils.FieldSeparatorCfg: ld.FieldSeparator,
utils.FieldSeparatorCfg: string(ld.FieldSeparator),
utils.CachesConnsCfg: ld.CachesConns,
utils.SchedulerConnsCfg: ld.SchedulerConns,
utils.GapiCredentialsCfg: gapiCredentials,

View File

@@ -61,3 +61,48 @@ func TestLoaderCgrCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(loadscfg))
}
}
func TestLoaderCgrCfgAsMapInterface(t *testing.T) {
var loadscfg LoaderCgrCfg
cfgJSONStr := `{
"loader": {
"tpid": "",
"data_path": "./",
"disable_reverse": false,
"field_separator": ",",
"caches_conns":["*localhost"],
"scheduler_conns": ["*localhost"],
"gapi_credentials": ".gapi/credentials.json",
"gapi_token": ".gapi/token.json"
},
}`
eMap := map[string]interface{}{
"tpid": "",
"data_path": "./",
"disable_reverse": false,
"field_separator": ",",
"caches_conns": []string{"*localhost"},
"scheduler_conns": []string{"*localhost"},
"gapi_credentials": ".gapi/credentials.json",
"gapi_token": ".gapi/token.json",
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnLoadersCfg, err := jsnCfg.LoaderCfgJson(); err != nil {
t.Error(err)
} else if err = loadscfg.loadFromJsonCfg(jsnLoadersCfg); err != nil {
t.Error(err)
} else if rcv := loadscfg.AsMapInterface(); !reflect.DeepEqual(eMap["tpid"], rcv["tpid"]) {
t.Errorf("Expected: %+v, Recived: %+v, at field: '%s'", utils.ToJSON(eMap["tpid"]), utils.ToJSON(rcv["tpid"]), "tpid")
} else if !reflect.DeepEqual(eMap["data_path"], rcv["data_path"]) {
t.Errorf("Expected: %+v, Recived: %+v, at field: %s", utils.ToJSON(eMap["data_path"]), utils.ToJSON(rcv["data_path"]), "data_path")
} else if !reflect.DeepEqual(eMap["disable_reverse"], rcv["disable_reverse"]) {
t.Errorf("Expected: %+v, Recived: %+v, at field: %s", utils.ToJSON(eMap["disable_reverse"]), utils.ToJSON(rcv["disable_reverse"]), "disable_reverse")
} else if !reflect.DeepEqual(eMap["field_separator"], rcv["field_separator"]) {
t.Errorf("Expected: %+v, Recived: %+v, at field: %s", utils.ToJSON(eMap["field_separator"]), utils.ToJSON(rcv["field_separator"]), "field_separator")
} else if !reflect.DeepEqual(eMap["caches_conns"], rcv["caches_conns"]) {
t.Errorf("Expected: %+v, Recived: %+v, at field: %s", utils.ToJSON(eMap["caches_conns"]), utils.ToJSON(rcv["caches_conns"]), "caches_conns")
} else if !reflect.DeepEqual(eMap["scheduler_conns"], rcv["scheduler_conns"]) {
t.Errorf("Expected: %+v, Recived: %+v, at field: %s", utils.ToJSON(eMap["scheduler_conns"]), utils.ToJSON(rcv["scheduler_conns"]), "scheduler_conns")
}
}

View File

@@ -20,6 +20,8 @@ package config
import (
"reflect"
"testing"
"github.com/cgrates/cgrates/utils"
)
func TestMailerCfgloadFromJsonCfg(t *testing.T) {
@@ -58,3 +60,54 @@ func TestMailerCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, mailcfg)
}
}
func TestMailerCfgAsMapInterface(t *testing.T) {
var mailcfg MailerCfg
cfgJSONStr := `{
"mailer": {
"server": "",
"auth_user": "",
"auth_password": "",
"from_address": "",
},
}`
eMap := map[string]interface{}{
"server": "",
"auth_user": "",
"auth_password": "",
"from_address": "",
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnMailCfg, err := jsnCfg.MailerJsonCfg(); err != nil {
t.Error(err)
} else if err = mailcfg.loadFromJsonCfg(jsnMailCfg); err != nil {
t.Error(err)
} else if rcv := mailcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"mailer": {
"server": "localhost",
"auth_user": "cgrates",
"auth_password": "CGRateS.org",
"from_address": "cgr-mailer@localhost.localdomain",
},
}`
eMap = map[string]interface{}{
"server": "localhost",
"auth_user": "cgrates",
"auth_password": "CGRateS.org",
"from_address": "cgr-mailer@localhost.localdomain",
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnMailCfg, err := jsnCfg.MailerJsonCfg(); err != nil {
t.Error(err)
} else if err = mailcfg.loadFromJsonCfg(jsnMailCfg); err != nil {
t.Error(err)
} else if rcv := mailcfg.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 TestMigratorCgrCfgloadFromJsonCfg(t *testing.T) {
@@ -76,3 +78,99 @@ func TestMigratorCgrCfgloadFromJsonCfg(t *testing.T) {
t.Errorf("Expected: %+v , recived: %+v", expected, migcfg)
}
}
func TestMigratorCgrCfgAsMapInterface(t *testing.T) {
var migcfg MigratorCgrCfg
cfgJSONStr := `{
"migrator": {
"out_datadb_type": "redis",
"out_datadb_host": "127.0.0.1",
"out_datadb_port": "6379",
"out_datadb_name": "10",
"out_datadb_user": "cgrates",
"out_datadb_password": "",
"out_datadb_encoding" : "msgpack",
"out_stordb_type": "mysql",
"out_stordb_host": "127.0.0.1",
"out_stordb_port": "3306",
"out_stordb_name": "cgrates",
"out_stordb_user": "cgrates",
"out_stordb_password": "",
"users_filters":[],
},
}`
var users_filters []string
eMap := map[string]interface{}{
"out_datadb_type": "redis",
"out_datadb_host": "127.0.0.1",
"out_datadb_port": "6379",
"out_datadb_name": "10",
"out_datadb_user": "cgrates",
"out_datadb_password": "",
"out_datadb_encoding": "msgpack",
"out_stordb_type": "mysql",
"out_stordb_host": "127.0.0.1",
"out_stordb_port": "3306",
"out_stordb_name": "cgrates",
"out_stordb_user": "cgrates",
"out_stordb_password": "",
"users_filters": users_filters,
"out_datadb_redis_sentinel": "",
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnThSCfg, err := jsnCfg.MigratorCfgJson(); err != nil {
t.Error(err)
} else if err = migcfg.loadFromJsonCfg(jsnThSCfg); err != nil {
t.Error(err)
} else if rcv := migcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
cfgJSONStr = `{
"migrator": {
"out_datadb_type": "redis",
"out_datadb_host": "127.0.0.1",
"out_datadb_port": "6379",
"out_datadb_name": "10",
"out_datadb_user": "cgrates",
"out_datadb_password": "out_datadb_password",
"out_datadb_encoding" : "msgpack",
"out_stordb_type": "mysql",
"out_stordb_host": "127.0.0.1",
"out_stordb_port": "3306",
"out_stordb_name": "cgrates",
"out_stordb_user": "cgrates",
"out_stordb_password": "out_stordb_password",
"users_filters":["users","filters","Account"],
"out_datadb_redis_sentinel": "out_datadb_redis_sentinel",
},
}`
eMap = map[string]interface{}{
"out_datadb_type": "redis",
"out_datadb_host": "127.0.0.1",
"out_datadb_port": "6379",
"out_datadb_name": "10",
"out_datadb_user": "cgrates",
"out_datadb_password": "out_datadb_password",
"out_datadb_encoding": "msgpack",
"out_stordb_type": "mysql",
"out_stordb_host": "127.0.0.1",
"out_stordb_port": "3306",
"out_stordb_name": "cgrates",
"out_stordb_user": "cgrates",
"out_stordb_password": "out_stordb_password",
"users_filters": []string{"users", "filters", "Account"},
"out_datadb_redis_sentinel": "out_datadb_redis_sentinel",
}
if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if jsnThSCfg, err := jsnCfg.MigratorCfgJson(); err != nil {
t.Error(err)
} else if err = migcfg.loadFromJsonCfg(jsnThSCfg); err != nil {
t.Error(err)
} else if rcv := migcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) {
t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv))
}
}

View File

@@ -1956,29 +1956,29 @@ const (
// MigratorCgrCfg
const (
OutDataDBTypeCfg = "Out_dataDB_type"
OutDataDBHostCfg = "Out_dataDB_host"
OutDataDBPortCfg = "Out_dataDB_port"
OutDataDBNameCfg = "Out_dataDB_name"
OutDataDBUserCfg = "Out_dataDB_user"
OutDataDBPasswordCfg = "Out_dataDB_password"
OutDataDBEncodingCfg = "Out_dataDB_encoding"
OutDataDBRedisSentinelCfg = "Out_dataDB_redis_sentinel"
OutStorDBTypeCfg = "Out_storDB_type"
OutStorDBHostCfg = "Out_storDB_host"
OutStorDBPortCfg = "Out_storDB_port"
OutStorDBNameCfg = "Out_storDB_name"
OutStorDBUserCfg = "Out_storDB_user"
OutStorDBPasswordCfg = "Out_storDB_password"
UsersFiltersCfg = "Users_filters"
OutDataDBTypeCfg = "out_datadb_type"
OutDataDBHostCfg = "out_datadb_host"
OutDataDBPortCfg = "out_datadb_port"
OutDataDBNameCfg = "out_datadb_name"
OutDataDBUserCfg = "out_datadb_user"
OutDataDBPasswordCfg = "out_datadb_password"
OutDataDBEncodingCfg = "out_datadb_encoding"
OutDataDBRedisSentinelCfg = "out_datadb_redis_sentinel"
OutStorDBTypeCfg = "out_stordb_type"
OutStorDBHostCfg = "out_stordb_host"
OutStorDBPortCfg = "out_stordb_port"
OutStorDBNameCfg = "out_stordb_name"
OutStorDBUserCfg = "out_stordb_user"
OutStorDBPasswordCfg = "out_stordb_password"
UsersFiltersCfg = "users_filters"
)
// MailerCfg
const (
MailerServerCfg = "Server"
MailerAuthUserCfg = "Auth_user"
MailerAuthPassCfg = "Auth_password"
MailerFromAddrCfg = "From_address"
MailerServerCfg = "server"
MailerAuthUserCfg = "auth_user"
MailerAuthPassCfg = "auth_password"
MailerFromAddrCfg = "from_address"
)
// EventReaderCfg