update to fully merge aliases

This commit is contained in:
Radu Ioan Fericean
2015-11-29 09:47:43 +02:00
parent 04e52d6e97
commit 54c73c3cde
2 changed files with 27 additions and 11 deletions

View File

@@ -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

View File

@@ -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])
}
}