From ee196765c3da4d07d5908cd49e135652d2ab13c2 Mon Sep 17 00:00:00 2001 From: arberkatellari Date: Mon, 23 Jan 2023 10:56:50 -0500 Subject: [PATCH] Coverage tests in engine --- engine/datamanager_test.go | 342 ++++++++++++++++++++++++++++++++++++ engine/kafka_logger_test.go | 109 ++++++------ 2 files changed, 394 insertions(+), 57 deletions(-) diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index cb318a23f..cb9834f61 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -3043,3 +3043,345 @@ func TestDMCacheDataFromDBAttributeFilterIndexes(t *testing.T) { } } + +func TestDMCacheDataFromDBResourceFilterIndexes(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheResourceFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheResourceFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.ResourceFilterIndexes, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheResourceFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBStatFilterIndexes(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheStatFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheStatFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.StatFilterIndexes, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheStatFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBThresholdFilterIndexes(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheThresholdFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheThresholdFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.ThresholdFilterIndexes, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheThresholdFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBRouteFilterIndexes(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheRouteFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheRouteFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.RouteFilterIndexes, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheRouteFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBChargerFilterIndexes(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheChargerFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheChargerFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.ChargerFilterIndexes, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheChargerFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBDispatcherFilterIndexes(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheDispatcherFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheDispatcherFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.DispatcherFilterIndexes, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheDispatcherFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBRateProfilesFilterIndexPrfx(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheRateProfilesFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheRateProfilesFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.RateProfilesFilterIndexPrfx, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheRateProfilesFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBRateFilterIndexPrfx(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheRateFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheRateFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.RateFilterIndexPrfx, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheRateFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBActionProfilesFilterIndexPrfx(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + indexes := map[string]utils.StringSet{"*string:*req.Account:1002": {"ATTR1": {}, "ATTR2": {}}} + + if err := dm.SetIndexes(context.Background(), utils.CacheActionProfilesFilterIndexes, "cgrates.org", indexes, true, utils.NonTransactional); err != nil { + t.Error(err) + } + + if _, ok := Cache.Get(utils.CacheActionProfilesFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); ok { + t.Error("expected ok to be false") + } + + if err := dm.CacheDataFromDB(context.Background(), utils.ActionProfilesFilterIndexPrfx, []string{utils.MetaAny}, false); err != nil { + t.Error(err) + } + + exp := utils.StringSet{"ATTR1": {}, "ATTR2": {}} + + if rcv, ok := Cache.Get(utils.CacheActionProfilesFilterIndexes, utils.ConcatenatedKey("cgrates.org", "*string:*req.Account:1002")); !ok { + t.Error("expected ok to be true") + } else if !reflect.DeepEqual(rcv, exp) { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", exp, rcv) + } + +} + +func TestDMCacheDataFromDBActionProfilesFilterIndexPrfxErr(t *testing.T) { + tmp := Cache + defer func() { + Cache = tmp + }() + Cache.Clear(nil) + + cfg := config.NewDefaultCGRConfig() + data := NewInternalDB(nil, nil, cfg.DataDbCfg().Items) + cM := NewConnManager(cfg) + dm := NewDataManager(data, cfg.CacheCfg(), cM) + + errExp := "WRONG_IDX_KEY_FORMAT" + if err := dm.CacheDataFromDB(context.Background(), utils.AttributeFilterIndexes, []string{"tntCtx:*prefix:~*accounts"}, false); errExp != err.Error() { + t.Errorf("Expected %v\n but received %v", errExp, err) + } +} diff --git a/engine/kafka_logger_test.go b/engine/kafka_logger_test.go index e6a8a1379..3a0c3f2d9 100644 --- a/engine/kafka_logger_test.go +++ b/engine/kafka_logger_test.go @@ -18,31 +18,33 @@ along with this program. If not, see package engine -/* +import ( + "reflect" + "testing" + + "github.com/cgrates/birpc/context" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/utils" + "github.com/segmentio/kafka-go" +) + func TestLoggerNewLoggerExport(t *testing.T) { cfg := config.NewDefaultCGRConfig() - exp := &ExportLogger{ - logLevel: 6, - nodeID: "123", - tenant: "cgrates.org", - loggOpts: cfg.LoggerCfg().Opts, - writer: &kafka.Writer{ - Addr: kafka.TCP(cfg.LoggerCfg().Opts.KafkaConn), - Topic: cfg.LoggerCfg().Opts.KafkaTopic, - MaxAttempts: cfg.LoggerCfg().Opts.Attempts, - }, - } - if rcv, err := NewLogger(utils.MetaKafka, "cgrates.org", "123", cfg.LoggerCfg()); err != nil { + cM := NewConnManager(cfg) + + exp := NewExportLogger(context.Background(), "123", "cgrates.org", 6, cM, cfg) + if rcv, err := NewLogger(context.Background(), utils.MetaKafkaLog, "cgrates.org", "123", cM, cfg); err != nil { t.Error(err) - } else if !reflect.DeepEqual(rcv.(*ExportLogger), exp) { + } else if !reflect.DeepEqual(rcv, exp) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", exp, rcv) } } func TestLoggerNewLoggerDefault(t *testing.T) { cfg := config.NewDefaultCGRConfig() + cM := NewConnManager(cfg) experr := `unsupported logger: ` - if _, err := NewLogger("invalid", "cgrates.org", "123", cfg.LoggerCfg()); err == nil || + if _, err := NewLogger(context.Background(), "invalid", "cgrates.org", "123", cM, cfg); err == nil || err.Error() != experr { t.Errorf("expected: <%s>, \nreceived: <%s>", experr, err) } @@ -50,69 +52,62 @@ func TestLoggerNewLoggerDefault(t *testing.T) { func TestLoggerNewExportLogger(t *testing.T) { cfg := config.NewDefaultCGRConfig() + cM := NewConnManager(cfg) exp := &ExportLogger{ - logLevel: 7, - nodeID: "123", - tenant: "cgrates.org", - loggOpts: cfg.LoggerCfg().Opts, - writer: &kafka.Writer{ + ctx: context.Background(), + cfg: cfg, + connMgr: cM, + FldPostDir: "/var/spool/cgrates/failed_posts", + LogLevel: 7, + NodeID: "123", + Tenant: "cgrates.org", + Writer: &kafka.Writer{ Addr: kafka.TCP(cfg.LoggerCfg().Opts.KafkaConn), Topic: cfg.LoggerCfg().Opts.KafkaTopic, - MaxAttempts: cfg.LoggerCfg().Opts.Attempts, + MaxAttempts: cfg.LoggerCfg().Opts.KafkaAttempts, }, } - if rcv := NewExportLogger("123", "cgrates.org", 7, cfg.LoggerCfg().Opts); !reflect.DeepEqual(rcv, exp) { + if rcv := NewExportLogger(context.Background(), "123", "cgrates.org", 7, cM, cfg); !reflect.DeepEqual(rcv, exp) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", exp, rcv) } } -func TestLoggerExportEmerg(t *testing.T) { +func TestLoggerExportEmergNil(t *testing.T) { tmp := Cache defer func() { Cache = tmp }() - eesConn := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaEEs) + + Cache.Clear(nil) cfg := config.NewDefaultCGRConfig() - cfg.CoreSCfg().EEsConns = []string{eesConn} - Cache = NewCacheS(cfg, nil, nil) cM := NewConnManager(cfg) - ccM := &ccMock{ - calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ - utils.EeSv1ProcessEvent: func(ctx *context.Context, args, reply interface{}) error { - delete(args.(*utils.CGREventWithEeIDs).Event, "Timestamp") - exp := &utils.CGREventWithEeIDs{ - CGREvent: &utils.CGREvent{ - Tenant: "cgrates.org", - Event: map[string]interface{}{ - utils.NodeID: "123", - "Message": "Emergency message", - "Severity": utils.LOGLEVEL_EMERGENCY, - }, - }, - } - if !reflect.DeepEqual(exp, args) { - return fmt.Errorf("\nexpected: <%+v>, \nreceived: <%+v>", - utils.ToJSON(exp), utils.ToJSON(args)) - } - return nil - }, - }, - } - rpcInternal := make(chan birpc.ClientConnector, 1) - rpcInternal <- ccM - cM.AddInternalConn(eesConn, utils.EeSv1, rpcInternal) - el := NewExportLogger("123", "cgrates.org", -1, cfg.LoggerCfg().Opts) + el := NewExportLogger(context.Background(), "123", "cgrates.org", -1, cM, cfg) if err := el.Emerg("Emergency message"); err != nil { t.Error(err) } - el.SetLogLevel(0) - if err := el.Emerg("Emergency message"); err != nil { - t.Error(err) - } + } +// func TestLoggerExportEmergOk(t *testing.T) { +// tmp := Cache +// defer func() { +// Cache = tmp +// }() + +// Cache.Clear(nil) +// cfg := config.NewDefaultCGRConfig() +// cM := NewConnManager(cfg) + +// el := NewExportLogger(context.Background(), "123", "cgrates.org", 0, cM, cfg) + +// if err := el.Emerg("Emergency message"); err != nil { +// t.Error(err) +// } +// } + +/* func TestLoggerExportAlert(t *testing.T) { tmp := Cache defer func() { @@ -504,4 +499,4 @@ func TestLoggerExportWrite(t *testing.T) { t.Error(err) } el.Close() -} */ +}*/