From 5b91587b31237a4bfc05d46f37cb1f3e51a4e23c Mon Sep 17 00:00:00 2001 From: Trial97 Date: Mon, 10 Feb 2020 11:57:52 +0200 Subject: [PATCH] Moved *destinations test to general_test in order to access APIerSv1 --- engine/filters_test.go | 96 --------------------------- general_tests/filters_test.go | 118 ++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 96 deletions(-) create mode 100644 general_tests/filters_test.go diff --git a/engine/filters_test.go b/engine/filters_test.go index a37eb94b5..b79b3fb92 100644 --- a/engine/filters_test.go +++ b/engine/filters_test.go @@ -21,7 +21,6 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestFilterPassString(t *testing.T) { @@ -306,77 +305,6 @@ func TestFilterPassRSRFields(t *testing.T) { } } -// structure to mimic the APIerSv1 to test *destination -type apierSv1Dummy struct { - DataManager *DataManager -} - -func (apiv1 *apierSv1Dummy) GetReverseDestination(prefix string, reply *[]string) (err error) { - if prefix == "" { - return utils.NewErrMandatoryIeMissing("prefix") - } - var revLst []string - if revLst, err = apiv1.DataManager.GetReverseDestination(prefix, false, utils.NonTransactional); err != nil { - return - } - *reply = revLst - return -} - -func (apiv1 *apierSv1Dummy) Call(serviceMethod string, - args interface{}, reply interface{}) error { - return utils.APIerRPCCall(apiv1, serviceMethod, args, reply) -} - -func TestFilterPassDestinations(t *testing.T) { - Cache.Set(utils.CacheReverseDestinations, "+49", - []string{"DE", "EU_LANDLINE"}, nil, true, "") - config.CgrConfig().FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} - internalAPIerSv1Chan := make(chan rpcclient.ClientConnector, 1) - internalAPIerSv1Chan <- &apierSv1Dummy{DataManager: dm} - connMgr = NewConnManager(config.CgrConfig(), map[string]chan rpcclient.ClientConnector{ - utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): internalAPIerSv1Chan, - }) - cd := &CallDescriptor{ - Category: "call", - Tenant: "cgrates.org", - Subject: "dan", - Destination: "+4986517174963", - TimeStart: time.Date(2013, time.October, 7, 14, 50, 0, 0, time.UTC), - TimeEnd: time.Date(2013, time.October, 7, 14, 52, 12, 0, time.UTC), - DurationIndex: 132 * time.Second, - ExtraFields: map[string]string{"navigation": "off"}, - } - rf, err := NewFilterRule(utils.MetaDestinations, "~Destination", []string{"DE"}) - if err != nil { - t.Error(err) - } - if passes, err := rf.passDestinations(cd, []config.DataProvider{cd}); err != nil { - t.Error(err) - } else if !passes { - t.Error("Not passing") - } - rf, err = NewFilterRule(utils.MetaDestinations, "~Destination", []string{"RO"}) - if err != nil { - t.Error(err) - } - if passes, err := rf.passDestinations(cd, []config.DataProvider{cd}); err != nil { - t.Error(err) - } else if passes { - t.Error("Passing") - } - //not - rf, err = NewFilterRule(utils.MetaNotDestinations, "~Destination", []string{"DE"}) - if err != nil { - t.Error(err) - } - if passes, err := rf.Pass(cd, []config.DataProvider{cd}); err != nil { - t.Error(err) - } else if passes { - t.Error("Passing") - } -} - func TestFilterPassGreaterThan(t *testing.T) { rf, err := NewFilterRule(utils.MetaLessThan, "~ASR", []string{"40"}) if err != nil { @@ -745,30 +673,6 @@ func TestInlineFilterPassFiltersForEvent(t *testing.T) { } else if pass { t.Errorf("Expecting: %+v, received: %+v", false, pass) } - Cache.Set(utils.CacheReverseDestinations, "+49", - []string{"DE", "EU_LANDLINE"}, nil, true, "") - failEvent = map[string]interface{}{ - utils.Destination: "+5086517174963", - } - passEvent = map[string]interface{}{ - utils.Destination: "+4986517174963", - } - fEv = config.NewNavigableMap(nil) - fEv.Set([]string{utils.MetaReq}, failEvent, false, false) - pEv = config.NewNavigableMap(nil) - pEv.Set([]string{utils.MetaReq}, passEvent, false, false) - if pass, err := filterS.Pass("cgrates.org", - []string{"*destinations:~*req.Destination:EU"}, fEv); err != nil { - t.Errorf(err.Error()) - } else if pass { - t.Errorf("Expecting: %+v, received: %+v", false, pass) - } - if pass, err := filterS.Pass("cgrates.org", - []string{"*destinations:~*req.Destination:EU_LANDLINE"}, pEv); err != nil { - t.Errorf(err.Error()) - } else if !pass { - t.Errorf("Expecting: %+v, received: %+v", true, pass) - } failEvent = map[string]interface{}{ utils.Weight: 10, } diff --git a/general_tests/filters_test.go b/general_tests/filters_test.go new file mode 100644 index 000000000..f8fa8e3c3 --- /dev/null +++ b/general_tests/filters_test.go @@ -0,0 +1,118 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package general_tests + +import ( + "testing" + "time" + + v1 "github.com/cgrates/cgrates/apier/v1" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" + "github.com/cgrates/rpcclient" +) + +func TestFilterPassDestinations(t *testing.T) { + engine.Cache.Set(utils.CacheReverseDestinations, "+49", + []string{"DE", "EU_LANDLINE"}, nil, true, "") + config.CgrConfig().FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} + internalAPIerSv1Chan := make(chan rpcclient.ClientConnector, 1) + connMgr := engine.NewConnManager(config.CgrConfig(), map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): internalAPIerSv1Chan, + }) + data := engine.NewInternalDB(nil, nil, true, config.CgrConfig().DataDbCfg().Items) + dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), connMgr) + internalAPIerSv1Chan <- &v1.APIerSv1{DataManager: dm} + engine.SetConnManager(connMgr) + cd := &engine.CallDescriptor{ + Category: "call", + Tenant: "cgrates.org", + Subject: "dan", + Destination: "+4986517174963", + TimeStart: time.Date(2013, time.October, 7, 14, 50, 0, 0, time.UTC), + TimeEnd: time.Date(2013, time.October, 7, 14, 52, 12, 0, time.UTC), + DurationIndex: 132 * time.Second, + ExtraFields: map[string]string{"navigation": "off"}, + } + rf, err := engine.NewFilterRule(utils.MetaDestinations, "~Destination", []string{"DE"}) + if err != nil { + t.Error(err) + } + if passes, err := rf.Pass(cd, []config.DataProvider{cd}); err != nil { + t.Error(err) + } else if !passes { + t.Error("Not passing") + } + rf, err = engine.NewFilterRule(utils.MetaDestinations, "~Destination", []string{"RO"}) + if err != nil { + t.Error(err) + } + if passes, err := rf.Pass(cd, []config.DataProvider{cd}); err != nil { + t.Error(err) + } else if passes { + t.Error("Passing") + } + //not + rf, err = engine.NewFilterRule(utils.MetaNotDestinations, "~Destination", []string{"DE"}) + if err != nil { + t.Error(err) + } + if passes, err := rf.Pass(cd, []config.DataProvider{cd}); err != nil { + t.Error(err) + } else if passes { + t.Error("Passing") + } +} + +func TestInlineFilterPassFiltersForEvent(t *testing.T) { + cfg, _ := config.NewDefaultCGRConfig() + cfg.FilterSCfg().ApierSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier)} + internalAPIerSv1Chan := make(chan rpcclient.ClientConnector, 1) + connMgr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): internalAPIerSv1Chan, + }) + data := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) + dmFilterPass := engine.NewDataManager(data, cfg.CacheCfg(), connMgr) + filterS := engine.NewFilterS(cfg, connMgr, dmFilterPass) + engine.Cache.Set(utils.CacheReverseDestinations, "+49", + []string{"DE", "EU_LANDLINE"}, nil, true, "") + internalAPIerSv1Chan <- &v1.APIerSv1{DataManager: dmFilterPass} + engine.SetConnManager(connMgr) + failEvent := map[string]interface{}{ + utils.Destination: "+5086517174963", + } + passEvent := map[string]interface{}{ + utils.Destination: "+4986517174963", + } + fEv := config.NewNavigableMap(map[string]interface{}{utils.MetaReq: failEvent}) + pEv := config.NewNavigableMap(map[string]interface{}{utils.MetaReq: passEvent}) + if pass, err := filterS.Pass("cgrates.org", + []string{"*destinations:~*req.Destination:EU"}, fEv); err != nil { + t.Errorf(err.Error()) + } else if pass { + t.Errorf("Expecting: %+v, received: %+v", false, pass) + } + if pass, err := filterS.Pass("cgrates.org", + []string{"*destinations:~*req.Destination:EU_LANDLINE"}, pEv); err != nil { + t.Errorf(err.Error()) + } else if !pass { + t.Errorf("Expecting: %+v, received: %+v", true, pass) + } +}