Files
cgrates/config/config_test.go
2020-11-03 14:17:37 +01:00

3735 lines
122 KiB
Go
Executable File

/*
Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
Copyright (C) ITsysCOM GmbH
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package config
import (
"encoding/json"
"path"
"reflect"
"testing"
"time"
"github.com/cgrates/rpcclient"
"github.com/cgrates/cgrates/utils"
)
var cfg *CGRConfig
var err error
func TestCgrCfgConfigSharing(t *testing.T) {
cfg, _ = NewDefaultCGRConfig()
SetCgrConfig(cfg)
cfgReturn := CgrConfig()
if !reflect.DeepEqual(cfgReturn, cfg) {
t.Errorf("Retrieved %v, Expected %v", cfgReturn, cfg)
}
}
func TestCgrCfgLoadWithDefaults(t *testing.T) {
jsnCfg := `
{
"freeswitch_agent": {
"enabled": true, // starts SessionManager service: <true|false>
"event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers
{"address": "1.2.3.4:8021", "password": "ClueCon", "reconnects": 3, "alias":"123"},
{"address": "1.2.3.5:8021", "password": "ClueCon", "reconnects": 5, "alias":"124"}
],
},
}`
eCgrCfg, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
eCgrCfg.fsAgentCfg.Enabled = true
eCgrCfg.fsAgentCfg.EventSocketConns = []*FsConnCfg{
{Address: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 3, Alias: "123"},
{Address: "1.2.3.5:8021", Password: "ClueCon", Reconnects: 5, Alias: "124"},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eCgrCfg.fsAgentCfg, cgrCfg.fsAgentCfg) {
t.Errorf("Expected: %+v, received: %+v", eCgrCfg.fsAgentCfg, cgrCfg.fsAgentCfg)
}
}
func TestCgrCfgDataDBPortWithoutDynamic(t *testing.T) {
jsnCfg := `
{
"data_db": {
"db_type": "mongo",
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.DataDbCfg().DataDbType != utils.MONGO {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.MONGO)
} else if cgrCfg.DataDbCfg().DataDbPort != "6379" {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "6379")
}
jsnCfg = `
{
"data_db": {
"db_type": "internal",
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.DataDbCfg().DataDbType != utils.INTERNAL {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.INTERNAL)
} else if cgrCfg.DataDbCfg().DataDbPort != "6379" {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "6379")
}
}
func TestCgrCfgDataDBPortWithDymanic(t *testing.T) {
jsnCfg := `
{
"data_db": {
"db_type": "mongo",
"db_port": -1,
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.DataDbCfg().DataDbType != utils.MONGO {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.MONGO)
} else if cgrCfg.DataDbCfg().DataDbPort != "27017" {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "27017")
}
jsnCfg = `
{
"data_db": {
"db_type": "internal",
"db_port": -1,
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.DataDbCfg().DataDbType != utils.INTERNAL {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.INTERNAL)
} else if cgrCfg.DataDbCfg().DataDbPort != "internal" {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "internal")
}
}
func TestCgrCfgStorDBPortWithoutDynamic(t *testing.T) {
jsnCfg := `
{
"stor_db": {
"db_type": "mongo",
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.StorDbCfg().Type != utils.MONGO {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.StorDbCfg().Type, utils.MONGO)
} else if cgrCfg.StorDbCfg().Port != "3306" {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.StorDbCfg().Port, "3306")
}
}
func TestCgrCfgStorDBPortWithDymanic(t *testing.T) {
jsnCfg := `
{
"stor_db": {
"db_type": "mongo",
"db_port": -1,
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.StorDbCfg().Type != utils.MONGO {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.StorDbCfg().Type, utils.MONGO)
} else if cgrCfg.StorDbCfg().Port != "27017" {
t.Errorf("Expected: %+v, received: %+v", cgrCfg.StorDbCfg().Port, "27017")
}
}
func TestCgrCfgListener(t *testing.T) {
jsnCfg := `
{
"listen": {
"rpc_json": ":2012",
"rpc_gob": ":2013",
"http": ":2080",
}
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.ListenCfg().RPCGOBTLSListen != "127.0.0.1:2023" {
t.Errorf("Expected: 127.0.0.1:2023 , received: %+v", cgrCfg.ListenCfg().RPCGOBTLSListen)
} else if cgrCfg.ListenCfg().RPCJSONTLSListen != "127.0.0.1:2022" {
t.Errorf("Expected: 127.0.0.1:2022 , received: %+v", cgrCfg.ListenCfg().RPCJSONTLSListen)
}
}
func TestHttpAgentCfg(t *testing.T) {
jsnCfg := `
{
"http_agent": [
{
"id": "conecto1",
"url": "/conecto", // relative URL for requests coming in
"sessions_conns": ["*internal"],
"request_payload": "*url", // source of input data <*url>
"reply_payload": "*xml", // type of output data <*xml>
"request_processors": [],
}
],
}
`
eCgrCfg, _ := NewDefaultCGRConfig()
eCgrCfg.httpAgentCfg = []*HttpAgentCfg{
{
ID: "conecto1",
Url: "/conecto",
RequestPayload: utils.MetaUrl,
ReplyPayload: utils.MetaXml,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
RequestProcessors: nil,
},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eCgrCfg.HttpAgentCfg(), cgrCfg.HttpAgentCfg()) {
t.Errorf("Expected: %s, received: %s",
utils.ToJSON(eCgrCfg.httpAgentCfg), utils.ToJSON(cgrCfg.httpAgentCfg))
}
}
func TestCgrCfgLoadJSONDefaults(t *testing.T) {
cgrCfg, err = NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
}
func TestCgrCfgJSONDefaultsGeneral(t *testing.T) {
if cgrCfg.GeneralCfg().RoundingDecimals != 5 {
t.Errorf("Expected: 5, received: %+v", cgrCfg.GeneralCfg().RoundingDecimals)
}
if cgrCfg.GeneralCfg().DBDataEncoding != "msgpack" {
t.Errorf("Expected: msgpack, received: %+v", cgrCfg.GeneralCfg().DBDataEncoding)
}
if expected := "/var/spool/cgrates/tpe"; cgrCfg.GeneralCfg().TpExportPath != expected {
t.Errorf("Expected: %+v, received: %+v", expected, cgrCfg.GeneralCfg().TpExportPath)
}
if cgrCfg.GeneralCfg().PosterAttempts != 3 {
t.Errorf("Expected: 3, received: %+v", cgrCfg.GeneralCfg().PosterAttempts)
}
if expected := "/var/spool/cgrates/failed_posts"; cgrCfg.GeneralCfg().FailedPostsDir != expected {
t.Errorf("Expected: %+v, received: %+v", expected, cgrCfg.GeneralCfg().FailedPostsDir)
}
if cgrCfg.GeneralCfg().DefaultReqType != "*rated" {
t.Errorf("Expected: *rated, received: %+v", cgrCfg.GeneralCfg().DefaultReqType)
}
if cgrCfg.GeneralCfg().DefaultCategory != "call" {
t.Errorf("Expected: call, received: %+v", cgrCfg.GeneralCfg().DefaultCategory)
}
if cgrCfg.GeneralCfg().DefaultTenant != "cgrates.org" {
t.Errorf("Expected: cgrates.org, received: %+v", cgrCfg.GeneralCfg().DefaultTenant)
}
if cgrCfg.GeneralCfg().DefaultCaching != utils.MetaReload {
t.Errorf("Expected: *reload, received: %+v", cgrCfg.GeneralCfg().DefaultCaching)
}
if cgrCfg.GeneralCfg().DefaultTimezone != "Local" {
t.Errorf("Expected: Local, received: %+v", cgrCfg.GeneralCfg().DefaultTimezone)
}
if cgrCfg.GeneralCfg().ConnectAttempts != 5 {
t.Errorf("Expected: 3, received: %+v", cgrCfg.GeneralCfg().ConnectAttempts)
}
if cgrCfg.GeneralCfg().Reconnects != -1 {
t.Errorf("Expected: -1, received: %+v", cgrCfg.GeneralCfg().Reconnects)
}
if cgrCfg.GeneralCfg().ConnectTimeout != time.Second {
t.Errorf("Expected: 1s, received: %+v", cgrCfg.GeneralCfg().ConnectTimeout)
}
if cgrCfg.GeneralCfg().ReplyTimeout != 2*time.Second {
t.Errorf("Expected: 2s, received: %+v", cgrCfg.GeneralCfg().ReplyTimeout)
}
if cgrCfg.GeneralCfg().LockingTimeout != 0 {
t.Errorf("Expected: 0, received: %+v", cgrCfg.GeneralCfg().LockingTimeout)
}
if cgrCfg.GeneralCfg().Logger != utils.MetaSysLog {
t.Errorf("Expected: %+v, received: %+v", utils.MetaSysLog, cgrCfg.GeneralCfg().Logger)
}
if cgrCfg.GeneralCfg().LogLevel != 6 {
t.Errorf("Expected: 6, received: %+v", cgrCfg.GeneralCfg().LogLevel)
}
if cgrCfg.GeneralCfg().DigestSeparator != "," {
t.Errorf("Expected: utils.CSV_SEP , received: %+v", cgrCfg.GeneralCfg().DigestSeparator)
}
if cgrCfg.GeneralCfg().DigestEqual != ":" {
t.Errorf("Expected: ':' , received: %+v", cgrCfg.GeneralCfg().DigestEqual)
}
}
func TestCgrCfgJSONDefaultsListen(t *testing.T) {
if cgrCfg.ListenCfg().RPCJSONListen != "127.0.0.1:2012" {
t.Errorf("Expected: 127.0.0.1:2012 , received: %+v", cgrCfg.ListenCfg().RPCJSONListen)
}
if cgrCfg.ListenCfg().RPCGOBListen != "127.0.0.1:2013" {
t.Errorf("Expected: 127.0.0.1:2013 , received: %+v", cgrCfg.ListenCfg().RPCGOBListen)
}
if cgrCfg.ListenCfg().HTTPListen != "127.0.0.1:2080" {
t.Errorf("Expected: 127.0.0.1:2080 , received: %+v", cgrCfg.ListenCfg().HTTPListen)
}
if cgrCfg.ListenCfg().RPCJSONTLSListen != "127.0.0.1:2022" {
t.Errorf("Expected: 127.0.0.1:2022 , received: %+v", cgrCfg.ListenCfg().RPCJSONListen)
}
if cgrCfg.ListenCfg().RPCGOBTLSListen != "127.0.0.1:2023" {
t.Errorf("Expected: 127.0.0.1:2023 , received: %+v", cgrCfg.ListenCfg().RPCGOBListen)
}
if cgrCfg.ListenCfg().HTTPTLSListen != "127.0.0.1:2280" {
t.Errorf("Expected: 127.0.0.1:2280 , received: %+v", cgrCfg.ListenCfg().HTTPListen)
}
}
func TestCgrCfgJSONDefaultsjsnDataDb(t *testing.T) {
if cgrCfg.DataDbCfg().DataDbType != "redis" {
t.Errorf("Expecting: redis , received: %+v", cgrCfg.DataDbCfg().DataDbType)
}
if cgrCfg.DataDbCfg().DataDbHost != "127.0.0.1" {
t.Errorf("Expecting: 127.0.0.1 , received: %+v", cgrCfg.DataDbCfg().DataDbHost)
}
if cgrCfg.DataDbCfg().DataDbPort != "6379" {
t.Errorf("Expecting: 6379 , received: %+v", cgrCfg.DataDbCfg().DataDbPort)
}
if cgrCfg.DataDbCfg().DataDbName != "10" {
t.Errorf("Expecting: 10 , received: %+v", cgrCfg.DataDbCfg().DataDbName)
}
if cgrCfg.DataDbCfg().DataDbUser != "cgrates" {
t.Errorf("Expecting: cgrates , received: %+v", cgrCfg.DataDbCfg().DataDbUser)
}
if cgrCfg.DataDbCfg().DataDbPass != "" {
t.Errorf("Expecting: , received: %+v", cgrCfg.DataDbCfg().DataDbPass)
}
if len(cgrCfg.DataDbCfg().RmtConns) != 0 {
t.Errorf("Expecting: 0, received: %+v", len(cgrCfg.DataDbCfg().RmtConns))
}
if len(cgrCfg.DataDbCfg().RplConns) != 0 {
t.Errorf("Expecting: 0, received: %+v", len(cgrCfg.DataDbCfg().RplConns))
}
}
func TestCgrCfgJSONDefaultsStorDB(t *testing.T) {
if cgrCfg.StorDbCfg().Type != "mysql" {
t.Errorf("Expecting: mysql , received: %+v", cgrCfg.StorDbCfg().Type)
}
if cgrCfg.StorDbCfg().Host != "127.0.0.1" {
t.Errorf("Expecting: 127.0.0.1 , received: %+v", cgrCfg.StorDbCfg().Host)
}
if cgrCfg.StorDbCfg().Port != "3306" {
t.Errorf("Expecting: 3306 , received: %+v", cgrCfg.StorDbCfg().Port)
}
if cgrCfg.StorDbCfg().Name != "cgrates" {
t.Errorf("Expecting: cgrates , received: %+v", cgrCfg.StorDbCfg().Name)
}
if cgrCfg.StorDbCfg().User != "cgrates" {
t.Errorf("Expecting: cgrates , received: %+v", cgrCfg.StorDbCfg().User)
}
if cgrCfg.StorDbCfg().Password != "" {
t.Errorf("Expecting: , received: %+v", cgrCfg.StorDbCfg().Password)
}
if cgrCfg.StorDbCfg().Opts[utils.MaxOpenConnsCfg] != 100. {
t.Errorf("Expecting: 100 , received: %+v", cgrCfg.StorDbCfg().Opts[utils.MaxOpenConnsCfg])
}
if cgrCfg.StorDbCfg().Opts[utils.MaxIdleConnsCfg] != 10. {
t.Errorf("Expecting: 10 , received: %+v", cgrCfg.StorDbCfg().Opts[utils.MaxIdleConnsCfg])
}
if !reflect.DeepEqual(cgrCfg.StorDbCfg().StringIndexedFields, []string{}) {
t.Errorf("Expecting: %+v , received: %+v", []string{}, cgrCfg.StorDbCfg().StringIndexedFields)
}
if !reflect.DeepEqual(cgrCfg.StorDbCfg().PrefixIndexedFields, []string{}) {
t.Errorf("Expecting: %+v , received: %+v", []string{}, cgrCfg.StorDbCfg().PrefixIndexedFields)
}
}
func TestCgrCfgJSONDefaultsRALs(t *testing.T) {
eHaPoolcfg := []string{}
if cgrCfg.RalsCfg().Enabled != false {
t.Errorf("Expecting: false , received: %+v", cgrCfg.RalsCfg().Enabled)
}
if !reflect.DeepEqual(cgrCfg.RalsCfg().ThresholdSConns, eHaPoolcfg) {
t.Errorf("Expecting: %+v , received: %+v", eHaPoolcfg, cgrCfg.RalsCfg().ThresholdSConns)
}
if cgrCfg.RalsCfg().RpSubjectPrefixMatching != false {
t.Errorf("Expecting: false , received: %+v", cgrCfg.RalsCfg().RpSubjectPrefixMatching)
}
eMaxCU := map[string]time.Duration{
utils.ANY: 189 * time.Hour,
utils.VOICE: 72 * time.Hour,
utils.DATA: 107374182400,
utils.SMS: 10000,
utils.MMS: 10000,
}
if !reflect.DeepEqual(eMaxCU, cgrCfg.RalsCfg().MaxComputedUsage) {
t.Errorf("Expecting: %+v , received: %+v", eMaxCU, cgrCfg.RalsCfg().MaxComputedUsage)
}
if cgrCfg.RalsCfg().MaxIncrements != int(1000000) {
t.Errorf("Expecting: 1000000 , received: %+v", cgrCfg.RalsCfg().MaxIncrements)
}
eBalRatingSbj := map[string]string{
utils.ANY: "*zero1ns",
utils.VOICE: "*zero1s",
}
if !reflect.DeepEqual(eBalRatingSbj, cgrCfg.RalsCfg().BalanceRatingSubject) {
t.Errorf("Expecting: %+v , received: %+v", eBalRatingSbj, cgrCfg.RalsCfg().BalanceRatingSubject)
}
}
func TestCgrCfgJSONDefaultsScheduler(t *testing.T) {
eSchedulerCfg := &SchedulerCfg{
Enabled: false,
CDRsConns: []string{},
Filters: []string{},
}
if !reflect.DeepEqual(cgrCfg.schedulerCfg, eSchedulerCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.schedulerCfg, eSchedulerCfg)
}
}
func TestCgrCfgJSONDefaultsCDRS(t *testing.T) {
eCdrsCfg := &CdrsCfg{
Enabled: false,
StoreCdrs: true,
SMCostRetries: 5,
ChargerSConns: []string{},
RaterConns: []string{},
AttributeSConns: []string{},
ThresholdSConns: []string{},
StatSConns: []string{},
SchedulerConns: []string{},
EEsConns: []string{},
}
if !reflect.DeepEqual(eCdrsCfg, cgrCfg.cdrsCfg) {
t.Errorf("Expecting: %+v , received: %+v", eCdrsCfg, cgrCfg.cdrsCfg)
}
}
func TestCgrCfgJSONLoadCDRS(t *testing.T) {
jsnCfg := `
{
"cdrs": {
"enabled": true,
"chargers_conns": ["*internal"],
"rals_conns": ["*internal"],
},
}
`
cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg)
if err != nil {
t.Error(err)
}
if !cgrCfg.CdrsCfg().Enabled {
t.Errorf("Expecting: true , received: %+v", cgrCfg.CdrsCfg().Enabled)
}
expected := []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)}
if !reflect.DeepEqual(cgrCfg.CdrsCfg().ChargerSConns, expected) {
t.Errorf("Expecting: %+v , received: %+v", expected, cgrCfg.CdrsCfg().ChargerSConns)
}
expected = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)}
if !reflect.DeepEqual(cgrCfg.CdrsCfg().RaterConns, expected) {
t.Errorf("Expecting: %+v , received: %+v", expected, cgrCfg.CdrsCfg().RaterConns)
}
}
func TestCgrCfgJSONDefaultsSMGenericCfg(t *testing.T) {
eSessionSCfg := &SessionSCfg{
Enabled: false,
ListenBijson: "127.0.0.1:2014",
ChargerSConns: []string{},
RALsConns: []string{},
CDRsConns: []string{},
ResSConns: []string{},
ThreshSConns: []string{},
StatSConns: []string{},
RouteSConns: []string{},
AttrSConns: []string{},
ReplicationConns: []string{},
DebitInterval: 0,
StoreSCosts: false,
SessionTTL: 0,
SessionIndexes: utils.StringMap{},
ClientProtocol: 1.0,
ChannelSyncInterval: 0,
TerminateAttempts: 5,
AlterableFields: utils.NewStringSet([]string{}),
STIRCfg: &STIRcfg{
AllowedAttest: utils.NewStringSet([]string{utils.META_ANY}),
PayloadMaxduration: -1,
DefaultAttest: "A",
},
SchedulerConns: []string{},
}
if !reflect.DeepEqual(eSessionSCfg, cgrCfg.sessionSCfg) {
t.Errorf("expecting: %s, received: %s",
utils.ToJSON(eSessionSCfg), utils.ToJSON(cgrCfg.sessionSCfg))
}
}
func TestCgrCfgJSONDefaultsCacheCFG(t *testing.T) {
eCacheCfg := &CacheCfg{
Partitions: map[string]*CacheParamCfg{
utils.CacheDestinations: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheReverseDestinations: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRatingPlans: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRatingProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheActions: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheActionPlans: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheAccountActionPlans: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheActionTriggers: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheSharedGroups: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTimings: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheResourceProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheResources: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheEventResources: {Limit: -1,
TTL: 0, StaticTTL: false},
utils.CacheStatQueueProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheStatQueues: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheThresholdProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheThresholds: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheFilters: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRouteProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheAttributeProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheChargerProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDispatcherProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRateProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDispatcherHosts: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheResourceFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheStatFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheThresholdFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRouteFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheAttributeFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheChargerFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDispatcherFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRateProfilesFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRateFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheReverseFilterIndexes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDispatcherRoutes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDispatcherLoads: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDispatchers: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheDiameterMessages: {Limit: -1,
TTL: 3 * time.Hour, StaticTTL: false},
utils.CacheRPCResponses: {Limit: 0,
TTL: 2 * time.Second, StaticTTL: false},
utils.CacheClosedSessions: {Limit: -1,
TTL: 10 * time.Second, StaticTTL: false},
utils.CacheEventCharges: {Limit: -1,
TTL: 10 * time.Second, StaticTTL: false},
utils.CacheCDRIDs: {Limit: -1,
TTL: 10 * time.Minute, StaticTTL: false},
utils.CacheLoadIDs: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheRPCConnections: {Limit: -1,
TTL: 0, StaticTTL: false},
utils.CacheUCH: {Limit: -1,
TTL: 3 * time.Hour, StaticTTL: false},
utils.CacheSTIR: {Limit: -1,
TTL: 3 * time.Hour, StaticTTL: false},
utils.CacheVersions: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheAccounts: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPTimings: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPDestinations: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPRates: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPDestinationRates: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPRatingPlans: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPRatingProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPSharedGroups: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPActions: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPActionPlans: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPActionTriggers: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPAccountActions: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPResources: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPStats: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPThresholds: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPFilters: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheSessionCostsTBL: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheCDRsTBL: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPRoutes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPAttributes: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPChargers: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPDispatchers: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPDispatcherHosts: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.CacheTBLTPRateProfiles: {Limit: -1,
TTL: 0, StaticTTL: false, Precache: false},
utils.MetaAPIBan: {Limit: -1,
TTL: 2 * time.Minute, StaticTTL: false, Precache: false},
},
ReplicationConns: []string{},
}
if !reflect.DeepEqual(eCacheCfg, cgrCfg.CacheCfg()) {
t.Errorf("received: %s, \nexpecting: %s",
utils.ToJSON(cgrCfg.CacheCfg()), utils.ToJSON(eCacheCfg))
}
}
func TestCgrCfgJSONDefaultsFsAgentConfig(t *testing.T) {
eFsAgentCfg := &FsAgentCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
SubscribePark: true,
CreateCdr: false,
ExtraFields: RSRParsers{},
EmptyBalanceContext: "",
EmptyBalanceAnnFile: "",
MaxWaitConnection: 2 * time.Second,
EventSocketConns: []*FsConnCfg{{
Address: "127.0.0.1:8021",
Password: "ClueCon",
Reconnects: 5,
Alias: "127.0.0.1:8021",
}},
}
if !reflect.DeepEqual(cgrCfg.fsAgentCfg, eFsAgentCfg) {
t.Errorf("received: %+v, expecting: %+v", utils.ToJSON(cgrCfg.fsAgentCfg), utils.ToJSON(eFsAgentCfg))
}
}
func TestCgrCfgJSONDefaultsKamAgentConfig(t *testing.T) {
eKamAgentCfg := &KamAgentCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
CreateCdr: false,
EvapiConns: []*KamConnCfg{{
Address: "127.0.0.1:8448",
Reconnects: 5,
}},
}
if !reflect.DeepEqual(cgrCfg.kamAgentCfg, eKamAgentCfg) {
t.Errorf("received: %+v, expecting: %+v",
utils.ToJSON(cgrCfg.kamAgentCfg), utils.ToJSON(eKamAgentCfg))
}
}
func TestCgrCfgJSONDefaultssteriskAgentCfg(t *testing.T) {
eAstAgentCfg := &AsteriskAgentCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
CreateCDR: false,
AsteriskConns: []*AsteriskConnCfg{
{Address: "127.0.0.1:8088",
User: "cgrates", Password: "CGRateS.org",
ConnectAttempts: 3, Reconnects: 5}},
}
if !reflect.DeepEqual(cgrCfg.asteriskAgentCfg, eAstAgentCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.asteriskAgentCfg, eAstAgentCfg)
}
}
func TestCgrCfgJSONDefaultFiltersCfg(t *testing.T) {
eFiltersCfg := &FilterSCfg{
StatSConns: []string{},
ResourceSConns: []string{},
ApierSConns: []string{},
}
if !reflect.DeepEqual(cgrCfg.filterSCfg, eFiltersCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.filterSCfg, eFiltersCfg)
}
}
func TestCgrCfgJSONDefaultSChargerSCfg(t *testing.T) {
eChargerSCfg := &ChargerSCfg{
Enabled: false,
IndexedSelects: true,
AttributeSConns: []string{},
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
}
if !reflect.DeepEqual(eChargerSCfg, cgrCfg.chargerSCfg) {
t.Errorf("received: %+v, expecting: %+v", eChargerSCfg, cgrCfg.chargerSCfg)
}
}
func TestCgrCfgJSONDefaultsResLimCfg(t *testing.T) {
eResLiCfg := &ResourceSConfig{
Enabled: false,
IndexedSelects: true,
ThresholdSConns: []string{},
StoreInterval: 0,
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
}
if !reflect.DeepEqual(cgrCfg.resourceSCfg, eResLiCfg) {
t.Errorf("expecting: %s, received: %s", utils.ToJSON(eResLiCfg), utils.ToJSON(cgrCfg.resourceSCfg))
}
}
func TestCgrCfgJSONDefaultStatsCfg(t *testing.T) {
eStatsCfg := &StatSCfg{
Enabled: false,
IndexedSelects: true,
StoreInterval: 0,
ThresholdSConns: []string{},
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
}
if !reflect.DeepEqual(cgrCfg.statsCfg, eStatsCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.statsCfg, eStatsCfg)
}
}
func TestCgrCfgJSONDefaultThresholdSCfg(t *testing.T) {
eThresholdSCfg := &ThresholdSCfg{
Enabled: false,
IndexedSelects: true,
StoreInterval: 0,
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
}
if !reflect.DeepEqual(eThresholdSCfg, cgrCfg.thresholdSCfg) {
t.Errorf("received: %+v, expecting: %+v", eThresholdSCfg, cgrCfg.thresholdSCfg)
}
}
func TestCgrCfgJSONDefaultRouteSCfg(t *testing.T) {
eSupplSCfg := &RouteSCfg{
Enabled: false,
IndexedSelects: true,
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
AttributeSConns: []string{},
ResourceSConns: []string{},
StatSConns: []string{},
RALsConns: []string{},
DefaultRatio: 1,
}
if !reflect.DeepEqual(eSupplSCfg, cgrCfg.routeSCfg) {
t.Errorf("received: %+v, expecting: %+v", eSupplSCfg, cgrCfg.routeSCfg)
}
}
func TestCgrCfgJSONDefaultsDiameterAgentCfg(t *testing.T) {
testDA := &DiameterAgentCfg{
Enabled: false,
Listen: "127.0.0.1:3868",
ListenNet: utils.TCP,
DictionariesPath: "/usr/share/cgrates/diameter/dict/",
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
OriginHost: "CGR-DA",
OriginRealm: "cgrates.org",
VendorId: 0,
ProductName: "CGRateS",
ConcurrentReqs: -1,
RequestProcessors: nil,
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.Enabled, testDA.Enabled) {
t.Errorf("expecting: %+v, received: %+v", cgrCfg.diameterAgentCfg.Enabled, testDA.Enabled)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.Listen, testDA.Listen) {
t.Errorf("expecting: %+v, received: %+v", cgrCfg.diameterAgentCfg.Listen, testDA.Listen)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.DictionariesPath, testDA.DictionariesPath) {
t.Errorf("expecting: %+v, received: %+v", cgrCfg.diameterAgentCfg.DictionariesPath, testDA.DictionariesPath)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.SessionSConns, testDA.SessionSConns) {
t.Errorf("expecting: %+v, received: %+v", cgrCfg.diameterAgentCfg.SessionSConns, testDA.SessionSConns)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.OriginHost, testDA.OriginHost) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.diameterAgentCfg.OriginHost, testDA.OriginHost)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.OriginRealm, testDA.OriginRealm) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.diameterAgentCfg.OriginRealm, testDA.OriginRealm)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.VendorId, testDA.VendorId) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.diameterAgentCfg.VendorId, testDA.VendorId)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.ProductName, testDA.ProductName) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.diameterAgentCfg.ProductName, testDA.ProductName)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.ConcurrentReqs, testDA.ConcurrentReqs) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.diameterAgentCfg.ConcurrentReqs, testDA.ConcurrentReqs)
}
if !reflect.DeepEqual(cgrCfg.diameterAgentCfg.RequestProcessors, testDA.RequestProcessors) {
t.Errorf("expecting: %+v, received: %+v", testDA.RequestProcessors, cgrCfg.diameterAgentCfg.RequestProcessors)
}
}
func TestCgrCfgJSONDefaultsMailer(t *testing.T) {
if cgrCfg.MailerCfg().MailerServer != "localhost" {
t.Error(cgrCfg.MailerCfg().MailerServer)
}
if cgrCfg.MailerCfg().MailerAuthUser != "cgrates" {
t.Error(cgrCfg.MailerCfg().MailerAuthUser)
}
if cgrCfg.MailerCfg().MailerAuthPass != "CGRateS.org" {
t.Error(cgrCfg.MailerCfg().MailerAuthPass)
}
if cgrCfg.MailerCfg().MailerFromAddr != "cgr-mailer@localhost.localdomain" {
t.Error(cgrCfg.MailerCfg().MailerFromAddr)
}
}
func TestCgrCfgJSONDefaultsSureTax(t *testing.T) {
localt, err := time.LoadLocation("Local")
if err != nil {
t.Error("time parsing error", err)
}
eSureTaxCfg := &SureTaxCfg{
Url: "",
ClientNumber: "",
ValidationKey: "",
BusinessUnit: "",
Timezone: localt,
IncludeLocalCost: false,
ReturnFileCode: "0",
ResponseGroup: "03",
ResponseType: "D4",
RegulatoryCode: "03",
ClientTracking: NewRSRParsersMustCompile("~*req.CGRID", utils.INFIELD_SEP),
CustomerNumber: NewRSRParsersMustCompile("~*req.Subject", utils.INFIELD_SEP),
OrigNumber: NewRSRParsersMustCompile("~*req.Subject", utils.INFIELD_SEP),
TermNumber: NewRSRParsersMustCompile("~*req.Destination", utils.INFIELD_SEP),
BillToNumber: NewRSRParsersMustCompile("", utils.INFIELD_SEP),
Zipcode: NewRSRParsersMustCompile("", utils.INFIELD_SEP),
P2PZipcode: NewRSRParsersMustCompile("", utils.INFIELD_SEP),
P2PPlus4: NewRSRParsersMustCompile("", utils.INFIELD_SEP),
Units: NewRSRParsersMustCompile("1", utils.INFIELD_SEP),
UnitType: NewRSRParsersMustCompile("00", utils.INFIELD_SEP),
TaxIncluded: NewRSRParsersMustCompile("0", utils.INFIELD_SEP),
TaxSitusRule: NewRSRParsersMustCompile("04", utils.INFIELD_SEP),
TransTypeCode: NewRSRParsersMustCompile("010101", utils.INFIELD_SEP),
SalesTypeCode: NewRSRParsersMustCompile("R", utils.INFIELD_SEP),
TaxExemptionCodeList: NewRSRParsersMustCompile("", utils.INFIELD_SEP),
}
if !reflect.DeepEqual(cgrCfg.sureTaxCfg, eSureTaxCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.sureTaxCfg, eSureTaxCfg)
}
}
func TestCgrCfgJSONDefaultsHTTP(t *testing.T) {
if cgrCfg.HTTPCfg().HTTPJsonRPCURL != "/jsonrpc" {
t.Errorf("expecting: /jsonrpc , received: %+v", cgrCfg.HTTPCfg().HTTPJsonRPCURL)
}
if cgrCfg.HTTPCfg().HTTPWSURL != "/ws" {
t.Errorf("expecting: /ws , received: %+v", cgrCfg.HTTPCfg().HTTPWSURL)
}
if cgrCfg.HTTPCfg().HTTPFreeswitchCDRsURL != "/freeswitch_json" {
t.Errorf("expecting: /freeswitch_json , received: %+v", cgrCfg.HTTPCfg().HTTPFreeswitchCDRsURL)
}
if cgrCfg.HTTPCfg().HTTPCDRsURL != "/cdr_http" {
t.Errorf("expecting: /cdr_http , received: %+v", cgrCfg.HTTPCfg().HTTPCDRsURL)
}
if cgrCfg.HTTPCfg().HTTPUseBasicAuth != false {
t.Errorf("expecting: false , received: %+v", cgrCfg.HTTPCfg().HTTPUseBasicAuth)
}
if !reflect.DeepEqual(cgrCfg.HTTPCfg().HTTPAuthUsers, map[string]string{}) {
t.Errorf("expecting: %+v , received: %+v", map[string]string{}, cgrCfg.HTTPCfg().HTTPAuthUsers)
}
}
func TestRadiusAgentCfg(t *testing.T) {
testRA := &RadiusAgentCfg{
Enabled: false,
ListenNet: "udp",
ListenAuth: "127.0.0.1:1812",
ListenAcct: "127.0.0.1:1813",
ClientSecrets: map[string]string{utils.MetaDefault: "CGRateS.org"},
ClientDictionaries: map[string]string{utils.MetaDefault: "/usr/share/cgrates/radius/dict/"},
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
RequestProcessors: nil,
}
if !reflect.DeepEqual(cgrCfg.radiusAgentCfg, testRA) {
t.Errorf("expecting: %+v, received: %+v", cgrCfg.radiusAgentCfg, testRA)
}
}
func TestDbDefaultsMetaDynamic(t *testing.T) {
dbdf := newDbDefaults()
flagInput := utils.MetaDynamic
dbs := []string{utils.MONGO, utils.REDIS, utils.MYSQL, utils.INTERNAL}
for _, dbtype := range dbs {
host := dbdf.dbHost(dbtype, flagInput)
if host != utils.LOCALHOST {
t.Errorf("received: %+v, expecting: %+v", host, utils.LOCALHOST)
}
user := dbdf.dbUser(dbtype, flagInput)
if user != utils.CGRATES {
t.Errorf("received: %+v, expecting: %+v", user, utils.CGRATES)
}
port := dbdf.dbPort(dbtype, flagInput)
if port != dbdf[dbtype]["DbPort"] {
t.Errorf("received: %+v, expecting: %+v", port, dbdf[dbtype]["DbPort"])
}
name := dbdf.dbName(dbtype, flagInput)
if name != dbdf[dbtype]["DbName"] {
t.Errorf("received: %+v, expecting: %+v", name, dbdf[dbtype]["DbName"])
}
pass := dbdf.dbPass(dbtype, flagInput)
if pass != dbdf[dbtype]["DbPass"] {
t.Errorf("received: %+v, expecting: %+v", pass, dbdf[dbtype]["DbPass"])
}
}
}
func TestDbDefaults(t *testing.T) {
dbdf := newDbDefaults()
flagInput := "NonMetaDynamic"
dbs := []string{utils.MONGO, utils.REDIS, utils.MYSQL, utils.INTERNAL, utils.POSTGRES}
for _, dbtype := range dbs {
host := dbdf.dbHost(dbtype, flagInput)
if host != flagInput {
t.Errorf("Expected %+v, received %+v", flagInput, host)
}
user := dbdf.dbUser(dbtype, flagInput)
if user != flagInput {
t.Errorf("Expected %+v, received %+v", flagInput, user)
}
port := dbdf.dbPort(dbtype, "1234")
if port != "1234" {
t.Errorf("Expected %+v, received %+v", "1234", port)
}
name := dbdf.dbName(dbtype, utils.CGRATES)
if name != utils.CGRATES {
t.Errorf("Expected %+v, received %+v", utils.CGRATES, name)
}
pass := dbdf.dbPass(dbtype, utils.EmptyString)
if pass != utils.EmptyString {
t.Errorf("Expected %+v, received %+v", utils.EmptyString, pass)
}
}
}
func TestNewCGRConfigFromJSONStringWithDefaultsError(t *testing.T) {
cfgJSONStr := "invalidJSON"
expectedErr := "invalid character 'i' looking for beginning of value around line 1 and position 1\n line: \"invalidJSON\""
if _, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err == nil || err.Error() != expectedErr {
t.Errorf("Expected %+v, received %+v", expectedErr, err)
}
cfgJSONStr = `{
"suretax": {
"tax_exemption_code_list": "a{*"
},
}`
expectedErr = "invalid converter terminator in rule: <a{*>"
if _, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err == nil || err.Error() != expectedErr {
t.Errorf("Expected %+v, received %+v", expectedErr, err)
}
}
func TestIsHidden(t *testing.T) {
file := ".newFile"
if !isHidden(file) {
t.Errorf("File is not hidden")
}
file = "."
if isHidden(file) {
t.Errorf("Invalid input")
}
}
func TestLazySanityCheck(t *testing.T) {
cfgJSONStr := `{
"cdrs": {
"online_cdr_exports":["http_localhost", "amqp_localhost", "aws_test_file", "sqs_test_file", "kafka_localhost", "s3_test_file"],
},
"ees": {
"exporters": [
{
"id": "http_localhost",
"type": "*s3_json_map",
"fields":[
{"tag": "CGRID", "path": "*exp.CGRID", "type": "*variable", "value": "~*req.CGRID"}
]
}]
}
},
`
cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr)
if err != nil {
t.Error(err)
}
cgrCfg.LazySanityCheck()
}
func TestLoadRPCConnsError(t *testing.T) {
cfgJSONStr := `{
"rpc_conns": {
"*localhost": {
"conns": [
{"address": "127.0.0.1:2018", "TLS": true, "synchronous": true, "transport": "*json"},
],
"poolSize": "two",
},
},
}`
expected := "json: cannot unmarshal string into Go struct field RPCConnsJson.PoolSize of type int"
cgrCfg, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrJSONCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrCfg.loadRPCConns(cgrJSONCfg); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadGeneralCfgError(t *testing.T) {
cfgJSONStr := `{
"general": {
"node_id": "ENGINE1",
"locking_timeout": "0",
"failed_posts_ttl": "0s",
"connect_timeout": "0s",
"reply_timeout": "0s",
"min_call_duration": "1s",
"max_call_duration": []
}
}
}`
expected := "json: cannot unmarshal array into Go struct field GeneralJsonCfg.Max_call_duration of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadGeneralCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadCacheCfgError(t *testing.T) {
cfgJSONStr := `{
"caches":{
"replication_conns": 2,
},
}`
expected := "json: cannot unmarshal number into Go struct field CacheJsonCfg.Replication_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadCacheCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadListenCfgError(t *testing.T) {
cfgJSONStr := `{
"listen": {
"http_tls": 1206,
}
}`
expected := "json: cannot unmarshal number into Go struct field ListenJsonCfg.Http_tls of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadListenCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadHTTPCfgError(t *testing.T) {
cfgJSONStr := `{
"http": {
"auth_users": "user1",
},
}`
expected := "json: cannot unmarshal string into Go struct field HTTPJsonCfg.Auth_users of type map[string]string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadHTTPCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadDataDBCfgError(t *testing.T) {
cfgJSONStr := `{
"data_db": {
"db_host": 127.0,
}
}`
expected := "json: cannot unmarshal number into Go struct field DbJsonCfg.Db_host of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadDataDBCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadStorDbCfgError(t *testing.T) {
cfgJSONStr := `{
"stor_db": {
"db_type": "*internal",
"db_port": "-1",
}
}`
expected := "json: cannot unmarshal string into Go struct field DbJsonCfg.Db_port of type int"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadStorDBCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadFilterSCfgError(t *testing.T) {
cfgJSONStr := `{
"filters": {
"stats_conns": "*internal",
},
}`
expected := "json: cannot unmarshal string into Go struct field FilterSJsonCfg.Stats_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadFilterSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadRalSCfgError(t *testing.T) {
cfgJSONStr := `{
"rals": {
"stats_conns": "*internal",
},
}`
expected := "json: cannot unmarshal string into Go struct field RalsJsonCfg.Stats_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadRalSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadSchedulerCfgError(t *testing.T) {
cfgJSONStr := `{
"schedulers": {
"filters": "randomFilter",
},
}`
expected := "json: cannot unmarshal string into Go struct field SchedulerJsonCfg.Filters of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadSchedulerCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadCdrsCfgError(t *testing.T) {
cfgJSONStr := `{
"cdrs": {
"ees_conns": "*internal",
},
}`
expected := "json: cannot unmarshal string into Go struct field CdrsJsonCfg.Ees_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadCdrsCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadSessionSCfgError(t *testing.T) {
cfgJSONStr := `{
"sessions": {
"session_ttl_usage": 1,
},
}`
expected := "json: cannot unmarshal number into Go struct field SessionSJsonCfg.Session_ttl_usage of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadSessionSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadFreeswitchAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"freeswitch_agent": {
"sessions_conns": "*conn1",
},
}`
expected := "json: cannot unmarshal string into Go struct field FreeswitchAgentJsonCfg.Sessions_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadFreeswitchAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadKamAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"kamailio_agent": {
"timezone": 1234,
},
}`
expected := "json: cannot unmarshal number into Go struct field KamAgentJsonCfg.Timezone of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadKamAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadAsteriskAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"asterisk_agent": {
"sessions_conns": "*conn1",
},
}`
expected := "json: cannot unmarshal string into Go struct field AsteriskAgentJsonCfg.Sessions_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadAsteriskAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadDiameterAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"diameter_agent": {
"request_processors": [
{
"id": 1,
},
]
}
}`
expected := "json: cannot unmarshal number into Go struct field ReqProcessorJsnCfg.Request_processors.ID of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadDiameterAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadRadiusAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"radius_agent": {
"listen_auth": 1,
},
}`
expected := "json: cannot unmarshal number into Go struct field RadiusAgentJsonCfg.Listen_auth of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadRadiusAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadDNSAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"dns_agent": {
"listen": 1278,
},
}`
expected := "json: cannot unmarshal number into Go struct field DNSAgentJsonCfg.Listen of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadDNSAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadHttpAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"http_agent": [
{
"id": ["randomID"],
},
],
}`
expected := "json: cannot unmarshal array into Go struct field HttpAgentJsonCfg.Id of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadHttpAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadAttributeSCfgError(t *testing.T) {
cfgJSONStr := `{
"attributes": {
"process_runs": "3",
},
}`
expected := "json: cannot unmarshal string into Go struct field AttributeSJsonCfg.Process_runs of type int"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadAttributeSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadChargerSCfgError(t *testing.T) {
cfgJSONStr := `{
"chargers": {
"prefix_indexed_fields": "prefix",
},
}`
expected := "json: cannot unmarshal string into Go struct field ChargerSJsonCfg.Prefix_indexed_fields of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadChargerSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadResourceSCfgError(t *testing.T) {
cfgJSONStr := `{
"resources": {
"string_indexed_fields": "*req.index1",
},
}`
expected := "json: cannot unmarshal string into Go struct field ResourceSJsonCfg.String_indexed_fields of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadResourceSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadStatSCfgError(t *testing.T) {
cfgJSONStr := `{
"stats": {
"string_indexed_fields": "*req.string",
},
}`
expected := "json: cannot unmarshal string into Go struct field StatServJsonCfg.String_indexed_fields of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadStatSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadThresholdSCfgError(t *testing.T) {
cfgJSONStr := `{
"thresholds": {
"store_interval": 96,
},
}`
expected := "json: cannot unmarshal number into Go struct field ThresholdSJsonCfg.Store_interval of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadThresholdSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadLoaderSCfgError(t *testing.T) {
cfgJSONStr := `{
"loaders": [
{
"run_delay": "0",
},
],
}`
expected := "json: cannot unmarshal string into Go struct field LoaderJsonCfg.Run_delay of type int"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadLoaderSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadRouteSCfgError(t *testing.T) {
cfgJSONStr := `{
"routes": {
"string_indexed_fields": "*req.string",
},
}`
expected := "json: cannot unmarshal string into Go struct field RouteSJsonCfg.String_indexed_fields of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadRouteSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadMailerCfgError(t *testing.T) {
cfgJSONStr := `{
"mailer": {
"server": 1234,
},
}`
expected := "json: cannot unmarshal number into Go struct field MailerJsonCfg.Server of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadMailerCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadSureTaxCfgError(t *testing.T) {
cfgJSONStr := `{
"suretax": {
"sales_type_code": 123,
},
}`
expected := "json: cannot unmarshal number into Go struct field SureTaxJsonCfg.Sales_type_code of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadSureTaxCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadDispatcherSCfgError(t *testing.T) {
cfgJSONStr := `{
"dispatchers":{
"attributes_conns": "*internal",
},
}`
expected := "json: cannot unmarshal string into Go struct field DispatcherSJsonCfg.Attributes_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadDispatcherSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadDispatcherHCfgError(t *testing.T) {
cfgJSONStr := `{
"dispatcherh":{
"register_interval": 5,
},
}`
expected := "json: cannot unmarshal number into Go struct field DispatcherHJsonCfg.Register_interval of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadDispatcherHCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadLoaderCgrCfgError(t *testing.T) {
cfgJSONStr := `{
"loader": {
"caches_conns":"*localhost",
},
}`
expected := "json: cannot unmarshal string into Go struct field LoaderCfgJson.Caches_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadLoaderCgrCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadMigratorCgrCfgError(t *testing.T) {
cfgJSONStr := `{
"migrator": {
"users_filters": "users",
},
}`
expected := "json: cannot unmarshal string into Go struct field MigratorCfgJson.Users_filters of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadMigratorCgrCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadTlsCgrCfgError(t *testing.T) {
cfgJSONStr := ` {
"tls":{
"server_policy": "3",
},
}`
expected := "json: cannot unmarshal string into Go struct field TlsJsonCfg.Server_policy of type int"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadTlsCgrCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadAnalyzerCgrCfgError(t *testing.T) {
cfgJSONStr := `{
"analyzers":{
"enabled": 10,
},
}
}`
expected := "json: cannot unmarshal number into Go struct field AnalyzerSJsonCfg.Enabled of type bool"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadAnalyzerCgrCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadAPIBanCgrCfgError(t *testing.T) {
cfgJSONStr := `{
"apiban":{
"enabled": "no",
},
}`
expected := "json: cannot unmarshal string into Go struct field APIBanJsonCfg.Enabled of type bool"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadAPIBanCgrCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadApierCfgError(t *testing.T) {
myJSONStr := `{
"apiers": {
"scheduler_conns": "*internal",
},
}`
expected := "json: cannot unmarshal string into Go struct field ApierJsonCfg.Scheduler_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(myJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadApierCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadErsCfgError(t *testing.T) {
cfgJSONStr := `{
"ers": {
"sessions_conns": "*internal",
},
}`
expected := "json: cannot unmarshal string into Go struct field ERsJsonCfg.Sessions_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadErsCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadEesCfgError(t *testing.T) {
cfgJSONStr := `{
"ees": {
"attributes_conns": "*conn1",
}
}`
expected := "json: cannot unmarshal string into Go struct field EEsJsonCfg.Attributes_conns of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadEesCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadRateSCfgError(t *testing.T) {
cfgJSONStr := `{
"rates": {
"string_indexed_fields": "*req.index",
},
}`
expected := "json: cannot unmarshal string into Go struct field RateSJsonCfg.String_indexed_fields of type []string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadRateSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadSIPAgentCfgError(t *testing.T) {
cfgJSONStr := `{
"sip_agent": {
"request_processors": [
{
"id": 1234,
},
],
},
}`
expected := "json: cannot unmarshal number into Go struct field ReqProcessorJsnCfg.Request_processors.ID of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadSIPAgentCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadTemplateSCfgError(t *testing.T) {
cfgJSONStr := `{
"templates": {
"custom_template": [
{
"tag": 1234,
},
],
}
}`
expected := "json: cannot unmarshal number into Go struct field FcTemplateJsonCfg.Tag of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadTemplateSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
cfgJSONStr = `{
"templates": {
"custom_template": [
{
"value": "a{*",
},
],
}
}`
expected = "invalid converter terminator in rule: <a{*>"
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadTemplateSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestLoadConfigsCfgError(t *testing.T) {
cfgJSONStr := `{
"configs": {
"url": 123,
},
}`
expected := "json: cannot unmarshal number into Go struct field ConfigSCfgJson.Url of type string"
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil {
t.Error(err)
} else if err := cgrConfig.loadConfigSCfg(cgrCfgJson); err == nil || err.Error() != expected {
t.Errorf("Expected %+v, received %+v", expected, err)
}
}
func TestSuretaxConfig(t *testing.T) {
tLocal, err := time.LoadLocation("Local")
if err != nil {
t.Error(err)
}
expected := &SureTaxCfg{
Url: "",
ClientNumber: "",
ValidationKey: "",
BusinessUnit: "",
Timezone: tLocal,
IncludeLocalCost: false,
ReturnFileCode: "0",
ResponseGroup: "03",
ResponseType: "D4",
RegulatoryCode: "03",
ClientTracking: NewRSRParsersMustCompile("~*req.CGRID", utils.INFIELD_SEP),
CustomerNumber: NewRSRParsersMustCompile("~*req.Subject", utils.INFIELD_SEP),
OrigNumber: NewRSRParsersMustCompile("~*req.Subject", utils.INFIELD_SEP),
TermNumber: NewRSRParsersMustCompile("~*req.Destination", utils.INFIELD_SEP),
BillToNumber: NewRSRParsersMustCompile(utils.EmptyString, utils.INFIELD_SEP),
Zipcode: NewRSRParsersMustCompile(utils.EmptyString, utils.INFIELD_SEP),
Plus4: NewRSRParsersMustCompile(utils.EmptyString, utils.INFIELD_SEP),
P2PZipcode: NewRSRParsersMustCompile(utils.EmptyString, utils.INFIELD_SEP),
P2PPlus4: NewRSRParsersMustCompile(utils.EmptyString, utils.INFIELD_SEP),
Units: NewRSRParsersMustCompile("1", utils.INFIELD_SEP),
UnitType: NewRSRParsersMustCompile("00", utils.INFIELD_SEP),
TaxIncluded: NewRSRParsersMustCompile("0", utils.INFIELD_SEP),
TaxSitusRule: NewRSRParsersMustCompile("04", utils.INFIELD_SEP),
TransTypeCode: NewRSRParsersMustCompile("010101", utils.INFIELD_SEP),
SalesTypeCode: NewRSRParsersMustCompile("R", utils.INFIELD_SEP),
TaxExemptionCodeList: NewRSRParsersMustCompile(utils.EmptyString, utils.INFIELD_SEP),
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.SureTaxCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestDiameterAgentConfig(t *testing.T) {
expected := &DiameterAgentCfg{
Enabled: false,
ListenNet: "tcp",
Listen: "127.0.0.1:3868",
DictionariesPath: "/usr/share/cgrates/diameter/dict/",
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
OriginHost: "CGR-DA",
OriginRealm: "cgrates.org",
VendorId: 0,
ProductName: "CGRateS",
ConcurrentReqs: -1,
SyncedConnReqs: false,
ASRTemplate: "",
RARTemplate: "",
ForcedDisconnect: "*none",
RequestProcessors: nil,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.DiameterAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestRadiusAgentConfig(t *testing.T) {
expected := &RadiusAgentCfg{
Enabled: false,
ListenNet: "udp",
ListenAuth: "127.0.0.1:1812",
ListenAcct: "127.0.0.1:1813",
ClientSecrets: map[string]string{utils.MetaDefault: "CGRateS.org"},
ClientDictionaries: map[string]string{utils.MetaDefault: "/usr/share/cgrates/radius/dict/"},
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
RequestProcessors: nil,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.RadiusAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestDNSAgentConfig(t *testing.T) {
expected := &DNSAgentCfg{
Enabled: false,
Listen: "127.0.0.1:2053",
ListenNet: "udp",
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
Timezone: "",
RequestProcessors: nil,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.DNSAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestAttributeSConfig(t *testing.T) {
expected := &AttributeSCfg{
Enabled: false,
ApierSConns: []string{},
StatSConns: []string{},
ResourceSConns: []string{},
IndexedSelects: true,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
ProcessRuns: 1,
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.AttributeSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestChargersConfig(t *testing.T) {
expected := &ChargerSCfg{
Enabled: false,
IndexedSelects: true,
AttributeSConns: []string{},
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.ChargerSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestResourceSConfig(t *testing.T) {
expected := &ResourceSConfig{
Enabled: false,
IndexedSelects: true,
StoreInterval: 0,
ThresholdSConns: []string{},
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.ResourceSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestStatSConfig(t *testing.T) {
expected := &StatSCfg{
Enabled: false,
IndexedSelects: true,
StoreInterval: 0,
StoreUncompressedLimit: 0,
ThresholdSConns: []string{},
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.StatSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestThresholdSConfig(t *testing.T) {
expected := &ThresholdSCfg{
Enabled: false,
IndexedSelects: true,
StoreInterval: 0,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.ThresholdSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestRouteSConfig(t *testing.T) {
expected := &RouteSCfg{
Enabled: false,
IndexedSelects: true,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
AttributeSConns: []string{},
ResourceSConns: []string{},
StatSConns: []string{},
RALsConns: []string{},
DefaultRatio: 1,
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.RouteSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestSessionSConfig(t *testing.T) {
expected := &SessionSCfg{
Enabled: false,
ListenBijson: "127.0.0.1:2014",
ChargerSConns: []string{},
RALsConns: []string{},
ResSConns: []string{},
ThreshSConns: []string{},
StatSConns: []string{},
RouteSConns: []string{},
AttrSConns: []string{},
CDRsConns: []string{},
ReplicationConns: []string{},
DebitInterval: 0,
StoreSCosts: false,
SessionTTL: 0,
SessionIndexes: utils.StringMap{},
ClientProtocol: 1.0,
ChannelSyncInterval: 0,
TerminateAttempts: 5,
AlterableFields: utils.StringSet{},
SchedulerConns: []string{},
STIRCfg: &STIRcfg{
AllowedAttest: utils.StringSet{utils.META_ANY: {}},
PayloadMaxduration: -1,
DefaultAttest: "A",
PrivateKeyPath: "",
PublicKeyPath: "",
},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.SessionSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestFsAgentConfig(t *testing.T) {
expected := &FsAgentCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
SubscribePark: true,
CreateCdr: false,
LowBalanceAnnFile: "",
EmptyBalanceAnnFile: "",
EmptyBalanceContext: "",
MaxWaitConnection: 2000000000,
ExtraFields: RSRParsers{},
EventSocketConns: []*FsConnCfg{
{
Address: "127.0.0.1:8021",
Password: "ClueCon",
Reconnects: 5,
Alias: "127.0.0.1:8021",
},
},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.FsAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestKamAgentConfig(t *testing.T) {
expected := &KamAgentCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
CreateCdr: false,
EvapiConns: []*KamConnCfg{{Address: "127.0.0.1:8448", Reconnects: 5, Alias: ""}},
Timezone: "",
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.KamAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestAsteriskAgentConfig(t *testing.T) {
expected := &AsteriskAgentCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
CreateCDR: false,
AsteriskConns: []*AsteriskConnCfg{{
Alias: "",
Address: "127.0.0.1:8088",
User: "cgrates",
Password: "CGRateS.org",
ConnectAttempts: 3,
Reconnects: 5,
}},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.AsteriskAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestFilterSConfig(t *testing.T) {
expected := &FilterSCfg{
StatSConns: []string{},
ResourceSConns: []string{},
ApierSConns: []string{},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.FilterSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestLoaderConfig(t *testing.T) {
ten, err := NewRSRParsers("", utils.INFIELD_SEP)
if err != nil {
t.Error(err)
}
expected := LoaderSCfgs{
{
Enabled: false,
Id: utils.MetaDefault,
Tenant: ten,
LockFileName: ".cgr.lck",
CacheSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)},
FieldSeparator: ",",
TpInDir: "/var/spool/cgrates/loader/in",
TpOutDir: "/var/spool/cgrates/loader/out",
Data: nil,
},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.LoaderCfg()
newConfig[0].Data = nil
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestDispatcherSConfig(t *testing.T) {
expected := &DispatcherSCfg{
Enabled: false,
IndexedSelects: true,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
AttributeSConns: []string{},
NestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.DispatcherSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestDispatcherHConfig(t *testing.T) {
expected := &DispatcherHCfg{
Enabled: false,
DispatchersConns: []string{},
Hosts: map[string][]*DispatcherHRegistarCfg{},
RegisterInterval: 300000000000,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.DispatcherHCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestSchedulerConfig(t *testing.T) {
expected := &SchedulerCfg{
Enabled: false,
CDRsConns: []string{},
Filters: []string{},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.SchedulerCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestAnalyzerConfig(t *testing.T) {
expected := &AnalyzerSCfg{
Enabled: false,
CleanupInterval: time.Hour,
DBPath: "/var/spool/cgrates/analyzers",
IndexType: utils.MetaScorch,
TTL: 24 * time.Hour,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.AnalyzerSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestApierConfig(t *testing.T) {
expected := &ApierCfg{
Enabled: false,
CachesConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)},
SchedulerConns: []string{},
AttributeSConns: []string{},
EEsConns: []string{},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.ApierCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestERSConfig(t *testing.T) {
expected := &ERsCfg{
Enabled: false,
SessionSConns: []string{"*internal:*sessions"},
Readers: []*EventReaderCfg{
{
ID: utils.MetaDefault,
Type: utils.META_NONE,
RowLength: 0,
FieldSep: ",",
HeaderDefineChar: ":",
RunDelay: 0,
ConcurrentReqs: 1024,
SourcePath: "/var/spool/cgrates/ers/in",
ProcessedPath: "/var/spool/cgrates/ers/out",
XmlRootPath: utils.HierarchyPath{utils.EmptyString},
Tenant: nil,
Timezone: utils.EmptyString,
Filters: []string{},
Flags: utils.FlagsWithParams{},
Fields: nil,
CacheDumpFields: make([]*FCTemplate, 0),
Opts: make(map[string]interface{}),
},
},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.ERsCfg()
newConfig.Readers[0].Fields = nil
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestEEsNoLksConfig(t *testing.T) {
expected := &EEsCfg{
Enabled: false,
AttributeSConns: []string{},
Cache: map[string]*CacheParamCfg{
utils.MetaFileCSV: {
Limit: -1,
TTL: 5 * time.Second,
StaticTTL: false,
},
},
Exporters: []*EventExporterCfg{
{
ID: utils.MetaDefault,
Type: utils.META_NONE,
FieldSep: ",",
Tenant: nil,
ExportPath: "/var/spool/cgrates/ees",
Attempts: 1,
Timezone: utils.EmptyString,
Filters: []string{},
AttributeSIDs: []string{},
Flags: utils.FlagsWithParams{},
contentFields: []*FCTemplate{},
Fields: []*FCTemplate{},
headerFields: []*FCTemplate{},
trailerFields: []*FCTemplate{},
Opts: make(map[string]interface{}),
},
},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.EEsNoLksCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestRateSConfig(t *testing.T) {
expected := &RateSCfg{
Enabled: false,
IndexedSelects: true,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
RateIndexedSelects: true,
RatePrefixIndexedFields: &[]string{},
RateSuffixIndexedFields: &[]string{},
RateNestedFields: false,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.RateSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestSIPAgentConfig(t *testing.T) {
expected := &SIPAgentCfg{
Enabled: false,
Listen: "127.0.0.1:5060",
ListenNet: "udp",
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
Timezone: "",
RetransmissionTimer: 1000000000,
RequestProcessors: nil,
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.SIPAgentCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestRPCConnsConfig(t *testing.T) {
expected := RpcConns{
utils.MetaInternal: {
Strategy: utils.MetaFirst,
PoolSize: 0,
Conns: []*RemoteHost{
{
Address: utils.MetaInternal,
Transport: utils.EmptyString,
Synchronous: false,
TLS: false,
},
},
},
utils.MetaLocalHost: {
Strategy: utils.MetaFirst,
PoolSize: 0,
Conns: []*RemoteHost{
{
Address: "127.0.0.1:2012",
Transport: "*json",
Synchronous: false,
TLS: false,
},
},
},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.RPCConns()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestTemplatesConfig(t *testing.T) {
expected := FcTemplates{
"*err": {
{
Tag: "SessionId",
Type: "*variable",
Path: "*rep.Session-Id",
Layout: "2006-01-02T15:04:05Z07:00",
Value: NewRSRParsersMustCompile("~*req.Session-Id", utils.INFIELD_SEP),
Mandatory: true,
},
{
Tag: "OriginHost",
Type: "*variable",
Path: "*rep.Origin-Host",
Layout: "2006-01-02T15:04:05Z07:00",
Value: NewRSRParsersMustCompile("~*vars.OriginHost", utils.INFIELD_SEP),
Mandatory: true,
},
{
Tag: "OriginRealm",
Type: "*variable",
Path: "*rep.Origin-Realm",
Layout: "2006-01-02T15:04:05Z07:00",
Value: NewRSRParsersMustCompile("~*vars.OriginRealm", utils.INFIELD_SEP),
Mandatory: true,
},
},
"*errSip": {
{
Tag: "Request",
Type: "*constant",
Path: "*rep.Request",
Layout: "2006-01-02T15:04:05Z07:00",
Value: NewRSRParsersMustCompile("SIP/2.0 500 Internal Server Error", utils.INFIELD_SEP),
Mandatory: true,
},
},
"*cca": nil,
"*asr": nil,
"*rar": nil,
}
for _, value := range expected {
for _, elem := range value {
elem.ComputePath()
}
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.TemplatesCfg()
newConfig["*cca"] = nil
newConfig["*asr"] = nil
newConfig["*rar"] = nil
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestConfigsConfig(t *testing.T) {
expected := &ConfigSCfg{
Enabled: false,
Url: "/configs/",
RootDir: "/var/spool/cgrates/configs",
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.ConfigSCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestAPIBanConfig(t *testing.T) {
expected := &APIBanCfg{
Enabled: false,
Keys: []string{},
}
cgrConfig, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
newConfig := cgrConfig.APIBanCfg()
if !reflect.DeepEqual(expected, newConfig) {
t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(newConfig))
}
}
func TestRLockSections(t *testing.T) {
cgrCfg, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
cgrCfg.rLockSections()
cgrCfg.rUnlockSections()
}
func TestLockSections(t *testing.T) {
cgrCfg, err := NewDefaultCGRConfig()
if err != nil {
t.Error(err)
}
cgrCfg.lockSections()
cgrCfg.unlockSections()
}
func TestCgrLoaderCfgITDefaults(t *testing.T) {
eCfg := LoaderSCfgs{
{
Id: utils.MetaDefault,
Enabled: false,
DryRun: false,
RunDelay: 0,
LockFileName: ".cgr.lck",
CacheSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)},
FieldSeparator: ",",
TpInDir: "/var/spool/cgrates/loader/in",
TpOutDir: "/var/spool/cgrates/loader/out",
Data: []*LoaderDataType{
{
Type: utils.MetaAttributes,
Filename: utils.AttributesCsv,
Fields: []*FCTemplate{
{Tag: "TenantID",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339,
},
{
Tag: "ProfileID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339,
},
{
Tag: "Contexts",
Path: "Contexts",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{
Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{
Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{
Tag: "AttributeFilterIDs",
Path: "AttributeFilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
{
Tag: "Path",
Path: "Path",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Type",
Path: "Type",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Value",
Path: "Value",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Blocker",
Path: "Blocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
},
},
{
Type: utils.MetaFilters,
Filename: utils.FiltersCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "Type",
Path: "Type",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Element",
Path: "Element",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Values",
Path: "Values",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
},
},
{
Type: utils.MetaResources,
Filename: utils.ResourcesCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "TTL",
Path: "UsageTTL",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Limit",
Path: "Limit",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "AllocationMessage",
Path: "AllocationMessage",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Blocker",
Path: "Blocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Stored",
Path: "Stored",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ThresholdIDs",
Path: "ThresholdIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339},
},
},
{
Type: utils.MetaStats,
Filename: utils.StatsCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "QueueLength",
Path: "QueueLength",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "TTL",
Path: "TTL",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "MinItems",
Path: "MinItems",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "MetricIDs",
Path: "MetricIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "MetricFilterIDs",
Path: "MetricFilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Blocker",
Path: "Blocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Stored",
Path: "Stored",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ThresholdIDs",
Path: "ThresholdIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.INFIELD_SEP),
Layout: time.RFC3339},
},
},
{
Type: utils.MetaThresholds,
Filename: utils.ThresholdsCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "MaxHits",
Path: "MaxHits",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "MinHits",
Path: "MinHits",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "MinSleep",
Path: "MinSleep",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Blocker",
Path: "Blocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActionIDs",
Path: "ActionIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Async",
Path: "Async",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339},
},
},
{
Type: utils.MetaRoutes,
Filename: utils.RoutesCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Sorting",
Path: "Sorting",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "SortingParameters",
Path: "SortingParameters",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteID",
Path: "RouteID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteFilterIDs",
Path: "RouteFilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteAccountIDs",
Path: "RouteAccountIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteRatingPlanIDs",
Path: "RouteRatingPlanIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteResourceIDs",
Path: "RouteResourceIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteStatIDs",
Path: "RouteStatIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteWeight",
Path: "RouteWeight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteBlocker",
Path: "RouteBlocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.13", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RouteParameters",
Path: "RouteParameters",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.14", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.15", utils.INFIELD_SEP),
Layout: time.RFC3339},
},
},
{
Type: utils.MetaChargers,
Filename: utils.ChargersCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "RunID",
Path: "RunID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "AttributeIDs",
Path: "AttributeIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339},
},
},
{
Type: utils.MetaDispatchers,
Filename: utils.DispatcherProfilesCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "Contexts",
Path: "Contexts",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Strategy",
Path: "Strategy",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "StrategyParameters",
Path: "StrategyParameters",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ConnID",
Path: "ConnID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ConnFilterIDs",
Path: "ConnFilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ConnWeight",
Path: "ConnWeight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ConnBlocker",
Path: "ConnBlocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ConnParameters",
Path: "ConnParameters",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
},
},
{
Type: utils.MetaDispatcherHosts,
Filename: utils.DispatcherHostsCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "Address",
Path: "Address",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Transport",
Path: "Transport",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "TLS",
Path: "TLS",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
},
},
{
Type: utils.MetaRateProfiles,
Filename: utils.RateProfilesCsv,
Fields: []*FCTemplate{
{Tag: "Tenant",
Path: "Tenant",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.0", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "ID",
Path: "ID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.1", utils.INFIELD_SEP),
Mandatory: true,
Layout: time.RFC3339},
{Tag: "FilterIDs",
Path: "FilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ActivationInterval",
Path: "ActivationInterval",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "Weight",
Path: "Weight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "ConnectFee",
Path: "ConnectFee",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.5", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RoundingMethod",
Path: "RoundingMethod",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RoundingDecimals",
Path: "RoundingDecimals",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "MinCost",
Path: "MinCost",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "MaxCost",
Path: "MaxCost",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "MaxCostStrategy",
Path: "MaxCostStrategy",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateID",
Path: "RateID",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateFilterIDs",
Path: "RateFilterIDs",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateActivationStart",
Path: "RateActivationStart",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.13", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateWeight",
Path: "RateWeight",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.14", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateBlocker",
Path: "RateBlocker",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.15", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateIntervalStart",
Path: "RateIntervalStart",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.16", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateValue",
Path: "RateValue",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.17", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateUnit",
Path: "RateUnit",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.18", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
{Tag: "RateIncrement",
Path: "RateIncrement",
Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.19", utils.INFIELD_SEP),
Layout: time.RFC3339,
},
},
},
},
},
}
for _, profile := range eCfg {
for _, fields := range profile.Data {
for _, v := range fields.Fields {
v.ComputePath()
}
}
}
if !reflect.DeepEqual(eCfg, cgrCfg.loaderCfg) {
t.Errorf("received: %+v, \n expecting: %+v",
utils.ToJSON(eCfg), utils.ToJSON(cgrCfg.loaderCfg))
}
}
func TestCgrCfgJSONDefaultDispatcherSCfg(t *testing.T) {
eDspSCfg := &DispatcherSCfg{
Enabled: false,
IndexedSelects: true,
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
AttributeSConns: []string{},
}
if !reflect.DeepEqual(cgrCfg.dispatcherSCfg, eDspSCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.dispatcherSCfg, eDspSCfg)
}
}
func TestCgrLoaderCfgDefault(t *testing.T) {
eLdrCfg := &LoaderCgrCfg{
TpID: "",
DataPath: "./",
DisableReverse: false,
FieldSeparator: rune(utils.CSV_SEP),
CachesConns: []string{utils.MetaLocalHost},
SchedulerConns: []string{utils.MetaLocalHost},
GapiCredentials: json.RawMessage(`".gapi/credentials.json"`),
GapiToken: json.RawMessage(`".gapi/token.json"`),
}
if !reflect.DeepEqual(cgrCfg.LoaderCgrCfg(), eLdrCfg) {
t.Errorf("received: %+v, expecting: %+v", utils.ToJSON(cgrCfg.LoaderCgrCfg()), utils.ToJSON(eLdrCfg))
}
}
func TestCgrMigratorCfgDefault(t *testing.T) {
eMgrCfg := &MigratorCgrCfg{
OutDataDBType: "redis",
OutDataDBHost: "127.0.0.1",
OutDataDBPort: "6379",
OutDataDBName: "10",
OutDataDBUser: "cgrates",
OutDataDBPassword: "",
OutDataDBEncoding: "msgpack",
OutStorDBType: "mysql",
OutStorDBHost: "127.0.0.1",
OutStorDBPort: "3306",
OutStorDBName: "cgrates",
OutStorDBUser: "cgrates",
OutStorDBPassword: "",
OutDataDBOpts: map[string]interface{}{
utils.RedisClusterOnDownDelayCfg: "0",
utils.RedisClusterSyncCfg: "5s",
utils.RedisClusterCfg: false,
utils.RedisSentinelNameCfg: "",
utils.RedisTLS: false,
utils.RedisClientCertificate: "",
utils.RedisClientKey: "",
utils.RedisCACertificate: "",
},
OutStorDBOpts: make(map[string]interface{}),
}
if !reflect.DeepEqual(cgrCfg.MigratorCgrCfg(), eMgrCfg) {
t.Errorf("expected: %+v, received: %+v", utils.ToJSON(eMgrCfg), utils.ToJSON(cgrCfg.MigratorCgrCfg()))
}
}
func TestCgrMigratorCfg2(t *testing.T) {
jsnCfg := `
{
"migrator": {
"out_datadb_type": "redis",
"out_datadb_host": "0.0.0.0",
"out_datadb_port": "9999",
"out_datadb_name": "9999",
"out_datadb_user": "cgrates",
"out_datadb_password": "",
"out_datadb_encoding" : "msgpack",
"out_stordb_type": "mysql",
"out_stordb_host": "0.0.0.0",
"out_stordb_port": "9999",
"out_stordb_name": "cgrates",
"out_stordb_user": "cgrates",
"out_stordb_password": "",
},
}`
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if cgrCfg.MigratorCgrCfg().OutDataDBHost != "0.0.0.0" {
t.Errorf("Expected: 0.0.0.0 , received: %+v", cgrCfg.MigratorCgrCfg().OutDataDBHost)
} else if cgrCfg.MigratorCgrCfg().OutDataDBPort != "9999" {
t.Errorf("Expected: 9999, received: %+v", cgrCfg.MigratorCgrCfg().OutDataDBPassword)
}
}
func TestCfgTlsCfg(t *testing.T) {
jsnCfg := `
{
"tls":{
"server_certificate" : "path/To/Server/Cert",
"server_key":"path/To/Server/Key",
"client_certificate" : "path/To/Client/Cert",
"client_key":"path/To/Client/Key",
"ca_certificate":"path/To/CA/Cert",
"server_name":"TestServerName",
"server_policy":3,
},
}`
eCgrCfg, _ := NewDefaultCGRConfig()
eCgrCfg.tlsCfg = &TlsCfg{
ServerCerificate: "path/To/Server/Cert",
ServerKey: "path/To/Server/Key",
CaCertificate: "path/To/CA/Cert",
ClientCerificate: "path/To/Client/Cert",
ClientKey: "path/To/Client/Key",
ServerName: "TestServerName",
ServerPolicy: 3,
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(eCgrCfg.TlsCfg(), cgrCfg.TlsCfg()) {
t.Errorf("Expected: %s, received: %s",
utils.ToJSON(eCgrCfg.tlsCfg), utils.ToJSON(cgrCfg.tlsCfg))
}
}
func TestCgrCfgJSONDefaultAnalyzerSCfg(t *testing.T) {
aSCfg := &AnalyzerSCfg{
Enabled: false,
CleanupInterval: time.Hour,
DBPath: "/var/spool/cgrates/analyzers",
IndexType: utils.MetaScorch,
TTL: 24 * time.Hour,
}
if !reflect.DeepEqual(cgrCfg.analyzerSCfg, aSCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.analyzerSCfg, aSCfg)
}
}
func TestNewCGRConfigFromPathNotFound(t *testing.T) {
fpath := path.Join("/usr", "share", "cgrates", "conf", "samples", "notValid")
_, err := NewCGRConfigFromPath(fpath)
if err == nil || err.Error() != utils.ErrPathNotReachable(fpath).Error() {
t.Fatalf("Expected %s ,received %s", utils.ErrPathNotReachable(fpath), err)
}
fpath = path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo", "cgrates.json")
cfg, err := NewCGRConfigFromPath(fpath)
if err == nil {
t.Fatalf("Expected error,received %v", cfg)
}
fpath = "https://not_a_reacheble_website"
_, err = NewCGRConfigFromPath(fpath)
if err == nil || err.Error() != utils.ErrPathNotReachable(fpath).Error() {
t.Fatalf("Expected %s ,received %s", utils.ErrPathNotReachable(fpath), err)
}
cfg, err = NewCGRConfigFromPath("https://github.com/")
if err == nil {
t.Fatalf("Expected error,received %v", cfg)
}
}
func TestCgrCfgJSONDefaultApierCfg(t *testing.T) {
aCfg := &ApierCfg{
Enabled: false,
CachesConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)},
SchedulerConns: []string{},
AttributeSConns: []string{},
EEsConns: []string{},
}
if !reflect.DeepEqual(cgrCfg.apier, aCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.apier, aCfg)
}
}
func TestCgrCfgJSONDefaultRateCfg(t *testing.T) {
eCfg := &RateSCfg{
Enabled: false,
IndexedSelects: true,
StringIndexedFields: nil,
PrefixIndexedFields: &[]string{},
SuffixIndexedFields: &[]string{},
NestedFields: false,
RateIndexedSelects: true,
RateStringIndexedFields: nil,
RatePrefixIndexedFields: &[]string{},
RateSuffixIndexedFields: &[]string{},
RateNestedFields: false,
}
if !reflect.DeepEqual(cgrCfg.rateSCfg, eCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.rateSCfg, eCfg)
}
}
func TestCgrCfgV1GetConfigSection(t *testing.T) {
jsnCfg := `
{
"listen": {
"rpc_json": ":2012",
"rpc_gob": ":2013",
"http": ":2080",
}
}`
expected := map[string]interface{}{
"http": ":2080",
"http_tls": "127.0.0.1:2280",
"rpc_gob": ":2013",
"rpc_gob_tls": "127.0.0.1:2023",
"rpc_json": ":2012",
"rpc_json_tls": "127.0.0.1:2022",
}
var rcv map[string]interface{}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil {
t.Error(err)
} else if err := cgrCfg.V1GetConfigSection(&SectionWithOpts{Section: LISTEN_JSN}, &rcv); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(expected, rcv) {
t.Errorf("Expected: %+v, received: %+v", utils.ToJSON(expected), utils.ToJSON(rcv))
}
}
func TestCgrCdfEventReader(t *testing.T) {
eCfg := &ERsCfg{
Enabled: false,
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)},
Readers: []*EventReaderCfg{
{
ID: utils.MetaDefault,
Type: utils.META_NONE,
FieldSep: ",",
HeaderDefineChar: ":",
RunDelay: 0,
ConcurrentReqs: 1024,
SourcePath: "/var/spool/cgrates/ers/in",
ProcessedPath: "/var/spool/cgrates/ers/out",
XmlRootPath: utils.HierarchyPath{utils.EmptyString},
Tenant: nil,
Timezone: utils.EmptyString,
Filters: []string{},
Flags: utils.FlagsWithParams{},
Fields: []*FCTemplate{
{Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.13", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
},
CacheDumpFields: []*FCTemplate{},
Opts: make(map[string]interface{}),
},
},
}
for _, profile := range eCfg.Readers {
for _, v := range profile.Fields {
v.ComputePath()
}
}
if !reflect.DeepEqual(cgrCfg.ersCfg, eCfg) {
t.Errorf("received: %+v,\n expecting: %+v", utils.ToJSON(cgrCfg.ersCfg), utils.ToJSON(eCfg))
}
}
func TestCgrCdfEventExporter(t *testing.T) {
eCfg := &EEsCfg{
Enabled: false,
AttributeSConns: []string{},
Cache: map[string]*CacheParamCfg{
utils.MetaFileCSV: {
Limit: -1,
TTL: 5 * time.Second,
StaticTTL: false,
},
},
Exporters: []*EventExporterCfg{
{
ID: utils.MetaDefault,
Type: utils.META_NONE,
FieldSep: ",",
Tenant: nil,
ExportPath: "/var/spool/cgrates/ees",
Attempts: 1,
Timezone: utils.EmptyString,
Filters: []string{},
AttributeSIDs: []string{},
Flags: utils.FlagsWithParams{},
Fields: []*FCTemplate{},
contentFields: []*FCTemplate{},
headerFields: []*FCTemplate{},
trailerFields: []*FCTemplate{},
Opts: make(map[string]interface{}),
},
},
}
if !reflect.DeepEqual(cgrCfg.eesCfg, eCfg) {
t.Errorf("received: %+v,\n expecting: %+v", utils.ToJSON(cgrCfg.eesCfg), utils.ToJSON(eCfg))
}
}
func TestCgrCfgEventReaderDefault(t *testing.T) {
eCfg := &EventReaderCfg{
ID: utils.MetaDefault,
Type: utils.META_NONE,
FieldSep: ",",
HeaderDefineChar: ":",
RunDelay: 0,
ConcurrentReqs: 1024,
SourcePath: "/var/spool/cgrates/ers/in",
ProcessedPath: "/var/spool/cgrates/ers/out",
XmlRootPath: utils.HierarchyPath{utils.EmptyString},
Tenant: nil,
Timezone: utils.EmptyString,
Filters: nil,
Flags: utils.FlagsWithParams{},
Fields: []*FCTemplate{
{Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.2", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.3", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.4", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.6", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.7", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.8", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.9", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.10", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.11", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.12", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
{Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable,
Value: NewRSRParsersMustCompile("~*req.13", utils.INFIELD_SEP), Mandatory: true, Layout: time.RFC3339},
},
CacheDumpFields: make([]*FCTemplate, 0),
Opts: make(map[string]interface{}),
}
for _, v := range eCfg.Fields {
v.ComputePath()
}
if !reflect.DeepEqual(cgrCfg.dfltEvRdr, eCfg) {
t.Errorf("received: %+v,\n expecting: %+v", utils.ToJSON(cgrCfg.dfltEvRdr), utils.ToJSON(eCfg))
}
}
func TestCgrCfgEventExporterDefault(t *testing.T) {
eCfg := &EventExporterCfg{
ID: utils.MetaDefault,
Type: utils.META_NONE,
FieldSep: ",",
Tenant: nil,
ExportPath: "/var/spool/cgrates/ees",
Attempts: 1,
Timezone: utils.EmptyString,
Filters: nil,
Flags: utils.FlagsWithParams{},
contentFields: []*FCTemplate{},
Fields: []*FCTemplate{},
headerFields: []*FCTemplate{},
trailerFields: []*FCTemplate{},
Opts: make(map[string]interface{}),
}
if !reflect.DeepEqual(cgrCfg.dfltEvExp, eCfg) {
t.Errorf("received: %+v,\n expecting: %+v", utils.ToJSON(cgrCfg.dfltEvExp), utils.ToJSON(eCfg))
}
}
func TestRpcConnsDefaults(t *testing.T) {
eCfg := make(RpcConns)
// hardoded the *internal and *localhost connections
eCfg[utils.MetaInternal] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{
{
Address: utils.MetaInternal,
},
},
}
eCfg[utils.MetaLocalHost] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{
{
Address: "127.0.0.1:2012",
Transport: utils.MetaJSON,
},
},
}
if !reflect.DeepEqual(cgrCfg.rpcConns, eCfg) {
t.Errorf("received: %+v,\n expecting: %+v", utils.ToJSON(cgrCfg.rpcConns), utils.ToJSON(eCfg))
}
}
func TestCgrCfgJSONDefaultsConfigS(t *testing.T) {
eCfg := &ConfigSCfg{
Enabled: false,
Url: "/configs/",
RootDir: "/var/spool/cgrates/configs",
}
if !reflect.DeepEqual(cgrCfg.configSCfg, eCfg) {
t.Errorf("received: %+v, expecting: %+v", utils.ToJSON(cgrCfg.configSCfg), utils.ToJSON(eCfg))
}
}