From 1f684b5d1a3372c46e961f0b228bab4f49220d30 Mon Sep 17 00:00:00 2001 From: TeoV Date: Tue, 10 Mar 2020 10:50:02 +0200 Subject: [PATCH] Correctly migrate Value for Attributes ( v4 to current ) in case of dynamic prefix fixes #2029 --- migrator/attributes.go | 13 +++++++++- migrator/attributes_it_test.go | 12 ++++----- migrator/attributes_test.go | 45 ++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/migrator/attributes.go b/migrator/attributes.go index 7a7bc84cd..e0824f053 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -425,10 +425,21 @@ func (v4AttrPrf v4AttributeProfile) AsAttributeProfile() (attrPrf *engine.Attrib ActivationInterval: v4AttrPrf.ActivationInterval, } for _, attr := range v4AttrPrf.Attributes { + val := attr.Value.GetRule() + rsrVal := attr.Value + if strings.HasPrefix(val, utils.DynamicDataPrefix) { + val = val[1:] // remove the DynamicDataPrefix + val = utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + val + rsrVal, err = config.NewRSRParsers(val, true, config.CgrConfig().GeneralCfg().RSRSep) + if err != nil { + return nil, err + } + } + attrPrf.Attributes = append(attrPrf.Attributes, &engine.Attribute{ FilterIDs: attr.FilterIDs, Path: utils.MetaReq + utils.NestingSep + attr.FieldName, - Value: attr.Value, + Value: rsrVal, Type: attr.Type, }) } diff --git a/migrator/attributes_it_test.go b/migrator/attributes_it_test.go index 270663ade..b3689c361 100755 --- a/migrator/attributes_it_test.go +++ b/migrator/attributes_it_test.go @@ -592,16 +592,16 @@ func testAttrITMigrateV4(t *testing.T) { Tenant: "cgrates.org", ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, - FilterIDs: []string{"*string:Accont:1001"}, + FilterIDs: []string{"*string:~*req.Accont:1001"}, ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*v4Attribute{ &v4Attribute{ - FilterIDs: []string{"*string:FL1:In1"}, + FilterIDs: []string{"*string:~*req.FL1:In1"}, FieldName: "FL1", - Value: config.NewRSRParsersMustCompile("Al1", true, utils.INFIELD_SEP), + Value: config.NewRSRParsersMustCompile("~Category:s/(.*)/${1}_UK_Mobile_Vodafone_GBRVF/", true, utils.INFIELD_SEP), Type: utils.MetaVariable, }, }, @@ -612,17 +612,17 @@ func testAttrITMigrateV4(t *testing.T) { Tenant: "cgrates.org", ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, - FilterIDs: []string{"*string:Accont:1001"}, + FilterIDs: []string{"*string:~*req.Accont:1001"}, ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ { - FilterIDs: []string{"*string:FL1:In1"}, + FilterIDs: []string{"*string:~*req.FL1:In1"}, Path: utils.MetaReq + utils.NestingSep + "FL1", Type: utils.MetaVariable, - Value: config.NewRSRParsersMustCompile("Al1", true, utils.INFIELD_SEP), + Value: config.NewRSRParsersMustCompile("~*req.Category:s/(.*)/${1}_UK_Mobile_Vodafone_GBRVF/", true, utils.INFIELD_SEP), }, }, Weight: 20, diff --git a/migrator/attributes_test.go b/migrator/attributes_test.go index f67d59fa9..fd3cbfee1 100644 --- a/migrator/attributes_test.go +++ b/migrator/attributes_test.go @@ -214,3 +214,48 @@ func TestV3AttributeProfileAsAttributeProfile(t *testing.T) { t.Errorf("Expecting : %+v, received: %+v", utils.ToJSON(attrPrf), utils.ToJSON(ap)) } } + +func TestV4AttributeProfileAsAttributeProfile(t *testing.T) { + cloneExpTime := time.Now().Add(time.Duration(20 * time.Minute)) + v4Attribute := v4AttributeProfile{ + Tenant: "cgrates.org", + ID: "attributeprofile1", + Contexts: []string{utils.MetaSessionS}, + FilterIDs: []string{"filter1"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: cloneExpTime, + }, + Attributes: []*v4Attribute{ + &v4Attribute{ + FieldName: "FL1", + Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("~Category:s/(.*)/${1}_UK_Mobile_Vodafone_GBRVF/", true, utils.INFIELD_SEP), + }, + }, + Weight: 20, + } + attrPrf := &engine.AttributeProfile{ + Tenant: "cgrates.org", + ID: "attributeprofile1", + Contexts: []string{utils.MetaSessionS}, + FilterIDs: []string{"filter1"}, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), + ExpiryTime: cloneExpTime, + }, + Attributes: []*engine.Attribute{ + &engine.Attribute{ + Path: utils.MetaReq + utils.NestingSep + "FL1", + Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("~*req.Category:s/(.*)/${1}_UK_Mobile_Vodafone_GBRVF/", true, utils.INFIELD_SEP), + }, + }, + Weight: 20, + } + if ap, err := v4Attribute.AsAttributeProfile(); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(attrPrf, ap) { + t.Errorf("Expecting : %+v, received: %+v", utils.ToJSON(attrPrf), utils.ToJSON(ap)) + } +}