From 98aa157f76738eec4bd2eb7331e7ad89872c9c71 Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Tue, 25 May 2021 15:31:29 +0300 Subject: [PATCH] Fixed data checking value from objdp + test --- config/objdp.go | 3 +++ engine/filters_test.go | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/config/objdp.go b/config/objdp.go index 4d790ae78..2e320832a 100644 --- a/config/objdp.go +++ b/config/objdp.go @@ -62,6 +62,9 @@ func (objDP *ObjectDP) FieldAsInterface(fldPath []string) (data interface{}, err // []string{ BalanceMap *monetary[0] Value } var has bool if data, has = objDP.getCache(strings.Join(fldPath, utils.NestingSep)); has { + if data == nil { // field doesn't exist + err = utils.ErrNotFound + } return } data = obj // in case the fldPath is empty we need to return the whole object diff --git a/engine/filters_test.go b/engine/filters_test.go index fb50be11f..24da506f9 100644 --- a/engine/filters_test.go +++ b/engine/filters_test.go @@ -2246,14 +2246,42 @@ func TestFilterPassRSRFieldsWithMultplieValues(t *testing.T) { cfg := config.NewDefaultCGRConfig() dm := NewDataManager(NewInternalDB(nil, nil, true), cfg.CacheCfg(), nil) flts := NewFilterS(cfg, nil, dm) - if passes, err := flts.Pass("cgrate.org", []string{"*rsr:~*req.23:dan|1001"}, ev); err != nil { + if passes, err := flts.Pass("cgrates.org", []string{"*rsr:~*req.23:dan|1001"}, ev); err != nil { t.Error(err) } else if !passes { t.Error("Not passing") } - if passes, err := flts.Pass("cgrate.org", []string{"*rsr:~*req.23:dan"}, ev); err != nil { + if passes, err := flts.Pass("cgrates.org", []string{"*rsr:~*req.23:dan"}, ev); err != nil { t.Error(err) } else if !passes { t.Error("Not passing") } } + +func TestFilterGreaterThanOnObjectDP(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + cfg.FilterSCfg().ResourceSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources)} + dm := NewDataManager(NewInternalDB(nil, nil, true), cfg.CacheCfg(), nil) + mockConn := &ccMock{ + calls: map[string]func(args interface{}, reply interface{}) error{ + utils.ResourceSv1GetResourceWithConfig: func(args interface{}, reply interface{}) error { + *(reply.(*ResourceWithConfig)) = ResourceWithConfig{ + Resource: &Resource{}, + } + return nil + }, + }, + } + mockChan := make(chan rpcclient.ClientConnector, 1) + mockChan <- mockConn + connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources): mockChan, + }) + flts := NewFilterS(cfg, connMgr, dm) + ev := utils.MapStorage{} + + if _, err := flts.Pass("cgrates.org", []string{"*gte:~*resources.RES1.Available2:2", + "*lt:~*resources.RES1.Available2:10"}, ev); err != nil { + t.Error(err) + } +}