Updated FilterS ApierSConns

This commit is contained in:
Trial97
2020-02-10 09:59:43 +02:00
committed by Dan Christian Bogos
parent 91687a3111
commit ceb2c5b718
28 changed files with 121 additions and 33 deletions

View File

@@ -156,7 +156,7 @@ func testV1RsGetResourcesForEvent(t *testing.T) {
return
}
if len(*reply) != 1 {
t.Errorf("Expecting: %+v, received: %+v", 1, len(*reply))
t.Fatalf("Expecting: %+v, received: %+v", 1, len(*reply))
}
if (*reply)[0].ID != "ResGroup2" {
t.Errorf("Expecting: %+v, received: %+v", "ResGroup2", (*reply)[0].ID)

View File

@@ -227,7 +227,7 @@ const CGRATES_CFG_JSON = `
"filters": { // Filters configuration (*new)
"stats_conns": [], // connections to StatS for <*stats> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
"resources_conns": [], // connections to ResourceS for <*resources> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
"rals_conns": [], // connections to RALs for <*accounts> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
"apiers_conns": [], // connections to RALs for <*accounts> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
},

View File

@@ -867,7 +867,7 @@ func TestDfFilterSJsonCfg(t *testing.T) {
eCfg := &FilterSJsonCfg{
Stats_conns: &[]string{},
Resources_conns: &[]string{},
Rals_conns: &[]string{},
Apiers_conns: &[]string{},
}
if cfg, err := dfCgrJsonCfg.FilterSJsonCfg(); err != nil {
t.Error(err)

View File

@@ -761,7 +761,7 @@ func TestCgrCfgJSONDefaultFiltersCfg(t *testing.T) {
eFiltersCfg := &FilterSCfg{
StatSConns: []string{},
ResourceSConns: []string{},
RALsConns: []string{},
ApierSConns: []string{},
}
if !reflect.DeepEqual(cgrCfg.filterSCfg, eFiltersCfg) {
t.Errorf("received: %+v, expecting: %+v", cgrCfg.filterSCfg, eFiltersCfg)

View File

@@ -510,9 +510,9 @@ func (cfg *CGRConfig) checkConfigSanity() error {
return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.FilterS, connID)
}
}
for _, connID := range cfg.filterSCfg.RALsConns {
for _, connID := range cfg.filterSCfg.ApierSConns {
if strings.HasPrefix(connID, utils.MetaInternal) && !cfg.ralsCfg.Enabled {
return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.RALService, utils.FilterS)
return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ApierS, utils.FilterS)
}
if _, has := cfg.rpcConns[connID]; !has && !strings.HasPrefix(connID, utils.MetaInternal) {
return fmt.Errorf("<%s> connection with id: <%s> not defined", utils.FilterS, connID)

View File

@@ -872,12 +872,12 @@ func TestConfigSanityFilterS(t *testing.T) {
}
cfg.filterSCfg.ResourceSConns = []string{}
cfg.filterSCfg.RALsConns = []string{utils.MetaInternal}
cfg.filterSCfg.ApierSConns = []string{utils.MetaInternal}
if err := cfg.checkConfigSanity(); err == nil || err.Error() != "<RALs> not enabled but requested by <FilterS> component." {
if err := cfg.checkConfigSanity(); err == nil || err.Error() != "<ApierS> not enabled but requested by <FilterS> component." {
t.Error(err)
}
cfg.filterSCfg.RALsConns = []string{"test"}
cfg.filterSCfg.ApierSConns = []string{"test"}
expected = "<FilterS> connection with id: <test> not defined"
if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected {
t.Errorf("Expecting: %+q received: %+q", expected, err)

View File

@@ -23,7 +23,7 @@ import "github.com/cgrates/cgrates/utils"
type FilterSCfg struct {
StatSConns []string
ResourceSConns []string
RALsConns []string
ApierSConns []string
}
func (fSCfg *FilterSCfg) loadFromJsonCfg(jsnCfg *FilterSJsonCfg) (err error) {
@@ -52,14 +52,14 @@ func (fSCfg *FilterSCfg) loadFromJsonCfg(jsnCfg *FilterSJsonCfg) (err error) {
}
}
}
if jsnCfg.Rals_conns != nil {
fSCfg.RALsConns = make([]string, len(*jsnCfg.Rals_conns))
for idx, connID := range *jsnCfg.Rals_conns {
if jsnCfg.Apiers_conns != nil {
fSCfg.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
if connID == utils.MetaInternal {
fSCfg.RALsConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder)
fSCfg.ApierSConns[idx] = utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)
} else {
fSCfg.RALsConns[idx] = connID
fSCfg.ApierSConns[idx] = connID
}
}
}

View File

@@ -107,7 +107,7 @@ type ItemOptJson struct {
type FilterSJsonCfg struct {
Stats_conns *[]string
Resources_conns *[]string
Rals_conns *[]string
Apiers_conns *[]string
}
// Rater config section

View File

@@ -40,7 +40,7 @@
"filters": {
"stats_conns": ["*localhost"],
"resources_conns": ["*localhost"],
"rals_conns": ["*localhost"],
"apiers_conns": ["*localhost"],
},

View File

@@ -47,7 +47,7 @@
"filters": {
"stats_conns": ["conn1"],
"resources_conns": ["conn1"],
"rals_conns": ["conn1"],
"apiers_conns": ["conn1"],
},

View File

@@ -38,7 +38,7 @@
"filters": {
"stats_conns": ["*localhost"],
"resources_conns": ["*localhost"],
"rals_conns": ["*localhost"],
"apiers_conns": ["*localhost"],
},

View File

@@ -43,7 +43,7 @@
"filters": {
"stats_conns": ["*localhost"],
"resources_conns": ["*localhost"],
"rals_conns": ["*localhost"],
"apiers_conns": ["*localhost"],
},

View File

@@ -40,7 +40,7 @@
"filters": {
"stats_conns": ["*localhost"],
"resources_conns": ["*localhost"],
"rals_conns": ["*localhost"],
"apiers_conns": ["*localhost"],
},

View File

@@ -100,4 +100,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -106,4 +106,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -119,4 +119,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -130,4 +130,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -135,4 +135,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -142,4 +142,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -137,4 +137,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -127,4 +127,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -127,4 +127,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -99,4 +99,9 @@
"enabled": true,
"scheduler_conns": ["*localhost"],
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -108,4 +108,9 @@
"enabled": true,
"scheduler_conns": ["*internal"],
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -240,4 +240,8 @@
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -97,4 +97,10 @@
"enabled": true,
"scheduler_conns": ["*internal"],
},
"filters": {
"apiers_conns": ["*internal"],
},
}

View File

@@ -345,16 +345,19 @@ func (fltr *FilterRule) passDestinations(fielNameDP config.DataProvider, fieldVa
return false, err
}
for _, p := range utils.SplitPrefix(dst, MIN_PREFIX_MATCH) {
if destIDs, err := dm.GetReverseDestination(p, false, utils.NonTransactional); err == nil {
for _, dID := range destIDs {
for i, valDstID := range fltr.Values {
valDstID, err := config.DPDynamicString(valDstID, fieldValuesDP[i])
if err != nil {
continue
}
if valDstID == dID {
return true, nil
}
var destIDs []string
if err = connMgr.Call(config.CgrConfig().FilterSCfg().ApierSConns, nil, utils.APIerSv1GetReverseDestination,
p, &destIDs); err != nil {
continue
}
for _, dID := range destIDs {
for i, valDstID := range fltr.Values {
valDstID, err := config.DPDynamicString(valDstID, fieldValuesDP[i])
if err != nil {
continue
}
if valDstID == dID {
return true, nil
}
}
}
@@ -442,7 +445,7 @@ func (fS *FilterS) getFieldNameDataProvider(initialDP config.DataProvider,
return nil, fmt.Errorf("invalid fieldname <%s>", fieldName)
}
var account *Account
if err = fS.connMgr.Call(fS.cfg.FilterSCfg().RALsConns, nil, utils.APIerSv2GetAccount,
if err = fS.connMgr.Call(fS.cfg.FilterSCfg().ApierSConns, nil, utils.APIerSv2GetAccount,
&utils.AttrGetAccount{Tenant: tenant, Account: splitFldName[1]}, &account); err != nil {
return
}
@@ -518,7 +521,7 @@ func (fS *FilterS) getFieldValueDataProvider(initialDP config.DataProvider,
return nil, fmt.Errorf("invalid fieldname <%s>", fieldValue)
}
var account *Account
if err = fS.connMgr.Call(fS.cfg.FilterSCfg().RALsConns, nil, utils.APIerSv2GetAccount,
if err = fS.connMgr.Call(fS.cfg.FilterSCfg().ApierSConns, nil, utils.APIerSv2GetAccount,
&utils.AttrGetAccount{Tenant: tenant, Account: splitFldName[1]}, &account); err != nil {
return
}

View File

@@ -21,6 +21,7 @@ import (
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
)
func TestFilterPassString(t *testing.T) {
@@ -305,9 +306,37 @@ func TestFilterPassRSRFields(t *testing.T) {
}
}
// structure to mimic the APIerSv1 to test *destination
type apierSv1Dummy struct {
DataManager *DataManager
}
func (apiv1 *apierSv1Dummy) GetReverseDestination(prefix string, reply *[]string) (err error) {
if prefix == "" {
return utils.NewErrMandatoryIeMissing("prefix")
}
var revLst []string
if revLst, err = apiv1.DataManager.GetReverseDestination(prefix, false, utils.NonTransactional); err != nil {
return
}
*reply = revLst
return
}
func (apiv1 *apierSv1Dummy) Call(serviceMethod string,
args interface{}, reply interface{}) error {
return utils.APIerRPCCall(apiv1, serviceMethod, args, reply)
}
func TestFilterPassDestinations(t *testing.T) {
Cache.Set(utils.CacheReverseDestinations, "+49",
[]string{"DE", "EU_LANDLINE"}, nil, true, "")
config.CgrConfig().FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)}
internalAPIerSv1Chan := make(chan rpcclient.ClientConnector, 1)
internalAPIerSv1Chan <- &apierSv1Dummy{DataManager: dm}
connMgr = NewConnManager(config.CgrConfig(), map[string]chan rpcclient.ClientConnector{
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): internalAPIerSv1Chan,
})
cd := &CallDescriptor{
Category: "call",
Tenant: "cgrates.org",