diff --git a/agents/dnsagent.go b/agents/dnsagent.go index 497a898e5..8d44f8b37 100644 --- a/agents/dnsagent.go +++ b/agents/dnsagent.go @@ -53,7 +53,7 @@ func (da *DNSAgent) initDNSServer() (err error) { }) if strings.HasSuffix(da.cgrCfg.DNSAgentCfg().ListenNet, utils.TLSNoCaps) { - cert, err := tls.LoadX509KeyPair(da.cgrCfg.TlsCfg().ServerCerificate, da.cgrCfg.TlsCfg().ServerKey) + cert, err := tls.LoadX509KeyPair(da.cgrCfg.TLSCfg().ServerCerificate, da.cgrCfg.TLSCfg().ServerKey) if err != nil { return err } diff --git a/agents/httpagent_it_test.go b/agents/httpagent_it_test.go index 86cd5b1df..ec75184b9 100644 --- a/agents/httpagent_it_test.go +++ b/agents/httpagent_it_test.go @@ -124,12 +124,12 @@ func testHAitHttp(t *testing.T) { if isTls { // With Tls //make http client with tls - cert, err := tls.LoadX509KeyPair(haCfg.TlsCfg().ClientCerificate, haCfg.TlsCfg().ClientKey) + cert, err := tls.LoadX509KeyPair(haCfg.TLSCfg().ClientCerificate, haCfg.TLSCfg().ClientKey) if err != nil { t.Error(err) } // Load CA cert - caCert, err := ioutil.ReadFile(haCfg.TlsCfg().CaCertificate) + caCert, err := ioutil.ReadFile(haCfg.TLSCfg().CaCertificate) if err != nil { t.Error(err) } @@ -195,7 +195,7 @@ func testHAitAuthDryRun(t *testing.T) { httpConst = "https" } reqUrl := fmt.Sprintf("%s://%s%s?request_type=OutboundAUTH&CallID=123456&Msisdn=497700056231&Imsi=2343000000000123&Destination=491239440004&MSRN=0102220233444488999&ProfileID=1&AgentID=176&GlobalMSISDN=497700056129&GlobalIMSI=214180000175129&ICCID=8923418450000089629&MCC=234&MNC=10&calltype=callback", - httpConst, addr, haCfg.HttpAgentCfg()[0].Url) + httpConst, addr, haCfg.HTTPAgentCfg()[0].Url) rply, err := httpC.Get(reqUrl) if err != nil { t.Fatal(err) @@ -245,7 +245,7 @@ func testHAitAuth1001(t *testing.T) { } reqUrl := fmt.Sprintf("%s://%s%s?request_type=OutboundAUTH&CallID=123456&Msisdn=%s&Imsi=2343000000000123&Destination=1002&MSRN=0102220233444488999&ProfileID=1&AgentID=176&GlobalMSISDN=497700056129&GlobalIMSI=214180000175129&ICCID=8923418450000089629&MCC=234&MNC=10&calltype=callback", - httpConst, addr, haCfg.HttpAgentCfg()[0].Url, acnt) + httpConst, addr, haCfg.HTTPAgentCfg()[0].Url, acnt) rply, err := httpC.Get(reqUrl) if err != nil { t.Fatal(err) @@ -272,7 +272,7 @@ func testHAitCDRmtcall(t *testing.T) { httpConst = "https" } reqUrl := fmt.Sprintf("%s://%s%s?request_type=MTCALL_CDR×tamp=2018-08-14%%2012:03:22&call_date=2018-0814%%2012:00:49&transactionid=10000&CDR_ID=123456&carrierid=1&mcc=0&mnc=0&imsi=434180000000000&msisdn=1001&destination=1002&leg=C&leg_duration=185&reseller_charge=11.1605&client_charge=0.0000&user_charge=22.0000&IOT=0&user_balance=10.00&cli=%%2B498702190000&polo=0.0100&ddi_map=N", - httpConst, addr, haCfg.HttpAgentCfg()[0].Url) + httpConst, addr, haCfg.HTTPAgentCfg()[0].Url) rply, err := httpC.Get(reqUrl) if err != nil { t.Fatal(err) @@ -316,7 +316,7 @@ func testHAitCDRmtcall2(t *testing.T) { addr = haCfg.ListenCfg().HTTPTLSListen httpConst = "https" } - url := fmt.Sprintf("%s://%s%s", httpConst, addr, haCfg.HttpAgentCfg()[1].Url) + url := fmt.Sprintf("%s://%s%s", httpConst, addr, haCfg.HTTPAgentCfg()[1].Url) req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(xmlBody))) if err != nil { @@ -351,7 +351,7 @@ func testHAitTextPlain(t *testing.T) { httpConst = "https" } reqUrl := fmt.Sprintf("%s://%s%s?request_type=TextPlainDryRun&CallID=123456&Msisdn=497700056231&Imsi=2343000000000123&Destination=491239440004", - httpConst, addr, haCfg.HttpAgentCfg()[2].Url) + httpConst, addr, haCfg.HTTPAgentCfg()[2].Url) rply, err := httpC.Get(reqUrl) if err != nil { t.Fatal(err) diff --git a/apier/v1/accounts_it_test.go b/apier/v1/accounts_it_test.go index d41cc1f55..065531baf 100644 --- a/apier/v1/accounts_it_test.go +++ b/apier/v1/accounts_it_test.go @@ -271,7 +271,7 @@ func testAccITSetBalanceTimingIds(t *testing.T) { // check only where balance ID is testBalanceID (SetBalance function call was made with this Balance ID) if value.ID == "testBalanceID" { if !reflect.DeepEqual(eOut, value.Timings) { - t.Errorf("\nExpecting %+v, \nreceived: %+v", utils.ToJSON(eOut), utils.ToJSON(value.Timings)) + t.Errorf("Expecting %+v, \nreceived: %+v", utils.ToJSON(eOut), utils.ToJSON(value.Timings)) } break } diff --git a/apier/v1/api_interfaces.go b/apier/v1/api_interfaces.go index 3ba023f9b..84c1a4e54 100644 --- a/apier/v1/api_interfaces.go +++ b/apier/v1/api_interfaces.go @@ -168,7 +168,7 @@ type RALsV1Interface interface { type ConfigSv1Interface interface { GetConfig(section *config.SectionWithOpts, reply *map[string]interface{}) (err error) - ReloadConfig(section *config.ConfigReloadArgs, reply *string) (err error) + ReloadConfig(section *config.ReloadArgs, reply *string) (err error) SetConfig(args *config.SetConfigArgs, reply *string) (err error) SetConfigFromJSON(args *config.SetConfigFromJSONArgs, reply *string) (err error) GetConfigAsJSON(args *config.SectionWithOpts, reply *string) (err error) diff --git a/apier/v1/config.go b/apier/v1/config.go index 40ed4826e..3c33b71f6 100644 --- a/apier/v1/config.go +++ b/apier/v1/config.go @@ -39,7 +39,7 @@ func (cSv1 *ConfigSv1) GetConfig(section *config.SectionWithOpts, reply *map[str } // ReloadConfig reloads the configuration -func (cSv1 *ConfigSv1) ReloadConfig(args *config.ConfigReloadArgs, reply *string) (err error) { +func (cSv1 *ConfigSv1) ReloadConfig(args *config.ReloadArgs, reply *string) (err error) { return cSv1.cfg.V1ReloadConfig(args, reply) } diff --git a/apier/v1/config_it_test.go b/apier/v1/config_it_test.go index aab09feed..af3fc375c 100644 --- a/apier/v1/config_it_test.go +++ b/apier/v1/config_it_test.go @@ -374,7 +374,7 @@ func testConfigSSetConfigFromJSONCoreS(t *testing.T) { func testConfigSReloadConfigCoreS(t *testing.T) { cfgStr := `{"cores":{"caps":2,"caps_stats_interval":"0","caps_strategy":"*busy","shutdown_timeout":"1s"}}` var reply string - if err := configRPC.Call(utils.ConfigSv1ReloadConfig, &config.ConfigReloadArgs{ + if err := configRPC.Call(utils.ConfigSv1ReloadConfig, &config.ReloadArgs{ Tenant: "cgrates.org", Path: path.Join(*dataDir, "conf", "samples", "caps_busy"), Section: config.CoreSCfgJson, diff --git a/apier/v1/dispatcher.go b/apier/v1/dispatcher.go index 19b0e2d26..ee4e902ae 100755 --- a/apier/v1/dispatcher.go +++ b/apier/v1/dispatcher.go @@ -831,7 +831,7 @@ func (dS *DispatcherConfigSv1) GetConfig(args *config.SectionWithOpts, reply *ma return dS.dS.ConfigSv1GetConfig(args, reply) } -func (dS *DispatcherConfigSv1) ReloadConfig(args *config.ConfigReloadArgs, reply *string) (err error) { +func (dS *DispatcherConfigSv1) ReloadConfig(args *config.ReloadArgs, reply *string) (err error) { return dS.dS.ConfigSv1ReloadConfig(args, reply) } diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index c26c3294a..faab8742e 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -200,41 +200,41 @@ func startRPC(server *cores.Server, internalRaterChan, if (len(cfg.ListenCfg().RPCGOBTLSListen) != 0 || len(cfg.ListenCfg().RPCJSONTLSListen) != 0 || len(cfg.ListenCfg().HTTPTLSListen) != 0) && - (len(cfg.TlsCfg().ServerCerificate) == 0 || - len(cfg.TlsCfg().ServerKey) == 0) { + (len(cfg.TLSCfg().ServerCerificate) == 0 || + len(cfg.TLSCfg().ServerKey) == 0) { utils.Logger.Warning("WARNING: missing TLS certificate/key file!") return } if cfg.ListenCfg().RPCGOBTLSListen != "" { go server.ServeGOBTLS( cfg.ListenCfg().RPCGOBTLSListen, - cfg.TlsCfg().ServerCerificate, - cfg.TlsCfg().ServerKey, - cfg.TlsCfg().CaCertificate, - cfg.TlsCfg().ServerPolicy, - cfg.TlsCfg().ServerName, + cfg.TLSCfg().ServerCerificate, + cfg.TLSCfg().ServerKey, + cfg.TLSCfg().CaCertificate, + cfg.TLSCfg().ServerPolicy, + cfg.TLSCfg().ServerName, exitChan, ) } if cfg.ListenCfg().RPCJSONTLSListen != "" { go server.ServeJSONTLS( cfg.ListenCfg().RPCJSONTLSListen, - cfg.TlsCfg().ServerCerificate, - cfg.TlsCfg().ServerKey, - cfg.TlsCfg().CaCertificate, - cfg.TlsCfg().ServerPolicy, - cfg.TlsCfg().ServerName, + cfg.TLSCfg().ServerCerificate, + cfg.TLSCfg().ServerKey, + cfg.TLSCfg().CaCertificate, + cfg.TLSCfg().ServerPolicy, + cfg.TLSCfg().ServerName, exitChan, ) } if cfg.ListenCfg().HTTPTLSListen != "" { go server.ServeHTTPTLS( cfg.ListenCfg().HTTPTLSListen, - cfg.TlsCfg().ServerCerificate, - cfg.TlsCfg().ServerKey, - cfg.TlsCfg().CaCertificate, - cfg.TlsCfg().ServerPolicy, - cfg.TlsCfg().ServerName, + cfg.TLSCfg().ServerCerificate, + cfg.TLSCfg().ServerKey, + cfg.TLSCfg().CaCertificate, + cfg.TLSCfg().ServerPolicy, + cfg.TLSCfg().ServerName, cfg.HTTPCfg().HTTPJsonRPCURL, cfg.HTTPCfg().HTTPWSURL, cfg.HTTPCfg().HTTPUseBasicAuth, @@ -319,7 +319,7 @@ func singnalHandler(stopChan <-chan struct{}, exitChan chan<- struct{}) { go func() { var reply string if err := config.CgrConfig().V1ReloadConfig( - &config.ConfigReloadArgs{ + &config.ReloadArgs{ Section: utils.EmptyString, Path: config.CgrConfig().ConfigPath, // use the same path }, &reply); err != nil { diff --git a/config/analyzerscfg_test.go b/config/analyzerscfg_test.go index 02c6b81fd..f8852f04d 100644 --- a/config/analyzerscfg_test.go +++ b/config/analyzerscfg_test.go @@ -114,7 +114,7 @@ func TestAnalyzerSCfgClone(t *testing.T) { } rcv := cS.Clone() if !reflect.DeepEqual(cS, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) } if rcv.DBPath = ""; cS.DBPath != "/var/spool/cgrates/analyzers" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/apibancfg_test.go b/config/apibancfg_test.go index 84fc5be13..55c1ee8c5 100644 --- a/config/apibancfg_test.go +++ b/config/apibancfg_test.go @@ -78,7 +78,7 @@ func TestAPIBanCfgAsMapInterface(t *testing.T) { } else if err = alS.loadFromJSONCfg(jsnalS); err != nil { t.Error(err) } else if rcv := alS.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -89,7 +89,7 @@ func TestAPIBanCfgClone(t *testing.T) { } rcv := ban.Clone() if !reflect.DeepEqual(ban, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) } if rcv.Keys[0] = ""; ban.Keys[0] != "key1" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/apiercfg_test.go b/config/apiercfg_test.go index ad81f9ba5..77b7353c9 100644 --- a/config/apiercfg_test.go +++ b/config/apiercfg_test.go @@ -103,7 +103,7 @@ func TestApierCfgClone(t *testing.T) { } rcv := sa.Clone() if !reflect.DeepEqual(sa, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) } if rcv.CachesConns[1] = ""; sa.CachesConns[1] != "*conn1" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/attributescfg.go b/config/attributescfg.go index ffddae436..0153eff75 100644 --- a/config/attributescfg.go +++ b/config/attributescfg.go @@ -34,7 +34,7 @@ type AttributeSCfg struct { NestedFields bool } -func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error) { +func (alS *AttributeSCfg) loadFromJSONCfg(jsnCfg *AttributeSJsonCfg) (err error) { if jsnCfg == nil { return } @@ -45,10 +45,9 @@ func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error) alS.StatSConns = make([]string, len(*jsnCfg.Stats_conns)) for idx, connID := range *jsnCfg.Stats_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + alS.StatSConns[idx] = connID if connID == utils.MetaInternal { alS.StatSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) - } else { - alS.StatSConns[idx] = connID } } } @@ -56,10 +55,9 @@ func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error) alS.ResourceSConns = make([]string, len(*jsnCfg.Resources_conns)) for idx, connID := range *jsnCfg.Resources_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + alS.ResourceSConns[idx] = connID if connID == utils.MetaInternal { alS.ResourceSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) - } else { - alS.ResourceSConns[idx] = connID } } } @@ -67,10 +65,9 @@ func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error) alS.ApierSConns = make([]string, len(*jsnCfg.Apiers_conns)) for idx, connID := range *jsnCfg.Apiers_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + alS.ApierSConns[idx] = connID if connID == utils.MetaInternal { alS.ApierSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier) - } else { - alS.ApierSConns[idx] = connID } } } @@ -107,12 +104,10 @@ func (alS *AttributeSCfg) loadFromJsonCfg(jsnCfg *AttributeSJsonCfg) (err error) return } +// AsMapInterface returns the config as a map[string]interface{} func (alS *AttributeSCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: alS.Enabled, - utils.StatSConnsCfg: alS.StatSConns, - utils.ResourceSConnsCfg: alS.ResourceSConns, - utils.ApierSConnsCfg: alS.ApierSConns, utils.IndexedSelectsCfg: alS.IndexedSelects, utils.ProcessRunsCfg: alS.ProcessRuns, utils.NestedFieldsCfg: alS.NestedFields, @@ -138,5 +133,87 @@ func (alS *AttributeSCfg) AsMapInterface() (initialMP map[string]interface{}) { } initialMP[utils.SuffixIndexedFieldsCfg] = suffixIndexedFields } + if alS.StatSConns != nil { + statSConns := make([]string, len(alS.StatSConns)) + for i, item := range alS.StatSConns { + statSConns[i] = item + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) { + statSConns[i] = utils.MetaInternal + } + } + initialMP[utils.StatSConnsCfg] = statSConns + } + + if alS.ResourceSConns != nil { + resourceSConns := make([]string, len(alS.ResourceSConns)) + for i, item := range alS.ResourceSConns { + resourceSConns[i] = item + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) { + resourceSConns[i] = utils.MetaInternal + } + } + initialMP[utils.ResourceSConnsCfg] = resourceSConns + } + if alS.ApierSConns != nil { + apierSConns := make([]string, len(alS.ApierSConns)) + for i, item := range alS.ApierSConns { + apierSConns[i] = item + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier) { + apierSConns[i] = utils.MetaInternal + } + } + initialMP[utils.ApierSConnsCfg] = apierSConns + } + return +} + +// Clone returns a deep copy of AttributeSCfg +func (alS AttributeSCfg) Clone() (cln *AttributeSCfg) { + cln = &AttributeSCfg{ + Enabled: alS.Enabled, + IndexedSelects: alS.IndexedSelects, + NestedFields: alS.NestedFields, + ProcessRuns: alS.ProcessRuns, + } + if alS.ResourceSConns != nil { + cln.ResourceSConns = make([]string, len(alS.ResourceSConns)) + for i, con := range alS.ResourceSConns { + cln.ResourceSConns[i] = con + } + } + if alS.StatSConns != nil { + cln.StatSConns = make([]string, len(alS.StatSConns)) + for i, con := range alS.StatSConns { + cln.StatSConns[i] = con + } + } + if alS.ApierSConns != nil { + cln.ApierSConns = make([]string, len(alS.ApierSConns)) + for i, con := range alS.ApierSConns { + cln.ApierSConns[i] = con + } + } + + if alS.StringIndexedFields != nil { + idx := make([]string, len(*alS.StringIndexedFields)) + for i, dx := range *alS.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if alS.PrefixIndexedFields != nil { + idx := make([]string, len(*alS.PrefixIndexedFields)) + for i, dx := range *alS.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if alS.SuffixIndexedFields != nil { + idx := make([]string, len(*alS.SuffixIndexedFields)) + for i, dx := range *alS.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx + } return } diff --git a/config/attributescfg_test.go b/config/attributescfg_test.go index f9be4d088..c04d311d7 100644 --- a/config/attributescfg_test.go +++ b/config/attributescfg_test.go @@ -51,7 +51,7 @@ func TestAttributeSCfgloadFromJsonCfg(t *testing.T) { } if jsnCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsnCfg.attributeSCfg.loadFromJsonCfg(jsonCfg); err != nil { + } else if err = jsnCfg.attributeSCfg.loadFromJSONCfg(jsonCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsnCfg.attributeSCfg) { t.Errorf("Expected %+v, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.attributeSCfg)) @@ -61,7 +61,10 @@ func TestAttributeSCfgloadFromJsonCfg(t *testing.T) { func TestAttributeSCfgAsMapInterface(t *testing.T) { cfgJSONStr := `{ "attributes": { - "enabled": true, + "enabled": true, + "stats_conns": ["*internal"], + "resources_conns": ["*internal"], + "apiers_conns": ["*internal"], "prefix_indexed_fields": ["*req.index1","*req.index2"], "string_indexed_fields": ["*req.index1"], "process_runs": 3, @@ -69,9 +72,9 @@ func TestAttributeSCfgAsMapInterface(t *testing.T) { }` eMap := map[string]interface{}{ utils.EnabledCfg: true, - utils.StatSConnsCfg: []string{}, - utils.ResourceSConnsCfg: []string{}, - utils.ApierSConnsCfg: []string{}, + utils.StatSConnsCfg: []string{utils.MetaInternal}, + utils.ResourceSConnsCfg: []string{utils.MetaInternal}, + utils.ApierSConnsCfg: []string{utils.MetaInternal}, utils.StringIndexedFieldsCfg: []string{"*req.index1"}, utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"}, utils.ProcessRunsCfg: 3, @@ -82,7 +85,7 @@ func TestAttributeSCfgAsMapInterface(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else if rcv := cgrCfg.attributeSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\n Received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\n Received: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -136,3 +139,40 @@ func TestAttributeSCfgAsMapInterface3(t *testing.T) { t.Errorf("Expected %+v, receieved %+v", expectedMap, newMap) } } + +func TestAttributeSCfgClone(t *testing.T) { + ban := &AttributeSCfg{ + Enabled: true, + ApierSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier), "*conn1"}, + StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"}, + ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "*conn1"}, + IndexedSelects: false, + StringIndexedFields: &[]string{"*req.index1"}, + PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"}, + SuffixIndexedFields: &[]string{"*req.index1"}, + ProcessRuns: 1, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.ApierSConns[1] = ""; ban.ApierSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.StatSConns[1] = ""; ban.StatSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.ResourceSConns[1] = ""; ban.ResourceSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/cachecfg_test.go b/config/cachecfg_test.go index be09d86f8..2fc6c62b5 100644 --- a/config/cachecfg_test.go +++ b/config/cachecfg_test.go @@ -225,7 +225,7 @@ func TestCacheCfgClone(t *testing.T) { } rcv := cs.Clone() if !reflect.DeepEqual(cs, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(cs), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cs), utils.ToJSON(rcv)) } if rcv.Partitions[utils.MetaDestinations].Limit = 0; cs.Partitions[utils.MetaDestinations].Limit != 10 { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/chargerscfg.go b/config/chargerscfg.go index 9d5f4826e..87c505651 100644 --- a/config/chargerscfg.go +++ b/config/chargerscfg.go @@ -19,8 +19,6 @@ along with this program. If not, see package config import ( - "strings" - "github.com/cgrates/cgrates/utils" ) @@ -35,7 +33,7 @@ type ChargerSCfg struct { NestedFields bool } -func (cS *ChargerSCfg) loadFromJsonCfg(jsnCfg *ChargerSJsonCfg) (err error) { +func (cS *ChargerSCfg) loadFromJSONCfg(jsnCfg *ChargerSJsonCfg) (err error) { if jsnCfg == nil { return } @@ -49,10 +47,9 @@ func (cS *ChargerSCfg) loadFromJsonCfg(jsnCfg *ChargerSJsonCfg) (err error) { cS.AttributeSConns = make([]string, len(*jsnCfg.Attributes_conns)) for idx, attrConn := range *jsnCfg.Attributes_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + cS.AttributeSConns[idx] = attrConn if attrConn == utils.MetaInternal { cS.AttributeSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) - } else { - cS.AttributeSConns[idx] = attrConn } } } @@ -83,6 +80,7 @@ func (cS *ChargerSCfg) loadFromJsonCfg(jsnCfg *ChargerSJsonCfg) (err error) { return } +// AsMapInterface returns the config as a map[string]interface{} func (cS *ChargerSCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: cS.Enabled, @@ -92,10 +90,9 @@ func (cS *ChargerSCfg) AsMapInterface() (initialMP map[string]interface{}) { if cS.AttributeSConns != nil { attributeSConns := make([]string, len(cS.AttributeSConns)) for i, item := range cS.AttributeSConns { + attributeSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) { - attributeSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes) - } else { - attributeSConns[i] = item + attributeSConns[i] = utils.MetaInternal } } initialMP[utils.AttributeSConnsCfg] = attributeSConns @@ -123,3 +120,41 @@ func (cS *ChargerSCfg) AsMapInterface() (initialMP map[string]interface{}) { } return } + +// Clone returns a deep copy of ChargerSCfg +func (cS ChargerSCfg) Clone() (cln *ChargerSCfg) { + cln = &ChargerSCfg{ + Enabled: cS.Enabled, + IndexedSelects: cS.IndexedSelects, + NestedFields: cS.NestedFields, + } + if cS.AttributeSConns != nil { + cln.AttributeSConns = make([]string, len(cS.AttributeSConns)) + for i, con := range cS.AttributeSConns { + cln.AttributeSConns[i] = con + } + } + + if cS.StringIndexedFields != nil { + idx := make([]string, len(*cS.StringIndexedFields)) + for i, dx := range *cS.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if cS.PrefixIndexedFields != nil { + idx := make([]string, len(*cS.PrefixIndexedFields)) + for i, dx := range *cS.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if cS.SuffixIndexedFields != nil { + idx := make([]string, len(*cS.SuffixIndexedFields)) + for i, dx := range *cS.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx + } + return +} diff --git a/config/chargerscfg_test.go b/config/chargerscfg_test.go index a01fb941a..44d544688 100644 --- a/config/chargerscfg_test.go +++ b/config/chargerscfg_test.go @@ -45,7 +45,7 @@ func TestChargerSCfgloadFromJsonCfg(t *testing.T) { } if jsncfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsncfg.chargerSCfg.loadFromJsonCfg(jsonCfg); err != nil { + } else if err = jsncfg.chargerSCfg.loadFromJSONCfg(jsonCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsncfg.chargerSCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsncfg.chargerSCfg)) @@ -104,3 +104,31 @@ func TestChargerSCfgAsMapInterface1(t *testing.T) { t.Errorf("Expected %+v, recieved %+v", eMap, rcv) } } + +func TestChargerSCfgClone(t *testing.T) { + ban := &ChargerSCfg{ + Enabled: true, + IndexedSelects: true, + AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"}, + StringIndexedFields: &[]string{"*req.Field1"}, + PrefixIndexedFields: &[]string{"*req.Field1", "*req.Field2"}, + SuffixIndexedFields: &[]string{"*req.Field1", "*req.Field2"}, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.AttributeSConns[1] = ""; ban.AttributeSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.Field1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.Field1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.Field1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/config.go b/config/config.go index 25b126273..7b7595a63 100644 --- a/config/config.go +++ b/config/config.go @@ -389,11 +389,11 @@ func (cfg *CGRConfig) loadFromJSONCfg(jsnCfg *CgrJsonCfg) (err error) { cfg.loadCdrsCfg, cfg.loadSessionSCfg, cfg.loadFreeswitchAgentCfg, cfg.loadKamAgentCfg, cfg.loadAsteriskAgentCfg, cfg.loadDiameterAgentCfg, cfg.loadRadiusAgentCfg, - cfg.loadDNSAgentCfg, cfg.loadHttpAgentCfg, cfg.loadAttributeSCfg, + cfg.loadDNSAgentCfg, cfg.loadHTTPAgentCfg, cfg.loadAttributeSCfg, cfg.loadChargerSCfg, cfg.loadResourceSCfg, cfg.loadStatSCfg, cfg.loadThresholdSCfg, cfg.loadRouteSCfg, cfg.loadLoaderSCfg, cfg.loadMailerCfg, cfg.loadSureTaxCfg, cfg.loadDispatcherSCfg, - cfg.loadLoaderCgrCfg, cfg.loadMigratorCgrCfg, cfg.loadTlsCgrCfg, + cfg.loadLoaderCgrCfg, cfg.loadMigratorCgrCfg, cfg.loadTLSCgrCfg, cfg.loadAnalyzerCgrCfg, cfg.loadApierCfg, cfg.loadErsCfg, cfg.loadEesCfg, cfg.loadRateSCfg, cfg.loadSIPAgentCfg, cfg.loadDispatcherHCfg, cfg.loadConfigSCfg, cfg.loadAPIBanCgrCfg, cfg.loadCoreSCfg} { @@ -579,16 +579,16 @@ func (cfg *CGRConfig) loadDNSAgentCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnDNSCfg, err = jsnCfg.DNSAgentJsonCfg(); err != nil { return } - return cfg.dnsAgentCfg.loadFromJsonCfg(jsnDNSCfg, cfg.generalCfg.RSRSep) + return cfg.dnsAgentCfg.loadFromJSONCfg(jsnDNSCfg, cfg.generalCfg.RSRSep) } -// loadHttpAgentCfg loads the HttpAgent section of the configuration -func (cfg *CGRConfig) loadHttpAgentCfg(jsnCfg *CgrJsonCfg) (err error) { - var jsnHttpAgntCfg *[]*HttpAgentJsonCfg - if jsnHttpAgntCfg, err = jsnCfg.HttpAgentJsonCfg(); err != nil { +// loadHTTPAgentCfg loads the HttpAgent section of the configuration +func (cfg *CGRConfig) loadHTTPAgentCfg(jsnCfg *CgrJsonCfg) (err error) { + var jsnHTTPAgntCfg *[]*HttpAgentJsonCfg + if jsnHTTPAgntCfg, err = jsnCfg.HttpAgentJsonCfg(); err != nil { return } - return cfg.httpAgentCfg.loadFromJsonCfg(jsnHttpAgntCfg, cfg.generalCfg.RSRSep) + return cfg.httpAgentCfg.loadFromJsonCfg(jsnHTTPAgntCfg, cfg.generalCfg.RSRSep) } // loadAttributeSCfg loads the AttributeS section of the configuration @@ -597,7 +597,7 @@ func (cfg *CGRConfig) loadAttributeSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnAttributeSCfg, err = jsnCfg.AttributeServJsonCfg(); err != nil { return } - return cfg.attributeSCfg.loadFromJsonCfg(jsnAttributeSCfg) + return cfg.attributeSCfg.loadFromJSONCfg(jsnAttributeSCfg) } // loadChargerSCfg loads the ChargerS section of the configuration @@ -606,7 +606,7 @@ func (cfg *CGRConfig) loadChargerSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnChargerSCfg, err = jsnCfg.ChargerServJsonCfg(); err != nil { return } - return cfg.chargerSCfg.loadFromJsonCfg(jsnChargerSCfg) + return cfg.chargerSCfg.loadFromJSONCfg(jsnChargerSCfg) } // loadResourceSCfg loads the ResourceS section of the configuration @@ -615,7 +615,7 @@ func (cfg *CGRConfig) loadResourceSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnRLSCfg, err = jsnCfg.ResourceSJsonCfg(); err != nil { return } - return cfg.resourceSCfg.loadFromJsonCfg(jsnRLSCfg) + return cfg.resourceSCfg.loadFromJSONCfg(jsnRLSCfg) } // loadStatSCfg loads the StatS section of the configuration @@ -624,7 +624,7 @@ func (cfg *CGRConfig) loadStatSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnStatSCfg, err = jsnCfg.StatSJsonCfg(); err != nil { return } - return cfg.statsCfg.loadFromJsonCfg(jsnStatSCfg) + return cfg.statsCfg.loadFromJSONCfg(jsnStatSCfg) } // loadThresholdSCfg loads the ThresholdS section of the configuration @@ -633,7 +633,7 @@ func (cfg *CGRConfig) loadThresholdSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnThresholdSCfg, err = jsnCfg.ThresholdSJsonCfg(); err != nil { return } - return cfg.thresholdSCfg.loadFromJsonCfg(jsnThresholdSCfg) + return cfg.thresholdSCfg.loadFromJSONCfg(jsnThresholdSCfg) } // loadRouteSCfg loads the RouteS section of the configuration @@ -642,7 +642,7 @@ func (cfg *CGRConfig) loadRouteSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnRouteSCfg, err = jsnCfg.RouteSJsonCfg(); err != nil { return } - return cfg.routeSCfg.loadFromJsonCfg(jsnRouteSCfg) + return cfg.routeSCfg.loadFromJSONCfg(jsnRouteSCfg) } // loadLoaderSCfg loads the LoaderS section of the configuration @@ -679,7 +679,7 @@ func (cfg *CGRConfig) loadSureTaxCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnSureTaxCfg, err = jsnCfg.SureTaxJsonCfg(); err != nil { return } - return cfg.sureTaxCfg.loadFromJsonCfg(jsnSureTaxCfg) + return cfg.sureTaxCfg.loadFromJSONCfg(jsnSureTaxCfg) } // loadDispatcherSCfg loads the DispatcherS section of the configuration @@ -688,7 +688,7 @@ func (cfg *CGRConfig) loadDispatcherSCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnDispatcherSCfg, err = jsnCfg.DispatcherSJsonCfg(); err != nil { return } - return cfg.dispatcherSCfg.loadFromJsonCfg(jsnDispatcherSCfg) + return cfg.dispatcherSCfg.loadFromJSONCfg(jsnDispatcherSCfg) } // loadDispatcherHCfg loads the DispatcherH section of the configuration @@ -697,7 +697,7 @@ func (cfg *CGRConfig) loadDispatcherHCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnDispatcherHCfg, err = jsnCfg.DispatcherHJsonCfg(); err != nil { return } - return cfg.dispatcherHCfg.loadFromJsonCfg(jsnDispatcherHCfg) + return cfg.dispatcherHCfg.loadFromJSONCfg(jsnDispatcherHCfg) } // loadLoaderCgrCfg loads the Loader section of the configuration @@ -718,13 +718,13 @@ func (cfg *CGRConfig) loadMigratorCgrCfg(jsnCfg *CgrJsonCfg) (err error) { return cfg.migratorCgrCfg.loadFromJSONCfg(jsnMigratorCgrCfg) } -// loadTlsCgrCfg loads the Tls section of the configuration -func (cfg *CGRConfig) loadTlsCgrCfg(jsnCfg *CgrJsonCfg) (err error) { - var jsnTlsCgrCfg *TlsJsonCfg - if jsnTlsCgrCfg, err = jsnCfg.TlsCfgJson(); err != nil { +// loadTLSCgrCfg loads the Tls section of the configuration +func (cfg *CGRConfig) loadTLSCgrCfg(jsnCfg *CgrJsonCfg) (err error) { + var jsnTLSCgrCfg *TlsJsonCfg + if jsnTLSCgrCfg, err = jsnCfg.TlsCfgJson(); err != nil { return } - return cfg.tlsCfg.loadFromJsonCfg(jsnTlsCgrCfg) + return cfg.tlsCfg.loadFromJsonCfg(jsnTLSCgrCfg) } // loadAnalyzerCgrCfg loads the Analyzer section of the configuration @@ -807,7 +807,7 @@ func (cfg *CGRConfig) loadTemplateSCfg(jsnCfg *CgrJsonCfg) (err error) { } if jsnTemplateCfg != nil { for k, val := range jsnTemplateCfg { - if cfg.templates[k], err = FCTemplatesFromFCTemplatesJsonCfg(val, cfg.generalCfg.RSRSep); err != nil { + if cfg.templates[k], err = FCTemplatesFromFCTemplatesJSONCfg(val, cfg.generalCfg.RSRSep); err != nil { return } } @@ -921,8 +921,8 @@ func (cfg *CGRConfig) AsteriskAgentCfg() *AsteriskAgentCfg { return cfg.asteriskAgentCfg } -// HttpAgentCfg returns the config for HttpAgent -func (cfg *CGRConfig) HttpAgentCfg() HttpAgentCfgs { +// HTTPAgentCfg returns the config for HttpAgent +func (cfg *CGRConfig) HTTPAgentCfg() HttpAgentCfgs { cfg.lks[HttpAgentJson].Lock() defer cfg.lks[HttpAgentJson].Unlock() return cfg.httpAgentCfg @@ -1005,8 +1005,8 @@ func (cfg *CGRConfig) GeneralCfg() *GeneralCfg { return cfg.generalCfg } -// TlsCfg returns the config for Tls -func (cfg *CGRConfig) TlsCfg() *TlsCfg { +// TLSCfg returns the config for Tls +func (cfg *CGRConfig) TLSCfg() *TlsCfg { cfg.lks[TlsCfgJson].Lock() defer cfg.lks[TlsCfgJson].Unlock() return cfg.tlsCfg @@ -1186,7 +1186,7 @@ func (cfg *CGRConfig) getLoadFunctions() map[string]func(*CgrJsonCfg) error { DATADB_JSN: cfg.loadDataDBCfg, STORDB_JSN: cfg.loadStorDBCfg, LISTEN_JSN: cfg.loadListenCfg, - TlsCfgJson: cfg.loadTlsCgrCfg, + TlsCfgJson: cfg.loadTLSCgrCfg, HTTP_JSN: cfg.loadHTTPCfg, SCHEDULER_JSN: cfg.loadSchedulerCfg, CACHE_JSN: cfg.loadCacheCfg, @@ -1201,7 +1201,7 @@ func (cfg *CGRConfig) getLoadFunctions() map[string]func(*CgrJsonCfg) error { KamailioAgentJSN: cfg.loadKamAgentCfg, DA_JSN: cfg.loadDiameterAgentCfg, RA_JSN: cfg.loadRadiusAgentCfg, - HttpAgentJson: cfg.loadHttpAgentCfg, + HttpAgentJson: cfg.loadHTTPAgentCfg, DNSAgentJson: cfg.loadDNSAgentCfg, ATTRIBUTE_JSN: cfg.loadAttributeSCfg, ChargerSCfgJson: cfg.loadChargerSCfg, @@ -1535,8 +1535,8 @@ func (cfg *CGRConfig) AsMapInterface(separator string) (mp map[string]interface{ }, nil } -// ConfigReloadArgs the API params for V1ReloadConfig -type ConfigReloadArgs struct { +// ReloadArgs the API params for V1ReloadConfig +type ReloadArgs struct { Opts map[string]interface{} Tenant string Path string @@ -1544,7 +1544,7 @@ type ConfigReloadArgs struct { } // V1ReloadConfig reloads the configuration -func (cfg *CGRConfig) V1ReloadConfig(args *ConfigReloadArgs, reply *string) (err error) { +func (cfg *CGRConfig) V1ReloadConfig(args *ReloadArgs, reply *string) (err error) { if missing := utils.MissingStructFields(args, []string{"Path"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } @@ -1596,7 +1596,7 @@ func (cfg *CGRConfig) V1GetConfig(args *SectionWithOpts, reply *map[string]inter case STORDB_JSN: mp = cfg.StorDbCfg().AsMapInterface() case TlsCfgJson: - mp = cfg.TlsCfg().AsMapInterface() + mp = cfg.TLSCfg().AsMapInterface() case CACHE_JSN: mp = cfg.CacheCfg().AsMapInterface() case LISTEN_JSN: @@ -1666,7 +1666,7 @@ func (cfg *CGRConfig) V1GetConfig(args *SectionWithOpts, reply *map[string]inter case APIBanCfgJson: mp = cfg.APIBanCfg().AsMapInterface() case HttpAgentJson: - mp = cfg.HttpAgentCfg().AsMapInterface(cfg.GeneralCfg().RSRSep) + mp = cfg.HTTPAgentCfg().AsMapInterface(cfg.GeneralCfg().RSRSep) case MAILER_JSN: mp = cfg.MailerCfg().AsMapInterface() case AnalyzerCfgJson: @@ -1740,7 +1740,7 @@ func (cfg *CGRConfig) V1GetConfigAsJSON(args *SectionWithOpts, reply *string) (e case STORDB_JSN: mp = cfg.StorDbCfg().AsMapInterface() case TlsCfgJson: - mp = cfg.TlsCfg().AsMapInterface() + mp = cfg.TLSCfg().AsMapInterface() case CACHE_JSN: mp = cfg.CacheCfg().AsMapInterface() case LISTEN_JSN: @@ -1810,7 +1810,7 @@ func (cfg *CGRConfig) V1GetConfigAsJSON(args *SectionWithOpts, reply *string) (e case TemplatesJson: mp = cfg.TemplatesCfg().AsMapInterface(cfg.GeneralCfg().RSRSep) case HttpAgentJson: - mp = cfg.HttpAgentCfg().AsMapInterface(cfg.GeneralCfg().RSRSep) + mp = cfg.HTTPAgentCfg().AsMapInterface(cfg.GeneralCfg().RSRSep) case MAILER_JSN: mp = cfg.MailerCfg().AsMapInterface() case AnalyzerCfgJson: diff --git a/config/config_it_test.go b/config/config_it_test.go index cef4aec07..47047b321 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -137,7 +137,7 @@ func testCGRConfigReloadAttributeS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: ATTRIBUTE_JSN, }, &reply); err != nil { @@ -167,7 +167,7 @@ func testCGRConfigReloadChargerS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: ChargerSCfgJson, }, &reply); err != nil { @@ -194,7 +194,7 @@ func testCGRConfigReloadThresholdS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: THRESHOLDS_JSON, }, &reply); err != nil { @@ -220,7 +220,7 @@ func testCGRConfigReloadStatS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: STATS_JSON, }, &reply); err != nil { @@ -247,7 +247,7 @@ func testCGRConfigReloadResourceS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: RESOURCES_JSON, }, &reply); err != nil { @@ -274,7 +274,7 @@ func testCGRConfigReloadSupplierS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: RouteSJson, }, &reply); err != nil { @@ -307,7 +307,7 @@ func testCGRConfigV1ReloadConfigFromPathInvalidSection(t *testing.T) { } expectedErr := "Invalid section: " var reply string - if err := cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: "InvalidSection", }, &reply); err == nil || err.Error() != expectedErr { @@ -315,7 +315,7 @@ func testCGRConfigV1ReloadConfigFromPathInvalidSection(t *testing.T) { } expectedErr = utils.NewErrMandatoryIeMissing("Path").Error() - if err := cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&ReloadArgs{ Section: "InvalidSection", }, &reply); err == nil || err.Error() != expectedErr { t.Errorf("Expected %+v. received %+v", expectedErr, err) @@ -323,11 +323,11 @@ func testCGRConfigV1ReloadConfigFromPathInvalidSection(t *testing.T) { } func testV1ReloadConfigFromPathConfigSanity(t *testing.T) { - expectedErr := " not enabled but requested by component." + expectedErr := " not enabled but requested by component" var reply string if cfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err := cfg.V1ReloadConfig(&ConfigReloadArgs{ + } else if err := cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutinternal"), Section: ChargerSCfgJson}, &reply); err == nil || err.Error() != expectedErr { t.Errorf("Expected %+v, received %+v", expectedErr, err) @@ -351,7 +351,7 @@ func testCGRConfigReloadSchedulerS(t *testing.T) { t.Fatal(err) } var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: SCHEDULER_JSN, }, &reply); err != nil { @@ -378,7 +378,7 @@ func testCGRConfigReloadCDRs(t *testing.T) { } cfg.RalsCfg().Enabled = true var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: CDRS_JSN, }, &reply); err != nil { @@ -416,7 +416,7 @@ func testCGRConfigReloadRALs(t *testing.T) { blMap := cfg.RalsCfg().BalanceRatingSubject maxComp := cfg.RalsCfg().MaxComputedUsage var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: RALS_JSN, }, &reply); err != nil { @@ -450,7 +450,7 @@ func testCGRConfigReloadSessionS(t *testing.T) { cfg.ChargerSCfg().Enabled = true cfg.CdrsCfg().Enabled = true var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: SessionSJson, }, &reply); err != nil { @@ -503,7 +503,7 @@ func testCGRConfigReloadERs(t *testing.T) { } cfg.SessionSCfg().Enabled = true var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "ers_example"), Section: ERsJson, }, &reply); err != nil { @@ -559,6 +559,7 @@ func testCGRConfigReloadERs(t *testing.T) { ConcurrentReqs: 1024, SourcePath: "/tmp/ers/in", ProcessedPath: "/tmp/ers/out", + Filters: []string{}, Flags: flags, Fields: content, CacheDumpFields: []*FCTemplate{}, @@ -579,7 +580,7 @@ func testCGRConfigReloadDNSAgent(t *testing.T) { } cfg.SessionSCfg().Enabled = true var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "dnsagent_reload"), Section: DNSAgentJson, }, &reply); err != nil { @@ -607,7 +608,7 @@ func testCGRConfigReloadFreeswitchAgent(t *testing.T) { } cfg.SessionSCfg().Enabled = true var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "freeswitch_reload"), Section: FreeSWITCHAgentJSN, }, &reply); err != nil { @@ -780,7 +781,7 @@ func testCgrCfgV1ReloadConfigSection(t *testing.T) { var reply string var rcv map[string]interface{} - if err := cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&ReloadArgs{ Path: "/usr/share/cgrates/conf/samples/ers_example", Section: ERsJson, }, &reply); err != nil { @@ -929,7 +930,7 @@ func testCGRConfigReloadAll(t *testing.T) { cfg.ChargerSCfg().Enabled = true cfg.CdrsCfg().Enabled = true var reply string - if err = cfg.V1ReloadConfig(&ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo2"), Section: utils.MetaAll, }, &reply); err != nil { diff --git a/config/config_test.go b/config/config_test.go index c327d0bf7..143eecbdc 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -217,7 +217,7 @@ func TestHttpAgentCfg(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil { t.Error(err) - } else if !reflect.DeepEqual(eCgrCfg.HttpAgentCfg(), cgrCfg.HttpAgentCfg()) { + } else if !reflect.DeepEqual(eCgrCfg.HTTPAgentCfg(), cgrCfg.HTTPAgentCfg()) { t.Errorf("Expected: %s, received: %s", utils.ToJSON(eCgrCfg.httpAgentCfg), utils.ToJSON(cgrCfg.httpAgentCfg)) } @@ -869,7 +869,7 @@ func TestCgrCfgJSONDefaultsSureTax(t *testing.T) { t.Error("time parsing error", err) } eSureTaxCfg := &SureTaxCfg{ - Url: "", + URL: "", ClientNumber: "", ValidationKey: "", BusinessUnit: "", @@ -1089,9 +1089,9 @@ func TestLoadGeneralCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadGeneralCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadGeneralCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1107,9 +1107,9 @@ func TestLoadCacheCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadCacheCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadCacheCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1125,9 +1125,9 @@ func TestLoadListenCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadListenCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadListenCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1143,9 +1143,9 @@ func TestLoadHTTPCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadHTTPCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadHTTPCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1161,9 +1161,9 @@ func TestLoadDataDBCfgErrorCase1(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadDataDBCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadDataDBCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1179,11 +1179,11 @@ func TestLoadDataDBCfgErrorCase2(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) } else { cgrConfig.dataDbCfg.RmtConns = []string{utils.MetaInternal} - if err := cgrConfig.loadDataDBCfg(cgrCfgJson); err == nil || err.Error() != expected { + if err := cgrConfig.loadDataDBCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1201,9 +1201,9 @@ func TestLoadStorDbCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadStorDBCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadStorDBCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1219,9 +1219,9 @@ func TestLoadFilterSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadFilterSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadFilterSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1237,9 +1237,9 @@ func TestLoadRalSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadRalSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadRalSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1255,9 +1255,9 @@ func TestLoadSchedulerCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadSchedulerCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadSchedulerCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1273,9 +1273,9 @@ func TestLoadCdrsCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadCdrsCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadCdrsCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1291,9 +1291,9 @@ func TestLoadSessionSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadSessionSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadSessionSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1309,9 +1309,9 @@ func TestLoadFreeswitchAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadFreeswitchAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadFreeswitchAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1327,9 +1327,9 @@ func TestLoadKamAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadKamAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadKamAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1345,9 +1345,9 @@ func TestLoadAsteriskAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadAsteriskAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadAsteriskAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1367,9 +1367,9 @@ func TestLoadDiameterAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadDiameterAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadDiameterAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1385,9 +1385,9 @@ func TestLoadRadiusAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadRadiusAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadRadiusAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1403,9 +1403,9 @@ func TestLoadDNSAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadDNSAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadDNSAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1423,9 +1423,9 @@ func TestLoadHttpAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadHttpAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadHTTPAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1441,9 +1441,9 @@ func TestLoadAttributeSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadAttributeSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadAttributeSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1459,9 +1459,9 @@ func TestLoadChargerSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadChargerSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadChargerSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1477,9 +1477,9 @@ func TestLoadResourceSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadResourceSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadResourceSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1495,9 +1495,9 @@ func TestLoadStatSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadStatSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadStatSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1513,9 +1513,9 @@ func TestLoadThresholdSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadThresholdSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadThresholdSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1551,9 +1551,9 @@ func TestLoadRouteSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadRouteSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadRouteSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1569,9 +1569,9 @@ func TestLoadMailerCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadMailerCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadMailerCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1587,9 +1587,9 @@ func TestLoadSureTaxCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadSureTaxCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadSureTaxCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1605,9 +1605,9 @@ func TestLoadDispatcherSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadDispatcherSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadDispatcherSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1623,9 +1623,9 @@ func TestLoadDispatcherHCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadDispatcherHCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadDispatcherHCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1641,9 +1641,9 @@ func TestLoadLoaderCgrCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadLoaderCgrCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadLoaderCgrCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1659,9 +1659,9 @@ func TestLoadMigratorCgrCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadMigratorCgrCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadMigratorCgrCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1677,9 +1677,9 @@ func TestLoadTlsCgrCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadTlsCgrCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadTLSCgrCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1696,9 +1696,9 @@ func TestLoadAnalyzerCgrCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadAnalyzerCgrCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadAnalyzerCgrCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1714,9 +1714,9 @@ func TestLoadAPIBanCgrCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadAPIBanCgrCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadAPIBanCgrCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1732,9 +1732,9 @@ func TestLoadApierCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(myJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(myJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadApierCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadApierCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1750,9 +1750,9 @@ func TestLoadErsCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadErsCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadErsCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1768,9 +1768,9 @@ func TestLoadEesCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadEesCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadEesCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1786,9 +1786,9 @@ func TestLoadCoreSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadCoreSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadCoreSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1804,9 +1804,9 @@ func TestLoadRateSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadRateSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadRateSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1826,9 +1826,9 @@ func TestLoadSIPAgentCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadSIPAgentCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadSIPAgentCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1848,9 +1848,9 @@ func TestLoadTemplateSCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadTemplateSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadTemplateSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } @@ -1864,9 +1864,9 @@ func TestLoadTemplateSCfgError(t *testing.T) { } }` expected = "invalid converter terminator in rule: " - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadTemplateSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadTemplateSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1882,9 +1882,9 @@ func TestLoadConfigsCfgError(t *testing.T) { if err != nil { t.Error(err) } - if cgrCfgJson, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfgJSON, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { t.Error(err) - } else if err := cgrConfig.loadConfigSCfg(cgrCfgJson); err == nil || err.Error() != expected { + } else if err := cgrConfig.loadConfigSCfg(cgrCfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -1895,7 +1895,7 @@ func TestSuretaxConfig(t *testing.T) { t.Error(err) } expected := &SureTaxCfg{ - Url: "", + URL: "", ClientNumber: "", ValidationKey: "", BusinessUnit: "", @@ -3468,7 +3468,7 @@ func TestCfgTlsCfg(t *testing.T) { } if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(jsnCfg); err != nil { t.Error(err) - } else if !reflect.DeepEqual(eCgrCfg.TlsCfg(), cgrCfg.TlsCfg()) { + } else if !reflect.DeepEqual(eCgrCfg.TLSCfg(), cgrCfg.TLSCfg()) { t.Errorf("Expected: %s, received: %s", utils.ToJSON(eCgrCfg.tlsCfg), utils.ToJSON(cgrCfg.tlsCfg)) } @@ -4853,7 +4853,7 @@ func TestV1ReloadConfigCheckingSanity(t *testing.T) { utils.StatSConnsCfg: []string{"*internal:*stats"}, }, } - expected := ` not enabled but requested by component.` + expected := ` not enabled but requested by component` if cfgCgr, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else if err := cfgCgr.V1SetConfig(&SetConfigArgs{Config: ralsMap}, &reply); err == nil || err.Error() != expected { @@ -5420,7 +5420,7 @@ func TestV1GetConfigAsJSONCheckConfigSanity(t *testing.T) { "attributes_conns": ["*internal"] } }` - expected := ` not enabled but requested by component.` + expected := ` not enabled but requested by component` if cfgCgr2, err := NewDefaultCGRConfig(); err != nil { t.Error(err) } else if err = cfgCgr2.V1SetConfigFromJSON(&SetConfigFromJSONArgs{Config: args}, &result); err == nil || err.Error() != expected { diff --git a/config/configs_test.go b/config/configs_test.go index 24b568a2d..834934c43 100644 --- a/config/configs_test.go +++ b/config/configs_test.go @@ -109,7 +109,7 @@ func TestConfigSCfgClone(t *testing.T) { } rcv := cS.Clone() if !reflect.DeepEqual(cS, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) } if rcv.URL = ""; cS.URL != "/randomURL/" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/configsanity.go b/config/configsanity.go index a21c02429..fd234d7b3 100644 --- a/config/configsanity.go +++ b/config/configsanity.go @@ -27,7 +27,7 @@ import ( "github.com/cgrates/rpcclient" ) -// Exported in cgr-engine +// CheckConfigSanity is used in cgr-engine func (cfg *CGRConfig) CheckConfigSanity() error { return cfg.checkConfigSanity() } @@ -37,7 +37,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.ralsCfg.Enabled { for _, connID := range cfg.ralsCfg.StatSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.RALService) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.StatService, utils.RALService) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RALService, connID) @@ -45,7 +45,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.ralsCfg.ThresholdSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.RALService) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.RALService) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RALService, connID) @@ -56,7 +56,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.cdrsCfg.Enabled { for _, connID := range cfg.cdrsCfg.ChargerSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.chargerSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ChargerS, utils.CDRs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ChargerS, utils.CDRs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CDRs, connID) @@ -64,7 +64,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.cdrsCfg.RaterConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ralsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.CDRs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.RALService, utils.CDRs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CDRs, connID) @@ -72,7 +72,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.cdrsCfg.AttributeSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.CDRs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.CDRs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CDRs, connID) @@ -80,7 +80,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.cdrsCfg.StatSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.CDRs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.StatService, utils.CDRs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CDRs, connID) @@ -88,7 +88,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.cdrsCfg.ThresholdSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.CDRs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.CDRs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CDRs, connID) @@ -108,7 +108,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.cdrsCfg.EEsConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.eesCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.EEs, utils.CDRs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.EEs, utils.CDRs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CDRs, connID) @@ -150,7 +150,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.ChargerSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.chargerSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ChargerS, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ChargerS, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -158,7 +158,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.RALsConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ralsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.RALService, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -166,7 +166,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.ResSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.resourceSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ResourceS, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ResourceS, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -174,7 +174,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.ThreshSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -182,7 +182,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.StatSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.StatService, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -190,7 +190,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.RouteSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.routeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RouteS, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.RouteS, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -198,7 +198,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.AttrSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -206,7 +206,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sessionSCfg.CDRsConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.cdrsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.CDRs, utils.SessionS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.CDRs, utils.SessionS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SessionS, connID) @@ -236,7 +236,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.fsAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.FreeSWITCHAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.FreeSWITCHAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.FreeSWITCHAgent, connID) @@ -251,7 +251,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.kamAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.KamailioAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.KamailioAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.KamailioAgent, connID) @@ -266,7 +266,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.asteriskAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.AsteriskAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.AsteriskAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.AsteriskAgent, connID) @@ -281,7 +281,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.diameterAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.DiameterAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.DiameterAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.DiameterAgent, connID) @@ -319,7 +319,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.radiusAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.RadiusAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.RadiusAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RadiusAgent, connID) @@ -346,7 +346,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.dnsAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.DNSAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.DNSAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.DNSAgent, connID) @@ -370,7 +370,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { // httpAgent checks for _, connID := range httpAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> HTTPAgent Template.", utils.SessionS, httpAgentCfg.ID) + return fmt.Errorf("<%s> not enabled but requested by <%s> HTTPAgent Template", utils.SessionS, httpAgentCfg.ID) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> template with ID <%s> has connection with id: <%s> not defined", utils.HTTPAgent, httpAgentCfg.ID, connID) @@ -404,7 +404,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.sipAgentCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.SIPAgent) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.SIPAgent) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SIPAgent, connID) @@ -432,7 +432,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.chargerSCfg.Enabled { for _, connID := range cfg.chargerSCfg.AttributeSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.ChargerS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.ChargerS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.ChargerS, connID) @@ -443,7 +443,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.resourceSCfg.Enabled { for _, connID := range cfg.resourceSCfg.ThresholdSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.ResourceS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.ResourceS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.ResourceS, connID) @@ -454,7 +454,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.statsCfg.Enabled { for _, connID := range cfg.statsCfg.ThresholdSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.StatS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.StatS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.StatS, connID) @@ -465,7 +465,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.routeSCfg.Enabled { for _, connID := range cfg.routeSCfg.AttributeSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.RouteS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.RouteS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RouteS, connID) @@ -473,7 +473,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.routeSCfg.StatSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.RouteS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.StatService, utils.RouteS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RouteS, connID) @@ -481,7 +481,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.routeSCfg.ResourceSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.resourceSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ResourceS, utils.RouteS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ResourceS, utils.RouteS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RouteS, connID) @@ -489,7 +489,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.routeSCfg.RALsConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ralsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.RouteS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.RALService, utils.RouteS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.RouteS, connID) @@ -500,7 +500,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.schedulerCfg.Enabled { for _, connID := range cfg.schedulerCfg.CDRsConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.cdrsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.CDRs, utils.SchedulerS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.CDRs, utils.SchedulerS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SchedulerS, connID) @@ -508,7 +508,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.schedulerCfg.ThreshSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.thresholdSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.SchedulerS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.ThresholdS, utils.SchedulerS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SchedulerS, connID) @@ -516,7 +516,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.schedulerCfg.StatSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.statsCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatS, utils.SchedulerS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.StatS, utils.SchedulerS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.SchedulerS, connID) @@ -527,7 +527,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.ersCfg.Enabled { for _, connID := range cfg.ersCfg.SessionSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.sessionSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SessionS, utils.ERs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SessionS, utils.ERs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.ERs, connID) @@ -575,7 +575,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.eesCfg.Enabled { for _, connID := range cfg.eesCfg.AttributeSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.EEs) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.EEs) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.EEs, connID) @@ -641,7 +641,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { // APIer sanity checks for _, connID := range cfg.apier.AttributeSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.APIerSv1) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.APIerSv1) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.APIerSv1, connID) @@ -649,7 +649,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for _, connID := range cfg.apier.SchedulerConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.schedulerCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.SchedulerS, utils.APIerSv1) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.SchedulerS, utils.APIerSv1) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.APIerSv1, connID) @@ -659,7 +659,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.dispatcherSCfg.Enabled { for _, connID := range cfg.dispatcherSCfg.AttributeSConns { if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.attributeSCfg.Enabled { - return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.DispatcherS) + return fmt.Errorf("<%s> not enabled but requested by <%s> component", utils.AttributeS, utils.DispatcherS) } if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.DispatcherS, connID) @@ -668,13 +668,13 @@ func (cfg *CGRConfig) checkConfigSanity() error { } // Cache check for _, connID := range cfg.cacheCfg.ReplicationConns { - if conn, has := cfg.rpcConns[connID]; !has { + conn, has := cfg.rpcConns[connID] + if !has { return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.CacheS, connID) - } else { - for _, rpc := range conn.Conns { - if rpc.Transport != utils.MetaGOB { - return fmt.Errorf("<%s> unsuported transport <%s> for connection with ID: <%s>", utils.CacheS, rpc.Transport, connID) - } + } + for _, rpc := range conn.Conns { + if rpc.Transport != utils.MetaGOB { + return fmt.Errorf("<%s> unsuported transport <%s> for connection with ID: <%s>", utils.CacheS, rpc.Transport, connID) } } } diff --git a/config/configsanity_test.go b/config/configsanity_test.go index 5bc0a4d12..6ffaa0ac6 100644 --- a/config/configsanity_test.go +++ b/config/configsanity_test.go @@ -30,7 +30,7 @@ func TestConfigSanityRater(t *testing.T) { Enabled: true, StatSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -41,7 +41,7 @@ func TestConfigSanityRater(t *testing.T) { } cfg.ralsCfg.StatSConns = []string{} cfg.ralsCfg.ThresholdSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -65,13 +65,13 @@ func TestConfigSanityCDRServer(t *testing.T) { t.Errorf("Expected %+q, received %+q", expected, err) } cfg.cdrsCfg.EEsConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expected %+q, received %+q", expected, err) } cfg.cdrsCfg.ChargerSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -83,7 +83,7 @@ func TestConfigSanityCDRServer(t *testing.T) { cfg.cdrsCfg.ChargerSConns = []string{} cfg.cdrsCfg.RaterConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -95,7 +95,7 @@ func TestConfigSanityCDRServer(t *testing.T) { cfg.cdrsCfg.RaterConns = []string{} cfg.cdrsCfg.AttributeSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -107,7 +107,7 @@ func TestConfigSanityCDRServer(t *testing.T) { cfg.cdrsCfg.AttributeSConns = []string{} cfg.cdrsCfg.StatSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -119,7 +119,7 @@ func TestConfigSanityCDRServer(t *testing.T) { cfg.cdrsCfg.StatSConns = []string{} cfg.cdrsCfg.ThresholdSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -237,7 +237,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.sessionSCfg.TerminateAttempts = 1 cfg.sessionSCfg.ChargerSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -250,7 +250,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.chargerSCfg.Enabled = true cfg.sessionSCfg.RALsConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -263,7 +263,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.ralsCfg.Enabled = true cfg.sessionSCfg.ResSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -276,7 +276,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.resourceSCfg.Enabled = true cfg.sessionSCfg.ThreshSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -289,7 +289,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.thresholdSCfg.Enabled = true cfg.sessionSCfg.StatSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -302,7 +302,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.statsCfg.Enabled = true cfg.sessionSCfg.RouteSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -315,7 +315,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.routeSCfg.Enabled = true cfg.sessionSCfg.AttrSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -328,7 +328,7 @@ func TestConfigSanitySessionS(t *testing.T) { cfg.attributeSCfg.Enabled = true cfg.sessionSCfg.CDRsConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -374,7 +374,7 @@ func TestConfigSanityFreeSWITCHAgent(t *testing.T) { Enabled: true, SessionSConns: []string{utils.MetaInternal}, } - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -396,7 +396,7 @@ func TestConfigSanityKamailioAgent(t *testing.T) { } cfg.kamAgentCfg.SessionSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -418,7 +418,7 @@ func TestConfigSanityAsteriskAgent(t *testing.T) { } cfg.asteriskAgentCfg.SessionSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -462,7 +462,7 @@ func TestConfigSanityDAgent(t *testing.T) { } cfg.diameterAgentCfg.SessionSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -516,7 +516,7 @@ func TestConfigSanityRadiusAgent(t *testing.T) { } cfg.radiusAgentCfg.SessionSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -564,7 +564,7 @@ func TestConfigSanityDNSAgent(t *testing.T) { } cfg.dnsAgentCfg.SessionSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS)} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -611,7 +611,7 @@ func TestConfigSanityHTTPAgent1(t *testing.T) { }, }, } - expected := " not enabled but requested by <> HTTPAgent Template." + expected := " not enabled but requested by <> HTTPAgent Template" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -675,7 +675,7 @@ func TestConfigSanitySipAgent(t *testing.T) { t.Errorf("Expecting: %+q received: %+q", expected, err) } - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" cfg.sipAgentCfg.SessionSConns = []string{utils.MetaInternal} if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) @@ -724,7 +724,7 @@ func TestConfigSanityChargerS(t *testing.T) { Enabled: true, AttributeSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -741,7 +741,7 @@ func TestConfigSanityResourceLimiter(t *testing.T) { Enabled: true, ThresholdSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -758,7 +758,7 @@ func TestConfigSanityStatS(t *testing.T) { Enabled: true, ThresholdSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -774,7 +774,7 @@ func TestConfigSanityRouteS(t *testing.T) { cfg.routeSCfg.Enabled = true cfg.routeSCfg.ResourceSConns = []string{utils.MetaInternal} - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -786,7 +786,7 @@ func TestConfigSanityRouteS(t *testing.T) { cfg.routeSCfg.ResourceSConns = []string{} cfg.routeSCfg.StatSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -798,7 +798,7 @@ func TestConfigSanityRouteS(t *testing.T) { cfg.routeSCfg.StatSConns = []string{} cfg.routeSCfg.AttributeSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -810,7 +810,7 @@ func TestConfigSanityRouteS(t *testing.T) { cfg.routeSCfg.AttributeSConns = []string{} cfg.routeSCfg.RALsConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -831,7 +831,7 @@ func TestConfigSanityScheduler(t *testing.T) { cfg.schedulerCfg.Enabled = true cfg.schedulerCfg.CDRsConns = []string{utils.MetaInternal} - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -843,7 +843,7 @@ func TestConfigSanityScheduler(t *testing.T) { cfg.schedulerCfg.CDRsConns = []string{} cfg.schedulerCfg.ThreshSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -855,7 +855,7 @@ func TestConfigSanityScheduler(t *testing.T) { cfg.schedulerCfg.ThreshSConns = []string{} cfg.schedulerCfg.StatSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -878,7 +878,7 @@ func TestConfigSanityEventReader(t *testing.T) { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.ersCfg.SessionSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -994,7 +994,7 @@ func TestConfigSanityEventExporter(t *testing.T) { }, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.CheckConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -1245,7 +1245,7 @@ func TestConfigSanityAPIer(t *testing.T) { cfg, _ = NewDefaultCGRConfig() cfg.apier.AttributeSConns = []string{utils.MetaInternal} - if err := cfg.checkConfigSanity(); err == nil || err.Error() != " not enabled but requested by component." { + if err := cfg.checkConfigSanity(); err == nil || err.Error() != " not enabled but requested by component" { t.Error(err) } cfg.apier.AttributeSConns = []string{"test"} @@ -1257,7 +1257,7 @@ func TestConfigSanityAPIer(t *testing.T) { cfg.attributeSCfg.Enabled = true cfg.apier.SchedulerConns = []string{utils.MetaInternal} - if err := cfg.checkConfigSanity(); err == nil || err.Error() != " not enabled but requested by component." { + if err := cfg.checkConfigSanity(); err == nil || err.Error() != " not enabled but requested by component" { t.Error(err) } cfg.apier.SchedulerConns = []string{"test"} @@ -1273,7 +1273,7 @@ func TestConfigSanityDispatcher(t *testing.T) { Enabled: true, AttributeSConns: []string{utils.MetaInternal}, } - if err := cfg.checkConfigSanity(); err == nil || err.Error() != " not enabled but requested by component." { + if err := cfg.checkConfigSanity(); err == nil || err.Error() != " not enabled but requested by component" { t.Error(err) } cfg.dispatcherSCfg.AttributeSConns = []string{"test"} @@ -1342,14 +1342,14 @@ func TestCheckConfigSanity(t *testing.T) { Enabled: true, StatSConns: []string{utils.MetaInternal}, } - expected := " not enabled but requested by component." + expected := " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.statsCfg.Enabled = true cfg.ralsCfg.ThresholdSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -1364,27 +1364,27 @@ func TestCheckConfigSanity(t *testing.T) { Enabled: true, ChargerSConns: []string{utils.MetaInternal}, } - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.chargerSCfg.Enabled = true cfg.cdrsCfg.RaterConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.ralsCfg.Enabled = true cfg.cdrsCfg.AttributeSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } cfg.statsCfg.Enabled = false cfg.attributeSCfg.Enabled = true cfg.cdrsCfg.StatSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } @@ -1397,7 +1397,7 @@ func TestCheckConfigSanity(t *testing.T) { cfg.thresholdSCfg.Enabled = false cfg.cdrsCfg.OnlineCDRExports = []string{"stringx"} cfg.cdrsCfg.ThresholdSConns = []string{utils.MetaInternal} - expected = " not enabled but requested by component." + expected = " not enabled but requested by component" if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { t.Errorf("Expecting: %+q received: %+q", expected, err) } diff --git a/config/corescfg_test.go b/config/corescfg_test.go index bcb161550..55c450225 100644 --- a/config/corescfg_test.go +++ b/config/corescfg_test.go @@ -98,7 +98,7 @@ func TestCoreSAsMapInterface(t *testing.T) { } else if err = alS.loadFromJSONCfg(jsnalS); err != nil { t.Error(err) } else if rcv := alS.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } eMap[utils.CapsStatsIntervalCfg] = "1s" eMap[utils.ShutdownTimeoutCfg] = "1s" @@ -109,7 +109,7 @@ func TestCoreSAsMapInterface(t *testing.T) { CapsStrategy: utils.MetaBusy, } if rcv := alS.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -122,7 +122,7 @@ func TestCoreSCfgClone(t *testing.T) { } rcv := cS.Clone() if !reflect.DeepEqual(cS, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) } if rcv.Caps = 1; cS.Caps != 0 { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/datadbcfg_test.go b/config/datadbcfg_test.go index 7af8f071a..a21208e31 100644 --- a/config/datadbcfg_test.go +++ b/config/datadbcfg_test.go @@ -533,12 +533,12 @@ func TestDataDBPortStrconvAtoi(t *testing.T) { "db_port": 6079, } }` - if cfgJson, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONSTR); err != nil { + if cfgJSON, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONSTR); err != nil { t.Error(err) } else { - cfgJson.dataDbCfg.DataDbPort = "6o79" + cfgJSON.dataDbCfg.DataDbPort = "6o79" expected := "strconv.Atoi: parsing \"6o79\": invalid syntax" - if _, err := cfgJson.dataDbCfg.AsMapInterface(); err == nil || err.Error() != expected { + if _, err := cfgJSON.dataDbCfg.AsMapInterface(); err == nil || err.Error() != expected { t.Errorf("Expected %+q \n,received %+q", expected, err) } } diff --git a/config/dispatcherhcfg.go b/config/dispatcherhcfg.go index f1c47cd36..eac9b0569 100644 --- a/config/dispatcherhcfg.go +++ b/config/dispatcherhcfg.go @@ -32,7 +32,7 @@ type DispatcherHCfg struct { RegisterInterval time.Duration } -func (dps *DispatcherHCfg) loadFromJsonCfg(jsnCfg *DispatcherHJsonCfg) (err error) { +func (dps *DispatcherHCfg) loadFromJSONCfg(jsnCfg *DispatcherHJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -58,6 +58,7 @@ func (dps *DispatcherHCfg) loadFromJsonCfg(jsnCfg *DispatcherHJsonCfg) (err erro return } +// AsMapInterface returns the config as a map[string]interface{} func (dps *DispatcherHCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: dps.Enabled, @@ -79,12 +80,37 @@ func (dps *DispatcherHCfg) AsMapInterface() (initialMP map[string]interface{}) { return } +// Clone returns a deep copy of DispatcherHCfg +func (dps DispatcherHCfg) Clone() (cln *DispatcherHCfg) { + cln = &DispatcherHCfg{ + Enabled: dps.Enabled, + RegisterInterval: dps.RegisterInterval, + Hosts: make(map[string][]*DispatcherHRegistarCfg), + } + if dps.DispatchersConns != nil { + cln.DispatchersConns = make([]string, len(dps.DispatchersConns)) + for i, k := range dps.DispatchersConns { + cln.DispatchersConns[i] = k + } + } + for tnt, hosts := range dps.Hosts { + clnH := make([]*DispatcherHRegistarCfg, len(hosts)) + for i, host := range hosts { + clnH[i] = host.Clone() + } + cln.Hosts[tnt] = clnH + } + return +} + +// DispatcherHRegistarCfg describe the DispatcherHost that will be registered type DispatcherHRegistarCfg struct { ID string RegisterTransport string RegisterTLS bool } +// NewDispatcherHRegistarCfg returns a new DispatcherHRegistarCfg based on the config from json func NewDispatcherHRegistarCfg(jsnCfg DispatcherHRegistarJsonCfg) (dhr *DispatcherHRegistarCfg) { dhr = new(DispatcherHRegistarCfg) if jsnCfg.Id != nil { @@ -100,11 +126,20 @@ func NewDispatcherHRegistarCfg(jsnCfg DispatcherHRegistarJsonCfg) (dhr *Dispatch return } -func (dhr *DispatcherHRegistarCfg) AsMapInterface() (initialMP map[string]interface{}) { - initialMP = map[string]interface{}{ +// AsMapInterface returns the config as a map[string]interface{} +func (dhr *DispatcherHRegistarCfg) AsMapInterface() map[string]interface{} { + return map[string]interface{}{ utils.IDCfg: dhr.ID, utils.RegisterTransportCfg: dhr.RegisterTransport, utils.RegisterTLSCfg: dhr.RegisterTLS, } - return +} + +// Clone returns a deep copy of DispatcherHRegistarCfg +func (dhr DispatcherHRegistarCfg) Clone() (cln *DispatcherHRegistarCfg) { + return &DispatcherHRegistarCfg{ + ID: dhr.ID, + RegisterTransport: dhr.RegisterTransport, + RegisterTLS: dhr.RegisterTLS, + } } diff --git a/config/dispatcherhcfg_test.go b/config/dispatcherhcfg_test.go index 89bfc0f13..c32f08276 100644 --- a/config/dispatcherhcfg_test.go +++ b/config/dispatcherhcfg_test.go @@ -86,7 +86,7 @@ func TestDispatcherHCfgloadFromJsonCfg(t *testing.T) { } if jsnCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsnCfg.dispatcherHCfg.loadFromJsonCfg(jsonCfg); err != nil { + } else if err = jsnCfg.dispatcherHCfg.loadFromJSONCfg(jsonCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsnCfg.dispatcherHCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.dispatcherHCfg)) @@ -148,7 +148,7 @@ func TestDispatcherCfgParseWithNanoSec(t *testing.T) { expErrMessage := "time: unknown unit \"ss\" in duration \"1ss\"" if jsnCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsnCfg.dispatcherHCfg.loadFromJsonCfg(jsonCfg); err == nil || err.Error() != expErrMessage { + } else if err = jsnCfg.dispatcherHCfg.loadFromJSONCfg(jsonCfg); err == nil || err.Error() != expErrMessage { t.Errorf("Expected %+v \n, recevied %+v", expErrMessage, err) } } @@ -227,3 +227,45 @@ func TestDispatcherHCfgAsMapInterface2(t *testing.T) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } + +func TestDispatcherHCfgClone(t *testing.T) { + ban := &DispatcherHCfg{ + Enabled: true, + DispatchersConns: []string{"*conn1", "*conn2"}, + Hosts: map[string][]*DispatcherHRegistarCfg{ + utils.MetaDefault: { + { + ID: "Host1", + RegisterTransport: utils.MetaJSON, + }, + { + ID: "Host2", + RegisterTransport: utils.MetaGOB, + }, + }, + "cgrates.net": { + { + ID: "Host1", + RegisterTransport: utils.MetaJSON, + RegisterTLS: true, + }, + { + ID: "Host2", + RegisterTransport: utils.MetaGOB, + RegisterTLS: true, + }, + }, + }, + RegisterInterval: 5, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.DispatchersConns[0] = ""; ban.DispatchersConns[0] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.Hosts[utils.MetaDefault][0].ID = ""; ban.Hosts[utils.MetaDefault][0].ID != "Host1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/dispatcherscfg.go b/config/dispatcherscfg.go index 6a108876d..cda328f50 100644 --- a/config/dispatcherscfg.go +++ b/config/dispatcherscfg.go @@ -19,8 +19,6 @@ along with this program. If not, see package config import ( - "strings" - "github.com/cgrates/cgrates/utils" ) @@ -35,7 +33,7 @@ type DispatcherSCfg struct { NestedFields bool } -func (dps *DispatcherSCfg) loadFromJsonCfg(jsnCfg *DispatcherSJsonCfg) (err error) { +func (dps *DispatcherSCfg) loadFromJSONCfg(jsnCfg *DispatcherSJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -70,10 +68,9 @@ func (dps *DispatcherSCfg) loadFromJsonCfg(jsnCfg *DispatcherSJsonCfg) (err erro dps.AttributeSConns = make([]string, len(*jsnCfg.Attributes_conns)) for idx, connID := range *jsnCfg.Attributes_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + dps.AttributeSConns[idx] = connID if connID == utils.MetaInternal { dps.AttributeSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) - } else { - dps.AttributeSConns[idx] = connID } } } @@ -83,6 +80,7 @@ func (dps *DispatcherSCfg) loadFromJsonCfg(jsnCfg *DispatcherSJsonCfg) (err erro return nil } +// AsMapInterface returns the config as a map[string]interface{} func (dps *DispatcherSCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: dps.Enabled, @@ -113,13 +111,50 @@ func (dps *DispatcherSCfg) AsMapInterface() (initialMP map[string]interface{}) { if dps.AttributeSConns != nil { attributeSConns := make([]string, len(dps.AttributeSConns)) for i, item := range dps.AttributeSConns { + attributeSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) { - attributeSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes) - } else { - attributeSConns[i] = item + attributeSConns[i] = utils.MetaInternal } } initialMP[utils.AttributeSConnsCfg] = attributeSConns } return } + +// Clone returns a deep copy of DispatcherSCfg +func (dps DispatcherSCfg) Clone() (cln *DispatcherSCfg) { + cln = &DispatcherSCfg{ + Enabled: dps.Enabled, + IndexedSelects: dps.IndexedSelects, + NestedFields: dps.NestedFields, + } + + if dps.AttributeSConns != nil { + cln.AttributeSConns = make([]string, len(dps.AttributeSConns)) + for i, conn := range dps.AttributeSConns { + cln.AttributeSConns[i] = conn + } + } + if dps.StringIndexedFields != nil { + idx := make([]string, len(*dps.StringIndexedFields)) + for i, dx := range *dps.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if dps.PrefixIndexedFields != nil { + idx := make([]string, len(*dps.PrefixIndexedFields)) + for i, dx := range *dps.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if dps.SuffixIndexedFields != nil { + idx := make([]string, len(*dps.SuffixIndexedFields)) + for i, dx := range *dps.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx + } + return +} diff --git a/config/dispatcherscfg_test.go b/config/dispatcherscfg_test.go index cabeaa9f8..3e351fb65 100644 --- a/config/dispatcherscfg_test.go +++ b/config/dispatcherscfg_test.go @@ -46,7 +46,7 @@ func TestDispatcherSCfgloadFromJsonCfg(t *testing.T) { } if jsnCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsnCfg.dispatcherSCfg.loadFromJsonCfg(jsonCfg); err != nil { + } else if err = jsnCfg.dispatcherSCfg.loadFromJSONCfg(jsonCfg); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsnCfg.dispatcherSCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsnCfg.dispatcherSCfg)) @@ -127,3 +127,32 @@ func TestDispatcherSCfgAsMapInterface2(t *testing.T) { t.Errorf("Expected %+v, received %+v", eMap, rcv) } } +func TestDispatcherSCfgClone(t *testing.T) { + ban := &DispatcherSCfg{ + Enabled: true, + IndexedSelects: true, + StringIndexedFields: &[]string{"*req.prefix", "*req.indexed"}, + PrefixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"}, + SuffixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"}, + AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"}, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.AttributeSConns[1] = ""; ban.AttributeSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.prefix" { + t.Errorf("Expected clone to not modify the cloned") + } + + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.prefix" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.prefix" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/dnsagentcfg_test.go b/config/dnsagentcfg_test.go index 74593d9d6..dca7d9ca6 100644 --- a/config/dnsagentcfg_test.go +++ b/config/dnsagentcfg_test.go @@ -69,7 +69,7 @@ func TestDNSAgentCfgloadFromJsonCfg(t *testing.T) { } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.dnsAgentCfg.loadFromJsonCfg(jsnCfg, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err = jsonCfg.dnsAgentCfg.loadFromJSONCfg(jsnCfg, jsonCfg.generalCfg.RSRSep); err != nil { t.Error(err) } else if !reflect.DeepEqual(jsonCfg.dnsAgentCfg, expected) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.dnsAgentCfg)) @@ -118,7 +118,7 @@ func TestRequestProcessorDNSAgentloadFromJsonCfg(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err := jsonCfg.dnsAgentCfg.loadFromJsonCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + } else if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -142,7 +142,7 @@ func TestRequestProcessorDNSAgentloadFromJsonCfg1(t *testing.T) { } if jsonCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if err = jsonCfg.dnsAgentCfg.loadFromJsonCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err = jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err != nil { t.Error(err) } } @@ -162,7 +162,7 @@ func TestRequestProcessorReplyFieldsloadFromJsonCfg(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err := jsonCfg.dnsAgentCfg.loadFromJsonCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + } else if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -182,7 +182,7 @@ func TestRequestProcessorRequestFieldsloadFromJsonCfg(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err := jsonCfg.dnsAgentCfg.loadFromJsonCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + } else if err := jsonCfg.dnsAgentCfg.loadFromJSONCfg(cfgJSON, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -288,7 +288,7 @@ func TestRequestProcessorClone(t *testing.T) { } rcv := rp.Clone() if !reflect.DeepEqual(rp, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(rp), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(rp), utils.ToJSON(rcv)) } rcv.Filters[0] = "*string:~req.Account:1002" if rp.Filters[0] != "*string:~req.Account:1001" { diff --git a/config/dnsagntcfg.go b/config/dnsagntcfg.go index ce49f5b3b..2bdd588b1 100644 --- a/config/dnsagntcfg.go +++ b/config/dnsagntcfg.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// DNSAgentCfg the config section that describes the DNS Agent type DNSAgentCfg struct { Enabled bool Listen string @@ -33,7 +34,7 @@ type DNSAgentCfg struct { RequestProcessors []*RequestProcessor } -func (da *DNSAgentCfg) loadFromJsonCfg(jsnCfg *DNSAgentJsonCfg, sep string) (err error) { +func (da *DNSAgentCfg) loadFromJSONCfg(jsnCfg *DNSAgentJsonCfg, sep string) (err error) { if jsnCfg == nil { return nil } @@ -53,10 +54,9 @@ func (da *DNSAgentCfg) loadFromJsonCfg(jsnCfg *DNSAgentJsonCfg, sep string) (err da.SessionSConns = make([]string, len(*jsnCfg.Sessions_conns)) for idx, connID := range *jsnCfg.Sessions_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + da.SessionSConns[idx] = connID if connID == utils.MetaInternal { da.SessionSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) - } else { - da.SessionSConns[idx] = connID } } } @@ -82,6 +82,7 @@ func (da *DNSAgentCfg) loadFromJsonCfg(jsnCfg *DNSAgentJsonCfg, sep string) (err return } +// AsMapInterface returns the config as a map[string]interface{} func (da *DNSAgentCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: da.Enabled, @@ -146,12 +147,12 @@ func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg, sep stri } } if jsnCfg.Request_fields != nil { - if rp.RequestFields, err = FCTemplatesFromFCTemplatesJsonCfg(*jsnCfg.Request_fields, sep); err != nil { + if rp.RequestFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Request_fields, sep); err != nil { return } } if jsnCfg.Reply_fields != nil { - if rp.ReplyFields, err = FCTemplatesFromFCTemplatesJsonCfg(*jsnCfg.Reply_fields, sep); err != nil { + if rp.ReplyFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Reply_fields, sep); err != nil { return } } diff --git a/config/eescfg.go b/config/eescfg.go index 3ab36b061..56caebcce 100644 --- a/config/eescfg.go +++ b/config/eescfg.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// EEsCfg the config for Event Exporters type EEsCfg struct { Enabled bool AttributeSConns []string @@ -31,6 +32,7 @@ type EEsCfg struct { Exporters []*EventExporterCfg } +// GetDefaultExporter returns the exporter with the *default id func (eeS *EEsCfg) GetDefaultExporter() *EventExporterCfg { for _, es := range eeS.Exporters { if es.ID == utils.MetaDefault { @@ -151,6 +153,7 @@ func (eeS *EEsCfg) AsMapInterface(separator string) (initialMP map[string]interf return } +// EventExporterCfg the config for a Event Exporter type EventExporterCfg struct { ID string Type string @@ -223,7 +226,7 @@ func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTe eeC.headerFields = make([]*FCTemplate, 0) eeC.contentFields = make([]*FCTemplate, 0) eeC.trailerFields = make([]*FCTemplate, 0) - eeC.Fields, err = FCTemplatesFromFCTemplatesJsonCfg(*jsnEec.Fields, separator) + eeC.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnEec.Fields, separator) if err != nil { return } @@ -254,14 +257,17 @@ func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTe return } +// HeaderFields returns the fields that have *hdr prefix func (eeC *EventExporterCfg) HeaderFields() []*FCTemplate { return eeC.headerFields } +// ContentFields returns the fields that do not have *hdr or *trl prefix func (eeC *EventExporterCfg) ContentFields() []*FCTemplate { return eeC.contentFields } +// TrailerFields returns the fields that have *trl prefix func (eeC *EventExporterCfg) TrailerFields() []*FCTemplate { return eeC.trailerFields } diff --git a/config/eescfg_test.go b/config/eescfg_test.go index 6a728aeb7..035307e51 100644 --- a/config/eescfg_test.go +++ b/config/eescfg_test.go @@ -200,7 +200,7 @@ func TestEESClone(t *testing.T) { } func TestEventExporterFieldloadFromJsonCfg(t *testing.T) { - eventExporterJson := &EEsJsonCfg{ + eventExporterJSON := &EEsJsonCfg{ Exporters: &[]*EventExporterJsonCfg{ { Fields: &[]*FcTemplateJsonCfg{ @@ -214,13 +214,13 @@ func TestEventExporterFieldloadFromJsonCfg(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJson, jsonCfg.templates, jsonCfg.generalCfg.RSRSep, jsonCfg.dfltEvExp); err == nil || err.Error() != expected { + } else if err = jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep, jsonCfg.dfltEvExp); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } func TestEventExporterFieldloadFromJsonCfg1(t *testing.T) { - eventExporterJson := &EEsJsonCfg{ + eventExporterJSON := &EEsJsonCfg{ Exporters: &[]*EventExporterJsonCfg{ { Fields: &[]*FcTemplateJsonCfg{ @@ -234,7 +234,7 @@ func TestEventExporterFieldloadFromJsonCfg1(t *testing.T) { expected := "no template with id: <>" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJson, jsonCfg.templates, jsonCfg.generalCfg.RSRSep, jsonCfg.dfltEvExp); err == nil || err.Error() != expected { + } else if err = jsonCfg.eesCfg.loadFromJSONCfg(eventExporterJSON, jsonCfg.templates, jsonCfg.generalCfg.RSRSep, jsonCfg.dfltEvExp); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } diff --git a/config/erscfg.go b/config/erscfg.go index 3ad5ce40c..62024da4a 100644 --- a/config/erscfg.go +++ b/config/erscfg.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// ERsCfg the config for ERs type ERsCfg struct { Enabled bool SessionSConns []string @@ -123,6 +124,7 @@ func (erS *ERsCfg) AsMapInterface(separator string) (initialMP map[string]interf return } +// EventReaderCfg the event for the Event Reader type EventReaderCfg struct { ID string Type string @@ -211,7 +213,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat er.PartialCacheExpiryAction = *jsnCfg.Partial_cache_expiry_action } if jsnCfg.Fields != nil { - if er.Fields, err = FCTemplatesFromFCTemplatesJsonCfg(*jsnCfg.Fields, sep); err != nil { + if er.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Fields, sep); err != nil { return err } if tpls, err := InflateTemplates(er.Fields, msgTemplates); err != nil { @@ -221,7 +223,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat } } if jsnCfg.Cache_dump_fields != nil { - if er.CacheDumpFields, err = FCTemplatesFromFCTemplatesJsonCfg(*jsnCfg.Cache_dump_fields, sep); err != nil { + if er.CacheDumpFields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Cache_dump_fields, sep); err != nil { return err } if tpls, err := InflateTemplates(er.CacheDumpFields, msgTemplates); err != nil { diff --git a/config/erscfg_test.go b/config/erscfg_test.go index 4456d2fb4..0b1421206 100644 --- a/config/erscfg_test.go +++ b/config/erscfg_test.go @@ -903,7 +903,7 @@ func TestERsCfgAsMapInterfaceCase1(t *testing.T) { if cfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else if rcv := cfg.ersCfg.AsMapInterface(utils.INFIELD_SEP); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -1009,7 +1009,7 @@ func TestERSCfgAsMapInterfaceCase2(t *testing.T) { if cfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else if rcv := cfg.ersCfg.AsMapInterface(utils.INFIELD_SEP); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/fctemplate.go b/config/fctemplate.go index 4fb79b455..745d862fd 100644 --- a/config/fctemplate.go +++ b/config/fctemplate.go @@ -26,7 +26,8 @@ import ( "github.com/cgrates/cgrates/utils" ) -func NewFCTemplateFromFCTemplateJsonCfg(jsnCfg *FcTemplateJsonCfg, separator string) (*FCTemplate, error) { +// NewFCTemplateFromFCTemplateJSONCfg creates a FCTemplate from json +func NewFCTemplateFromFCTemplateJSONCfg(jsnCfg *FcTemplateJsonCfg, separator string) (*FCTemplate, error) { fcTmp := new(FCTemplate) var err error if jsnCfg.Type != nil { @@ -97,6 +98,7 @@ func NewFCTemplateFromFCTemplateJsonCfg(jsnCfg *FcTemplateJsonCfg, separator str return fcTmp, nil } +// FCTemplate the teplate for a field type FCTemplate struct { Tag string Type string // Type of field @@ -120,10 +122,11 @@ type FCTemplate struct { pathSlice []string // Used when we set a NMItem to not recreate this slice for every itemsc } -func FCTemplatesFromFCTemplatesJsonCfg(jsnCfgFlds []*FcTemplateJsonCfg, separator string) (retFields []*FCTemplate, err error) { +// FCTemplatesFromFCTemplatesJSONCfg will build a list of FCTemplates from json +func FCTemplatesFromFCTemplatesJSONCfg(jsnCfgFlds []*FcTemplateJsonCfg, separator string) (retFields []*FCTemplate, err error) { retFields = make([]*FCTemplate, len(jsnCfgFlds)) for i, jsnFld := range jsnCfgFlds { - if retFields[i], err = NewFCTemplateFromFCTemplateJsonCfg(jsnFld, separator); err != nil { + if retFields[i], err = NewFCTemplateFromFCTemplateJSONCfg(jsnFld, separator); err != nil { return nil, err } } @@ -201,6 +204,7 @@ func (fc FCTemplate) Clone() (cln *FCTemplate) { return } +// FcTemplates the config for the templates type FcTemplates map[string][]*FCTemplate // AsMapInterface returns the config as a map[string]interface{} diff --git a/config/fctemplate_test.go b/config/fctemplate_test.go index 8b579dfa1..a4dd09dd2 100644 --- a/config/fctemplate_test.go +++ b/config/fctemplate_test.go @@ -42,7 +42,7 @@ func TestNewFCTemplateFromFCTemplateJsonCfg(t *testing.T) { Layout: time.RFC3339, } expected.ComputePath() - if rcv, err := NewFCTemplateFromFCTemplateJsonCfg(jsonCfg, utils.INFIELD_SEP); err != nil { + if rcv, err := NewFCTemplateFromFCTemplateJSONCfg(jsonCfg, utils.INFIELD_SEP); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, rcv) { t.Errorf("expected: %s ,received: %s", utils.ToJSON(expected), utils.ToJSON(rcv)) @@ -130,7 +130,7 @@ func TestFCTemplatesFromFCTemplatesJsonCfg(t *testing.T) { for _, v := range expected { v.ComputePath() } - if rcv, err := FCTemplatesFromFCTemplatesJsonCfg(jsnCfgs, utils.INFIELD_SEP); err != nil { + if rcv, err := FCTemplatesFromFCTemplatesJSONCfg(jsnCfgs, utils.INFIELD_SEP); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, rcv) { t.Errorf("expected: %s ,received: %s", utils.ToJSON(expected), utils.ToJSON(rcv)) diff --git a/config/fwvdp.go b/config/fwvdp.go index 386cd1537..804ac6272 100644 --- a/config/fwvdp.go +++ b/config/fwvdp.go @@ -27,7 +27,7 @@ import ( "github.com/cgrates/cgrates/utils" ) -// NewfwvProvider constructs a utils.DataProvider +// NewFWVProvider constructs a utils.DataProvider func NewFWVProvider(record string) (dP utils.DataProvider) { dP = &FWVProvider{ req: record, @@ -36,7 +36,7 @@ func NewFWVProvider(record string) (dP utils.DataProvider) { return } -// fwvProvider implements engine.utils.DataProvider so we can pass it to filters +// FWVProvider implements engine.utils.DataProvider so we can pass it to filters type FWVProvider struct { req string cache utils.MapStorage diff --git a/config/loadercgrcfg.go b/config/loadercgrcfg.go index 67f4d5806..56aa0d4b9 100644 --- a/config/loadercgrcfg.go +++ b/config/loadercgrcfg.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// LoaderCgrCfg the config for cgr-loader type LoaderCgrCfg struct { TpID string DataPath string diff --git a/config/loadercgrcfg_test.go b/config/loadercgrcfg_test.go index b5d582a03..b5208ec45 100644 --- a/config/loadercgrcfg_test.go +++ b/config/loadercgrcfg_test.go @@ -98,7 +98,7 @@ func TestLoaderCgrCfgClone(t *testing.T) { } rcv := ban.Clone() if !reflect.DeepEqual(ban, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) } if rcv.CachesConns[0] = ""; ban.CachesConns[0] != "*internal:*caches" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/loaderscfg.go b/config/loaderscfg.go index 8648168e9..ef24f9600 100644 --- a/config/loaderscfg.go +++ b/config/loaderscfg.go @@ -89,7 +89,7 @@ func (self *LoaderDataType) loadFromJsonCfg(jsnCfg *LoaderJsonDataType, msgTempl self.Flags = utils.FlagsWithParamsFromSlice(*jsnCfg.Flags) } if jsnCfg.Fields != nil { - if self.Fields, err = FCTemplatesFromFCTemplatesJsonCfg(*jsnCfg.Fields, separator); err != nil { + if self.Fields, err = FCTemplatesFromFCTemplatesJSONCfg(*jsnCfg.Fields, separator); err != nil { return } if tpls, err := InflateTemplates(self.Fields, msgTemplates); err != nil { diff --git a/config/loaderscfg_test.go b/config/loaderscfg_test.go index accfe4505..7193e7080 100644 --- a/config/loaderscfg_test.go +++ b/config/loaderscfg_test.go @@ -116,7 +116,7 @@ func TestLoaderSCfgloadFromJsonCfgCase2(t *testing.T) { } func TestLoaderSCfgloadFromJsonCfgCase3(t *testing.T) { - cfgJson := &LoaderJsonCfg{ + cfg := &LoaderJsonCfg{ Data: &[]*LoaderJsonDataType{ { Fields: &[]*FcTemplateJsonCfg{ @@ -130,13 +130,13 @@ func TestLoaderSCfgloadFromJsonCfgCase3(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err := jsonCfg.loaderCfg[0].loadFromJsonCfg(cfgJson, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + } else if err := jsonCfg.loaderCfg[0].loadFromJsonCfg(cfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } func TestLoaderSCfgloadFromJsonCfgCase4(t *testing.T) { - cfgJson := &LoaderJsonCfg{ + cfg := &LoaderJsonCfg{ Data: &[]*LoaderJsonDataType{ { Fields: &[]*FcTemplateJsonCfg{ @@ -150,13 +150,13 @@ func TestLoaderSCfgloadFromJsonCfgCase4(t *testing.T) { expected := "no template with id: <>" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.loaderCfg[0].loadFromJsonCfg(cfgJson, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { + } else if err = jsonCfg.loaderCfg[0].loadFromJsonCfg(cfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } func TestLoaderSCfgloadFromJsonCfgCase5(t *testing.T) { - cfgJson := &LoaderJsonCfg{ + cfg := &LoaderJsonCfg{ Data: &[]*LoaderJsonDataType{ { Fields: &[]*FcTemplateJsonCfg{ @@ -200,7 +200,7 @@ func TestLoaderSCfgloadFromJsonCfgCase5(t *testing.T) { } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.loaderCfg[0].loadFromJsonCfg(cfgJson, msgTemplates, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err = jsonCfg.loaderCfg[0].loadFromJsonCfg(cfg, msgTemplates, jsonCfg.generalCfg.RSRSep); err != nil { t.Error(err) } else if !reflect.DeepEqual(jsonCfg.loaderCfg[0].Data[0].Fields[0], expectedFields[0].Data[0].Fields[0]) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expectedFields[0].Data[0].Fields[0]), utils.ToJSON(jsonCfg.loaderCfg[0].Data[0].Fields[0])) @@ -208,12 +208,12 @@ func TestLoaderSCfgloadFromJsonCfgCase5(t *testing.T) { } func TestLoaderSCfgloadFromJsonCfgCase6(t *testing.T) { - cfgJson := &LoaderJsonCfg{ + cfg := &LoaderJsonCfg{ Data: &[]*LoaderJsonDataType{nil}, } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.loaderCfg[0].loadFromJsonCfg(cfgJson, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { + } else if err = jsonCfg.loaderCfg[0].loadFromJsonCfg(cfg, jsonCfg.templates, jsonCfg.generalCfg.RSRSep); err != nil { t.Error(err) } } diff --git a/config/mailercfg_test.go b/config/mailercfg_test.go index 7de2800a6..a08281f6f 100644 --- a/config/mailercfg_test.go +++ b/config/mailercfg_test.go @@ -94,7 +94,7 @@ func TestMailerCfgClone(t *testing.T) { } rcv := cS.Clone() if !reflect.DeepEqual(cS, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(cS), utils.ToJSON(rcv)) } if rcv.MailerServer = ""; cS.MailerServer != "localhost" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/migratorcfg.go b/config/migratorcfg.go index c07ebd862..30fa15da0 100644 --- a/config/migratorcfg.go +++ b/config/migratorcfg.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// MigratorCgrCfg the migrator config section type MigratorCgrCfg struct { OutDataDBType string OutDataDBHost string diff --git a/config/migratorcfg_test.go b/config/migratorcfg_test.go index 65db72ca6..b36f46030 100644 --- a/config/migratorcfg_test.go +++ b/config/migratorcfg_test.go @@ -75,12 +75,12 @@ func TestMigratorCgrCfgloadFromJsonCfg(t *testing.T) { utils.RedisSentinelNameCfg: utils.EmptyString, }, } - if cfgJson, err := NewDefaultCGRConfig(); err != nil { + if cfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = cfgJson.migratorCgrCfg.loadFromJSONCfg(cfgJSON); err != nil { + } else if err = cfg.migratorCgrCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) - } else if !reflect.DeepEqual(expected, cfgJson.migratorCgrCfg) { - t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfgJson.migratorCgrCfg)) + } else if !reflect.DeepEqual(expected, cfg.migratorCgrCfg) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfg.migratorCgrCfg)) } } @@ -248,7 +248,7 @@ func TestMigratorCgrCfgClone(t *testing.T) { } rcv := sa.Clone() if !reflect.DeepEqual(sa, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) } if rcv.UsersFilters[0] = ""; sa.UsersFilters[0] != utils.Account { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/multifiles_it_test.go b/config/multifiles_it_test.go index d5878422a..04f0144b1 100644 --- a/config/multifiles_it_test.go +++ b/config/multifiles_it_test.go @@ -84,8 +84,8 @@ func TestMfEnvReaderITRead(t *testing.T) { } func TestMfHttpAgentMultipleFields(t *testing.T) { - if len(mfCgrCfg.HttpAgentCfg()) != 2 { - t.Errorf("Expected: 2, received: %+v", len(mfCgrCfg.HttpAgentCfg())) + if len(mfCgrCfg.HTTPAgentCfg()) != 2 { + t.Errorf("Expected: 2, received: %+v", len(mfCgrCfg.HTTPAgentCfg())) } expected := HttpAgentCfgs{ { @@ -195,7 +195,7 @@ func TestMfHttpAgentMultipleFields(t *testing.T) { } } - if !reflect.DeepEqual(mfCgrCfg.HttpAgentCfg(), expected) { - t.Errorf("Expected: %+v\n, received: %+v", utils.ToJSON(expected), utils.ToJSON(mfCgrCfg.HttpAgentCfg())) + if !reflect.DeepEqual(mfCgrCfg.HTTPAgentCfg(), expected) { + t.Errorf("Expected: %+v\n, received: %+v", utils.ToJSON(expected), utils.ToJSON(mfCgrCfg.HTTPAgentCfg())) } } diff --git a/config/objdp.go b/config/objdp.go index 3e19f002a..4d790ae78 100644 --- a/config/objdp.go +++ b/config/objdp.go @@ -26,7 +26,7 @@ import ( "github.com/cgrates/cgrates/utils" ) -//NewObjectDP constructs a utils.DataProvider +// NewObjectDP constructs a utils.DataProvider func NewObjectDP(obj interface{}) (dP utils.DataProvider) { dP = &ObjectDP{ obj: obj, @@ -35,6 +35,7 @@ func NewObjectDP(obj interface{}) (dP utils.DataProvider) { return } +// ObjectDP implements the DataProvider for any interface{} type ObjectDP struct { obj interface{} cache map[string]interface{} diff --git a/config/radiuscfg_test.go b/config/radiuscfg_test.go index 49962b098..7bc310e0f 100644 --- a/config/radiuscfg_test.go +++ b/config/radiuscfg_test.go @@ -87,12 +87,12 @@ func TestRadiusAgentCfgloadFromJsonCfgCase1(t *testing.T) { for _, r := range expected.RequestProcessors[0].ReplyFields { r.ComputePath() } - if cfgJson, err := NewDefaultCGRConfig(); err != nil { + if cfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = cfgJson.radiusAgentCfg.loadFromJsonCfg(cfgJSON, cfgJson.generalCfg.RSRSep); err != nil { + } else if err = cfg.radiusAgentCfg.loadFromJsonCfg(cfgJSON, cfg.generalCfg.RSRSep); err != nil { t.Error(err) - } else if !reflect.DeepEqual(expected, cfgJson.radiusAgentCfg) { - t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfgJson.radiusAgentCfg)) + } else if !reflect.DeepEqual(expected, cfg.radiusAgentCfg) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfg.radiusAgentCfg)) } } diff --git a/config/ratescfg.go b/config/ratescfg.go index 7c9ed1cee..c9f1fef25 100644 --- a/config/ratescfg.go +++ b/config/ratescfg.go @@ -22,6 +22,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// RateSCfg the rates config section type RateSCfg struct { Enabled bool IndexedSelects bool diff --git a/config/ratescfg_test.go b/config/ratescfg_test.go index fdbb58b0c..b6ce15944 100644 --- a/config/ratescfg_test.go +++ b/config/ratescfg_test.go @@ -135,7 +135,7 @@ func TestRateSCfgClone(t *testing.T) { } rcv := sa.Clone() if !reflect.DeepEqual(sa, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) } (*rcv.StringIndexedFields)[0] = "" if (*sa.StringIndexedFields)[0] != "*req.index1" { diff --git a/config/resourcescfg.go b/config/resourcescfg.go index 897ae5e2b..42cb25554 100644 --- a/config/resourcescfg.go +++ b/config/resourcescfg.go @@ -19,12 +19,12 @@ along with this program. If not, see package config import ( - "strings" "time" "github.com/cgrates/cgrates/utils" ) +// ResourceSConfig is resorces section config type ResourceSConfig struct { Enabled bool IndexedSelects bool @@ -36,7 +36,7 @@ type ResourceSConfig struct { NestedFields bool } -func (rlcfg *ResourceSConfig) loadFromJsonCfg(jsnCfg *ResourceSJsonCfg) (err error) { +func (rlcfg *ResourceSConfig) loadFromJSONCfg(jsnCfg *ResourceSJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -50,10 +50,9 @@ func (rlcfg *ResourceSConfig) loadFromJsonCfg(jsnCfg *ResourceSJsonCfg) (err err rlcfg.ThresholdSConns = make([]string, len(*jsnCfg.Thresholds_conns)) for idx, conn := range *jsnCfg.Thresholds_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + rlcfg.ThresholdSConns[idx] = conn if conn == utils.MetaInternal { rlcfg.ThresholdSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) - } else { - rlcfg.ThresholdSConns[idx] = conn } } } @@ -89,19 +88,20 @@ func (rlcfg *ResourceSConfig) loadFromJsonCfg(jsnCfg *ResourceSJsonCfg) (err err return nil } +// AsMapInterface returns the config as a map[string]interface{} func (rlcfg *ResourceSConfig) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: rlcfg.Enabled, utils.IndexedSelectsCfg: rlcfg.IndexedSelects, utils.NestedFieldsCfg: rlcfg.NestedFields, + utils.StoreIntervalCfg: utils.EmptyString, } if rlcfg.ThresholdSConns != nil { thresholdSConns := make([]string, len(rlcfg.ThresholdSConns)) for i, item := range rlcfg.ThresholdSConns { + thresholdSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) { - thresholdSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds) - } else { - thresholdSConns[i] = item + thresholdSConns[i] = utils.MetaInternal } } initialMP[utils.ThresholdSConnsCfg] = thresholdSConns @@ -129,8 +129,45 @@ func (rlcfg *ResourceSConfig) AsMapInterface() (initialMP map[string]interface{} } if rlcfg.StoreInterval != 0 { initialMP[utils.StoreIntervalCfg] = rlcfg.StoreInterval.String() - } else { - initialMP[utils.StoreIntervalCfg] = utils.EmptyString + } + return +} + +// Clone returns a deep copy of ResourceSConfig +func (rlcfg ResourceSConfig) Clone() (cln *ResourceSConfig) { + cln = &ResourceSConfig{ + Enabled: rlcfg.Enabled, + IndexedSelects: rlcfg.IndexedSelects, + StoreInterval: rlcfg.StoreInterval, + NestedFields: rlcfg.NestedFields, + } + if rlcfg.ThresholdSConns != nil { + cln.ThresholdSConns = make([]string, len(rlcfg.ThresholdSConns)) + for i, con := range rlcfg.ThresholdSConns { + cln.ThresholdSConns[i] = con + } + } + + if rlcfg.StringIndexedFields != nil { + idx := make([]string, len(*rlcfg.StringIndexedFields)) + for i, dx := range *rlcfg.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if rlcfg.PrefixIndexedFields != nil { + idx := make([]string, len(*rlcfg.PrefixIndexedFields)) + for i, dx := range *rlcfg.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if rlcfg.SuffixIndexedFields != nil { + idx := make([]string, len(*rlcfg.SuffixIndexedFields)) + for i, dx := range *rlcfg.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx } return } diff --git a/config/resourcescfg_test.go b/config/resourcescfg_test.go index a9619560c..940a43df3 100644 --- a/config/resourcescfg_test.go +++ b/config/resourcescfg_test.go @@ -46,12 +46,12 @@ func TestResourceSConfigloadFromJsonCfgCase1(t *testing.T) { SuffixIndexedFields: &[]string{"*req.index1"}, NestedFields: true, } - if cfgJson, err := NewDefaultCGRConfig(); err != nil { + if cfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = cfgJson.resourceSCfg.loadFromJsonCfg(cfgJSON); err != nil { + } else if err = cfg.resourceSCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) - } else if !reflect.DeepEqual(expected, cfgJson.resourceSCfg) { - t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfgJson.resourceSCfg)) + } else if !reflect.DeepEqual(expected, cfg.resourceSCfg) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(cfg.resourceSCfg)) } } @@ -62,7 +62,7 @@ func TestResourceSConfigloadFromJsonCfgCase2(t *testing.T) { expected := "time: unknown unit \"ss\" in duration \"2ss\"" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.resourceSCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.resourceSCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -116,3 +116,32 @@ func TestResourceSConfigAsMapInterface1(t *testing.T) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } + +func TestResourceSConfigClone(t *testing.T) { + ban := &ResourceSConfig{ + Enabled: true, + IndexedSelects: true, + StoreInterval: 2 * time.Second, + ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"}, + StringIndexedFields: &[]string{"*req.index1"}, + PrefixIndexedFields: &[]string{"*req.index1"}, + SuffixIndexedFields: &[]string{"*req.index1"}, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.ThresholdSConns[1] = ""; ban.ThresholdSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/routescfg.go b/config/routescfg.go index 82044889a..accab5e6c 100644 --- a/config/routescfg.go +++ b/config/routescfg.go @@ -19,8 +19,6 @@ along with this program. If not, see package config import ( - "strings" - "github.com/cgrates/cgrates/utils" ) @@ -40,7 +38,7 @@ type RouteSCfg struct { NestedFields bool } -func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { +func (rts *RouteSCfg) loadFromJSONCfg(jsnCfg *RouteSJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -75,10 +73,9 @@ func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { rts.AttributeSConns = make([]string, len(*jsnCfg.Attributes_conns)) for idx, conn := range *jsnCfg.Attributes_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + rts.AttributeSConns[idx] = conn if conn == utils.MetaInternal { rts.AttributeSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) - } else { - rts.AttributeSConns[idx] = conn } } } @@ -86,10 +83,9 @@ func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { rts.ResourceSConns = make([]string, len(*jsnCfg.Resources_conns)) for idx, conn := range *jsnCfg.Resources_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + rts.ResourceSConns[idx] = conn if conn == utils.MetaInternal { rts.ResourceSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) - } else { - rts.ResourceSConns[idx] = conn } } } @@ -97,10 +93,9 @@ func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { rts.StatSConns = make([]string, len(*jsnCfg.Stats_conns)) for idx, conn := range *jsnCfg.Stats_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + rts.StatSConns[idx] = conn if conn == utils.MetaInternal { rts.StatSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats) - } else { - rts.StatSConns[idx] = conn } } } @@ -108,10 +103,9 @@ func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { rts.RALsConns = make([]string, len(*jsnCfg.Rals_conns)) for idx, conn := range *jsnCfg.Rals_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + rts.RALsConns[idx] = conn if conn == utils.MetaInternal { rts.RALsConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder) - } else { - rts.RALsConns[idx] = conn } } } @@ -119,10 +113,9 @@ func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { rts.RateSConns = make([]string, len(*jsnCfg.Rates_conns)) for idx, conn := range *jsnCfg.Rates_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + rts.RateSConns[idx] = conn if conn == utils.MetaInternal { rts.RateSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS) - } else { - rts.RateSConns[idx] = conn } } } @@ -135,6 +128,7 @@ func (rts *RouteSCfg) loadFromJsonCfg(jsnCfg *RouteSJsonCfg) (err error) { return nil } +// AsMapInterface returns the config as a map[string]interface{} func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: rts.Enabled, @@ -166,10 +160,9 @@ func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { if rts.AttributeSConns != nil { attributeSConns := make([]string, len(rts.AttributeSConns)) for i, item := range rts.AttributeSConns { + attributeSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) { - attributeSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes) - } else { - attributeSConns[i] = item + attributeSConns[i] = utils.MetaInternal } } initialMP[utils.AttributeSConnsCfg] = attributeSConns @@ -177,10 +170,9 @@ func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { if rts.RALsConns != nil { ralSConns := make([]string, len(rts.RALsConns)) for i, item := range rts.RALsConns { + ralSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder) { - ralSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder) - } else { - ralSConns[i] = item + ralSConns[i] = utils.MetaInternal } } initialMP[utils.RALsConnsCfg] = ralSConns @@ -188,10 +180,9 @@ func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { if rts.ResourceSConns != nil { resourceSConns := make([]string, len(rts.ResourceSConns)) for i, item := range rts.ResourceSConns { + resourceSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) { - resourceSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaResources) - } else { - resourceSConns[i] = item + resourceSConns[i] = utils.MetaInternal } } initialMP[utils.ResourceSConnsCfg] = resourceSConns @@ -199,10 +190,9 @@ func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { if rts.StatSConns != nil { statSConns := make([]string, len(rts.StatSConns)) for i, item := range rts.StatSConns { + statSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) { - statSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS) - } else { - statSConns[i] = item + statSConns[i] = utils.MetaInternal } } initialMP[utils.StatSConnsCfg] = statSConns @@ -210,13 +200,75 @@ func (rts *RouteSCfg) AsMapInterface() (initialMP map[string]interface{}) { if rts.RateSConns != nil { rateSConns := make([]string, len(rts.RateSConns)) for i, item := range rts.RateSConns { + rateSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS) { - rateSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaRateS) - } else { - rateSConns[i] = item + rateSConns[i] = utils.MetaInternal } } initialMP[utils.RateSConnsCfg] = rateSConns } return } + +// Clone returns a deep copy of RouteSCfg +func (rts RouteSCfg) Clone() (cln *RouteSCfg) { + cln = &RouteSCfg{ + Enabled: rts.Enabled, + IndexedSelects: rts.IndexedSelects, + DefaultRatio: rts.DefaultRatio, + NestedFields: rts.NestedFields, + } + if rts.AttributeSConns != nil { + cln.AttributeSConns = make([]string, len(rts.AttributeSConns)) + for i, con := range rts.AttributeSConns { + cln.AttributeSConns[i] = con + } + } + if rts.ResourceSConns != nil { + cln.ResourceSConns = make([]string, len(rts.ResourceSConns)) + for i, con := range rts.ResourceSConns { + cln.ResourceSConns[i] = con + } + } + if rts.StatSConns != nil { + cln.StatSConns = make([]string, len(rts.StatSConns)) + for i, con := range rts.StatSConns { + cln.StatSConns[i] = con + } + } + if rts.RALsConns != nil { + cln.RALsConns = make([]string, len(rts.RALsConns)) + for i, con := range rts.RALsConns { + cln.RALsConns[i] = con + } + } + if rts.RateSConns != nil { + cln.RateSConns = make([]string, len(rts.RateSConns)) + for i, con := range rts.RateSConns { + cln.RateSConns[i] = con + } + } + + if rts.StringIndexedFields != nil { + idx := make([]string, len(*rts.StringIndexedFields)) + for i, dx := range *rts.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if rts.PrefixIndexedFields != nil { + idx := make([]string, len(*rts.PrefixIndexedFields)) + for i, dx := range *rts.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if rts.SuffixIndexedFields != nil { + idx := make([]string, len(*rts.SuffixIndexedFields)) + for i, dx := range *rts.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx + } + return +} diff --git a/config/routescfg_test.go b/config/routescfg_test.go index 4cb0a67d6..99fc9728e 100644 --- a/config/routescfg_test.go +++ b/config/routescfg_test.go @@ -55,7 +55,7 @@ func TestRouteSCfgloadFromJsonCfg(t *testing.T) { } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.routeSCfg.loadFromJsonCfg(cfgJSON); err != nil { + } else if err = jsonCfg.routeSCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsonCfg.routeSCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.routeSCfg)) @@ -123,3 +123,48 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } + +func TestRouteSCfgClone(t *testing.T) { + ban := &RouteSCfg{ + Enabled: true, + IndexedSelects: true, + StringIndexedFields: &[]string{"*req.index1"}, + PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"}, + SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"}, + AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "conn1"}, + ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"}, + StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS), "conn1"}, + RALsConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder), "conn1"}, + RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS), "conn1"}, + DefaultRatio: 10, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.AttributeSConns[1] = ""; ban.AttributeSConns[1] != "conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.ResourceSConns[1] = ""; ban.ResourceSConns[1] != "conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.StatSConns[1] = ""; ban.StatSConns[1] != "conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.RALsConns[1] = ""; ban.RALsConns[1] != "conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if rcv.RateSConns[1] = ""; ban.RateSConns[1] != "conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/rsrparser.go b/config/rsrparser.go index edf19cd0f..24a427175 100644 --- a/config/rsrparser.go +++ b/config/rsrparser.go @@ -31,6 +31,7 @@ var ( rulesRgxp = regexp.MustCompile(`(?:(.*[^\\])\/(.*[^\\])*\/){1,}`) ) +// NewRSRParsers creates a new RSRParsers by spliting the rule using the separator func NewRSRParsers(parsersRules string, rsrSeparator string) (prsrs RSRParsers, err error) { if parsersRules == utils.EmptyString { return @@ -84,6 +85,7 @@ func NewRSRParsers(parsersRules string, rsrSeparator string) (prsrs RSRParsers, return NewRSRParsersFromSlice(strings.Split(parsersRules, rsrSeparator)) } +// NewRSRParsersFromSlice creates a new RSRParsers from a slice func NewRSRParsersFromSlice(parsersRules []string) (prsrs RSRParsers, err error) { prsrs = make(RSRParsers, len(parsersRules)) for i, rlStr := range parsersRules { @@ -96,6 +98,7 @@ func NewRSRParsersFromSlice(parsersRules []string) (prsrs RSRParsers, err error) return } +// NewRSRParsersMustCompile creates a new RSRParsers and panic if fails func NewRSRParsersMustCompile(parsersRules string, rsrSeparator string) (prsrs RSRParsers) { var err error if prsrs, err = NewRSRParsers(parsersRules, rsrSeparator); err != nil { @@ -140,6 +143,7 @@ func (prsrs RSRParsers) ParseValue(value interface{}) (out string, err error) { return } +// ParseDataProvider will parse the dataprovider using DPDynamicString func (prsrs RSRParsers) ParseDataProvider(dP utils.DataProvider) (out string, err error) { for _, prsr := range prsrs { var outPrsr string @@ -151,6 +155,7 @@ func (prsrs RSRParsers) ParseDataProvider(dP utils.DataProvider) (out string, er return } +// ParseDataProviderWithInterfaces will parse the dataprovider using DPDynamicInterface func (prsrs RSRParsers) ParseDataProviderWithInterfaces(dP utils.DataProvider) (out string, err error) { for _, prsr := range prsrs { var outPrsr string @@ -187,6 +192,7 @@ func (prsrs RSRParsers) Clone() (cln RSRParsers) { return } +// NewRSRParser builds one RSRParser func NewRSRParser(parserRules string) (rsrParser *RSRParser, err error) { if len(parserRules) == 0 { return @@ -198,6 +204,7 @@ func NewRSRParser(parserRules string) (rsrParser *RSRParser, err error) { return } +// NewRSRParserMustCompile creates a new RSRParser and panic if fails func NewRSRParserMustCompile(parserRules string) (rsrPrsr *RSRParser) { var err error if rsrPrsr, err = NewRSRParser(parserRules); err != nil { @@ -306,6 +313,7 @@ func (prsr *RSRParser) ParseValue(value interface{}) (out string, err error) { return prsr.parseValue(out) } +// ParseDataProvider will parse the dataprovider using DPDynamicString func (prsr *RSRParser) ParseDataProvider(dP utils.DataProvider) (out string, err error) { if prsr.dynRules != nil { var dynPath string @@ -325,6 +333,7 @@ func (prsr *RSRParser) ParseDataProvider(dP utils.DataProvider) (out string, err return prsr.parseValue(outStr) } +// ParseDataProviderWithInterfaces will parse the dataprovider using DPDynamicInterface func (prsr *RSRParser) ParseDataProviderWithInterfaces(dP utils.DataProvider) (out string, err error) { if prsr.dynRules != nil { var dynPath string @@ -344,6 +353,7 @@ func (prsr *RSRParser) ParseDataProviderWithInterfaces(dP utils.DataProvider) (o return prsr.parseValue(utils.IfaceAsString(outIface)) } +// CompileDynRule will return the compiled dynamic rule func (prsr *RSRParser) CompileDynRule(dP utils.DataProvider) (p string, err error) { if prsr.dynRules == nil { return prsr.Rules, nil diff --git a/config/rsrparser_test.go b/config/rsrparser_test.go index 76474d1af..4d7ce73bb 100644 --- a/config/rsrparser_test.go +++ b/config/rsrparser_test.go @@ -870,7 +870,7 @@ func TestRSRParsersClone(t *testing.T) { } cln := rsrs.Clone() if !reflect.DeepEqual(rsrs, cln) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(rsrs), utils.ToJSON(cln)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(rsrs), utils.ToJSON(cln)) } cln[0].converters[0] = utils.NewDataConverterMustCompile(utils.MetaIP2Hex) if reflect.DeepEqual(cln[0].converters[0], rsrs[0].converters[0]) { diff --git a/config/sessionscfg_test.go b/config/sessionscfg_test.go index e9f300062..8999b8823 100644 --- a/config/sessionscfg_test.go +++ b/config/sessionscfg_test.go @@ -709,7 +709,7 @@ func TestAsteriskAgentCfgAsMapInterface(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -735,7 +735,7 @@ func TestAsteriskAgentCfgAsMapInterface1(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/config/sipagentcfg_test.go b/config/sipagentcfg_test.go index 6a778b0cf..769af0008 100644 --- a/config/sipagentcfg_test.go +++ b/config/sipagentcfg_test.go @@ -320,7 +320,7 @@ func TestSIPAgentCfgClone(t *testing.T) { } rcv := sa.Clone() if !reflect.DeepEqual(sa, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(sa), utils.ToJSON(rcv)) } if rcv.RequestProcessors[0].ID = ""; sa.RequestProcessors[0].ID != "OutboundAUTHDryRun" { t.Errorf("Expected clone to not modify the cloned") diff --git a/config/statscfg.go b/config/statscfg.go index 06886a5f1..152e89a5d 100644 --- a/config/statscfg.go +++ b/config/statscfg.go @@ -19,12 +19,12 @@ along with this program. If not, see package config import ( - "strings" "time" "github.com/cgrates/cgrates/utils" ) +// StatSCfg the stats config section type StatSCfg struct { Enabled bool IndexedSelects bool @@ -37,7 +37,7 @@ type StatSCfg struct { NestedFields bool } -func (st *StatSCfg) loadFromJsonCfg(jsnCfg *StatServJsonCfg) (err error) { +func (st *StatSCfg) loadFromJSONCfg(jsnCfg *StatServJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -59,10 +59,9 @@ func (st *StatSCfg) loadFromJsonCfg(jsnCfg *StatServJsonCfg) (err error) { st.ThresholdSConns = make([]string, len(*jsnCfg.Thresholds_conns)) for idx, conn := range *jsnCfg.Thresholds_conns { // if we have the connection internal we change the name so we can have internal rpc for each subsystem + st.ThresholdSConns[idx] = conn if conn == utils.MetaInternal { st.ThresholdSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) - } else { - st.ThresholdSConns[idx] = conn } } } @@ -93,17 +92,17 @@ func (st *StatSCfg) loadFromJsonCfg(jsnCfg *StatServJsonCfg) (err error) { return nil } +// AsMapInterface returns the config as a map[string]interface{} func (st *StatSCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: st.Enabled, utils.IndexedSelectsCfg: st.IndexedSelects, utils.StoreUncompressedLimitCfg: st.StoreUncompressedLimit, utils.NestedFieldsCfg: st.NestedFields, + utils.StoreIntervalCfg: utils.EmptyString, } if st.StoreInterval != 0 { initialMP[utils.StoreIntervalCfg] = st.StoreInterval.String() - } else { - initialMP[utils.StoreIntervalCfg] = utils.EmptyString } if st.StringIndexedFields != nil { stringIndexedFields := make([]string, len(*st.StringIndexedFields)) @@ -132,13 +131,52 @@ func (st *StatSCfg) AsMapInterface() (initialMP map[string]interface{}) { if st.ThresholdSConns != nil { thresholdSConns := make([]string, len(st.ThresholdSConns)) for i, item := range st.ThresholdSConns { + thresholdSConns[i] = item if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) { - thresholdSConns[i] = strings.TrimSuffix(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds) - } else { - thresholdSConns[i] = item + thresholdSConns[i] = utils.MetaInternal } } initialMP[utils.ThresholdSConnsCfg] = thresholdSConns } return } + +// Clone returns a deep copy of StatSCfg +func (st StatSCfg) Clone() (cln *StatSCfg) { + cln = &StatSCfg{ + Enabled: st.Enabled, + IndexedSelects: st.IndexedSelects, + StoreInterval: st.StoreInterval, + StoreUncompressedLimit: st.StoreUncompressedLimit, + NestedFields: st.NestedFields, + } + if st.ThresholdSConns != nil { + cln.ThresholdSConns = make([]string, len(st.ThresholdSConns)) + for i, con := range st.ThresholdSConns { + cln.ThresholdSConns[i] = con + } + } + + if st.StringIndexedFields != nil { + idx := make([]string, len(*st.StringIndexedFields)) + for i, dx := range *st.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if st.PrefixIndexedFields != nil { + idx := make([]string, len(*st.PrefixIndexedFields)) + for i, dx := range *st.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if st.SuffixIndexedFields != nil { + idx := make([]string, len(*st.SuffixIndexedFields)) + for i, dx := range *st.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx + } + return +} diff --git a/config/statscfg_test.go b/config/statscfg_test.go index cfe53255e..964c61344 100644 --- a/config/statscfg_test.go +++ b/config/statscfg_test.go @@ -49,7 +49,7 @@ func TestStatSCfgloadFromJsonCfgCase1(t *testing.T) { } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.statsCfg.loadFromJsonCfg(cfgJSON); err != nil { + } else if err = jsonCfg.statsCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsonCfg.statsCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.statsCfg)) @@ -57,13 +57,13 @@ func TestStatSCfgloadFromJsonCfgCase1(t *testing.T) { } func TestStatSCfgloadFromJsonCfgCase2(t *testing.T) { - statscfgJson := &StatServJsonCfg{ + statscfgJSON := &StatServJsonCfg{ Store_interval: utils.StringPointer("1ss"), } expected := "time: unknown unit \"ss\" in duration \"1ss\"" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.statsCfg.loadFromJsonCfg(statscfgJson); err == nil || err.Error() != expected { + } else if err = jsonCfg.statsCfg.loadFromJSONCfg(statscfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -120,3 +120,32 @@ func TestStatSCfgAsMapInterface1(t *testing.T) { t.Errorf("Expected %+v \n, received %+v", eMap, rcv) } } +func TestStatSCfgClone(t *testing.T) { + ban := &StatSCfg{ + Enabled: true, + IndexedSelects: true, + StoreInterval: 2, + StoreUncompressedLimit: 10, + ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"}, + StringIndexedFields: &[]string{"*req.index1"}, + PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"}, + SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"}, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if rcv.ThresholdSConns[1] = ""; ban.ThresholdSConns[1] != "*conn1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/stordbcfg_test.go b/config/stordbcfg_test.go index 14239d3ab..0a102000c 100644 --- a/config/stordbcfg_test.go +++ b/config/stordbcfg_test.go @@ -98,26 +98,26 @@ func TestStoreDbCfgloadFromJsonCfgCase1(t *testing.T) { } func TestStoreDbCfgloadFromJsonCfgCase2(t *testing.T) { - storDbJson := &DbJsonCfg{ + storDbJSON := &DbJsonCfg{ Replication_conns: &[]string{utils.MetaInternal}, } expected := "Replication connection ID needs to be different than *internal" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.storDbCfg.loadFromJsonCfg(storDbJson); err == nil || err.Error() != expected { - t.Errorf("Expected %+v, received %+v", storDbJson, expected) + } else if err = jsonCfg.storDbCfg.loadFromJsonCfg(storDbJSON); err == nil || err.Error() != expected { + t.Errorf("Expected %+v, received %+v", storDbJSON, expected) } } func TestStoreDbCfgloadFromJsonCfgCase3(t *testing.T) { - storDbJson := &DbJsonCfg{ + storDbJSON := &DbJsonCfg{ Remote_conns: &[]string{utils.MetaInternal}, } expected := "Remote connection ID needs to be different than *internal" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.storDbCfg.loadFromJsonCfg(storDbJson); err == nil || err.Error() != expected { - t.Errorf("Expected %+v, received %+v", storDbJson, expected) + } else if err = jsonCfg.storDbCfg.loadFromJsonCfg(storDbJSON); err == nil || err.Error() != expected { + t.Errorf("Expected %+v, received %+v", storDbJSON, expected) } } diff --git a/config/suretaxcfg.go b/config/suretaxcfg.go index 3c98afacd..31381f999 100644 --- a/config/suretaxcfg.go +++ b/config/suretaxcfg.go @@ -19,15 +19,14 @@ along with this program. If not, see package config import ( - "strings" "time" "github.com/cgrates/cgrates/utils" ) -// SureTax configuration object +// SureTaxCfg configuration object type SureTaxCfg struct { - Url string + URL string ClientNumber string ValidationKey string BusinessUnit string @@ -56,128 +55,129 @@ type SureTaxCfg struct { } // Loads/re-loads data from json config object -func (self *SureTaxCfg) loadFromJsonCfg(jsnCfg *SureTaxJsonCfg) (err error) { +func (st *SureTaxCfg) loadFromJSONCfg(jsnCfg *SureTaxJsonCfg) (err error) { if jsnCfg == nil { return } if jsnCfg.Url != nil { - self.Url = *jsnCfg.Url + st.URL = *jsnCfg.Url } if jsnCfg.Client_number != nil { - self.ClientNumber = *jsnCfg.Client_number + st.ClientNumber = *jsnCfg.Client_number } if jsnCfg.Validation_key != nil { - self.ValidationKey = *jsnCfg.Validation_key + st.ValidationKey = *jsnCfg.Validation_key } if jsnCfg.Business_unit != nil { - self.BusinessUnit = *jsnCfg.Business_unit + st.BusinessUnit = *jsnCfg.Business_unit } if jsnCfg.Timezone != nil { - if self.Timezone, err = time.LoadLocation(*jsnCfg.Timezone); err != nil { + if st.Timezone, err = time.LoadLocation(*jsnCfg.Timezone); err != nil { return err } } if jsnCfg.Include_local_cost != nil { - self.IncludeLocalCost = *jsnCfg.Include_local_cost + st.IncludeLocalCost = *jsnCfg.Include_local_cost } if jsnCfg.Return_file_code != nil { - self.ReturnFileCode = *jsnCfg.Return_file_code + st.ReturnFileCode = *jsnCfg.Return_file_code } if jsnCfg.Response_group != nil { - self.ResponseGroup = *jsnCfg.Response_group + st.ResponseGroup = *jsnCfg.Response_group } if jsnCfg.Response_type != nil { - self.ResponseType = *jsnCfg.Response_type + st.ResponseType = *jsnCfg.Response_type } if jsnCfg.Regulatory_code != nil { - self.RegulatoryCode = *jsnCfg.Regulatory_code + st.RegulatoryCode = *jsnCfg.Regulatory_code } if jsnCfg.Client_tracking != nil { - if self.ClientTracking, err = NewRSRParsers(*jsnCfg.Client_tracking, utils.INFIELD_SEP); err != nil { + if st.ClientTracking, err = NewRSRParsers(*jsnCfg.Client_tracking, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Customer_number != nil { - if self.CustomerNumber, err = NewRSRParsers(*jsnCfg.Customer_number, utils.INFIELD_SEP); err != nil { + if st.CustomerNumber, err = NewRSRParsers(*jsnCfg.Customer_number, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Orig_number != nil { - if self.OrigNumber, err = NewRSRParsers(*jsnCfg.Orig_number, utils.INFIELD_SEP); err != nil { + if st.OrigNumber, err = NewRSRParsers(*jsnCfg.Orig_number, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Term_number != nil { - if self.TermNumber, err = NewRSRParsers(*jsnCfg.Term_number, utils.INFIELD_SEP); err != nil { + if st.TermNumber, err = NewRSRParsers(*jsnCfg.Term_number, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Bill_to_number != nil { - if self.BillToNumber, err = NewRSRParsers(*jsnCfg.Bill_to_number, utils.INFIELD_SEP); err != nil { + if st.BillToNumber, err = NewRSRParsers(*jsnCfg.Bill_to_number, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Zipcode != nil { - if self.Zipcode, err = NewRSRParsers(*jsnCfg.Zipcode, utils.INFIELD_SEP); err != nil { + if st.Zipcode, err = NewRSRParsers(*jsnCfg.Zipcode, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Plus4 != nil { - if self.Plus4, err = NewRSRParsers(*jsnCfg.Plus4, utils.INFIELD_SEP); err != nil { + if st.Plus4, err = NewRSRParsers(*jsnCfg.Plus4, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.P2PZipcode != nil { - if self.P2PZipcode, err = NewRSRParsers(*jsnCfg.P2PZipcode, utils.INFIELD_SEP); err != nil { + if st.P2PZipcode, err = NewRSRParsers(*jsnCfg.P2PZipcode, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.P2PPlus4 != nil { - if self.P2PPlus4, err = NewRSRParsers(*jsnCfg.P2PPlus4, utils.INFIELD_SEP); err != nil { + if st.P2PPlus4, err = NewRSRParsers(*jsnCfg.P2PPlus4, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Units != nil { - if self.Units, err = NewRSRParsers(*jsnCfg.Units, utils.INFIELD_SEP); err != nil { + if st.Units, err = NewRSRParsers(*jsnCfg.Units, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Unit_type != nil { - if self.UnitType, err = NewRSRParsers(*jsnCfg.Unit_type, utils.INFIELD_SEP); err != nil { + if st.UnitType, err = NewRSRParsers(*jsnCfg.Unit_type, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Tax_included != nil { - if self.TaxIncluded, err = NewRSRParsers(*jsnCfg.Tax_included, utils.INFIELD_SEP); err != nil { + if st.TaxIncluded, err = NewRSRParsers(*jsnCfg.Tax_included, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Tax_situs_rule != nil { - if self.TaxSitusRule, err = NewRSRParsers(*jsnCfg.Tax_situs_rule, utils.INFIELD_SEP); err != nil { + if st.TaxSitusRule, err = NewRSRParsers(*jsnCfg.Tax_situs_rule, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Trans_type_code != nil { - if self.TransTypeCode, err = NewRSRParsers(*jsnCfg.Trans_type_code, utils.INFIELD_SEP); err != nil { + if st.TransTypeCode, err = NewRSRParsers(*jsnCfg.Trans_type_code, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Sales_type_code != nil { - if self.SalesTypeCode, err = NewRSRParsers(*jsnCfg.Sales_type_code, utils.INFIELD_SEP); err != nil { + if st.SalesTypeCode, err = NewRSRParsers(*jsnCfg.Sales_type_code, utils.INFIELD_SEP); err != nil { return err } } if jsnCfg.Tax_exemption_code_list != nil { - if self.TaxExemptionCodeList, err = NewRSRParsers(*jsnCfg.Tax_exemption_code_list, utils.INFIELD_SEP); err != nil { + if st.TaxExemptionCodeList, err = NewRSRParsers(*jsnCfg.Tax_exemption_code_list, utils.INFIELD_SEP); err != nil { return err } } return nil } +// AsMapInterface returns the config as a map[string]interface{} func (st *SureTaxCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { - initialMP = map[string]interface{}{ - utils.URLCfg: st.Url, + return map[string]interface{}{ + utils.URLCfg: st.URL, utils.ClientNumberCfg: st.ClientNumber, utils.ValidationKeyCfg: st.ValidationKey, utils.BusinessUnitCfg: st.BusinessUnit, @@ -187,102 +187,59 @@ func (st *SureTaxCfg) AsMapInterface(separator string) (initialMP map[string]int utils.ResponseGroupCfg: st.ResponseGroup, utils.ResponseTypeCfg: st.ResponseType, utils.RegulatoryCodeCfg: st.RegulatoryCode, - } - values := make([]string, len(st.ClientTracking)) - for i, item := range st.ClientTracking { - values[i] = item.Rules - } - initialMP[utils.ClientTrackingCfg] = strings.Join(values, separator) - values = make([]string, len(st.CustomerNumber)) - for i, item := range st.CustomerNumber { - values[i] = item.Rules + utils.ClientTrackingCfg: st.ClientTracking.GetRule(separator), + utils.CustomerNumberCfg: st.CustomerNumber.GetRule(separator), + utils.OrigNumberCfg: st.OrigNumber.GetRule(separator), + utils.TermNumberCfg: st.TermNumber.GetRule(separator), + utils.BillToNumberCfg: st.BillToNumber.GetRule(separator), + utils.ZipcodeCfg: st.Zipcode.GetRule(separator), + utils.Plus4Cfg: st.Plus4.GetRule(separator), + utils.P2PZipcodeCfg: st.P2PZipcode.GetRule(separator), + utils.P2PPlus4Cfg: st.P2PPlus4.GetRule(separator), + utils.UnitsCfg: st.Units.GetRule(separator), + utils.UnitTypeCfg: st.UnitType.GetRule(separator), + utils.TaxIncludedCfg: st.TaxIncluded.GetRule(separator), + utils.TaxSitusRuleCfg: st.TaxSitusRule.GetRule(separator), + utils.TransTypeCodeCfg: st.TransTypeCode.GetRule(separator), + utils.SalesTypeCodeCfg: st.SalesTypeCode.GetRule(separator), + utils.TaxExemptionCodeListCfg: st.TaxExemptionCodeList.GetRule(separator), + } +} + +// Clone returns a deep copy of SureTaxCfg +func (st SureTaxCfg) Clone() (cln *SureTaxCfg) { + loc := *time.UTC + if st.Timezone != nil { + loc = *st.Timezone + } + return &SureTaxCfg{ + URL: st.URL, + ClientNumber: st.ClientNumber, + ValidationKey: st.ValidationKey, + BusinessUnit: st.BusinessUnit, + Timezone: &loc, + IncludeLocalCost: st.IncludeLocalCost, + ReturnFileCode: st.ReturnFileCode, + ResponseGroup: st.ResponseGroup, + ResponseType: st.ResponseType, + RegulatoryCode: st.RegulatoryCode, + + ClientTracking: st.ClientTracking.Clone(), + CustomerNumber: st.CustomerNumber.Clone(), + OrigNumber: st.OrigNumber.Clone(), + TermNumber: st.TermNumber.Clone(), + BillToNumber: st.BillToNumber.Clone(), + Zipcode: st.Zipcode.Clone(), + Plus4: st.Plus4.Clone(), + P2PZipcode: st.P2PZipcode.Clone(), + P2PPlus4: st.P2PPlus4.Clone(), + Units: st.Units.Clone(), + UnitType: st.UnitType.Clone(), + TaxIncluded: st.TaxIncluded.Clone(), + TaxSitusRule: st.TaxSitusRule.Clone(), + TransTypeCode: st.TransTypeCode.Clone(), + SalesTypeCode: st.SalesTypeCode.Clone(), + TaxExemptionCodeList: st.TaxExemptionCodeList.Clone(), } - initialMP[utils.CustomerNumberCfg] = strings.Join(values, separator) - - values = make([]string, len(st.OrigNumber)) - for i, item := range st.OrigNumber { - values[i] = item.Rules - } - initialMP[utils.OrigNumberCfg] = strings.Join(values, separator) - - values = make([]string, len(st.TermNumber)) - for i, item := range st.TermNumber { - values[i] = item.Rules - } - initialMP[utils.TermNumberCfg] = strings.Join(values, separator) - - values = make([]string, len(st.BillToNumber)) - for i, item := range st.BillToNumber { - values[i] = item.Rules - } - initialMP[utils.BillToNumberCfg] = strings.Join(values, separator) - - values = make([]string, len(st.Zipcode)) - for i, item := range st.Zipcode { - values[i] = item.Rules - } - initialMP[utils.ZipcodeCfg] = strings.Join(values, separator) - - values = make([]string, len(st.Plus4)) - for i, item := range st.Plus4 { - values[i] = item.Rules - } - initialMP[utils.Plus4Cfg] = strings.Join(values, separator) - - values = make([]string, len(st.P2PZipcode)) - for i, item := range st.P2PZipcode { - values[i] = item.Rules - } - initialMP[utils.P2PZipcodeCfg] = strings.Join(values, separator) - - values = make([]string, len(st.P2PPlus4)) - for i, item := range st.P2PPlus4 { - values[i] = item.Rules - } - initialMP[utils.P2PPlus4Cfg] = strings.Join(values, separator) - - values = make([]string, len(st.Units)) - for i, item := range st.Units { - values[i] = item.Rules - } - initialMP[utils.UnitsCfg] = strings.Join(values, separator) - - values = make([]string, len(st.UnitType)) - for i, item := range st.UnitType { - values[i] = item.Rules - } - initialMP[utils.UnitTypeCfg] = strings.Join(values, separator) - - values = make([]string, len(st.TaxIncluded)) - for i, item := range st.TaxIncluded { - values[i] = item.Rules - } - initialMP[utils.TaxIncludedCfg] = strings.Join(values, separator) - - values = make([]string, len(st.TaxSitusRule)) - for i, item := range st.TaxSitusRule { - values[i] = item.Rules - } - initialMP[utils.TaxSitusRuleCfg] = strings.Join(values, separator) - - values = make([]string, len(st.TransTypeCode)) - for i, item := range st.TransTypeCode { - values[i] = item.Rules - } - initialMP[utils.TransTypeCodeCfg] = strings.Join(values, separator) - - values = make([]string, len(st.SalesTypeCode)) - for i, item := range st.SalesTypeCode { - values[i] = item.Rules - } - initialMP[utils.SalesTypeCodeCfg] = strings.Join(values, separator) - - values = make([]string, len(st.TaxExemptionCodeList)) - for i, item := range st.TaxExemptionCodeList { - values[i] = item.Rules - } - initialMP[utils.TaxExemptionCodeListCfg] = strings.Join(values, separator) - - return } diff --git a/config/suretaxcfg_test.go b/config/suretaxcfg_test.go index f941ed56b..869954346 100644 --- a/config/suretaxcfg_test.go +++ b/config/suretaxcfg_test.go @@ -60,7 +60,7 @@ func TestSureTaxCfgloadFromJsonCfgCase1(t *testing.T) { t.Error(err) } expected := &SureTaxCfg{ - Url: "randomURL", + URL: "randomURL", ClientNumber: "randomClient", ValidationKey: "randomKey", BusinessUnit: "randomUnit", @@ -89,7 +89,7 @@ func TestSureTaxCfgloadFromJsonCfgCase1(t *testing.T) { } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err != nil { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsonCfg.sureTaxCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.sureTaxCfg)) @@ -103,7 +103,7 @@ func TestSureTaxCfgloadFromJsonCfgCase2(t *testing.T) { expected := "time: invalid location name" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -115,7 +115,7 @@ func TestSureTaxCfgloadFromJsonCfgCase3(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -127,7 +127,7 @@ func TestSureTaxCfgloadFromJsonCfgCase4(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -139,7 +139,7 @@ func TestSureTaxCfgloadFromJsonCfgCase5(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -151,7 +151,7 @@ func TestSureTaxCfgloadFromJsonCfgCase6(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -163,7 +163,7 @@ func TestSureTaxCfgloadFromJsonCfgCase7(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -175,7 +175,7 @@ func TestSureTaxCfgloadFromJsonCfgCase8(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -187,7 +187,7 @@ func TestSureTaxCfgloadFromJsonCfgCase9(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -199,7 +199,7 @@ func TestSureTaxCfgloadFromJsonCfgCase10(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -211,7 +211,7 @@ func TestSureTaxCfgloadFromJsonCfgCase11(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -223,7 +223,7 @@ func TestSureTaxCfgloadFromJsonCfgCase12(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -235,7 +235,7 @@ func TestSureTaxCfgloadFromJsonCfgCase13(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -247,7 +247,7 @@ func TestSureTaxCfgloadFromJsonCfgCase14(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -259,7 +259,7 @@ func TestSureTaxCfgloadFromJsonCfgCase15(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -271,7 +271,7 @@ func TestSureTaxCfgloadFromJsonCfgCase16(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -283,7 +283,7 @@ func TestSureTaxCfgloadFromJsonCfgCase17(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -295,7 +295,7 @@ func TestSureTaxCfgloadFromJsonCfgCase18(t *testing.T) { expected := "invalid converter terminator in rule: " if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.sureTaxCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.sureTaxCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -361,3 +361,38 @@ func TestSureTaxCfgAsMapInterface(t *testing.T) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } + +func TestSureTaxCfgClone(t *testing.T) { + ban := &SureTaxCfg{ + URL: "randomURL", + ClientNumber: "randomClient", + ValidationKey: "randomKey", + BusinessUnit: "randomUnit", + Timezone: time.UTC, + IncludeLocalCost: true, + ReturnFileCode: "1", + ResponseGroup: "06", + ResponseType: "A3", + RegulatoryCode: "06", + ClientTracking: NewRSRParsersMustCompile("~*req.Destination1", utils.INFIELD_SEP), + CustomerNumber: NewRSRParsersMustCompile("~*req.Destination1", utils.INFIELD_SEP), + OrigNumber: NewRSRParsersMustCompile("~*req.Destination1", utils.INFIELD_SEP), + TermNumber: NewRSRParsersMustCompile("~*req.CGRID", 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), + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } +} diff --git a/config/thresholdscfg.go b/config/thresholdscfg.go index 2889bee9c..15a46d978 100644 --- a/config/thresholdscfg.go +++ b/config/thresholdscfg.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/utils" ) +// ThresholdSCfg the threshold config section type ThresholdSCfg struct { Enabled bool IndexedSelects bool @@ -34,7 +35,7 @@ type ThresholdSCfg struct { NestedFields bool } -func (t *ThresholdSCfg) loadFromJsonCfg(jsnCfg *ThresholdSJsonCfg) (err error) { +func (t *ThresholdSCfg) loadFromJSONCfg(jsnCfg *ThresholdSJsonCfg) (err error) { if jsnCfg == nil { return nil } @@ -76,16 +77,16 @@ func (t *ThresholdSCfg) loadFromJsonCfg(jsnCfg *ThresholdSJsonCfg) (err error) { return nil } +// AsMapInterface returns the config as a map[string]interface{} func (t *ThresholdSCfg) AsMapInterface() (initialMP map[string]interface{}) { initialMP = map[string]interface{}{ utils.EnabledCfg: t.Enabled, utils.IndexedSelectsCfg: t.IndexedSelects, utils.NestedFieldsCfg: t.NestedFields, + utils.StoreIntervalCfg: utils.EmptyString, } if t.StoreInterval != 0 { initialMP[utils.StoreIntervalCfg] = t.StoreInterval.String() - } else { - initialMP[utils.StoreIntervalCfg] = utils.EmptyString } if t.StringIndexedFields != nil { @@ -111,3 +112,36 @@ func (t *ThresholdSCfg) AsMapInterface() (initialMP map[string]interface{}) { } return } + +// Clone returns a deep copy of ThresholdSCfg +func (t ThresholdSCfg) Clone() (cln *ThresholdSCfg) { + cln = &ThresholdSCfg{ + Enabled: t.Enabled, + IndexedSelects: t.IndexedSelects, + StoreInterval: t.StoreInterval, + NestedFields: t.NestedFields, + } + + if t.StringIndexedFields != nil { + idx := make([]string, len(*t.StringIndexedFields)) + for i, dx := range *t.StringIndexedFields { + idx[i] = dx + } + cln.StringIndexedFields = &idx + } + if t.PrefixIndexedFields != nil { + idx := make([]string, len(*t.PrefixIndexedFields)) + for i, dx := range *t.PrefixIndexedFields { + idx[i] = dx + } + cln.PrefixIndexedFields = &idx + } + if t.SuffixIndexedFields != nil { + idx := make([]string, len(*t.SuffixIndexedFields)) + for i, dx := range *t.SuffixIndexedFields { + idx[i] = dx + } + cln.SuffixIndexedFields = &idx + } + return +} diff --git a/config/thresholdscfg_test.go b/config/thresholdscfg_test.go index fca35c680..8c312a279 100644 --- a/config/thresholdscfg_test.go +++ b/config/thresholdscfg_test.go @@ -45,7 +45,7 @@ func TestThresholdSCfgloadFromJsonCfgCase1(t *testing.T) { } if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.thresholdSCfg.loadFromJsonCfg(cfgJSON); err != nil { + } else if err = jsonCfg.thresholdSCfg.loadFromJSONCfg(cfgJSON); err != nil { t.Error(err) } else if !reflect.DeepEqual(expected, jsonCfg.thresholdSCfg) { t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected), utils.ToJSON(jsonCfg.thresholdSCfg)) @@ -59,7 +59,7 @@ func TestThresholdSCfgloadFromJsonCfgCase2(t *testing.T) { expected := "time: unknown unit \"ss\" in duration \"1ss\"" if jsonCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if err = jsonCfg.thresholdSCfg.loadFromJsonCfg(cfgJSON); err == nil || err.Error() != expected { + } else if err = jsonCfg.thresholdSCfg.loadFromJSONCfg(cfgJSON); err == nil || err.Error() != expected { t.Errorf("Expected %+v, received %+v", expected, err) } } @@ -110,3 +110,27 @@ func TestThresholdSCfgAsMapInterfaceCase2(t *testing.T) { t.Errorf("Expextec %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } +func TestThresholdSCfgClone(t *testing.T) { + ban := &ThresholdSCfg{ + Enabled: true, + IndexedSelects: true, + StoreInterval: 2, + StringIndexedFields: &[]string{"*req.index1"}, + PrefixIndexedFields: &[]string{"*req.index1"}, + SuffixIndexedFields: &[]string{"*req.index1"}, + NestedFields: true, + } + rcv := ban.Clone() + if !reflect.DeepEqual(ban, rcv) { + t.Errorf("Expected: %+v\nReceived: %+v", utils.ToJSON(ban), utils.ToJSON(rcv)) + } + if (*rcv.StringIndexedFields)[0] = ""; (*ban.StringIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.PrefixIndexedFields)[0] = ""; (*ban.PrefixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } + if (*rcv.SuffixIndexedFields)[0] = ""; (*ban.SuffixIndexedFields)[0] != "*req.index1" { + t.Errorf("Expected clone to not modify the cloned") + } +} diff --git a/config/xmldp.go b/config/xmldp.go index d03076d34..b5f82ede5 100644 --- a/config/xmldp.go +++ b/config/xmldp.go @@ -28,9 +28,9 @@ import ( "github.com/cgrates/cgrates/utils" ) -// NewXmlProvider constructs a utils.DataProvider -func NewXmlProvider(req *xmlquery.Node, cdrPath utils.HierarchyPath) (dP utils.DataProvider) { - dP = &XmlProvider{ +// NewXMLProvider constructs a utils.DataProvider +func NewXMLProvider(req *xmlquery.Node, cdrPath utils.HierarchyPath) (dP utils.DataProvider) { + dP = &XMLProvider{ req: req, cdrPath: cdrPath, cache: utils.MapStorage{}, @@ -38,8 +38,8 @@ func NewXmlProvider(req *xmlquery.Node, cdrPath utils.HierarchyPath) (dP utils.D return } -// XmlProvider implements engine.utils.DataProvider so we can pass it to filters -type XmlProvider struct { +// XMLProvider implements engine.utils.DataProvider so we can pass it to filters +type XMLProvider struct { req *xmlquery.Node cdrPath utils.HierarchyPath //used to compute relative path cache utils.MapStorage @@ -47,12 +47,12 @@ type XmlProvider struct { // String is part of engine.utils.DataProvider interface // when called, it will display the already parsed values out of cache -func (xP *XmlProvider) String() string { +func (xP *XMLProvider) String() string { return utils.ToJSON(xP.req) } // FieldAsInterface is part of engine.utils.DataProvider interface -func (xP *XmlProvider) FieldAsInterface(fldPath []string) (data interface{}, err error) { +func (xP *XMLProvider) FieldAsInterface(fldPath []string) (data interface{}, err error) { if len(fldPath) == 0 { return nil, utils.ErrNotFound } @@ -86,7 +86,7 @@ func (xP *XmlProvider) FieldAsInterface(fldPath []string) (data interface{}, err } // FieldAsString is part of engine.utils.DataProvider interface -func (xP *XmlProvider) FieldAsString(fldPath []string) (data string, err error) { +func (xP *XMLProvider) FieldAsString(fldPath []string) (data string, err error) { var valIface interface{} valIface, err = xP.FieldAsInterface(fldPath) if err != nil { @@ -96,7 +96,7 @@ func (xP *XmlProvider) FieldAsString(fldPath []string) (data string, err error) } // RemoteHost is part of engine.utils.DataProvider interface -func (xP *XmlProvider) RemoteHost() net.Addr { +func (xP *XMLProvider) RemoteHost() net.Addr { return utils.LocalAddr() } diff --git a/config/xmldp_test.go b/config/xmldp_test.go index ee97d9d0f..3c72f743f 100644 --- a/config/xmldp_test.go +++ b/config/xmldp_test.go @@ -28,7 +28,7 @@ import ( "github.com/cgrates/cgrates/utils" ) -var cdrXmlBroadsoft = ` +var cdrXMLBroadsoft = ` @@ -162,7 +162,7 @@ var cdrXmlBroadsoft = ` ` func TestXMLElementText(t *testing.T) { - doc, err := xmlquery.Parse(strings.NewReader(cdrXmlBroadsoft)) + doc, err := xmlquery.Parse(strings.NewReader(cdrXMLBroadsoft)) if err != nil { t.Error(err) } @@ -410,7 +410,7 @@ func TestXMLIndexes(t *testing.T) { if err != nil { t.Error(err) } - dP := NewXmlProvider(doc, utils.HierarchyPath([]string{})) + dP := NewXMLProvider(doc, utils.HierarchyPath([]string{})) if data, err := dP.FieldAsString([]string{"complete-success-notification", "userid"}); err != nil { t.Error(err) } else if data != "386" { @@ -443,7 +443,7 @@ func TestFieldAsStringXMLEmptyPath(t *testing.T) { if err != nil { t.Error(err) } - dP := &XmlProvider{ + dP := &XMLProvider{ req: doc, cdrPath: []string{}, cache: utils.MapStorage{}, @@ -455,7 +455,7 @@ func TestFieldAsStringXMLEmptyPath(t *testing.T) { func TestRemoteHostXML(t *testing.T) { expected := utils.LocalAddr() - dp := new(XmlProvider) + dp := new(XMLProvider) if received := dp.RemoteHost(); !reflect.DeepEqual(expected, received) { t.Errorf("Expected %+v, received %+v", expected, received) } @@ -466,7 +466,7 @@ func TestStringXML(t *testing.T) { if err != nil { t.Error(err) } - dP := &XmlProvider{ + dP := &XMLProvider{ req: doc, cdrPath: []string{}, cache: utils.MapStorage{}, @@ -482,7 +482,7 @@ func TestFieldAsInterfaceCache(t *testing.T) { if err != nil { t.Error(err) } - dP := &XmlProvider{ + dP := &XMLProvider{ req: doc, cdrPath: []string{}, cache: utils.MapStorage{ @@ -502,7 +502,7 @@ func TestFieldAsInterfaceInvalidSyntax(t *testing.T) { if err != nil { t.Error(err) } - dP := NewXmlProvider(doc, utils.HierarchyPath([]string{})) + dP := NewXMLProvider(doc, utils.HierarchyPath([]string{})) expected := "strconv.Atoi: parsing \"09]\": invalid syntax" if _, err := dP.FieldAsString([]string{"complete-success-notification[09]]"}); err == nil || err.Error() != expected { t.Errorf("Expected %+q, received %+q", expected, err) @@ -514,7 +514,7 @@ func TestFieldAsInterfaceInvalidSyntax1(t *testing.T) { if err != nil { t.Error(err) } - dP := NewXmlProvider(doc, utils.HierarchyPath([]string{})) + dP := NewXMLProvider(doc, utils.HierarchyPath([]string{})) expected := "filter rule <[0> needs to end in ]" if _, err := dP.FieldAsString([]string{"complete-success-notification[0"}); err == nil || err.Error() != expected { t.Errorf("Expected %+q, received %+q", expected, err) diff --git a/console/reload_config.go b/console/reload_config.go index e847007dd..3b7c9b4c7 100644 --- a/console/reload_config.go +++ b/console/reload_config.go @@ -27,7 +27,7 @@ func init() { c := &CmdRelaodConfigSection{ name: "reload_config", rpcMethod: utils.ConfigSv1ReloadConfig, - rpcParams: &config.ConfigReloadArgs{}, + rpcParams: &config.ReloadArgs{}, } commands[c.Name()] = c c.CommandExecuter = &CommandExecuter{c} @@ -37,7 +37,7 @@ func init() { type CmdRelaodConfigSection struct { name string rpcMethod string - rpcParams *config.ConfigReloadArgs + rpcParams *config.ReloadArgs *CommandExecuter } @@ -51,7 +51,7 @@ func (self *CmdRelaodConfigSection) RpcMethod() string { func (self *CmdRelaodConfigSection) RpcParams(reset bool) interface{} { if reset || self.rpcParams == nil { - self.rpcParams = &config.ConfigReloadArgs{Opts: make(map[string]interface{})} + self.rpcParams = &config.ReloadArgs{Opts: make(map[string]interface{})} } return self.rpcParams } diff --git a/data/conf/samples/sipagent_internal/cgrates.json b/data/conf/samples/sipagent_internal/cgrates.json index 5b8594992..6de778f3e 100644 --- a/data/conf/samples/sipagent_internal/cgrates.json +++ b/data/conf/samples/sipagent_internal/cgrates.json @@ -74,4 +74,12 @@ "enabled": true, "scheduler_conns": ["*internal"], }, + +"templates": { + "*err": [ + {"tag": "Request", "path": "*rep.Request", "type": "*constant", + "value": "SIP/2.0 500 Internal Server Error", "mandatory": true}, + ], +} + } \ No newline at end of file diff --git a/data/conf/samples/sipagent_mongo/cgrates.json b/data/conf/samples/sipagent_mongo/cgrates.json index f269ed1f8..e27163ba7 100644 --- a/data/conf/samples/sipagent_mongo/cgrates.json +++ b/data/conf/samples/sipagent_mongo/cgrates.json @@ -78,4 +78,12 @@ "enabled": true, "scheduler_conns": ["*internal"], }, + +"templates": { + "*err": [ + {"tag": "Request", "path": "*rep.Request", "type": "*constant", + "value": "SIP/2.0 500 Internal Server Error", "mandatory": true}, + ], +} + } \ No newline at end of file diff --git a/data/conf/samples/sipagent_mysql/cgrates.json b/data/conf/samples/sipagent_mysql/cgrates.json index 2041bf940..8a6d0533a 100644 --- a/data/conf/samples/sipagent_mysql/cgrates.json +++ b/data/conf/samples/sipagent_mysql/cgrates.json @@ -71,4 +71,12 @@ "enabled": true, "scheduler_conns": ["*internal"], }, + +"templates": { + "*err": [ + {"tag": "Request", "path": "*rep.Request", "type": "*constant", + "value": "SIP/2.0 500 Internal Server Error", "mandatory": true}, + ], +} + } \ No newline at end of file diff --git a/dispatchers/config.go b/dispatchers/config.go index e7bc7ac52..1ec7a0573 100644 --- a/dispatchers/config.go +++ b/dispatchers/config.go @@ -44,7 +44,7 @@ func (dS *DispatcherService) ConfigSv1GetConfig(args *config.SectionWithOpts, re }, utils.MetaConfig, utils.ConfigSv1GetConfig, args, reply) } -func (dS *DispatcherService) ConfigSv1ReloadConfig(args *config.ConfigReloadArgs, reply *string) (err error) { +func (dS *DispatcherService) ConfigSv1ReloadConfig(args *config.ReloadArgs, reply *string) (err error) { tnt := dS.cfg.GeneralCfg().DefaultTenant if args.Tenant != utils.EmptyString { tnt = args.Tenant diff --git a/engine/action_plan_test.go b/engine/action_plan_test.go index 02cd02eb6..b3db2f6f7 100644 --- a/engine/action_plan_test.go +++ b/engine/action_plan_test.go @@ -109,7 +109,7 @@ func TestActionPlanClone(t *testing.T) { } at1Cloned := clned.(*ActionPlan) if !reflect.DeepEqual(at1, at1Cloned) { - t.Errorf("\nExpecting: %+v,\n received: %+v", at1, at1Cloned) + t.Errorf("Expecting: %+v,\n received: %+v", at1, at1Cloned) } } @@ -120,7 +120,7 @@ func TestActionTimingClone(t *testing.T) { Weight: 0.7, } if cloned := at.Clone(); !reflect.DeepEqual(at, cloned) { - t.Errorf("\nExpecting: %+v,\n received: %+v", at, cloned) + t.Errorf("Expecting: %+v,\n received: %+v", at, cloned) } } diff --git a/engine/connmanager.go b/engine/connmanager.go index d03a07b65..a5c63ae62 100644 --- a/engine/connmanager.go +++ b/engine/connmanager.go @@ -84,8 +84,8 @@ func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnec var conPool *rpcclient.RPCParallelClientPool if rpcConnCfg.Address == utils.MetaInternal { conPool, err = rpcclient.NewRPCParallelClientPool("", "", rpcConnCfg.TLS, - cM.cfg.TlsCfg().ClientKey, cM.cfg.TlsCfg().ClientCerificate, - cM.cfg.TlsCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, + cM.cfg.TLSCfg().ClientKey, cM.cfg.TLSCfg().ClientCerificate, + cM.cfg.TLSCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout, rpcclient.InternalRPC, intChan, int64(cM.cfg.GeneralCfg().MaxParallelConns), false) } else if utils.SliceHasMember([]string{utils.EmptyString, utils.MetaGOB, utils.MetaJSON}, rpcConnCfg.Transport) { @@ -94,8 +94,8 @@ func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnec codec = rpcConnCfg.Transport } conPool, err = rpcclient.NewRPCParallelClientPool(utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, - cM.cfg.TlsCfg().ClientKey, cM.cfg.TlsCfg().ClientCerificate, - cM.cfg.TlsCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, + cM.cfg.TLSCfg().ClientKey, cM.cfg.TLSCfg().ClientCerificate, + cM.cfg.TLSCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout, codec, nil, int64(cM.cfg.GeneralCfg().MaxParallelConns), false) } else { @@ -108,8 +108,8 @@ func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnec default: var conPool *rpcclient.RPCPool if conPool, err = NewRPCPool(connCfg.Strategy, - cM.cfg.TlsCfg().ClientKey, - cM.cfg.TlsCfg().ClientCerificate, cM.cfg.TlsCfg().CaCertificate, + cM.cfg.TLSCfg().ClientKey, + cM.cfg.TLSCfg().ClientCerificate, cM.cfg.TLSCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout, connCfg.Conns, intChan, false); err != nil { diff --git a/engine/dispatcherprfl.go b/engine/dispatcherprfl.go index c9260b64c..d52926dee 100644 --- a/engine/dispatcherprfl.go +++ b/engine/dispatcherprfl.go @@ -156,8 +156,8 @@ func (dH *DispatcherHost) Call(serviceMethod string, args interface{}, reply int // connect the rpcConn cfg := config.CgrConfig() if dH.rpcConn, err = NewRPCConnection(dH.Conn, - cfg.TlsCfg().ClientKey, - cfg.TlsCfg().ClientCerificate, cfg.TlsCfg().CaCertificate, + cfg.TLSCfg().ClientKey, + cfg.TLSCfg().ClientCerificate, cfg.TLSCfg().CaCertificate, cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, IntRPC.GetInternalChanel(), false); err != nil { diff --git a/engine/eventcost_test.go b/engine/eventcost_test.go index f9da1212c..08cf876d6 100644 --- a/engine/eventcost_test.go +++ b/engine/eventcost_test.go @@ -2853,7 +2853,7 @@ func TestEventCostfieldAsInterface(t *testing.T) { if rcv, err := eventCost.fieldAsInterface([]string{utils.Accounting, "test1"}); err != nil { t.Error(err) } else if !reflect.DeepEqual(eBalanceCharge, rcv) { - t.Errorf("\nExpecting: %+v, \nreceived: %+v", utils.ToJSON(eBalanceCharge), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v, \nreceived: %+v", utils.ToJSON(eBalanceCharge), utils.ToJSON(rcv)) } // case utils.Rating: eventCost = &EventCost{ diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index b062837bd..ef66930f7 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -2562,7 +2562,7 @@ func TestTPFilterAsTPFilter(t *testing.T) { rcvTPs := TpFilterS(tps).AsTPFilter() if !(reflect.DeepEqual(eTPs, rcvTPs) || reflect.DeepEqual(eTPs[0], rcvTPs[0])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v", utils.ToIJSON(eTPs), utils.ToIJSON(rcvTPs)) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v", utils.ToIJSON(eTPs), utils.ToIJSON(rcvTPs)) } } @@ -2597,7 +2597,7 @@ func TestTPFilterAsTPFilterWithDynValues(t *testing.T) { rcvTPs := TpFilterS(tps).AsTPFilter() if !(reflect.DeepEqual(eTPs, rcvTPs) || reflect.DeepEqual(eTPs[0], rcvTPs[0])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v", utils.ToIJSON(eTPs), utils.ToIJSON(rcvTPs)) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v", utils.ToIJSON(eTPs), utils.ToIJSON(rcvTPs)) } } @@ -3672,14 +3672,14 @@ func TestTPDispatcherHostsCSVHeader(t *testing.T) { tps := &TPDispatcherHosts{} eOut := []string{"#" + utils.Tenant, utils.ID, utils.Address, utils.Transport, utils.TLS} if rcv := tps.CSVHeader(); !reflect.DeepEqual(rcv, eOut) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } } func TestTPDispatcherHostsAsTPDispatcherHosts(t *testing.T) { tps := &TPDispatcherHosts{} if rcv := tps.AsTPDispatcherHosts(); rcv != nil { - t.Errorf("\nExpecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) + t.Errorf("Expecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) } tps = &TPDispatcherHosts{ @@ -3688,7 +3688,7 @@ func TestTPDispatcherHostsAsTPDispatcherHosts(t *testing.T) { Tenant: "Tenant1", }} if rcv := tps.AsTPDispatcherHosts(); rcv != nil { - t.Errorf("\nExpecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) + t.Errorf("Expecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) } tps = &TPDispatcherHosts{ @@ -3709,7 +3709,7 @@ func TestTPDispatcherHostsAsTPDispatcherHosts(t *testing.T) { }, } if rcv := tps.AsTPDispatcherHosts(); !reflect.DeepEqual(rcv, eOut) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } tps = &TPDispatcherHosts{ @@ -3730,7 +3730,7 @@ func TestTPDispatcherHostsAsTPDispatcherHosts(t *testing.T) { }, } if rcv := tps.AsTPDispatcherHosts(); !reflect.DeepEqual(rcv, eOut) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } tps = &TPDispatcherHosts{ @@ -3752,7 +3752,7 @@ func TestTPDispatcherHostsAsTPDispatcherHosts(t *testing.T) { }, } if rcv := tps.AsTPDispatcherHosts(); !reflect.DeepEqual(rcv, eOut) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } tps = &TPDispatcherHosts{ @@ -3776,14 +3776,14 @@ func TestTPDispatcherHostsAsTPDispatcherHosts(t *testing.T) { rcv := tps.AsTPDispatcherHosts() sort.Slice(rcv, func(i, j int) bool { return strings.Compare(rcv[i].ID, rcv[j].ID) < 0 }) if !reflect.DeepEqual(rcv, eOut) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } } func TestAPItoModelTPDispatcherHost(t *testing.T) { var tpDPH *utils.TPDispatcherHost if rcv := APItoModelTPDispatcherHost(tpDPH); rcv != nil { - t.Errorf("\nExpecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) + t.Errorf("Expecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) } tpDPH = &utils.TPDispatcherHost{ @@ -3801,7 +3801,7 @@ func TestAPItoModelTPDispatcherHost(t *testing.T) { ID: "ID", } if rcv := APItoModelTPDispatcherHost(tpDPH); !reflect.DeepEqual(eOut, rcv) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } } @@ -3809,7 +3809,7 @@ func TestAPItoModelTPDispatcherHost(t *testing.T) { func TestAPItoDispatcherHost(t *testing.T) { var tpDPH *utils.TPDispatcherHost if rcv := APItoDispatcherHost(tpDPH); rcv != nil { - t.Errorf("\nExpecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) + t.Errorf("Expecting: nil,\nReceived: %+v", utils.ToJSON(rcv)) } tpDPH = &utils.TPDispatcherHost{ @@ -3830,7 +3830,7 @@ func TestAPItoDispatcherHost(t *testing.T) { }, } if rcv := APItoDispatcherHost(tpDPH); !reflect.DeepEqual(eOut, rcv) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } tpDPH = &utils.TPDispatcherHost{ @@ -3852,7 +3852,7 @@ func TestAPItoDispatcherHost(t *testing.T) { }, } if rcv := APItoDispatcherHost(tpDPH); !reflect.DeepEqual(eOut, rcv) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } } @@ -3876,7 +3876,7 @@ func TestDispatcherHostToAPI(t *testing.T) { }, } if rcv := DispatcherHostToAPI(dph); !reflect.DeepEqual(eOut, rcv) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(eOut), utils.ToJSON(rcv)) } } diff --git a/engine/rateinterval_test.go b/engine/rateinterval_test.go index e6abeb55a..6294d93b3 100644 --- a/engine/rateinterval_test.go +++ b/engine/rateinterval_test.go @@ -524,7 +524,7 @@ func TestRITimingClone2(t *testing.T) { func TestRIRateClone(t *testing.T) { var rit, cln RIRate if cloned := rit.Clone(); !reflect.DeepEqual(cln, *cloned) { - t.Errorf("\nExpecting: %+v,\n received: %+v", cln, *cloned) + t.Errorf("Expecting: %+v,\n received: %+v", cln, *cloned) } rit = RIRate{ ConnectFee: 0.7, @@ -562,7 +562,7 @@ func TestRIRateClone(t *testing.T) { } rit.Rates[0].GroupIntervalStart = 7 if cloned.Rates[0].GroupIntervalStart != 10 { - t.Errorf("\nExpecting: 10,\n received: %+v", cloned.Rates[0].GroupIntervalStart) + t.Errorf("Expecting: 10,\n received: %+v", cloned.Rates[0].GroupIntervalStart) } } diff --git a/engine/suretax.go b/engine/suretax.go index 5515bc0f8..521f23ff1 100644 --- a/engine/suretax.go +++ b/engine/suretax.go @@ -193,7 +193,7 @@ func SureTaxProcessCdr(cdr *CDR) error { if err != nil { return err } - resp, err := sureTaxClient.Post(stCfg.Url, "application/json", bytes.NewBuffer(jsnContent)) + resp, err := sureTaxClient.Post(stCfg.URL, "application/json", bytes.NewBuffer(jsnContent)) if err != nil { return err } diff --git a/engine/z_attributes_test.go b/engine/z_attributes_test.go index 79578b7d9..53537ce1c 100644 --- a/engine/z_attributes_test.go +++ b/engine/z_attributes_test.go @@ -451,7 +451,7 @@ func TestAttributeIndexer(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf := &AttributeProfile{ Tenant: "cgrates.org", @@ -516,7 +516,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -633,7 +633,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -746,7 +746,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -859,7 +859,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -954,7 +954,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) return } attrPrf1 := &AttributeProfile{ @@ -1070,7 +1070,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1182,7 +1182,7 @@ func TestAttributeProcessValue(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1256,7 +1256,7 @@ func TestAttributeAttributeFilterIDs(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1341,7 +1341,7 @@ func TestAttributeProcessEventConstant(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1416,7 +1416,7 @@ func TestAttributeProcessEventVariable(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1498,7 +1498,7 @@ func TestAttributeProcessEventComposed(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1585,7 +1585,7 @@ func TestAttributeProcessEventSum(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1664,7 +1664,7 @@ func TestAttributeProcessEventUsageDifference(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1745,7 +1745,7 @@ func TestAttributeProcessEventValueExponent(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1834,7 +1834,7 @@ func BenchmarkAttributeProcessEventConstant(b *testing.B) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { b.Error(err) } else if test != true { - b.Errorf("\nExpecting: true got :%+v", test) + b.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1897,7 +1897,7 @@ func BenchmarkAttributeProcessEventVariable(b *testing.B) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { b.Error(err) } else if test != true { - b.Errorf("\nExpecting: true got :%+v", test) + b.Errorf("Expecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, @@ -1952,7 +1952,7 @@ func TestGetAttributeProfileFromInline(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrID := "*sum:*req.Field2:10|~*req.NumField|20" expAttrPrf1 := &AttributeProfile{ @@ -2772,7 +2772,7 @@ func TestAttributeIndexSelectsFalse(t *testing.T) { if test, err := dmAtr.DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } attrPrf := &AttributeProfile{ Tenant: "cgrates.org", diff --git a/engine/z_filterindexer_it_test.go b/engine/z_filterindexer_it_test.go index 51ddff493..d382f29dc 100644 --- a/engine/z_filterindexer_it_test.go +++ b/engine/z_filterindexer_it_test.go @@ -124,7 +124,7 @@ func testITIsDBEmpty(t *testing.T) { if err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } } diff --git a/engine/z_libcdre_it_test.go b/engine/z_libcdre_it_test.go index 154a7faff..9677cb747 100644 --- a/engine/z_libcdre_it_test.go +++ b/engine/z_libcdre_it_test.go @@ -74,7 +74,7 @@ func TestWriteToFile(t *testing.T) { t.Errorf("Error deconding the file content: %+v", err) } if !reflect.DeepEqual(rcv, exportEvent) { - t.Errorf("\nExpecting: %+v,\nReceived: %+v", utils.ToJSON(exportEvent), utils.ToJSON(rcv)) + t.Errorf("Expecting: %+v,\nReceived: %+v", utils.ToJSON(exportEvent), utils.ToJSON(rcv)) } //populate the exportEvent struct exportEvent = &ExportEvents{ @@ -96,13 +96,13 @@ func TestWriteToFile(t *testing.T) { t.Errorf("Error deconding the file content: %+v", err) } if !reflect.DeepEqual(rcv, exportEvent) { - t.Errorf("\nExpected: %+v,\nReceived: %+v", utils.ToJSON(exportEvent), utils.ToJSON(rcv)) + t.Errorf("Expected: %+v,\nReceived: %+v", utils.ToJSON(exportEvent), utils.ToJSON(rcv)) } //wrong path *reading exportEvent = &ExportEvents{} filePath = "/tmp/engine/libcdre_test/wrongpath.txt" if rcv, err = NewExportEventsFromFile(filePath); err == nil || err.Error() != "open /tmp/engine/libcdre_test/wrongpath.txt: no such file or directory" { - t.Errorf("\nExpecting: 'open /tmp/engine/libcdre_test/wrongpath.txt: no such file or directory',\nReceived: '%+v'", err) + t.Errorf("Expecting: 'open /tmp/engine/libcdre_test/wrongpath.txt: no such file or directory',\nReceived: '%+v'", err) } //wrong path *writing filePath = utils.EmptyString diff --git a/engine/z_onstor_it_test.go b/engine/z_onstor_it_test.go index 8c7a08d40..27a4d0b9f 100644 --- a/engine/z_onstor_it_test.go +++ b/engine/z_onstor_it_test.go @@ -139,7 +139,7 @@ func testOnStorITIsDBEmpty(t *testing.T) { if err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } } diff --git a/engine/z_stordb_it_test.go b/engine/z_stordb_it_test.go index 0e1f2caae..9198feb4b 100644 --- a/engine/z_stordb_it_test.go +++ b/engine/z_stordb_it_test.go @@ -125,14 +125,14 @@ func testStorDBitIsDBEmpty(t *testing.T) { if err != nil { t.Error(err) } else if test != true { - t.Errorf("\nExpecting: true got :%+v", test) + t.Errorf("Expecting: true got :%+v", test) } case utils.POSTGRES, utils.MYSQL: test, err := storDB.IsDBEmpty() if err != nil { t.Error(err) } else if test != false { - t.Errorf("\nExpecting: false got :%+v", test) + t.Errorf("Expecting: false got :%+v", test) } } } @@ -171,7 +171,7 @@ func testStorDBitCRUDTpTimings(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -185,7 +185,7 @@ func testStorDBitCRUDTpTimings(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -240,7 +240,7 @@ func testStorDBitCRUDTpDestinations(t *testing.T) { rcv[1].Prefixes = snd[0].Prefixes } if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -270,7 +270,7 @@ func testStorDBitCRUDTpDestinations(t *testing.T) { rcv[1].Prefixes = snd[0].Prefixes } if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -335,7 +335,7 @@ func testStorDBitCRUDTpRates(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -351,7 +351,7 @@ func testStorDBitCRUDTpRates(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -409,7 +409,7 @@ func testStorDBitCRUDTpDestinationRates(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -423,7 +423,7 @@ func testStorDBitCRUDTpDestinationRates(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -474,7 +474,7 @@ func testStorDBitCRUDTpRatingPlans(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -488,7 +488,7 @@ func testStorDBitCRUDTpRatingPlans(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -549,7 +549,7 @@ func testStorDBitCRUDTpRatingProfiles(t *testing.T) { } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } @@ -575,7 +575,7 @@ func testStorDBitCRUDTpRatingProfiles(t *testing.T) { } else { if len(snd) != len(rcv) || len(snd[0].RatingPlanActivations) != len(rcv[0].RatingPlanActivations) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } @@ -627,7 +627,7 @@ func testStorDBitCRUDTpSharedGroups(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -641,7 +641,7 @@ func testStorDBitCRUDTpSharedGroups(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -720,7 +720,7 @@ func testStorDBitCRUDTpActions(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -734,7 +734,7 @@ func testStorDBitCRUDTpActions(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -785,7 +785,7 @@ func testStorDBitCRUDTpActionPlans(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -799,7 +799,7 @@ func testStorDBitCRUDTpActionPlans(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -886,7 +886,7 @@ func testStorDBitCRUDTpActionTriggers(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -900,7 +900,7 @@ func testStorDBitCRUDTpActionTriggers(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE @@ -952,7 +952,7 @@ func testStorDBitCRUDTpAccountActions(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // UPDATE @@ -966,7 +966,7 @@ func testStorDBitCRUDTpAccountActions(t *testing.T) { t.Error(err) } else { if !(reflect.DeepEqual(snd[0], rcv[0]) || reflect.DeepEqual(snd[0], rcv[1])) { - t.Errorf("\nExpecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) + t.Errorf("Expecting:\n%+v\nReceived:\n%+v\n||\n%+v", utils.ToIJSON(snd[0]), utils.ToIJSON(rcv[0]), utils.ToIJSON(rcv[1])) } } // REMOVE diff --git a/ers/ers_reload_it_test.go b/ers/ers_reload_it_test.go index d7e48b440..ad62639c0 100644 --- a/ers/ers_reload_it_test.go +++ b/ers/ers_reload_it_test.go @@ -128,7 +128,7 @@ func testReloadVerifyDisabledReaders(t *testing.T) { func testReloadReloadConfigFromPath(t *testing.T) { var reply string - if err := reloadRPC.Call(utils.ConfigSv1ReloadConfig, &config.ConfigReloadArgs{ + if err := reloadRPC.Call(utils.ConfigSv1ReloadConfig, &config.ReloadArgs{ Path: path.Join(*dataDir, "conf", "samples", "ers_reload", "first_reload"), Section: config.ERsJson, }, &reply); err != nil { diff --git a/ers/filexml.go b/ers/filexml.go index b952bf915..04776caf0 100644 --- a/ers/filexml.go +++ b/ers/filexml.go @@ -141,7 +141,7 @@ func (rdr *XMLFileER) processFile(fPath, fName string) (err error) { for _, xmlElmt := range xmlElmts { rowNr++ // increment the rowNr after checking if it's not the end of file agReq := agents.NewAgentRequest( - config.NewXmlProvider(xmlElmt, rdr.Config().XMLRootPath), reqVars, + config.NewXMLProvider(xmlElmt, rdr.Config().XMLRootPath), reqVars, nil, nil, nil, rdr.Config().Tenant, rdr.cgrCfg.GeneralCfg().DefaultTenant, utils.FirstNonEmpty(rdr.Config().Timezone, diff --git a/general_tests/cdrs_processevent_it_test.go b/general_tests/cdrs_processevent_it_test.go index c35882868..ba8394189 100644 --- a/general_tests/cdrs_processevent_it_test.go +++ b/general_tests/cdrs_processevent_it_test.go @@ -318,7 +318,7 @@ func testV1CDRsProcessEventRalS(t *testing.T) { } else if len(cdrs) != 1 { t.Errorf("Expecting: 1, received: %+v", len(cdrs)) } else if !reflect.DeepEqual(cdrs[0].Cost, 0.0204) { - t.Errorf("\nExpected: %+v,\nreceived: %+v", 0.0204, utils.ToJSON(cdrs[0])) + t.Errorf("Expected: %+v,\nreceived: %+v", 0.0204, utils.ToJSON(cdrs[0])) } } @@ -391,7 +391,7 @@ func testV1CDRsProcessEventSts(t *testing.T) { cdrs[0].SetupTime = cdrs[0].SetupTime.UTC() cdrs[0].AnswerTime = cdrs[0].AnswerTime.UTC() if !reflect.DeepEqual(eOut[0], cdrs[0]) { - t.Errorf("\nExpected: %+v,\nreceived: %+v", utils.ToJSON(eOut[0]), utils.ToJSON(cdrs[0])) + t.Errorf("Expected: %+v,\nreceived: %+v", utils.ToJSON(eOut[0]), utils.ToJSON(cdrs[0])) } var metrics map[string]string statMetrics := map[string]string{ @@ -685,7 +685,7 @@ func testV1CDRsV2ProcessEventRalS(t *testing.T) { } else if len(cdrs) != 1 { t.Errorf("Expecting: 1, received: %+v", len(cdrs)) } else if !reflect.DeepEqual(cdrs[0].Cost, 0.0204) { - t.Errorf("\nExpected: %+v,\nreceived: %+v", 0.0204, utils.ToJSON(cdrs[0])) + t.Errorf("Expected: %+v,\nreceived: %+v", 0.0204, utils.ToJSON(cdrs[0])) } argsEv.Flags = append(argsEv.Flags, utils.MetaRerate) diff --git a/general_tests/tls_it_test.go b/general_tests/tls_it_test.go index 1639a28b7..1ea30c36a 100755 --- a/general_tests/tls_it_test.go +++ b/general_tests/tls_it_test.go @@ -84,22 +84,22 @@ func testTLSStartEngine(t *testing.T) { func testTLSRpcConn(t *testing.T) { var err error - tlsRpcClientJson, err = rpcclient.NewRPCClient(utils.TCP, "localhost:2022", true, tlsCfg.TlsCfg().ClientKey, - tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, + tlsRpcClientJson, err = rpcclient.NewRPCClient(utils.TCP, "localhost:2022", true, tlsCfg.TLSCfg().ClientKey, + tlsCfg.TLSCfg().ClientCerificate, tlsCfg.TLSCfg().CaCertificate, 3, 3, time.Second, 5*time.Minute, rpcclient.JSONrpc, nil, false) if err != nil { t.Errorf("Error: %s when dialing", err) } - tlsRpcClientGob, err = rpcclient.NewRPCClient(utils.TCP, "localhost:2023", true, tlsCfg.TlsCfg().ClientKey, - tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, + tlsRpcClientGob, err = rpcclient.NewRPCClient(utils.TCP, "localhost:2023", true, tlsCfg.TLSCfg().ClientKey, + tlsCfg.TLSCfg().ClientCerificate, tlsCfg.TLSCfg().CaCertificate, 3, 3, time.Second, 5*time.Minute, rpcclient.GOBrpc, nil, false) if err != nil { t.Errorf("Error: %s when dialing", err) } - tlsHTTPJson, err = rpcclient.NewRPCClient(utils.TCP, "https://localhost:2280/jsonrpc", true, tlsCfg.TlsCfg().ClientKey, - tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, + tlsHTTPJson, err = rpcclient.NewRPCClient(utils.TCP, "https://localhost:2280/jsonrpc", true, tlsCfg.TLSCfg().ClientKey, + tlsCfg.TLSCfg().ClientCerificate, tlsCfg.TLSCfg().CaCertificate, 3, 3, time.Second, 5*time.Minute, rpcclient.HTTPjson, nil, false) if err != nil { t.Errorf("Error: %s when dialing", err) diff --git a/migrator/attributes_it_test.go b/migrator/attributes_it_test.go index b97fb5c2b..52dd8747c 100755 --- a/migrator/attributes_it_test.go +++ b/migrator/attributes_it_test.go @@ -235,7 +235,7 @@ func testAttrITFlush(t *testing.T) { if isEmpty, err := attrMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(attrMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -246,7 +246,7 @@ func testAttrITFlush(t *testing.T) { if isEmpty, err := attrMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(attrMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/chargers_it_test.go b/migrator/chargers_it_test.go index c03b8accc..e73ffff65 100755 --- a/migrator/chargers_it_test.go +++ b/migrator/chargers_it_test.go @@ -159,7 +159,7 @@ func testChrgITFlush(t *testing.T) { if isEmpty, err := chrgMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(chrgMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -170,7 +170,7 @@ func testChrgITFlush(t *testing.T) { if isEmpty, err := chrgMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(chrgMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/dispatchers_it_test.go b/migrator/dispatchers_it_test.go index a1d99c6d5..8461ef9d0 100644 --- a/migrator/dispatchers_it_test.go +++ b/migrator/dispatchers_it_test.go @@ -159,7 +159,7 @@ func testDspITFlush(t *testing.T) { if isEmpty, err := dspMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(dspMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -170,7 +170,7 @@ func testDspITFlush(t *testing.T) { if isEmpty, err := dspMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(dspMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/rateprofiles_it_test.go b/migrator/rateprofiles_it_test.go index a8534ee1a..7deb598c3 100644 --- a/migrator/rateprofiles_it_test.go +++ b/migrator/rateprofiles_it_test.go @@ -159,7 +159,7 @@ func testRatePrfITFlush(t *testing.T) { if isEmpty, err := ratePrfMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(ratePrfMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -170,7 +170,7 @@ func testRatePrfITFlush(t *testing.T) { if isEmpty, err := ratePrfMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(ratePrfMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/rating_plan_it_test.go b/migrator/rating_plan_it_test.go index b8c9806fc..94e1d7e93 100644 --- a/migrator/rating_plan_it_test.go +++ b/migrator/rating_plan_it_test.go @@ -158,7 +158,7 @@ func testRtPlITFlush(t *testing.T) { if isEmpty, err := rtplMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(rtplMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -169,7 +169,7 @@ func testRtPlITFlush(t *testing.T) { if isEmpty, err := rtplMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(rtplMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/rating_profile_it_test.go b/migrator/rating_profile_it_test.go index da9ded7ee..45eb3a7d5 100644 --- a/migrator/rating_profile_it_test.go +++ b/migrator/rating_profile_it_test.go @@ -159,7 +159,7 @@ func testRtPrfITFlush(t *testing.T) { if isEmpty, err := rtprflMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(rtprflMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -170,7 +170,7 @@ func testRtPrfITFlush(t *testing.T) { if isEmpty, err := rtprflMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(rtprflMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/resource_it_test.go b/migrator/resource_it_test.go index 7cbe60adc..4a93477ec 100644 --- a/migrator/resource_it_test.go +++ b/migrator/resource_it_test.go @@ -159,7 +159,7 @@ func testResITFlush(t *testing.T) { if isEmpty, err := resMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(resMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -170,7 +170,7 @@ func testResITFlush(t *testing.T) { if isEmpty, err := resMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(resMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/migrator/routes_it_test.go b/migrator/routes_it_test.go index f7110dc44..01dc89c69 100644 --- a/migrator/routes_it_test.go +++ b/migrator/routes_it_test.go @@ -158,7 +158,7 @@ func testSupITFlush(t *testing.T) { if isEmpty, err := supMigrator.dmOut.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(supMigrator.dmOut.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) @@ -169,7 +169,7 @@ func testSupITFlush(t *testing.T) { if isEmpty, err := supMigrator.dmIN.DataManager().DataDB().IsDBEmpty(); err != nil { t.Error(err) } else if isEmpty != true { - t.Errorf("\nExpecting: true got :%+v", isEmpty) + t.Errorf("Expecting: true got :%+v", isEmpty) } if err := engine.SetDBVersions(supMigrator.dmIN.DataManager().DataDB()); err != nil { t.Error("Error ", err.Error()) diff --git a/services/apiers_it_test.go b/services/apiers_it_test.go index 3a1b7e26d..e8f58826f 100644 --- a/services/apiers_it_test.go +++ b/services/apiers_it_test.go @@ -80,7 +80,7 @@ func TestApiersReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.ApierS, }, &reply); err != nil { diff --git a/services/asteriskagent_it_test.go b/services/asteriskagent_it_test.go index 0854d4b37..fcd72bb8d 100644 --- a/services/asteriskagent_it_test.go +++ b/services/asteriskagent_it_test.go @@ -65,7 +65,7 @@ func TestAsteriskAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "tutorial_tests", "asterisk_ari", "cgrates", "etc", "cgrates"), Section: config.AsteriskAgentJSN, }, &reply); err != nil { diff --git a/services/attributes_it_test.go b/services/attributes_it_test.go index f8c4e25db..8a956f809 100644 --- a/services/attributes_it_test.go +++ b/services/attributes_it_test.go @@ -69,7 +69,7 @@ func TestAttributeSReload(t *testing.T) { } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.ATTRIBUTE_JSN, }, &reply); err != nil { diff --git a/services/cdrs_it_test.go b/services/cdrs_it_test.go index 648874878..d3f51d149 100644 --- a/services/cdrs_it_test.go +++ b/services/cdrs_it_test.go @@ -91,7 +91,7 @@ func TestCdrsReload(t *testing.T) { } cfg.RalsCfg().Enabled = true var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.CDRS_JSN, }, &reply); err != nil { diff --git a/services/chargers_it_test.go b/services/chargers_it_test.go index b95a19bdf..240b84350 100644 --- a/services/chargers_it_test.go +++ b/services/chargers_it_test.go @@ -69,7 +69,7 @@ func TestChargerSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err = cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.ChargerSCfgJson, }, &reply); err != nil { diff --git a/services/datadb_it_test.go b/services/datadb_it_test.go index 9f0a4a5f1..f1163a6ff 100644 --- a/services/datadb_it_test.go +++ b/services/datadb_it_test.go @@ -64,7 +64,7 @@ func TestDataDBReload(t *testing.T) { } var reply string cfg.AttributeSCfg().Enabled = true - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.DATADB_JSN, }, &reply); err != nil { diff --git a/services/diameteragent_it_test.go b/services/diameteragent_it_test.go index da7ba8863..341fd80ab 100644 --- a/services/diameteragent_it_test.go +++ b/services/diameteragent_it_test.go @@ -65,7 +65,7 @@ func TestDiameterAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "diamagent_mysql"), Section: config.DA_JSN, }, &reply); err != nil { diff --git a/services/dispatchers_it_test.go b/services/dispatchers_it_test.go index 83b4775a3..88011abb6 100644 --- a/services/dispatchers_it_test.go +++ b/services/dispatchers_it_test.go @@ -71,7 +71,7 @@ func TestDispatcherSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err = cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "dispatchers", "dispatchers_mysql"), Section: config.DispatcherSJson, diff --git a/services/dnsagent_it_test.go b/services/dnsagent_it_test.go index ad6ba7974..65a8f3a27 100644 --- a/services/dnsagent_it_test.go +++ b/services/dnsagent_it_test.go @@ -65,7 +65,7 @@ func TestDNSAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "dnsagent_reload"), Section: config.DNSAgentJson, }, &reply); err != nil { diff --git a/services/ees_it_test.go b/services/ees_it_test.go index c1ebcae59..95ec443c6 100644 --- a/services/ees_it_test.go +++ b/services/ees_it_test.go @@ -83,7 +83,7 @@ func TestEventExporterSReload(t *testing.T) { fcTmp.ComputePath() cfg.TemplatesCfg()["requiredFields"] = []*config.FCTemplate{fcTmp} var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "ees"), Section: config.EEsJson, }, &reply); err != nil { diff --git a/services/ers_it_test.go b/services/ers_it_test.go index 1f31213a6..0bfd37403 100644 --- a/services/ers_it_test.go +++ b/services/ers_it_test.go @@ -69,7 +69,7 @@ func TestEventReaderSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "ers_reload", "internal"), Section: config.ERsJson, }, &reply); err != nil { diff --git a/services/freeswitchagent_it_test.go b/services/freeswitchagent_it_test.go index 047ed3a55..897ca57b0 100644 --- a/services/freeswitchagent_it_test.go +++ b/services/freeswitchagent_it_test.go @@ -65,7 +65,7 @@ func TestFreeSwitchAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "tutorial_tests", "fs_evsock", "cgrates", "etc", "cgrates"), Section: config.FreeSWITCHAgentJSN, }, &reply); err != nil { diff --git a/services/httpagent.go b/services/httpagent.go index 9bd03486e..aa7b95801 100644 --- a/services/httpagent.go +++ b/services/httpagent.go @@ -63,7 +63,7 @@ func (ha *HTTPAgent) Start() (err error) { ha.Lock() utils.Logger.Info(fmt.Sprintf("<%s> successfully started HTTPAgent", utils.HTTPAgent)) - for _, agntCfg := range ha.cfg.HttpAgentCfg() { + for _, agntCfg := range ha.cfg.HTTPAgentCfg() { ha.server.RegisterHttpHandler(agntCfg.Url, agents.NewHTTPAgent(ha.connMgr, agntCfg.SessionSConns, filterS, ha.cfg.GeneralCfg().DefaultTenant, agntCfg.RequestPayload, @@ -97,5 +97,5 @@ func (ha *HTTPAgent) ServiceName() string { // ShouldRun returns if the service should be running func (ha *HTTPAgent) ShouldRun() bool { - return len(ha.cfg.HttpAgentCfg()) != 0 + return len(ha.cfg.HTTPAgentCfg()) != 0 } diff --git a/services/kamailioagent_it_test.go b/services/kamailioagent_it_test.go index 5420d06dd..f266d62b7 100644 --- a/services/kamailioagent_it_test.go +++ b/services/kamailioagent_it_test.go @@ -65,7 +65,7 @@ func TestKamailioAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "tutorial_tests", "kamevapi", "cgrates", "etc", "cgrates"), Section: config.KamailioAgentJSN, }, &reply); err != nil { diff --git a/services/radiusagent_it_test.go b/services/radiusagent_it_test.go index d64d30bb3..ae6753f4b 100644 --- a/services/radiusagent_it_test.go +++ b/services/radiusagent_it_test.go @@ -65,7 +65,7 @@ func TestRadiusAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "radagent_mysql"), Section: config.RA_JSN, }, &reply); err != nil { diff --git a/services/rals_it_test.go b/services/rals_it_test.go index 1c475619c..e27576c44 100644 --- a/services/rals_it_test.go +++ b/services/rals_it_test.go @@ -86,7 +86,7 @@ func TestRalsReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.RALS_JSN, }, &reply); err != nil { diff --git a/services/rates_it_test.go b/services/rates_it_test.go index e63076129..9109ba265 100644 --- a/services/rates_it_test.go +++ b/services/rates_it_test.go @@ -61,7 +61,7 @@ func TestRateSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "rates"), Section: config.RateSJson, }, &reply); err != nil { diff --git a/services/resources_it_test.go b/services/resources_it_test.go index 65829cd8c..c610fe99b 100644 --- a/services/resources_it_test.go +++ b/services/resources_it_test.go @@ -71,7 +71,7 @@ func TestResourceSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err = cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.RESOURCES_JSON, }, &reply); err != nil { diff --git a/services/routes_it_test.go b/services/routes_it_test.go index 2dc992540..881d095f4 100644 --- a/services/routes_it_test.go +++ b/services/routes_it_test.go @@ -69,7 +69,7 @@ func TestSupplierSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongonew"), Section: config.RouteSJson, }, &reply); err != nil { diff --git a/services/schedulers_it_test.go b/services/schedulers_it_test.go index 75a232e8c..6d8331a22 100644 --- a/services/schedulers_it_test.go +++ b/services/schedulers_it_test.go @@ -62,7 +62,7 @@ func TestSchedulerSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongonew"), Section: config.SCHEDULER_JSN, }, &reply); err != nil { diff --git a/services/sessions_it_test.go b/services/sessions_it_test.go index 9e206d086..de1bb9ddb 100644 --- a/services/sessions_it_test.go +++ b/services/sessions_it_test.go @@ -97,7 +97,7 @@ func TestSessionSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongonew"), Section: config.SessionSJson, }, &reply); err != nil { diff --git a/services/sipagent_it_test.go b/services/sipagent_it_test.go index d3d547480..27bb661ba 100644 --- a/services/sipagent_it_test.go +++ b/services/sipagent_it_test.go @@ -65,7 +65,7 @@ func TestSIPAgentReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err := cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "sipagent_mysql"), Section: config.SIPAgentJson, }, &reply); err != nil { diff --git a/services/stats_it_test.go b/services/stats_it_test.go index aff0b4128..5c5cd3e9a 100644 --- a/services/stats_it_test.go +++ b/services/stats_it_test.go @@ -71,7 +71,7 @@ func TestStatSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err = cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.STATS_JSON, }, &reply); err != nil { diff --git a/services/thresholds_it_test.go b/services/thresholds_it_test.go index bfb2b7d96..552e448fc 100644 --- a/services/thresholds_it_test.go +++ b/services/thresholds_it_test.go @@ -65,7 +65,7 @@ func TestThresholdSReload(t *testing.T) { t.Errorf("Expected service to be down") } var reply string - if err = cfg.V1ReloadConfig(&config.ConfigReloadArgs{ + if err = cfg.V1ReloadConfig(&config.ReloadArgs{ Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), Section: config.THRESHOLDS_JSON, }, &reply); err != nil { diff --git a/utils/coreutils_test.go b/utils/coreutils_test.go index 05ba6f8a0..8bd1d91fc 100644 --- a/utils/coreutils_test.go +++ b/utils/coreutils_test.go @@ -958,7 +958,7 @@ func TestParseHierarchyClone(t *testing.T) { eHP := HierarchyPath([]string{"Root", "CGRateS"}) rcv := eHP.Clone() if !reflect.DeepEqual(eHP, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", ToJSON(eHP), ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", ToJSON(eHP), ToJSON(rcv)) } if rcv[0] = ""; eHP[0] != "Root" { t.Errorf("Expected clone to not modify the cloned") @@ -966,7 +966,7 @@ func TestParseHierarchyClone(t *testing.T) { eHP = nil rcv = eHP.Clone() if !reflect.DeepEqual(eHP, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", ToJSON(eHP), ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", ToJSON(eHP), ToJSON(rcv)) } } diff --git a/utils/researchreplace_test.go b/utils/researchreplace_test.go index d2a55b8cf..58fe8bdf8 100644 --- a/utils/researchreplace_test.go +++ b/utils/researchreplace_test.go @@ -90,7 +90,7 @@ func TestReSearchReplaceClone(t *testing.T) { } rcv := rsr.Clone() if !reflect.DeepEqual(rsr, rcv) { - t.Errorf("\nExpected: %+v\nReceived: %+v", ToJSON(rsr), ToJSON(rcv)) + t.Errorf("Expected: %+v\nReceived: %+v", ToJSON(rsr), ToJSON(rcv)) } *rcv.SearchRegexp = regexp.Regexp{} if reflect.DeepEqual(rsr.SearchRegexp, rcv.SearchRegexp) {