mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 13:19:53 +05:00
Merge branch 'master' of https://github.com/cgrates/cgrates
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user