/* 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 engine import ( "reflect" "testing" "time" "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" ) func TestFilterHelpersWeightFromDynamics(t *testing.T) { var expected float64 = 64 ctx := context.Background() dWs := []*utils.DynamicWeight{ { Weight: 64, }, } fltrs := &FilterS{} tnt := utils.CGRateSorg ev := utils.MapStorage{} result, err := WeightFromDynamics(ctx, dWs, fltrs, tnt, ev) if err != nil { t.Error(err) } if !reflect.DeepEqual(result, expected) { t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) } } func TestFilterHelpersWeightFromDynamicsErr(t *testing.T) { ctx := context.Background() dWs := []*utils.DynamicWeight{ { FilterIDs: []string{"*stirng:~*req.Account:1001"}, Weight: 64, }, } cfg := config.NewDefaultCGRConfig() data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) dm := NewDataManager(data, config.CgrConfig().CacheCfg(), nil) cM := NewConnManager(cfg) fltrs := NewFilterS(cfg, cM, dm) tnt := utils.CGRateSorg ev := utils.MapStorage{} expErr := "NOT_IMPLEMENTED:*stirng" _, err := WeightFromDynamics(ctx, dWs, fltrs, tnt, ev) if err == nil || err.Error() != expErr { t.Errorf("Expected error <%+v>, received error <%+v>", expErr, err) } } func TestBlockerFromDynamicsErr(t *testing.T) { ctx := context.Background() dBs := []*utils.DynamicBlocker{ { FilterIDs: []string{"*stirng:~*req.Account:1001"}, Blocker: true, }, } cfg := config.NewDefaultCGRConfig() data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) dm := NewDataManager(data, config.CgrConfig().CacheCfg(), nil) cM := NewConnManager(cfg) fltrs := NewFilterS(cfg, cM, dm) tnt := utils.CGRateSorg ev := utils.MapStorage{} expErr := "NOT_IMPLEMENTED:*stirng" if _, err := BlockerFromDynamics(ctx, dBs, fltrs, tnt, ev); err == nil || err.Error() != expErr { t.Errorf("Expected error <%+v>, received error <%+v>", expErr, err) } } func TestMatchingItemIDsForEventGetKeysForPrefixErr(t *testing.T) { matchEV = utils.MapStorage{utils.MetaReq: map[string]interface{}{ utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC), "Field": "profile", }} data := &DataDBMock{ GetKeysForPrefixF: func(ctx *context.Context, s string) ([]string, error) { return []string{}, utils.ErrNotImplemented }, } dmMatch := NewDataManager(data, config.CgrConfig().CacheCfg(), nil) tntCtx := utils.ConcatenatedKey(utils.CGRateSorg, utils.MetaRating) if _, err := MatchingItemIDsForEvent(context.Background(), matchEV, nil, nil, nil, nil, nil, dmMatch, utils.CacheAttributeFilterIndexes, tntCtx, false, false); err != utils.ErrNotImplemented { t.Errorf("Expected error <%+v>, received error <%+v>", utils.ErrNotImplemented, err) } } func TestMatchingItemIDsForEventFilterIndexTypeNotNone(t *testing.T) { matchEV = utils.MapStorage{utils.MetaReq: map[string]interface{}{ utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC), "Fiel..d": "profile", }} cfg := config.NewDefaultCGRConfig() data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) dmMatch := NewDataManager(data, config.CgrConfig().CacheCfg(), nil) tntCtx := utils.ConcatenatedKey(utils.CGRateSorg, utils.MetaRating) if _, err := MatchingItemIDsForEvent(context.Background(), matchEV, nil, nil, nil, nil, nil, dmMatch, utils.CacheAttributeFilterIndexes, tntCtx, true, false); err != utils.ErrNotFound { t.Errorf("Expected error <%+v>, received error <%+v>", utils.ErrNotFound, err) } }