mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Fixes #1305
This commit is contained in:
committed by
Dan Christian Bogos
parent
8299a672c1
commit
bf98dd2282
@@ -273,7 +273,8 @@ func (prsr *RSRParser) ParseDataProvider(dP DataProvider, separator string) (out
|
||||
var outStr string
|
||||
if prsr.attrValue == "" {
|
||||
if outStr, err = dP.FieldAsString(
|
||||
strings.Split(prsr.attrName, separator)); err != nil {
|
||||
strings.Split(prsr.attrName, separator)); err != nil &&
|
||||
(err != utils.ErrNotFound || prsr.filters.FilterRules() != "^$") {
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -284,7 +285,8 @@ func (prsr *RSRParser) ParseDataProviderWithInterfaces(dP DataProvider, separato
|
||||
var outIface interface{}
|
||||
if prsr.attrValue == "" {
|
||||
if outIface, err = dP.FieldAsInterface(
|
||||
strings.Split(prsr.attrName, separator)); err != nil {
|
||||
strings.Split(prsr.attrName, separator)); err != nil &&
|
||||
(err != utils.ErrNotFound || prsr.filters.FilterRules() != "^$") {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,8 +207,10 @@ func TestFieldAsString(t *testing.T) {
|
||||
t.Errorf("field: <%v>, expected: <%v>, received: <%v>", prsr, eFldVal, fldVal)
|
||||
}
|
||||
prsr = config.NewRSRParserMustCompile(utils.DynamicDataPrefix+"dummy_field", true)
|
||||
if _, err := cdr.FieldAsString(prsr); err != utils.ErrNotFound {
|
||||
if fldVal, err := cdr.FieldAsString(prsr); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
} else if fldVal != utils.EmptyString {
|
||||
t.Errorf("field: <%v>, expected: <%v>, received: <%v>", prsr, utils.EmptyString, fldVal)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -516,28 +516,34 @@ func TestPassFilterMissingField(t *testing.T) {
|
||||
cfg: cfg,
|
||||
dm: dmFilterPass,
|
||||
}
|
||||
|
||||
passEvent1 := map[string]interface{}{
|
||||
"Category": "call",
|
||||
"test": "call",
|
||||
}
|
||||
if pass, err := filterS.Pass("cgrates.org",
|
||||
[]string{"*rsr::~Category(^$)"}, config.NewNavigableMap(passEvent1)); err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else if pass {
|
||||
t.Errorf("Expecting: true , received: %+v", pass)
|
||||
}
|
||||
if pass, err := filterS.Pass("cgrates.org",
|
||||
[]string{"*rsr::~Category(!^$)"}, config.NewNavigableMap(passEvent1)); err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else if !pass {
|
||||
t.Errorf("Expecting: true , received: %+v", pass)
|
||||
}
|
||||
|
||||
passEvent2 := map[string]interface{}{
|
||||
"test": "call",
|
||||
"Category": "",
|
||||
}
|
||||
if pass, err := filterS.Pass("cgrates.org",
|
||||
[]string{"*rsr::~Category(^$)"}, config.NewNavigableMap(passEvent2)); err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else if pass {
|
||||
} else if !pass {
|
||||
t.Errorf("Expecting: true , received: %+v", pass)
|
||||
}
|
||||
|
||||
passEvent3 := map[string]interface{}{
|
||||
"Category": "call",
|
||||
}
|
||||
if pass, err := filterS.Pass("cgrates.org",
|
||||
[]string{"*rsr::~Category(^$)"}, config.NewNavigableMap(passEvent3)); err != nil {
|
||||
t.Errorf(err.Error())
|
||||
} else if pass {
|
||||
t.Errorf("Expecting: false , received: %+v", pass)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,6 +234,10 @@ type RSRFilter struct {
|
||||
negative bool // Rule should not match
|
||||
}
|
||||
|
||||
func (rsrFltr *RSRFilter) FilterRule() string {
|
||||
return rsrFltr.filterRule
|
||||
}
|
||||
|
||||
func (rsrFltr *RSRFilter) Pass(val string) bool {
|
||||
if rsrFltr.filterRule == "" {
|
||||
return !rsrFltr.negative
|
||||
@@ -322,6 +326,13 @@ func ParseRSRFiltersFromSlice(fltrStrs []string) (RSRFilters, error) {
|
||||
|
||||
type RSRFilters []*RSRFilter
|
||||
|
||||
func (fltrs RSRFilters) FilterRules() (rls string) {
|
||||
for _, fltr := range fltrs {
|
||||
rls += fltr.FilterRule()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// @all: specifies whether all filters should match or at least one
|
||||
func (fltrs RSRFilters) Pass(val string, allMustMatch bool) (matched bool) {
|
||||
if len(fltrs) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user