CgrEvent PassFilters implementation

This commit is contained in:
DanB
2015-07-02 18:54:09 +02:00
parent dd80669439
commit 4725e5dfe9
2 changed files with 41 additions and 2 deletions

View File

@@ -19,7 +19,12 @@ type SubscribeInfo struct {
type CgrEvent map[string]string
func (ce CgrEvent) Match(rsrFields utils.RSRFields) bool {
func (ce CgrEvent) PassFilters(rsrFields utils.RSRFields) bool {
for _, rsrFld := range rsrFields {
if !rsrFld.FilterPasses(ce[rsrFld.Id]) {
return false
}
}
return true
}
@@ -127,7 +132,7 @@ func (ps *PubSub) Publish(pi PublishInfo, reply *string) error {
ps.removeSubscriber(key)
continue // subscription expired, do not send event
}
if !pi.Event.Match(subData.Filters) {
if !pi.Event.PassFilters(subData.Filters) {
continue // the event does not match the filters
}
split := utils.InfieldSplit(key)

View File

@@ -206,3 +206,37 @@ func TestPublishExpiredSave(t *testing.T) {
t.Error("Error saving subscribers: ", err, subs)
}
}
func TestCgrEventPassFilters(t *testing.T) {
ev := CgrEvent{"EventName": "TEST_EVENT", "Header1": "Value1", "Header2": "Value2"}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("EventName(TEST_EVENT)", utils.INFIELD_SEP)) {
t.Error("Not passing filter")
}
if ev.PassFilters(utils.ParseRSRFieldsMustCompile("EventName(DUMMY_EVENT)", utils.INFIELD_SEP)) {
t.Error("Passing filter")
}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("^EventName::TEST_EVENT(TEST_EVENT)", utils.INFIELD_SEP)) {
t.Error("Not passing filter")
}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("^EventName::DUMMY", utils.INFIELD_SEP)) { // Should pass since we have no filter defined
t.Error("Not passing no filter")
}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("~EventName:s/^(\\w*)_/$1/(TEST)", utils.INFIELD_SEP)) {
t.Error("Not passing filter")
}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("~EventName:s/^(\\w*)_/$1/:s/^(\\w)(\\w)(\\w)(\\w)/$1$3$4/(TST)", utils.INFIELD_SEP)) {
t.Error("Not passing filter")
}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("EventName(TEST_EVENT);Header1(Value1)", utils.INFIELD_SEP)) {
t.Error("Not passing filter")
}
if ev.PassFilters(utils.ParseRSRFieldsMustCompile("EventName(TEST_EVENT);Header1(Value2)", utils.INFIELD_SEP)) {
t.Error("Passing filter")
}
if !ev.PassFilters(utils.ParseRSRFieldsMustCompile("EventName(TEST_EVENT);~Header1:s/(\\d)/$1/(1)", utils.INFIELD_SEP)) {
t.Error("Not passing filter")
}
if ev.PassFilters(utils.ParseRSRFieldsMustCompile("EventName(TEST_EVENT);~Header1:s/(\\d)/$1/(2)", utils.INFIELD_SEP)) {
t.Error("Passing filter")
}
}