mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Update ComputeFilterIndexer method + tests some uncovered cases ( empty filters )
This commit is contained in:
committed by
Dan Christian Bogos
parent
c77e59743e
commit
1ab8240674
@@ -232,6 +232,8 @@ func (self *ApierV1) ComputeFilterIndexes(args utils.ArgsComputeFilterIndexes, r
|
||||
if err != nil && err != utils.ErrNotFound {
|
||||
return utils.APIErrorHandler(err)
|
||||
}
|
||||
//DispatcherProfile Indexes
|
||||
fmt.Println("Args : ", utils.ToJSON(args))
|
||||
dspIndexes, err := self.computeDispatcherIndexes(args.Tenant, args.Context, args.DispatcherIDs, transactionID)
|
||||
if err != nil && err != utils.ErrNotFound {
|
||||
return utils.APIErrorHandler(err)
|
||||
@@ -410,9 +412,8 @@ func (self *ApierV1) computeThresholdIndexes(tenant string, thIDs *[]string,
|
||||
fltrID, th)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
thdsIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), th.ID)
|
||||
}
|
||||
thdsIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), th.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
@@ -450,6 +451,9 @@ func (self *ApierV1) computeAttributeIndexes(tenant, context string, attrIDs *[]
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !utils.IsSliceMember(ap.Contexts, context) {
|
||||
continue
|
||||
}
|
||||
fltrIDs := make([]string, len(ap.FilterIDs))
|
||||
for i, fltrID := range ap.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
@@ -478,9 +482,8 @@ func (self *ApierV1) computeAttributeIndexes(tenant, context string, attrIDs *[]
|
||||
fltrID, ap)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
attrIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), ap.ID)
|
||||
}
|
||||
attrIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), ap.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
@@ -545,9 +548,8 @@ func (self *ApierV1) computeResourceIndexes(tenant string, rsIDs *[]string,
|
||||
fltrID, rp)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
rpIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), rp.ID)
|
||||
}
|
||||
rpIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), rp.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
@@ -612,9 +614,8 @@ func (self *ApierV1) computeStatIndexes(tenant string, stIDs *[]string,
|
||||
fltrID, sqp)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
sqpIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), sqp.ID)
|
||||
}
|
||||
sqpIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), sqp.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
@@ -679,9 +680,8 @@ func (self *ApierV1) computeSupplierIndexes(tenant string, sppIDs *[]string,
|
||||
fltrID, spp)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
sppIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), spp.ID)
|
||||
}
|
||||
sppIndexers.IndexTPFilter(engine.FilterToTPFilter(fltr), spp.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
@@ -746,9 +746,8 @@ func (self *ApierV1) computeChargerIndexes(tenant string, cppIDs *[]string,
|
||||
fltrID, cpp)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
cppIndexes.IndexTPFilter(engine.FilterToTPFilter(fltr), cpp.ID)
|
||||
}
|
||||
cppIndexes.IndexTPFilter(engine.FilterToTPFilter(fltr), cpp.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
@@ -786,6 +785,9 @@ func (self *ApierV1) computeDispatcherIndexes(tenant, context string, dspIDs *[]
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !utils.IsSliceMember(dsp.Subsystems, context) {
|
||||
continue
|
||||
}
|
||||
fltrIDs := make([]string, len(dsp.FilterIDs))
|
||||
for i, fltrID := range dsp.FilterIDs {
|
||||
fltrIDs[i] = fltrID
|
||||
@@ -814,9 +816,8 @@ func (self *ApierV1) computeDispatcherIndexes(tenant, context string, dspIDs *[]
|
||||
fltrID, dsp)
|
||||
}
|
||||
return nil, err
|
||||
} else {
|
||||
dspIndexes.IndexTPFilter(engine.FilterToTPFilter(fltr), dsp.ID)
|
||||
}
|
||||
dspIndexes.IndexTPFilter(engine.FilterToTPFilter(fltr), dsp.ID)
|
||||
}
|
||||
}
|
||||
if transactionID == utils.NonTransactional {
|
||||
|
||||
@@ -20,7 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
package v1
|
||||
|
||||
import (
|
||||
// "fmt"
|
||||
"net/rpc"
|
||||
"net/rpc/jsonrpc"
|
||||
"path"
|
||||
@@ -91,6 +90,8 @@ var sTestsFilterIndexesSV1 = []func(t *testing.T){
|
||||
testV1FIdxdxInitDataDb,
|
||||
testV1FIdxSetDispatcherProfile,
|
||||
testV1FIdxComputeDispatcherProfileIndexes,
|
||||
testV1FIdxSetDispatcherProfile2,
|
||||
testV1FIdxComputeDispatcherProfileIndexes2,
|
||||
|
||||
testV1FIdxStopEngine,
|
||||
}
|
||||
@@ -1623,15 +1624,6 @@ func testV1FIdxSetDispatcherProfile(t *testing.T) {
|
||||
t.Errorf("Expecting : %+v, received: %+v", utils.OK, reply)
|
||||
}
|
||||
|
||||
var dsp *engine.DispatcherProfile
|
||||
if err := tFIdxRpc.Call(utils.ApierV1GetDispatcherProfile,
|
||||
&utils.TenantID{Tenant: "cgrates.org", ID: "DSP_Test1"},
|
||||
&dsp); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(dispatcherProfile, dsp) {
|
||||
t.Errorf("Expecting : %+v, received: %+v", dispatcherProfile, dsp)
|
||||
}
|
||||
|
||||
//verify *string index for *attributes subsystem
|
||||
arg := &AttrGetFilterIndexes{
|
||||
Tenant: tenant,
|
||||
@@ -1758,6 +1750,188 @@ func testV1FIdxComputeDispatcherProfileIndexes(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func testV1FIdxSetDispatcherProfile2(t *testing.T) {
|
||||
var reply string
|
||||
//add a new dispatcherProfile with empty filterIDs
|
||||
//should create an index of type *none:*any:*any for *attributes subsystem
|
||||
dispatcherProfile = &engine.DispatcherProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "DSP_Test2",
|
||||
Subsystems: []string{utils.MetaAttributes},
|
||||
Weight: 20,
|
||||
}
|
||||
|
||||
if err := tFIdxRpc.Call(utils.ApierV1SetDispatcherProfile,
|
||||
dispatcherProfile,
|
||||
&reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("Expecting : %+v, received: %+v", utils.OK, reply)
|
||||
}
|
||||
|
||||
//add a new dispatcherProfile with empty filterIDs
|
||||
//should create an index of type *none:*any:*any for *sessions subsystem
|
||||
dispatcherProfile2 := &engine.DispatcherProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "DSP_Test3",
|
||||
Subsystems: []string{utils.MetaSessionS},
|
||||
Weight: 20,
|
||||
}
|
||||
|
||||
if err := tFIdxRpc.Call(utils.ApierV1SetDispatcherProfile,
|
||||
dispatcherProfile2,
|
||||
&reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Errorf("Expecting : %+v, received: %+v", utils.OK, reply)
|
||||
}
|
||||
|
||||
//verify indexes for *attributes subsystem
|
||||
arg := &AttrGetFilterIndexes{
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaAttributes,
|
||||
ItemType: utils.MetaDispatchers,
|
||||
}
|
||||
expectedIndexes := []string{
|
||||
"*none:*any:*any:DSP_Test2",
|
||||
"*prefix:~RandomField:RandomValue:DSP_Test1",
|
||||
"*string:~Account:1001:DSP_Test1",
|
||||
"*string:~Subject:2012:DSP_Test1",
|
||||
}
|
||||
sort.Strings(expectedIndexes)
|
||||
var idx []string
|
||||
if err := tFIdxRpc.Call("ApierV1.GetFilterIndexes", arg, &idx); err != nil {
|
||||
t.Error(err)
|
||||
} else if sort.Strings(idx); !reflect.DeepEqual(expectedIndexes, idx) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", expectedIndexes, idx)
|
||||
}
|
||||
|
||||
//verify indexes for *sessions subsystem
|
||||
arg = &AttrGetFilterIndexes{
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaSessionS,
|
||||
ItemType: utils.MetaDispatchers,
|
||||
}
|
||||
expectedIndexes = []string{
|
||||
"*none:*any:*any:DSP_Test3",
|
||||
"*prefix:~RandomField:RandomValue:DSP_Test1",
|
||||
"*string:~Account:1001:DSP_Test1",
|
||||
"*string:~Subject:2012:DSP_Test1",
|
||||
}
|
||||
sort.Strings(expectedIndexes)
|
||||
if err := tFIdxRpc.Call("ApierV1.GetFilterIndexes", arg, &idx); err != nil {
|
||||
t.Error(err)
|
||||
} else if sort.Strings(idx); !reflect.DeepEqual(expectedIndexes, idx) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", expectedIndexes, idx)
|
||||
}
|
||||
//remove the indexes for *sessions subsystem
|
||||
if err := tFIdxRpc.Call("ApierV1.RemoveFilterIndexes", &AttrRemFilterIndexes{
|
||||
ItemType: utils.MetaDispatchers,
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaSessionS}, &reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Error("Unexpected reply returned", reply)
|
||||
}
|
||||
|
||||
//verify if indexes was removed for *sessions
|
||||
var indexes []string
|
||||
if err := tFIdxRpc.Call("ApierV1.GetFilterIndexes", arg,
|
||||
&indexes); err == nil || err.Error() != utils.ErrNotFound.Error() {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
//remove the indexes for *attribute subsystem
|
||||
if err := tFIdxRpc.Call("ApierV1.RemoveFilterIndexes", &AttrRemFilterIndexes{
|
||||
ItemType: utils.MetaDispatchers,
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaAttributes}, &reply); err != nil {
|
||||
t.Error(err)
|
||||
} else if reply != utils.OK {
|
||||
t.Error("Unexpected reply returned", reply)
|
||||
}
|
||||
|
||||
//verify indexes for *attributes subsystem
|
||||
arg = &AttrGetFilterIndexes{
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaAttributes,
|
||||
ItemType: utils.MetaDispatchers,
|
||||
}
|
||||
if err := tFIdxRpc.Call("ApierV1.GetFilterIndexes", arg,
|
||||
&idx); err == nil || err.Error() != utils.ErrNotFound.Error() {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testV1FIdxComputeDispatcherProfileIndexes2(t *testing.T) {
|
||||
var result string
|
||||
//recompute indexes for dispatcherProfile for *sessions subsystem
|
||||
if err := tFIdxRpc.Call(utils.ApierV1ComputeFilterIndexes,
|
||||
utils.ArgsComputeFilterIndexes{
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaSessionS,
|
||||
ThresholdIDs: &emptySlice,
|
||||
AttributeIDs: &emptySlice,
|
||||
ResourceIDs: &emptySlice,
|
||||
StatIDs: &emptySlice,
|
||||
SupplierIDs: &emptySlice,
|
||||
ChargerIDs: &emptySlice,
|
||||
DispatcherIDs: nil,
|
||||
}, &result); err != nil {
|
||||
t.Error(err)
|
||||
} else if result != utils.OK {
|
||||
t.Errorf("Error: %+v", result)
|
||||
}
|
||||
expectedIndexes := []string{
|
||||
"*none:*any:*any:DSP_Test3",
|
||||
"*prefix:~RandomField:RandomValue:DSP_Test1",
|
||||
"*string:~Account:1001:DSP_Test1",
|
||||
"*string:~Subject:2012:DSP_Test1",
|
||||
}
|
||||
sort.Strings(expectedIndexes)
|
||||
var indexes []string
|
||||
if err := tFIdxRpc.Call("ApierV1.GetFilterIndexes", &AttrGetFilterIndexes{
|
||||
ItemType: utils.MetaDispatchers,
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaSessionS}, &indexes); err != nil {
|
||||
t.Error(err)
|
||||
} else if sort.Strings(indexes); !reflect.DeepEqual(expectedIndexes, indexes) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", expectedIndexes, utils.ToJSON(indexes))
|
||||
}
|
||||
|
||||
//recompute indexes for dispatcherProfile for *attributes subsystem
|
||||
if err := tFIdxRpc.Call(utils.ApierV1ComputeFilterIndexes,
|
||||
utils.ArgsComputeFilterIndexes{
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaAttributes,
|
||||
ThresholdIDs: &emptySlice,
|
||||
AttributeIDs: &emptySlice,
|
||||
ResourceIDs: &emptySlice,
|
||||
StatIDs: &emptySlice,
|
||||
SupplierIDs: &emptySlice,
|
||||
ChargerIDs: &emptySlice,
|
||||
DispatcherIDs: nil,
|
||||
}, &result); err != nil {
|
||||
t.Error(err)
|
||||
} else if result != utils.OK {
|
||||
t.Errorf("Error: %+v", result)
|
||||
}
|
||||
expectedIndexes = []string{
|
||||
"*none:*any:*any:DSP_Test2",
|
||||
"*prefix:~RandomField:RandomValue:DSP_Test1",
|
||||
"*string:~Account:1001:DSP_Test1",
|
||||
"*string:~Subject:2012:DSP_Test1",
|
||||
}
|
||||
sort.Strings(expectedIndexes)
|
||||
if err := tFIdxRpc.Call("ApierV1.GetFilterIndexes", &AttrGetFilterIndexes{
|
||||
ItemType: utils.MetaDispatchers,
|
||||
Tenant: tenant,
|
||||
Context: utils.MetaAttributes}, &indexes); err != nil {
|
||||
t.Error(err)
|
||||
} else if sort.Strings(indexes); !reflect.DeepEqual(expectedIndexes, indexes) {
|
||||
t.Errorf("Expecting: %+v, received: %+v", expectedIndexes, utils.ToJSON(indexes))
|
||||
}
|
||||
}
|
||||
func testV1FIdxStopEngine(t *testing.T) {
|
||||
if err := engine.KillEngine(100); err != nil {
|
||||
t.Error(err)
|
||||
|
||||
Reference in New Issue
Block a user