This commit is contained in:
DanB
2015-11-29 13:01:32 +01:00
2 changed files with 138 additions and 11 deletions

View File

@@ -195,28 +195,39 @@ func (am *AliasHandler) SetAlias(al Alias, reply *string) error {
}
func (am *AliasHandler) UpdateAlias(al Alias, reply *string) error {
// get previous value
oldAlias := &Alias{}
if err := am.GetAlias(al, oldAlias); err != nil {
*reply = err.Error()
return err
}
am.mu.Lock()
defer am.mu.Unlock()
for _, oldValue := range oldAlias.Values {
// get previous value
oldAlias, err := am.accountingDb.GetAlias(al.GetId(), false)
if err != nil {
return err
}
for _, value := range al.Values {
found := false
for _, value := range al.Values {
if oldValue.Equals(value) {
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

@@ -45,6 +45,122 @@ func TestAliasesGetMatchingAlias(t *testing.T) {
}
}
func TestAliasesSetters(t *testing.T) {
var out string
if err := aliasService.SetAlias(Alias{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
Values: AliasValues{&AliasValue{
DestinationId: utils.ANY,
Pairs: AliasPairs{"Account": map[string]string{"1234": "1235"}},
Weight: 10,
}},
}, &out); err != nil || out != utils.OK {
t.Error("Error setting alias: ", err, out)
}
r := &Alias{}
if err := aliasService.GetAlias(Alias{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
}, r); err != nil || len(r.Values) != 1 || len(r.Values[0].Pairs) != 1 {
t.Errorf("Error getting alias: %+v", r)
}
if err := aliasService.UpdateAlias(Alias{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
Values: AliasValues{&AliasValue{
DestinationId: utils.ANY,
Pairs: AliasPairs{"Subject": map[string]string{"1234": "1235"}},
Weight: 10,
}},
}, &out); err != nil || out != utils.OK {
t.Error("Error updateing alias: ", err, out)
}
if err := aliasService.GetAlias(Alias{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
}, 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{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
Values: AliasValues{&AliasValue{
DestinationId: utils.ANY,
Pairs: AliasPairs{"Subject": map[string]string{"1111": "2222"}},
Weight: 10,
}},
}, &out); err != nil || out != utils.OK {
t.Error("Error updateing alias: ", err, out)
}
if err := aliasService.GetAlias(Alias{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
}, 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{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
Values: AliasValues{&AliasValue{
DestinationId: "NAT",
Pairs: AliasPairs{"Subject": map[string]string{"3333": "4444"}},
Weight: 10,
}},
}, &out); err != nil || out != utils.OK {
t.Error("Error updateing alias: ", err, out)
}
if err := aliasService.GetAlias(Alias{
Direction: "*out",
Tenant: "cgrates.org",
Category: "call",
Account: "set",
Subject: "set",
Context: "*rating",
}, r); err != nil ||
len(r.Values) != 2 ||
len(r.Values[1].Pairs) != 1 ||
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])
}
}
func TestAliasesLoadAlias(t *testing.T) {
var response string
cd := &CallDescriptor{