From ad16339c046ae9f8bfbc76d2ca750d92fe14c39f Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Wed, 28 Jul 2021 11:01:54 +0300 Subject: [PATCH] Test functions from engine/resources.go --- engine/z_resources_test.go | 109 ++++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 1 deletion(-) diff --git a/engine/z_resources_test.go b/engine/z_resources_test.go index b2c29028a..12052255c 100644 --- a/engine/z_resources_test.go +++ b/engine/z_resources_test.go @@ -6288,9 +6288,11 @@ func TestResourceMatchingResourcesForEventLocks3(t *testing.T) { // func TestResourcesMatchingResourcesForEvent2(t *testing.T) { // tmp := Cache // tmpC := config.CgrConfig() +// tmpCM := connMgr // defer func() { // Cache = tmp // config.SetCgrConfig(tmpC) +// connMgr = tmpCM // }() // Cache.Clear(nil) @@ -6336,7 +6338,7 @@ func TestResourceMatchingResourcesForEventLocks3(t *testing.T) { // Cache.SetWithoutReplicate(utils.CacheEventResources, "TestMatchingResourcesForEvent", utils.StringSet{ // "RES1": struct{}{}, // }, nil, true, utils.NonTransactional) -// _, err = rS.matchingResourcesForEvent("cgrates.org", ev, "TestMatchingResourcesForEvent", utils.DurationPointer(10*time.Second)) +// _, err = rS.matchingResourcesForEvent("cgrates.org", ev, ev.ID, utils.DurationPointer(10*time.Second)) // fmt.Println(err) // } @@ -6523,3 +6525,108 @@ func TestResourcesStartLoop(t *testing.T) { t.Errorf("expected loopStopped field to have only one element, received: <%+v>", len(rS.loopStopped)) } } + +func TestResourcesMatchingResourcesForEventCacheSetErr(t *testing.T) { + tmp := Cache + tmpC := config.CgrConfig() + defer func() { + Cache = tmp + config.SetCgrConfig(tmpC) + }() + + Cache.Clear(nil) + cfg := config.NewDefaultCGRConfig() + cfg.CacheCfg().ReplicationConns = []string{"test"} + cfg.CacheCfg().Partitions[utils.CacheEventResources].Replicate = true + cfg.RPCConns()["test"] = &config.RPCConn{Conns: []*config.RemoteHost{{}}} + config.SetCgrConfig(cfg) + data := NewInternalDB(nil, nil, true) + dm := NewDataManager(data, cfg.CacheCfg(), nil) + connMgr = NewConnManager(cfg, make(map[string]chan rpcclient.ClientConnector)) + Cache = NewCacheS(cfg, dm, nil) + fltrs := NewFilterS(cfg, nil, dm) + + rS := NewResourceService(dm, cfg, fltrs, connMgr) + ev := &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "TestMatchingResourcesForEvent", + Event: map[string]interface{}{ + utils.AccountField: "1001", + }, + APIOpts: map[string]interface{}{}, + } + + if rcv, err := rS.matchingResourcesForEvent("cgrates.org", ev, ev.ID, + utils.DurationPointer(10*time.Second)); err == nil || err.Error() != utils.ErrDisconnected.Error() { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrDisconnected, err) + } else if rcv != nil { + t.Errorf("expected nil, received: <%+v>", rcv) + } +} + +func TestResourcesMatchingResourcesForEventFinalFinalCacheSetErr(t *testing.T) { + tmp := Cache + tmpC := config.CgrConfig() + defer func() { + Cache = tmp + config.SetCgrConfig(tmpC) + }() + + Cache.Clear(nil) + cfg := config.NewDefaultCGRConfig() + cfg.CacheCfg().ReplicationConns = []string{"test"} + cfg.CacheCfg().Partitions[utils.CacheEventResources].Replicate = true + cfg.RPCConns()["test"] = &config.RPCConn{Conns: []*config.RemoteHost{{}}} + config.SetCgrConfig(cfg) + data := NewInternalDB(nil, nil, true) + dm := NewDataManager(data, cfg.CacheCfg(), nil) + connMgr = NewConnManager(cfg, make(map[string]chan rpcclient.ClientConnector)) + Cache = NewCacheS(cfg, dm, nil) + fltrs := NewFilterS(cfg, nil, dm) + + rsPrf := &ResourceProfile{ + Tenant: "cgrates.org", + ID: "RES1", + FilterIDs: []string{"*string:~*req.Account:1001"}, + ThresholdIDs: []string{utils.MetaNone}, + AllocationMessage: "Approved", + Weight: 10, + Limit: 10, + UsageTTL: time.Minute, + Stored: true, + } + + err := dm.SetResourceProfile(rsPrf, true) + if err != nil { + t.Fatal(err) + } + + rS := NewResourceService(dm, cfg, fltrs, connMgr) + ev := &utils.CGREvent{ + Tenant: "cgrates.org", + ID: "TestMatchingResourcesForEvent", + Event: map[string]interface{}{ + utils.AccountField: "1001", + }, + APIOpts: map[string]interface{}{}, + } + exp := &Resource{ + Tenant: "cgrates.org", + rPrf: rsPrf, + ID: "RES1", + Usages: make(map[string]*ResourceUsage), + ttl: utils.DurationPointer(10 * time.Second), + dirty: utils.BoolPointer(false), + } + + if rcv, err := rS.matchingResourcesForEvent("cgrates.org", ev, ev.ID, + utils.DurationPointer(10*time.Second)); err == nil || err.Error() != utils.ErrDisconnected.Error() { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrDisconnected, err) + } else if !reflect.DeepEqual(rcv[0], exp) { + t.Errorf("expected: <%+v>, received: <%+v>", exp, rcv[0]) + } else if rcv[0].isLocked() { + t.Error("expected resource to be unlocked") + } else if rcv[0].lkID != utils.EmptyString { + t.Error("expected struct field \"lkID\" to be empty") + } +}