From dbe4720666bd01b020cac0adc2cd881d38f179cf Mon Sep 17 00:00:00 2001 From: Trial97 Date: Tue, 11 Aug 2020 17:23:07 +0300 Subject: [PATCH] Updated *ipnet filter --- apier/v1/stats_it_test.go | 4 ++-- engine/filters.go | 13 +++++++++---- engine/filters_test.go | 31 ++++++++++++++++++++++--------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index d10d872bc..4d0f9819e 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -733,10 +733,10 @@ func testV1STSProcessStatWithThreshold(t *testing.T) { QueueLength: 100, TTL: time.Duration(1) * time.Second, Metrics: []*engine.MetricWithFilters{ - &engine.MetricWithFilters{ + { MetricID: utils.MetaTCD, }, - &engine.MetricWithFilters{ + { MetricID: utils.ConcatenatedKey(utils.MetaSum, "2"), }, }, diff --git a/engine/filters.go b/engine/filters.go index 76872e6d7..31aed967f 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -579,16 +579,21 @@ func (fltr *FilterRule) passIPNet(dDP utils.DataProvider) (bool, error) { } return false, err } - _, ip, err := net.ParseCIDR(strVal) - if err != nil { - return false, err + ip := net.ParseIP(strVal) + if ip == nil { + return false, nil } + for _, val := range fltr.rsrValues { sval, err := val.ParseDataProvider(dDP) if err != nil { continue } - if ip.Contains(net.ParseIP(sval)) { + _, ipNet, err := net.ParseCIDR(sval) + if err != nil { + continue + } + if ipNet.Contains(ip) { return true, nil } } diff --git a/engine/filters_test.go b/engine/filters_test.go index 7e4829e45..0385b8862 100644 --- a/engine/filters_test.go +++ b/engine/filters_test.go @@ -1371,11 +1371,11 @@ func TestVerifyInlineFilterS(t *testing.T) { func TestFilterPassIPNet(t *testing.T) { cd := utils.MapStorage{ - "IP": "192.0.2.1/24", - "WrongIP": "192.0.2.1", + "IP": "192.0.2.0", + "WrongIP": "192.0.3.", } rf := &FilterRule{Type: utils.MetaIPNet, - Element: "~IP", Values: []string{"192.0.2.0"}} + Element: "~IP", Values: []string{"192.0.2.1/24"}} if err := rf.CompileValues(); err != nil { t.Fatal(err) } @@ -1385,7 +1385,7 @@ func TestFilterPassIPNet(t *testing.T) { t.Error("Not passes filter") } rf = &FilterRule{Type: utils.MetaIPNet, - Element: "~IP", Values: []string{"~IP2", "192.0.3.0"}} + Element: "~IP", Values: []string{"~IP2", "192.0.3.0/30"}} if err := rf.CompileValues(); err != nil { t.Fatal(err) } @@ -1396,7 +1396,7 @@ func TestFilterPassIPNet(t *testing.T) { } //not rf = &FilterRule{Type: utils.MetaNotIPNet, - Element: "~IP", Values: []string{"192.0.2.0"}} + Element: "~IP", Values: []string{"192.0.2.0/24"}} if err := rf.CompileValues(); err != nil { t.Fatal(err) } @@ -1406,7 +1406,7 @@ func TestFilterPassIPNet(t *testing.T) { t.Error("Filter passes") } rf = &FilterRule{Type: utils.MetaNotIPNet, - Element: "~IP", Values: []string{"192.0.3.0"}} + Element: "~IP", Values: []string{"192.0.3.0/24"}} if err := rf.CompileValues(); err != nil { t.Fatal(err) } @@ -1417,7 +1417,18 @@ func TestFilterPassIPNet(t *testing.T) { } rf = &FilterRule{Type: utils.MetaIPNet, - Element: "~IP2", Values: []string{"192.0.2.0"}} + Element: "~IP2", Values: []string{"192.0.2.0/24"}} + if err := rf.CompileValues(); err != nil { + t.Fatal(err) + } + if passes, err := rf.passIPNet(cd); err != nil { + t.Error(err) + } else if passes { + t.Error("Filter passes") + } + + rf = &FilterRule{Type: utils.MetaIPNet, + Element: "~IP", Values: []string{"192.0.2.0"}} if err := rf.CompileValues(); err != nil { t.Fatal(err) } @@ -1432,11 +1443,13 @@ func TestFilterPassIPNet(t *testing.T) { if err := rf.CompileValues(); err != nil { t.Fatal(err) } - if _, err := rf.passIPNet(cd); err == nil { + if passes, err := rf.passIPNet(cd); err != nil { t.Error(err) + } else if passes { + t.Error("Filter passes") } rf = &FilterRule{Type: utils.MetaIPNet, - Element: "~IP{*duration}", Values: []string{"192.0.2.0"}} + Element: "~IP{*duration}", Values: []string{"192.0.2.0/24"}} if err := rf.CompileValues(); err != nil { t.Fatal(err) }