From 54c73c3cde487f62de0bee451202ae9400e467c8 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Sun, 29 Nov 2015 09:47:43 +0200 Subject: [PATCH] update to fully merge aliases --- engine/aliases.go | 21 ++++++++++++++++----- engine/aliases_test.go | 17 +++++++++++------ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/engine/aliases.go b/engine/aliases.go index 5a8f68409..a9fb00c65 100644 --- a/engine/aliases.go +++ b/engine/aliases.go @@ -202,21 +202,32 @@ func (am *AliasHandler) UpdateAlias(al Alias, reply *string) error { if err != nil { return err } - // move old values that were not overwritten into the new alias - for _, oldValue := range oldAlias.Values { + for _, value := range al.Values { found := false - for _, value := range al.Values { + if value.DestinationId == "" { + value.DestinationId = utils.ANY + } + for _, oldValue := range oldAlias.Values { if oldValue.DestinationId == value.DestinationId { + for target, origAliasMap := range value.Pairs { + for orig, alias := range origAliasMap { + if oldValue.Pairs[target] == nil { + oldValue.Pairs[target] = make(map[string]string) + } + oldValue.Pairs[target][orig] = alias + } + } + oldValue.Weight = value.Weight found = true break } } if !found { - al.Values = append(al.Values, oldValue) + oldAlias.Values = append(oldAlias.Values, value) } } - if err := am.accountingDb.SetAlias(&al); err != nil { + if err := am.accountingDb.SetAlias(oldAlias); err != nil { *reply = err.Error() return err } //add to cache diff --git a/engine/aliases_test.go b/engine/aliases_test.go index a0c5f2596..a95e40b1e 100644 --- a/engine/aliases_test.go +++ b/engine/aliases_test.go @@ -96,7 +96,11 @@ func TestAliasesSetters(t *testing.T) { Account: "set", Subject: "set", Context: "*rating", - }, r); err != nil || len(r.Values) != 1 || len(r.Values[0].Pairs) != 1 || r.Values[0].Pairs["Subject"]["1234"] != "1235" { + }, r); err != nil || + len(r.Values) != 1 || + len(r.Values[0].Pairs) != 2 || + r.Values[0].Pairs["Subject"]["1234"] != "1235" || + r.Values[0].Pairs["Account"]["1234"] != "1235" { t.Errorf("Error getting alias: %+v", r.Values[0]) } if err := aliasService.UpdateAlias(Alias{ @@ -121,7 +125,7 @@ func TestAliasesSetters(t *testing.T) { Account: "set", Subject: "set", Context: "*rating", - }, r); err != nil || len(r.Values) != 1 || len(r.Values[0].Pairs) != 1 || r.Values[0].Pairs["Subject"]["1111"] != "2222" { + }, r); err != nil || len(r.Values) != 1 || len(r.Values[0].Pairs) != 2 || r.Values[0].Pairs["Subject"]["1111"] != "2222" { t.Errorf("Error getting alias: %+v", r.Values[0].Pairs["Subject"]) } if err := aliasService.UpdateAlias(Alias{ @@ -149,10 +153,11 @@ func TestAliasesSetters(t *testing.T) { }, r); err != nil || len(r.Values) != 2 || len(r.Values[1].Pairs) != 1 || - r.Values[1].Pairs["Subject"]["1111"] != "2222" || - len(r.Values[0].Pairs) != 1 || - r.Values[0].Pairs["Subject"]["3333"] != "4444" { - t.Errorf("Error getting alias: %+v", r.Values) + r.Values[1].Pairs["Subject"]["3333"] != "4444" || + len(r.Values[0].Pairs) != 2 || + r.Values[0].Pairs["Subject"]["1111"] != "2222" || + r.Values[0].Pairs["Subject"]["1234"] != "1235" { + t.Errorf("Error getting alias: %+v", r.Values[0]) } }