diff --git a/engine/datadbmock.go b/engine/datadbmock.go index dffac6295..bbdcb6633 100644 --- a/engine/datadbmock.go +++ b/engine/datadbmock.go @@ -374,6 +374,9 @@ func (dbM *DataDBMock) RemoveDispatcherProfileDrv(ctx *context.Context, tnt, id } func (dbM *DataDBMock) GetItemLoadIDsDrv(ctx *context.Context, itemIDPrefix string) (loadIDs map[string]int64, err error) { + if dbM.GetItemLoadIDsDrvF != nil { + return dbM.GetItemLoadIDsDrvF(ctx, itemIDPrefix) + } return nil, utils.ErrNotImplemented } diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index baa007853..9fa30949d 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -10433,3 +10433,146 @@ func TestDMGetDispatcherHostCacheWriteErr2(t *testing.T) { } } + +func TestDMGetItemLoadIDsNilDM(t *testing.T) { + + var dm *DataManager + + _, err := dm.GetItemLoadIDs(context.Background(), "", false) + if err != utils.ErrNoDatabaseConn { + t.Errorf("\nExpected error <%+v>, \nReceived error <%+v>", utils.ErrNoDatabaseConn, err) + } + +} + +func TestDMGetItemLoadIDsSetSetLoadIDsDrvErr(t *testing.T) { + + cfgtmp := config.CgrConfig() + defer func() { + config.SetCgrConfig(cfgtmp) + Cache = NewCacheS(config.CgrConfig(), nil, nil, nil) + }() + + cfg := config.NewDefaultCGRConfig() + cfg.DataDbCfg().Items[utils.MetaLoadIDs].Remote = true + cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.RemoteConnsCfg)} + config.SetCgrConfig(cfg) + + cc := make(chan birpc.ClientConnector, 1) + cc <- &ccMock{ + + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.ReplicatorSv1GetItemLoadIDs: func(ctx *context.Context, args, reply interface{}) error { return nil }, + }, + } + + itmLIDs := map[string]int64{ + "ID_1": 21, + } + + cM := NewConnManager(cfg) + cM.AddInternalConn(utils.ConcatenatedKey(utils.MetaInternal, utils.RemoteConnsCfg), utils.ReplicatorSv1, cc) + data := &DataDBMock{ + GetItemLoadIDsDrvF: func(ctx *context.Context, itemIDPrefix string) (loadIDs map[string]int64, err error) { + return itmLIDs, utils.ErrNotFound + }, + SetLoadIDsDrvF: func(ctx *context.Context, loadIDs map[string]int64) error { return utils.ErrNotImplemented }, + } + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + _, err := dm.GetItemLoadIDs(context.Background(), cfg.GeneralCfg().DefaultTenant, false) + if err != utils.ErrNotImplemented { + t.Errorf("Expected error <%v>, received error <%v>", utils.ErrNotImplemented, err) + } +} + +func TestDMGetItemLoadIDsCacheWriteErr1(t *testing.T) { + + itmLIDs := map[string]int64{ + "ID_1": 21, + } + + cfgtmp := config.CgrConfig() + defer func() { + Cache = NewCacheS(config.CgrConfig(), nil, nil, nil) + config.SetCgrConfig(cfgtmp) + }() + + cfg := config.NewDefaultCGRConfig() + cfg.CacheCfg().ReplicationConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)} + cfg.CacheCfg().Partitions[utils.CacheLoadIDs].Replicate = true + config.SetCgrConfig(cfg) + + cc := make(chan birpc.ClientConnector, 1) + cc <- &ccMock{ + + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReplicateSet: func(ctx *context.Context, args, reply interface{}) error { + + return utils.ErrNotImplemented + }, + }, + } + + cM := NewConnManager(cfg) + cM.AddInternalConn(utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator), utils.CacheSv1, cc) + + data := &DataDBMock{ + GetItemLoadIDsDrvF: func(ctx *context.Context, itemIDPrefix string) (loadIDs map[string]int64, err error) { + return itmLIDs, utils.ErrNotFound + }, + } + + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + Cache = NewCacheS(cfg, dm, cM, nil) + + _, err := dm.GetItemLoadIDs(context.Background(), cfg.GeneralCfg().DefaultTenant, true) + if err != utils.ErrNotImplemented { + t.Errorf("Expected error <%v>, received error <%v>", utils.ErrNotImplemented, err) + } +} + +func TestDMGetItemLoadIDsCacheWriteErr2(t *testing.T) { + + cfgtmp := config.CgrConfig() + defer func() { + Cache = NewCacheS(config.CgrConfig(), nil, nil, nil) + config.SetCgrConfig(cfgtmp) + }() + + cfg := config.NewDefaultCGRConfig() + cfg.CacheCfg().ReplicationConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator)} + cfg.CacheCfg().Partitions[utils.CacheLoadIDs].Replicate = true + config.SetCgrConfig(cfg) + + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + + cc := make(chan birpc.ClientConnector, 1) + cc <- &ccMock{ + + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.CacheSv1ReplicateSet: func(ctx *context.Context, args, reply interface{}) error { return utils.ErrNotImplemented }, + }, + } + + cM := NewConnManager(cfg) + cM.AddInternalConn(utils.ConcatenatedKey(utils.MetaInternal, utils.MetaReplicator), utils.CacheSv1, cc) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + itmLIDs := map[string]int64{ + "ID_1": 21, + } + + if err := dm.dataDB.SetLoadIDsDrv(context.Background(), itmLIDs); err != nil { + t.Error(err) + } + + Cache = NewCacheS(cfg, dm, cM, nil) + + _, err := dm.GetItemLoadIDs(context.Background(), cfg.GeneralCfg().DefaultTenant, true) + if err != utils.ErrNotImplemented { + t.Errorf("Expected error <%v>, received error <%v>", utils.ErrNotImplemented, err) + } + +} diff --git a/engine/libindex_health_test.go b/engine/libindex_health_test.go index 63b3cca7f..e7dfac742 100644 --- a/engine/libindex_health_test.go +++ b/engine/libindex_health_test.go @@ -635,3 +635,94 @@ func TestGetRatesFromCacheObjValNil(t *testing.T) { } } + +func TestGetRevFltrIdxHealthFromRateRatesGetKeysForPrefixErr(t *testing.T) { + + cfg := config.NewDefaultCGRConfig() + data := &DataDBMock{ + GetIndexesDrvF: func(ctx *context.Context, idxItmType, tntCtx, idxKey, transactionID string) (indexes map[string]utils.StringSet, err error) { + return nil, utils.ErrNotImplemented + }, + } + dm := NewDataManager(data, cfg.CacheCfg(), nil) + + useLtcache := ltcache.NewCache(0, 0, false, nil) + + expErr := "unsupported prefix in GetKeysForPrefix: " + if _, err := getRevFltrIdxHealthFromRateRates(context.Background(), dm, useLtcache, useLtcache, useLtcache); err != utils.ErrNotImplemented { + t.Errorf("Expected error <%v>, Received error <%v>", expErr, err) + } + +} + +func TestGetRevFltrIdxHealthFromRateRatesGetRatesFromCacheErr(t *testing.T) { + + defer func() { + Cache = NewCacheS(config.CgrConfig(), nil, nil, nil) + }() + + cfg := config.NewDefaultCGRConfig() + db := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + dm := NewDataManager(db, cfg.CacheCfg(), nil) + + if err := dm.SetAttributeProfile(context.Background(), &AttributeProfile{ + Tenant: "cgrates.org", + ID: "ATTR1", + FilterIDs: []string{"*string:~*req.Account:1001", "Fltr1", "Fltr3"}, + }, false); err != nil { + t.Fatal(err) + } + + if err := dm.SetFilter(context.Background(), &Filter{ + Tenant: "cgrates.org", + ID: "Fltr3", + }, false); err != nil { + t.Fatal(err) + } + + if err := dm.SetIndexes(context.Background(), utils.CacheReverseFilterIndexes, "cgrates.org:Fltr2", + map[string]utils.StringSet{utils.CacheAttributeFilterIndexes: {"ATTR1": {}, "ATTR2": {}}}, + true, utils.NonTransactional); err != nil { + t.Fatal(err) + } + + if err := dm.SetRateProfile(context.Background(), &utils.RateProfile{ + Tenant: "cgrates.org", + ID: "RP1", + Rates: map[string]*utils.Rate{ + "RT1": { + ID: "RT1", + FilterIDs: []string{"Fltr3"}, + }, + }, + }, false, false); err != nil { + t.Fatal(err) + } + + useLtcache := ltcache.NewCache(20, 20*time.Second, true, nil) + useLtcache.Set("cgrates.org:RP1", nil, []string{}) + + if _, err := getRevFltrIdxHealthFromRateRates(context.Background(), dm, useLtcache, useLtcache, useLtcache); err != utils.ErrNotFound { + t.Errorf("Expected error <%v>, Received error <%v>", utils.ErrNotFound, err) + } + +} + +func TestGetFltrIdxHealthForRateRatesGetKeysForPrefixErr(t *testing.T) { + + cfg := config.NewDefaultCGRConfig() + data := &DataDBMock{ + GetIndexesDrvF: func(ctx *context.Context, idxItmType, tntCtx, idxKey, transactionID string) (indexes map[string]utils.StringSet, err error) { + return nil, utils.ErrNotImplemented + }, + } + dm := NewDataManager(data, cfg.CacheCfg(), nil) + + useLtcache := ltcache.NewCache(-1, 0, false, nil) + + expErr := "unsupported prefix in GetKeysForPrefix: " + if _, err := GetFltrIdxHealthForRateRates(context.Background(), dm, useLtcache, useLtcache, useLtcache); err != utils.ErrNotImplemented { + t.Errorf("Expected error <%v>, Received error <%v>", expErr, err) + } + +}