From 236c61ff1f20fa03bcd8c3de02bf352fb2cb2dac Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Wed, 12 May 2021 11:08:37 +0300 Subject: [PATCH] Remove ActivationInterval for Attributes (tests failing) --- engine/loader_csv_test.go | 5 -- engine/model_helpers.go | 15 +++-- engine/model_helpers_test.go | 104 +++++-------------------------- engine/tpreader_test.go | 7 +-- engine/version_test.go | 2 +- migrator/storage_map_datadb.go | 2 +- migrator/storage_mongo_datadb.go | 8 +-- migrator/storage_redis.go | 4 +- utils/apitpdata.go | 17 +++-- 9 files changed, 42 insertions(+), 122 deletions(-) diff --git a/engine/loader_csv_test.go b/engine/loader_csv_test.go index 06b0f5a1b..82decbffe 100644 --- a/engine/loader_csv_test.go +++ b/engine/loader_csv_test.go @@ -534,9 +534,6 @@ func TestLoadAttributeProfiles(t *testing.T) { ID: "ALS1", Contexts: []string{"con1", "con2", "con3"}, FilterIDs: []string{"*string:~*req.Account:1001"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-29T15:00:00Z", - }, Attributes: []*utils.TPAttribute{ { FilterIDs: []string{"*string:~*req.Field1:Initial"}, @@ -566,8 +563,6 @@ func TestLoadAttributeProfiles(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].Contexts, csvr.attributeProfiles[resKey].Contexts) } else if !reflect.DeepEqual(eAttrProfiles[resKey].FilterIDs, csvr.attributeProfiles[resKey].FilterIDs) { t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].FilterIDs, csvr.attributeProfiles[resKey].FilterIDs) - } else if !reflect.DeepEqual(eAttrProfiles[resKey].ActivationInterval.ActivationTime, csvr.attributeProfiles[resKey].ActivationInterval.ActivationTime) { - t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].ActivationInterval, csvr.attributeProfiles[resKey].ActivationInterval) } else if !reflect.DeepEqual(eAttrProfiles[resKey].Attributes, csvr.attributeProfiles[resKey].Attributes) { t.Errorf("Expecting: %+v, received: %+v", eAttrProfiles[resKey].Attributes, csvr.attributeProfiles[resKey].Attributes) } else if !reflect.DeepEqual(eAttrProfiles[resKey].Blocker, csvr.attributeProfiles[resKey].Blocker) { diff --git a/engine/model_helpers.go b/engine/model_helpers.go index 9af4f8d26..d3c387fbb 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1453,14 +1453,13 @@ func APItoAttributeProfile(tpAttr *utils.TPAttributeProfile, timezone string) (a func AttributeProfileToAPI(attrPrf *AttributeProfile) (tpAttr *utils.TPAttributeProfile) { tpAttr = &utils.TPAttributeProfile{ - Tenant: attrPrf.Tenant, - ID: attrPrf.ID, - FilterIDs: make([]string, len(attrPrf.FilterIDs)), - Contexts: make([]string, len(attrPrf.Contexts)), - Attributes: make([]*utils.TPAttribute, len(attrPrf.Attributes)), - ActivationInterval: new(utils.TPActivationInterval), - Blocker: attrPrf.Blocker, - Weight: attrPrf.Weight, + Tenant: attrPrf.Tenant, + ID: attrPrf.ID, + FilterIDs: make([]string, len(attrPrf.FilterIDs)), + Contexts: make([]string, len(attrPrf.Contexts)), + Attributes: make([]*utils.TPAttribute, len(attrPrf.Attributes)), + Blocker: attrPrf.Blocker, + Weight: attrPrf.Weight, } for i, fli := range attrPrf.FilterIDs { tpAttr.FilterIDs[i] = fli diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index 892c2512b..183ac5032 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -1359,11 +1359,7 @@ func TestAPItoAttributeProfile(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z"}, Attributes: []*utils.TPAttribute{ { Path: utils.MetaReq + utils.NestingSep + "FL1", @@ -1398,11 +1394,7 @@ func TestAttributeProfileToAPI(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "2014-07-15T14:35:00Z", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;2014-07-15T14:36:00Z"}, Attributes: []*utils.TPAttribute{ { Path: utils.MetaReq + utils.NestingSep + "FL1", @@ -1435,11 +1427,7 @@ func TestAttributeProfileToAPI2(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z"}, Attributes: []*utils.TPAttribute{ { Path: utils.MetaReq + utils.NestingSep + "FL1", @@ -1480,11 +1468,7 @@ func TestAPItoModelTPAttribute(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1", "con2"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "2014-07-15T14:35:00Z", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;2014-07-14T14:36:00Z"}, Attributes: []*utils.TPAttribute{ {FilterIDs: []string{"filter_id1", "filter_id2"}, Path: utils.MetaReq + utils.NestingSep + "FL1", @@ -1499,7 +1483,7 @@ func TestAPItoModelTPAttribute(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: "con1;con2", - FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE", + FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;2014-07-14T14:36:00Z", AttributeFilterIDs: "filter_id1;filter_id2", Path: utils.MetaReq + utils.NestingSep + "FL1", Value: "Al1", @@ -1518,11 +1502,7 @@ func TestCsvDumpForAttributeModels(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z"}, Attributes: []*utils.TPAttribute{ { Path: utils.MetaReq + utils.NestingSep + "FL1", @@ -1541,7 +1521,7 @@ func TestCsvDumpForAttributeModels(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: "con1", - FilterIDs: "FLTR_ACNT_dan", + FilterIDs: "FLTR_ACNT_dan;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z", Path: utils.MetaReq + utils.NestingSep + "FL1", Value: "Al1", Weight: 20, @@ -1558,10 +1538,10 @@ func TestCsvDumpForAttributeModels(t *testing.T) { if !reflect.DeepEqual(expected, rcv) { t.Errorf("Expecting : %+v,\n received: %+v", utils.ToJSON(expected), utils.ToJSON(rcv)) } - expRecord := []string{"cgrates.org", "ALS1", "con1", "FLTR_ACNT_dan", "2014-07-14T14:35:00Z", "", "*req.FL1", "", "Al1", "false", "20"} + expRecord := []string{"cgrates.org", "ALS1", "con1", "FLTR_ACNT_dan;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z", "20", "", "*req.FL1", "", "Al1", "false"} for i, model := range rcv { if i == 1 { - expRecord = []string{"cgrates.org", "ALS1", "", "", "", "", "*req.FL2", "", "Al2", "false", "0"} + expRecord = []string{"cgrates.org", "ALS1", "", "", "0", "", "*req.FL2", "", "Al2", "false"} } if csvRecordRcv, _ := CsvDump(model); !reflect.DeepEqual(expRecord, csvRecordRcv) { t.Errorf("Expecting : %+v, received: %+v", utils.ToJSON(expRecord), utils.ToJSON(csvRecordRcv)) @@ -1577,7 +1557,7 @@ func TestModelAsTPAttribute2(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: "con1", - FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE", + FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;2014-07-14T14:36:00Z", Path: utils.MetaReq + utils.NestingSep + "FL1", Value: "Al1", Weight: 20, @@ -1588,11 +1568,7 @@ func TestModelAsTPAttribute2(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "2014-07-15T14:35:00Z", - }, + FilterIDs: []string{"*ai:~*req.AnswerTime:2014-07-14T14:35:00Z;2014-07-14T14:36:00Z", "FLTR_ACNT_dan", "FLTR_DST_DE"}, Attributes: []*utils.TPAttribute{ { FilterIDs: []string{}, @@ -1607,11 +1583,7 @@ func TestModelAsTPAttribute2(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_DST_DE", "FLTR_ACNT_dan"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"*ai:~*req.AnswerTime:2014-07-14T14:35:00Z", "FLTR_ACNT_dan", "FLTR_DST_DE"}, Attributes: []*utils.TPAttribute{ { FilterIDs: []string{}, @@ -1635,7 +1607,7 @@ func TestModelAsTPAttribute(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: "con1", - FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE", + FilterIDs: "FLTR_ACNT_dan;FLTR_DST_DE;*ai:~*req.AnswerTime:2014-07-14T14:35:00Z", Path: utils.MetaReq + utils.NestingSep + "FL1", Value: "Al1", Weight: 20, @@ -1646,11 +1618,7 @@ func TestModelAsTPAttribute(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"*ai:~*req.AnswerTime:2014-07-14T14:35:00Z", "FLTR_ACNT_dan", "FLTR_DST_DE"}, Attributes: []*utils.TPAttribute{ { FilterIDs: []string{}, @@ -1665,11 +1633,7 @@ func TestModelAsTPAttribute(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_DST_DE", "FLTR_ACNT_dan"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"*ai:~*req.AnswerTime:2014-07-14T14:35:00Z", "FLTR_DST_DE", "FLTR_ACNT_dan"}, Attributes: []*utils.TPAttribute{ { FilterIDs: []string{}, @@ -4547,11 +4511,7 @@ func TestAPItoAttributeProfileError1(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z"}, Attributes: []*utils.TPAttribute{ { Path: "", @@ -4574,11 +4534,7 @@ func TestAPItoAttributeProfileError2(t *testing.T) { Tenant: "cgrates.org", ID: "ALS1", Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-14T14:35:00Z", - ExpiryTime: "", - }, + FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE", "*ai:~*req.AnswerTime:2014-07-14T14:35:00Z"}, Attributes: []*utils.TPAttribute{ { Path: utils.MetaReq + utils.NestingSep + "FL1", @@ -4596,32 +4552,6 @@ func TestAPItoAttributeProfileError2(t *testing.T) { } -func TestAPItoAttributeProfileError3(t *testing.T) { - tpAlsPrf := &utils.TPAttributeProfile{ - TPid: "TP1", - Tenant: "cgrates.org", - ID: "ALS1", - Contexts: []string{"con1"}, - FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "cat", - ExpiryTime: "", - }, - Attributes: []*utils.TPAttribute{ - { - Path: utils.MetaReq + utils.NestingSep + "FL1", - Value: "Al1", - }, - }, - Weight: 20, - } - - _, err := APItoAttributeProfile(tpAlsPrf, "UTC") - if err == nil || err.Error() != "Unsupported time format" { - t.Errorf("\nExpecting ,\n Received <%+v>", err) - } -} - func TestAPItoModelTPAttributeNoAttributes(t *testing.T) { testStruct := &utils.TPAttributeProfile{} var expStruct AttributeMdls = nil diff --git a/engine/tpreader_test.go b/engine/tpreader_test.go index a211a8223..8e2aef462 100644 --- a/engine/tpreader_test.go +++ b/engine/tpreader_test.go @@ -676,11 +676,8 @@ func TestGetLoadedIdsAttributeProfiles(t *testing.T) { TPid: testTPID, Tenant: "cgrates.org", ID: "ResGroup1", - FilterIDs: []string{"*string:~*req.Account:1001"}, - ActivationInterval: &utils.TPActivationInterval{ - ActivationTime: "2014-07-29T15:00:00Z", - }, - Contexts: []string{"sessions"}, + FilterIDs: []string{"*string:~*req.Account:1001", "*ai:~*req.AnswerTime:2014-07-29T15:00:00Z"}, + Contexts: []string{"sessions"}, }, }, } diff --git a/engine/version_test.go b/engine/version_test.go index 6cc1fee3b..7836f1e4f 100644 --- a/engine/version_test.go +++ b/engine/version_test.go @@ -73,7 +73,7 @@ func TestVersionCompare(t *testing.T) { func TestCurrentDBVersions(t *testing.T) { expVersDataDB := Versions{ utils.StatS: 4, utils.Accounts: 3, utils.Actions: 2, - utils.Thresholds: 4, utils.Routes: 2, utils.Attributes: 6, + utils.Thresholds: 4, utils.Routes: 2, utils.Attributes: 7, utils.Timing: 1, utils.RQF: 5, utils.Resource: 1, utils.Subscribers: 1, utils.Destinations: 1, utils.ReverseDestinations: 1, utils.Chargers: 2, diff --git a/migrator/storage_map_datadb.go b/migrator/storage_map_datadb.go index 8e32ea12e..45aa4be32 100644 --- a/migrator/storage_map_datadb.go +++ b/migrator/storage_map_datadb.go @@ -133,7 +133,7 @@ func (iDBMig *internalMigrator) remV3AttributeProfile(tenant, id string) (err er func (iDBMig *internalMigrator) getV4AttributeProfile() (v4attrPrf *v4AttributeProfile, err error) { return nil, utils.ErrNotImplemented } -func (iDBMig *internalMigrator) getV5AttributeProfile() (v4attrPrf *engine.AttributeProfile, err error) { +func (iDBMig *internalMigrator) getV5AttributeProfile() (v6attrPrf *v6AttributeProfile, err error) { return nil, utils.ErrNotImplemented } diff --git a/migrator/storage_mongo_datadb.go b/migrator/storage_mongo_datadb.go index 65aac5e0b..e5ee1e2c4 100644 --- a/migrator/storage_mongo_datadb.go +++ b/migrator/storage_mongo_datadb.go @@ -296,7 +296,7 @@ func (v1ms *mongoMigrator) getV4AttributeProfile() (v4attrPrf *v4AttributeProfil return v4attrPrf, nil } -func (v1ms *mongoMigrator) getV5AttributeProfile() (v5attrPrf *engine.AttributeProfile, err error) { +func (v1ms *mongoMigrator) getV5AttributeProfile() (v6attrPrf *v6AttributeProfile, err error) { if v1ms.cursor == nil { v1ms.cursor, err = v1ms.mgoDB.DB().Collection(v1AttributeProfilesCol).Find(v1ms.mgoDB.GetContext(), bson.D{}) if err != nil { @@ -308,11 +308,11 @@ func (v1ms *mongoMigrator) getV5AttributeProfile() (v5attrPrf *engine.AttributeP v1ms.cursor = nil return nil, utils.ErrNoMoreData } - v5attrPrf = new(engine.AttributeProfile) - if err := (*v1ms.cursor).Decode(v5attrPrf); err != nil { + v6attrPrf = new(v6AttributeProfile) + if err := (*v1ms.cursor).Decode(v6attrPrf); err != nil { return nil, err } - return v5attrPrf, nil + return v6attrPrf, nil } //set diff --git a/migrator/storage_redis.go b/migrator/storage_redis.go index 57574a1d3..6852abb51 100644 --- a/migrator/storage_redis.go +++ b/migrator/storage_redis.go @@ -398,7 +398,7 @@ func (v1rs *redisMigrator) getV4AttributeProfile() (v3attrPrf *v4AttributeProfil return v4attr, nil } -func (v1rs *redisMigrator) getV5AttributeProfile() (v5attr *engine.AttributeProfile, err error) { +func (v1rs *redisMigrator) getV5AttributeProfile() (v6attr *v6AttributeProfile, err error) { if v1rs.qryIdx == nil { v1rs.dataKeys, err = v1rs.rds.GetKeysForPrefix(context.TODO(), utils.AttributeProfilePrefix) if err != nil { @@ -413,7 +413,7 @@ func (v1rs *redisMigrator) getV5AttributeProfile() (v5attr *engine.AttributeProf if err = v1rs.rds.Cmd(&strVal, "GET", v1rs.dataKeys[*v1rs.qryIdx]); err != nil { return nil, err } - if err := v1rs.rds.Marshaler().Unmarshal(strVal, &v5attr); err != nil { + if err := v1rs.rds.Marshaler().Unmarshal(strVal, &v6attr); err != nil { return nil, err } *v1rs.qryIdx = *v1rs.qryIdx + 1 diff --git a/utils/apitpdata.go b/utils/apitpdata.go index 7f950d938..3479234e8 100644 --- a/utils/apitpdata.go +++ b/utils/apitpdata.go @@ -709,15 +709,14 @@ type TPAttribute struct { // TPAttributeProfile is used in APIs to manage remotely offline AttributeProfile type TPAttributeProfile struct { - TPid string - Tenant string - ID string - FilterIDs []string - ActivationInterval *TPActivationInterval // Time when this limit becomes active and expires - Contexts []string // bind this TPAttribute to multiple context - Attributes []*TPAttribute - Blocker bool - Weight float64 + TPid string + Tenant string + ID string + FilterIDs []string + Contexts []string // bind this TPAttribute to multiple context + Attributes []*TPAttribute + Blocker bool + Weight float64 } // TPChargerProfile is used in APIs to manage remotely offline ChargerProfile