From a4e442f33941df76921a0e28bdf1e94bd7985e60 Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Thu, 29 Apr 2021 17:12:36 +0300 Subject: [PATCH] Cover funcs from engine/filters.go --- engine/filters.go | 1 - engine/filters_test.go | 284 +++++++++++++++++++++++++++++------------ 2 files changed, 200 insertions(+), 85 deletions(-) diff --git a/engine/filters.go b/engine/filters.go index 90d3504b4..4ff103f4d 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -473,7 +473,6 @@ func (fltr *FilterRule) passStringSuffix(dDP utils.DataProvider) (bool, error) { return false, nil } -// ToDo when Timings will be available in DataDb func (fltr *FilterRule) passTimings(dDP utils.DataProvider) (bool, error) { tmVal, err := fltr.rsrElement.ParseDataProviderWithInterfaces(dDP) if err != nil { diff --git a/engine/filters_test.go b/engine/filters_test.go index 311607de6..6daefd799 100644 --- a/engine/filters_test.go +++ b/engine/filters_test.go @@ -15,6 +15,7 @@ along with this program. If not, see package engine import ( + "fmt" "net/http" "net/http/httptest" "reflect" @@ -1718,6 +1719,7 @@ func TestFiltersPassTimingsCallSuccessful(t *testing.T) { cfg := config.NewDefaultCGRConfig() cfg.FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} config.SetCgrConfig(cfg) + Cache = NewCacheS(cfg, nil, nil) client := make(chan rpcclient.ClientConnector, 1) ccM := &ccMock{ @@ -1846,103 +1848,217 @@ func TestFiltersPassDestinationsCallFail(t *testing.T) { } } -// func TestFiltersPassDestinationsCallSuccessSameDest(t *testing.T) { -// tmp := Cache -// defer func() { -// Cache = tmp -// }() -// tmp1, tmp2 := connMgr, config.CgrConfig() -// defer func() { -// connMgr = tmp1 -// config.SetCgrConfig(tmp2) -// }() +func TestFiltersPassDestinationsCallSuccessSameDest(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() -// cfg := config.NewDefaultCGRConfig() -// cfg.FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} -// config.SetCgrConfig(cfg) + tmp1, tmp2 := connMgr, config.CgrConfig() + defer func() { + connMgr = tmp1 + config.SetCgrConfig(tmp2) + }() -// client := make(chan rpcclient.ClientConnector, 1) -// ccM := &ccMock{ -// calls: map[string]func(args interface{}, reply interface{}) error{ -// utils.APIerSv1GetReverseDestination: func(args, reply interface{}) error { -// rply := []string{"1002"} -// *reply.(*[]string) = rply -// return nil -// }, -// }, -// } -// client <- ccM + cfg := config.NewDefaultCGRConfig() + cfg.FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} + config.SetCgrConfig(cfg) + Cache = NewCacheS(cfg, nil, nil) -// NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ -// utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): client, -// }) + client := make(chan rpcclient.ClientConnector, 1) + ccM := &ccMock{ + calls: map[string]func(args interface{}, reply interface{}) error{ + utils.APIerSv1GetReverseDestination: func(args, reply interface{}) error { + rply := []string{"1002"} + *reply.(*[]string) = rply + return nil + }, + }, + } + client <- ccM -// fltr, err := NewFilterRule(utils.MetaDestinations, "~*req.Account", []string{"1002"}) + NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): client, + }) + + fltr, err := NewFilterRule(utils.MetaDestinations, "~*req.Account", []string{"1002"}) + if err != nil { + t.Fatal(err) + } + dtP := utils.MapStorage{ + utils.MetaReq: map[string]interface{}{ + utils.AccountField: "1002", + }, + } + + rcv, err := fltr.passDestinations(dtP) + + if err != nil { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", nil, err) + } + + if rcv != true { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", true, rcv) + } +} + +func TestFiltersPassDestinationsCallSuccessParseErr(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + tmp1, tmp2 := connMgr, config.CgrConfig() + defer func() { + connMgr = tmp1 + config.SetCgrConfig(tmp2) + }() + + cfg := config.NewDefaultCGRConfig() + cfg.FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} + config.SetCgrConfig(cfg) + Cache = NewCacheS(cfg, nil, nil) + + client := make(chan rpcclient.ClientConnector, 1) + ccM := &ccMock{ + calls: map[string]func(args interface{}, reply interface{}) error{ + utils.APIerSv1GetReverseDestination: func(args, reply interface{}) error { + rply := []string{"1002"} + *reply.(*[]string) = rply + return nil + }, + }, + } + client <- ccM + + NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): client, + }) + + fltr, err := NewFilterRule(utils.MetaDestinations, "~*req.Account", []string{"~1002"}) + if err != nil { + t.Fatal(err) + } + dtP := utils.MapStorage{ + utils.MetaReq: map[string]interface{}{ + utils.AccountField: "1002", + }, + } + + rcv, err := fltr.passDestinations(dtP) + + if err != nil { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", nil, err) + } + + if rcv != false { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", false, rcv) + } +} + +func TestFiltersPassRSRFailParseWrongPath(t *testing.T) { + fltr, err := NewFilterRule(utils.MetaDestinations, "~*req.Account", []string{"1001"}) + if err != nil { + t.Fatal(err) + } + dtP := utils.MapStorage{ + utils.MetaReq: 13, + } + + experr := utils.ErrWrongPath + rcv, err := fltr.passRSR(dtP) + + if err == nil || err != experr { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", experr, err) + } + + if rcv != false { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", false, rcv) + } +} + +func TestFiltersPassGreaterThanFailParseWrongPath(t *testing.T) { + fltr, err := NewFilterRule(utils.MetaGreaterThan, "~*req.Usage", []string{"10"}) + if err != nil { + t.Fatal(err) + } + dtP := utils.MapStorage{ + utils.MetaReq: 13, + } + + experr := utils.ErrWrongPath + rcv, err := fltr.passGreaterThan(dtP) + + if err == nil || err != experr { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", experr, err) + } + + if rcv != false { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", false, rcv) + } +} + +func TestFiltersPassGreaterThanErrIncomparable(t *testing.T) { + fltr, err := NewFilterRule(utils.MetaGreaterThan, "~*req.Usage", []string{"10"}) + fltr.rsrElement.Rules = "rules" + if err != nil { + t.Fatal(err) + } + dtP := utils.MapStorage{ + utils.MetaReq: map[string]interface{}{ + utils.MetaUsage: "10", + }, + } + + experr := fmt.Sprintf("incomparable: <%v> with <%d>", nil, 10) + rcv, err := fltr.passGreaterThan(dtP) + + if err == nil || err.Error() != experr { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", experr, err) + } + + if rcv != false { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", false, rcv) + } +} + +func TestFiltersPassGreaterThanFailParseValues(t *testing.T) { + fltr, err := NewFilterRule(utils.MetaGreaterThan, "~*req.Usage", []string{"~10"}) + if err != nil { + t.Fatal(err) + } + dtP := utils.MapStorage{ + utils.MetaReq: map[string]interface{}{ + utils.Usage: "10", + }, + } + + rcv, err := fltr.passGreaterThan(dtP) + + if err != nil { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", nil, err) + } + + if rcv != false { + t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", false, rcv) + } +} + +// func TestFiltersPassGreaterThan2(t *testing.T) { +// fltr, err := NewFilterRule(utils.MetaGreaterThan, "~*req.Usage", []string{"10"}) // if err != nil { // t.Fatal(err) // } // dtP := utils.MapStorage{ // utils.MetaReq: map[string]interface{}{ -// utils.AccountField: "1002", +// utils.Usage: "10", // }, // } -// rcv, err := fltr.passDestinations(dtP) +// experr := utils.ErrExists +// rcv, err := fltr.passGreaterThan(dtP) -// if err != nil { -// t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", nil, err) -// } - -// if rcv != true { -// t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", true, rcv) -// } -// } - -// func TestFiltersPassDestinationsCallSuccessParseErr(t *testing.T) { -// tmp := Cache -// defer func() { -// Cache = tmp -// }() -// tmp1, tmp2 := connMgr, config.CgrConfig() -// defer func() { -// connMgr = tmp1 -// config.SetCgrConfig(tmp2) -// }() - -// cfg := config.NewDefaultCGRConfig() -// cfg.FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} -// config.SetCgrConfig(cfg) - -// client := make(chan rpcclient.ClientConnector, 1) -// ccM := &ccMock{ -// calls: map[string]func(args interface{}, reply interface{}) error{ -// utils.APIerSv1GetReverseDestination: func(args, reply interface{}) error { -// rply := []string{"1002"} -// *reply.(*[]string) = rply -// return nil -// }, -// }, -// } -// client <- ccM - -// NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ -// utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): client, -// }) - -// fltr, err := NewFilterRule(utils.MetaDestinations, "~*req.Account", []string{"~1002"}) -// if err != nil { -// t.Fatal(err) -// } -// dtP := utils.MapStorage{ -// utils.MetaReq: map[string]interface{}{ -// utils.AccountField: "1002", -// }, -// } - -// rcv, err := fltr.passDestinations(dtP) - -// if err != nil { -// t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", nil, err) +// if err == nil || err != experr { +// t.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", experr, err) // } // if rcv != false {