mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-25 09:08:45 +05:00
Add indexing test with inline filter
This commit is contained in:
committed by
Dan Christian Bogos
parent
a9ae35d7ed
commit
808574c2b4
@@ -84,6 +84,7 @@ var sTestsOnStorIT = []func(t *testing.T){
|
||||
testOnStorITIsDBEmpty,
|
||||
testOnStorITTestThresholdFilterIndexes,
|
||||
testOnStorITTestAttributeProfileFilterIndexes,
|
||||
testOnStorITTestThresholdInlineFilterIndexing,
|
||||
//testOnStorITCacheActionTriggers,
|
||||
//testOnStorITCacheAlias,
|
||||
//testOnStorITCacheReverseAlias,
|
||||
@@ -2832,6 +2833,25 @@ func testOnStorITTestThresholdFilterIndexes(t *testing.T) {
|
||||
t.Errorf("Expecting %+v, received: %+v", reverseIdxes, reverseRcvIdx)
|
||||
}
|
||||
}
|
||||
//remove thresholds
|
||||
if err := onStor.RemoveThresholdProfile(th.Tenant,
|
||||
th.ID, utils.NonTransactional, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if err := onStor.RemoveThresholdProfile(th2.Tenant,
|
||||
th2.ID, utils.NonTransactional, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := onStor.GetFilterReverseIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, true),
|
||||
nil); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testOnStorITTestAttributeProfileFilterIndexes(t *testing.T) {
|
||||
@@ -2891,7 +2911,8 @@ func testOnStorITTestAttributeProfileFilterIndexes(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for _, ctx := range attrProfile.Contexts {
|
||||
rfi := NewReqFilterIndexer(onStor, utils.AttributeProfilePrefix, utils.ConcatenatedKey(attrProfile.Tenant, ctx))
|
||||
rfi := NewReqFilterIndexer(onStor, utils.AttributeProfilePrefix,
|
||||
utils.ConcatenatedKey(attrProfile.Tenant, ctx))
|
||||
if rcvIdx, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != nil {
|
||||
@@ -2917,7 +2938,8 @@ func testOnStorITTestAttributeProfileFilterIndexes(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
//check indexes with the new context (con3)
|
||||
rfi := NewReqFilterIndexer(onStor, utils.AttributeProfilePrefix, utils.ConcatenatedKey(attrProfile.Tenant, "con3"))
|
||||
rfi := NewReqFilterIndexer(onStor, utils.AttributeProfilePrefix,
|
||||
utils.ConcatenatedKey(attrProfile.Tenant, "con3"))
|
||||
if rcvIdx, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != nil {
|
||||
@@ -2939,7 +2961,8 @@ func testOnStorITTestAttributeProfileFilterIndexes(t *testing.T) {
|
||||
|
||||
//check if old contexts was delete
|
||||
for _, ctx := range []string{"con1", "con2"} {
|
||||
rfi := NewReqFilterIndexer(onStor, utils.AttributeProfilePrefix, utils.ConcatenatedKey(attrProfile.Tenant, ctx))
|
||||
rfi := NewReqFilterIndexer(onStor, utils.AttributeProfilePrefix,
|
||||
utils.ConcatenatedKey(attrProfile.Tenant, ctx))
|
||||
if _, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != nil && err != utils.ErrNotFound {
|
||||
@@ -2952,7 +2975,8 @@ func testOnStorITTestAttributeProfileFilterIndexes(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
if err := onStor.RemoveAttributeProfile(attrProfile.Tenant, attrProfile.ID, attrProfile.Contexts, utils.NonTransactional, true); err != nil {
|
||||
if err := onStor.RemoveAttributeProfile(attrProfile.Tenant,
|
||||
attrProfile.ID, attrProfile.Contexts, utils.NonTransactional, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
//check if index is removed
|
||||
@@ -2968,3 +2992,129 @@ func testOnStorITTestAttributeProfileFilterIndexes(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func testOnStorITTestThresholdInlineFilterIndexing(t *testing.T) {
|
||||
fp := &Filter{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "Filter1",
|
||||
RequestFilters: []*RequestFilter{
|
||||
&RequestFilter{
|
||||
FieldName: "EventType",
|
||||
Type: "*string",
|
||||
Values: []string{"Event1", "Event2"},
|
||||
},
|
||||
},
|
||||
ActivationInterval: &utils.ActivationInterval{
|
||||
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(),
|
||||
ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC).Local(),
|
||||
},
|
||||
}
|
||||
if err := onStor.SetFilter(fp); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
th := &ThresholdProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "THD_Test",
|
||||
ActivationInterval: &utils.ActivationInterval{},
|
||||
FilterIDs: []string{"Filter1"},
|
||||
Recurrent: true,
|
||||
MinSleep: time.Duration(0 * time.Second),
|
||||
Blocker: true,
|
||||
Weight: 1.4,
|
||||
ActionIDs: []string{},
|
||||
}
|
||||
|
||||
if err := onStor.SetThresholdProfile(th, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
eIdxes := map[string]utils.StringMap{
|
||||
"EventType:Event1": utils.StringMap{
|
||||
"THD_Test": true,
|
||||
},
|
||||
"EventType:Event2": utils.StringMap{
|
||||
"THD_Test": true,
|
||||
},
|
||||
}
|
||||
reverseIdxes := map[string]utils.StringMap{
|
||||
"THD_Test": utils.StringMap{
|
||||
"EventType:Event1": true,
|
||||
"EventType:Event2": true,
|
||||
},
|
||||
}
|
||||
rfi := NewReqFilterIndexer(onStor, utils.ThresholdProfilePrefix, th.Tenant)
|
||||
if rcvIdx, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != nil {
|
||||
t.Error(err)
|
||||
} else {
|
||||
if !reflect.DeepEqual(eIdxes, rcvIdx) {
|
||||
t.Errorf("Expecting %+v, received: %+v", eIdxes, rcvIdx)
|
||||
}
|
||||
}
|
||||
if reverseRcvIdx, err := onStor.GetFilterReverseIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, true),
|
||||
nil); err != nil {
|
||||
t.Error(err)
|
||||
} else {
|
||||
if !reflect.DeepEqual(reverseIdxes, reverseRcvIdx) {
|
||||
t.Errorf("Expecting %+v, received: %+v", reverseIdxes, reverseRcvIdx)
|
||||
}
|
||||
}
|
||||
//Add an InlineFilter
|
||||
th.FilterIDs = []string{"Filter1", "*string:Account:1001"}
|
||||
if err := onStor.SetThresholdProfile(th, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
eIdxes = map[string]utils.StringMap{
|
||||
"Account:1001": utils.StringMap{
|
||||
"THD_Test": true,
|
||||
},
|
||||
"EventType:Event1": utils.StringMap{
|
||||
"THD_Test": true,
|
||||
},
|
||||
"EventType:Event2": utils.StringMap{
|
||||
"THD_Test": true,
|
||||
},
|
||||
}
|
||||
|
||||
reverseIdxes = map[string]utils.StringMap{
|
||||
"THD_Test": utils.StringMap{
|
||||
"Account:1001": true,
|
||||
"EventType:Event1": true,
|
||||
"EventType:Event2": true,
|
||||
},
|
||||
}
|
||||
if rcvIdx, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != nil {
|
||||
t.Error(err)
|
||||
} else {
|
||||
if !reflect.DeepEqual(eIdxes, rcvIdx) {
|
||||
t.Errorf("Expecting %+v, received: %+v", eIdxes, rcvIdx)
|
||||
}
|
||||
}
|
||||
if reverseRcvIdx, err := onStor.GetFilterReverseIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, true),
|
||||
nil); err != nil {
|
||||
t.Error(err)
|
||||
} else {
|
||||
if !reflect.DeepEqual(reverseIdxes, reverseRcvIdx) {
|
||||
t.Errorf("Expecting %+v, received: %+v", reverseIdxes, reverseRcvIdx)
|
||||
}
|
||||
}
|
||||
//remove threshold
|
||||
if err := onStor.RemoveThresholdProfile(th.Tenant,
|
||||
th.ID, utils.NonTransactional, true); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := onStor.GetFilterIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, false),
|
||||
nil); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := onStor.GetFilterReverseIndexes(
|
||||
GetDBIndexKey(rfi.itemType, rfi.dbKeySuffix, true),
|
||||
nil); err != utils.ErrNotFound {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1922,17 +1922,15 @@ func (ms *MongoStorage) GetFilterIndexesDrv(dbKey string,
|
||||
if err = col.Find(bson.M{"key": dbKey, qryFltr: bson.M{"$exists": true}}).Select(
|
||||
bson.M{qryFltr: true}).One(&result); err != nil {
|
||||
if err == mgo.ErrNotFound {
|
||||
err = utils.ErrNotFound
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if err = col.Find(findParam).One(&result); err != nil {
|
||||
if err == mgo.ErrNotFound {
|
||||
err = utils.ErrNotFound
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
indexes = make(map[string]utils.StringMap)
|
||||
@@ -1942,6 +1940,9 @@ func (ms *MongoStorage) GetFilterIndexesDrv(dbKey string,
|
||||
}
|
||||
indexes[key] = utils.StringMapFromSlice(itmSls)
|
||||
}
|
||||
if len(indexes) == 0 {
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return indexes, nil
|
||||
}
|
||||
|
||||
@@ -1995,17 +1996,15 @@ func (ms *MongoStorage) GetFilterReverseIndexesDrv(dbKey string,
|
||||
if err = col.Find(bson.M{"key": dbKey, qryFltr: bson.M{"$exists": true}}).Select(
|
||||
bson.M{qryFltr: true}).One(&result); err != nil {
|
||||
if err == mgo.ErrNotFound {
|
||||
err = utils.ErrNotFound
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if err = col.Find(findParam).One(&result); err != nil {
|
||||
if err == mgo.ErrNotFound {
|
||||
err = utils.ErrNotFound
|
||||
if err == mgo.ErrNotFound || len(result.Value) == 0 {
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
revIdx = make(map[string]utils.StringMap)
|
||||
@@ -2015,6 +2014,9 @@ func (ms *MongoStorage) GetFilterReverseIndexesDrv(dbKey string,
|
||||
}
|
||||
revIdx[key] = utils.StringMapFromSlice(itmSls)
|
||||
}
|
||||
if len(revIdx) == 0 {
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
return revIdx, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user