mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Aliases old implementation compatibility, local tests modified
This commit is contained in:
@@ -20,34 +20,39 @@ package v1
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
|
||||
type AttrAddRatingSubjectAliases struct {
|
||||
Tenant, Subject string
|
||||
Aliases []string
|
||||
Tenant, Category, Subject string
|
||||
Aliases []string
|
||||
}
|
||||
|
||||
type AttrAddAccountAliases struct {
|
||||
Tenant, Account string
|
||||
Aliases []string
|
||||
Tenant, Category, Account string
|
||||
Aliases []string
|
||||
}
|
||||
|
||||
// Retrieve aliases configured for a rating profile subject
|
||||
// Add aliases configured for a rating profile subject <Deprecated>
|
||||
func (self *ApierV1) AddRatingSubjectAliases(attrs AttrAddRatingSubjectAliases, reply *string) error {
|
||||
if engine.GetAliasService() == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
if missing := utils.MissingStructFields(&attrs, []string{"Tenant", "Subject", "Aliases"}); len(missing) != 0 {
|
||||
return utils.NewErrMandatoryIeMissing(missing...)
|
||||
}
|
||||
if attrs.Category == "" {
|
||||
attrs.Category = utils.CALL
|
||||
}
|
||||
aliases := engine.GetAliasService()
|
||||
if aliases == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
var ignr string
|
||||
for _, alias := range attrs.Aliases {
|
||||
var ignr string
|
||||
if err := engine.GetAliasService().SetAlias(
|
||||
engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Account: utils.META_ANY, Subject: attrs.Subject, Group: utils.ALIAS_GROUP_RP,
|
||||
Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY, Alias: alias, Weight: 10.0}}}, &ignr); err != nil {
|
||||
if err := aliases.SetAlias(
|
||||
engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: alias, Group: utils.ALIAS_GROUP_RP,
|
||||
Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY, Alias: attrs.Subject, Weight: 10.0}}}, &ignr); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
}
|
||||
@@ -55,40 +60,25 @@ func (self *ApierV1) AddRatingSubjectAliases(attrs AttrAddRatingSubjectAliases,
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
// Retrieve aliases configured for a rating profile subject
|
||||
// Remove aliases configured for a rating profile subject
|
||||
func (self *ApierV1) RemRatingSubjectAliases(tenantRatingSubject engine.TenantRatingSubject, reply *string) error {
|
||||
if engine.GetAliasService() == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
if missing := utils.MissingStructFields(&tenantRatingSubject, []string{"Tenant", "Subject"}); len(missing) != 0 {
|
||||
return utils.NewErrMandatoryIeMissing(missing...)
|
||||
}
|
||||
if err := self.RatingDb.RemoveRpAliases([]*engine.TenantRatingSubject{&tenantRatingSubject}, false); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
|
||||
// cache refresh not needed, synched in RemoveRpAliases
|
||||
*reply = utils.OK
|
||||
return nil
|
||||
}
|
||||
*/
|
||||
|
||||
func (self *ApierV1) AddAccountAliases(attrs AttrAddAccountAliases, reply *string) error {
|
||||
if engine.GetAliasService() == nil {
|
||||
aliases := engine.GetAliasService()
|
||||
if aliases == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
if missing := utils.MissingStructFields(&attrs, []string{"Tenant", "Account", "Aliases"}); len(missing) != 0 {
|
||||
return utils.NewErrMandatoryIeMissing(missing...)
|
||||
var reverseAliases map[string]*engine.Alias
|
||||
if err := aliases.GetReverseAlias(engine.AttrReverseAlias{Alias: tenantRatingSubject.Subject, Group: utils.ALIAS_GROUP_RP}, &reverseAliases); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
for _, alias := range attrs.Aliases {
|
||||
var ignr string
|
||||
if err := engine.GetAliasService().SetAlias(
|
||||
engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Account: attrs.Account, Subject: utils.META_ANY, Group: utils.ALIAS_GROUP_ACC,
|
||||
Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY, Alias: alias, Weight: 10.0}}}, &ignr); err != nil {
|
||||
var ignr string
|
||||
for _, alias := range reverseAliases {
|
||||
if alias.Tenant != tenantRatingSubject.Tenant {
|
||||
continue // From another tenant
|
||||
}
|
||||
if err := aliases.RemoveAlias(*alias, &ignr); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
}
|
||||
@@ -96,22 +86,51 @@ func (self *ApierV1) AddAccountAliases(attrs AttrAddAccountAliases, reply *strin
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
// Retrieve aliases configured for a rating profile subject
|
||||
func (self *ApierV1) RemAccountAliases(tenantAccount engine.TenantAccount, reply *string) error {
|
||||
if engine.GetAliasService() == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
if missing := utils.MissingStructFields(&tenantAccount, []string{"Tenant", "Account"}); len(missing) != 0 {
|
||||
func (self *ApierV1) AddAccountAliases(attrs AttrAddAccountAliases, reply *string) error {
|
||||
if missing := utils.MissingStructFields(&attrs, []string{"Tenant", "Account", "Aliases"}); len(missing) != 0 {
|
||||
return utils.NewErrMandatoryIeMissing(missing...)
|
||||
}
|
||||
if err := self.RatingDb.RemoveAccAliases([]*engine.TenantAccount{&tenantAccount}, false); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
return err
|
||||
if attrs.Category == "" {
|
||||
attrs.Category = utils.CALL
|
||||
}
|
||||
aliases := engine.GetAliasService()
|
||||
if aliases == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
var ignr string
|
||||
for _, alias := range attrs.Aliases {
|
||||
if err := aliases.SetAlias(
|
||||
engine.Alias{Direction: utils.META_OUT, Tenant: attrs.Tenant, Category: attrs.Category, Account: alias, Subject: utils.META_ANY, Group: utils.ALIAS_GROUP_ACC,
|
||||
Values: engine.AliasValues{&engine.AliasValue{DestinationId: utils.META_ANY, Alias: attrs.Account, Weight: 10.0}}}, &ignr); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
}
|
||||
*reply = utils.OK
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove aliases configured for an account
|
||||
func (self *ApierV1) RemAccountAliases(tenantAccount engine.TenantAccount, reply *string) error {
|
||||
if missing := utils.MissingStructFields(&tenantAccount, []string{"Tenant", "Account"}); len(missing) != 0 {
|
||||
return utils.NewErrMandatoryIeMissing(missing...)
|
||||
}
|
||||
aliases := engine.GetAliasService()
|
||||
if aliases == nil {
|
||||
return errors.New("ALIASES_NOT_ENABLED")
|
||||
}
|
||||
var reverseAliases map[string]*engine.Alias
|
||||
if err := aliases.GetReverseAlias(engine.AttrReverseAlias{Alias: tenantAccount.Account, Group: utils.ALIAS_GROUP_ACC}, &reverseAliases); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
var ignr string
|
||||
for _, alias := range reverseAliases {
|
||||
if alias.Tenant != tenantAccount.Tenant {
|
||||
continue // From another tenant
|
||||
}
|
||||
if err := aliases.RemoveAlias(*alias, &ignr); err != nil {
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
return utils.NewErrServerError(err)
|
||||
}
|
||||
*reply = utils.OK
|
||||
return nil
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -30,6 +30,7 @@ import (
|
||||
"os/exec"
|
||||
"path"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -109,6 +110,7 @@ func TestApierInitStorDb(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// Finds cgr-engine executable and starts it with default configuration
|
||||
func TestApierStartEngine(t *testing.T) {
|
||||
if !*testLocal {
|
||||
@@ -126,6 +128,7 @@ func TestApierStartEngine(t *testing.T) {
|
||||
}
|
||||
time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time to rater to fire up
|
||||
}
|
||||
*/
|
||||
|
||||
// Connect rpc client to rater
|
||||
func TestApierRpcConn(t *testing.T) {
|
||||
@@ -1542,13 +1545,13 @@ func TestApierLocalSetDestination(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
func TestApierLocalGetRatingSubjectAliases(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
var subjAliases []string
|
||||
if err := rater.Call("ApierV1.GetRatingSubjectAliases", engine.TenantRatingSubject{Tenant: "cgrates.org", Subject: "1001"}, &subjAliases); err == nil {
|
||||
var alias engine.Alias
|
||||
//al.Direction, al.Tenant, al.Category, al.Account, al.Subject, al.Group
|
||||
if err := rater.Call("AliasesV1.GetAlias", engine.Alias{Group: utils.ALIAS_GROUP_RP, Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "2001", Subject: "2001"}, &alias); err == nil {
|
||||
t.Error("Unexpected nil error received")
|
||||
} else if err.Error() != utils.ErrNotFound.Error() {
|
||||
t.Error("Unexpected error", err.Error())
|
||||
@@ -1559,23 +1562,20 @@ func TestApierLocalAddRatingSubjectAliases(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
addRtSubjAliases := &AttrAddRatingSubjectAliases{Tenant: "cgrates.org", Subject: "1001", Aliases: []string{"2001", "2002", "2003"}}
|
||||
addRtSubjAliases := &AttrAddRatingSubjectAliases{Tenant: "cgrates.org", Category: "call", Subject: "1001", Aliases: []string{"2001", "2002", "2003"}}
|
||||
var rply string
|
||||
fmt.Println("Before AddRatingSubjectAliases")
|
||||
if err := rater.Call("ApierV1.AddRatingSubjectAliases", addRtSubjAliases, &rply); err != nil {
|
||||
t.Error("Unexpected error", err.Error())
|
||||
} else if rply != utils.OK {
|
||||
t.Error("Unexpected reply: ", rply)
|
||||
}
|
||||
var subjAliases []string
|
||||
expectSubjAliases := sort.StringSlice(addRtSubjAliases.Aliases)
|
||||
expectSubjAliases.Sort()
|
||||
if err := rater.Call("ApierV1.GetRatingSubjectAliases", engine.TenantRatingSubject{Tenant: "cgrates.org", Subject: "1001"}, &subjAliases); err != nil {
|
||||
t.Error("Unexpected error", err.Error())
|
||||
} else {
|
||||
subjAliases := sort.StringSlice(subjAliases)
|
||||
subjAliases.Sort()
|
||||
if !reflect.DeepEqual(expectSubjAliases, subjAliases) {
|
||||
t.Errorf("Expecting: %v, received: %v", expectSubjAliases, subjAliases)
|
||||
fmt.Println("After AddRatingSubjectAliases")
|
||||
var alias engine.Alias
|
||||
for _, als := range addRtSubjAliases.Aliases {
|
||||
if err := rater.Call("AliasesV1.GetAlias", engine.Alias{Group: utils.ALIAS_GROUP_RP, Direction: "*out", Tenant: addRtSubjAliases.Tenant, Category: addRtSubjAliases.Category,
|
||||
Account: als, Subject: als}, &alias); err != nil {
|
||||
t.Error("Unexpected error", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1591,11 +1591,10 @@ func TestApierLocalRemRatingSubjectAliases(t *testing.T) {
|
||||
} else if rply != utils.OK {
|
||||
t.Error("Unexpected reply: ", rply)
|
||||
}
|
||||
var subjAliases []string
|
||||
if err := rater.Call("ApierV1.GetRatingSubjectAliases", engine.TenantRatingSubject{Tenant: "cgrates.org", Subject: "1001"}, &subjAliases); err == nil {
|
||||
t.Error("Unexpected nil error received")
|
||||
} else if err.Error() != utils.ErrNotFound.Error() {
|
||||
t.Error("Unexpected error", err.Error())
|
||||
var alias engine.Alias
|
||||
//al.Direction, al.Tenant, al.Category, al.Account, al.Subject, al.Group
|
||||
if err := rater.Call("AliasesV1.GetAlias", engine.Alias{Group: utils.ALIAS_GROUP_RP, Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "2001", Subject: "2001"}, &alias); err == nil || err != utils.ErrNotFound {
|
||||
t.Errorf("Unexpected error %v, alias: %+v", err, alias)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1612,7 +1611,6 @@ func TestApierLocalGetAccountAliases(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestApierLocalAddAccountAliases(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
@@ -1656,7 +1654,6 @@ func TestApierLocalRemAccountAliases(t *testing.T) {
|
||||
t.Error("Unexpected error", err.Error())
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
func TestApierLocalGetScheduledActions(t *testing.T) {
|
||||
if !*testLocal {
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
"rater": {
|
||||
"enabled": true, // enable Rater service: <true|false>
|
||||
"aliases": "internal"
|
||||
},
|
||||
|
||||
"scheduler": {
|
||||
@@ -23,6 +24,10 @@
|
||||
"rater": "internal", // address where to reach the Rater for cost calculation, empty to disable functionality: <""|internal|x.y.z.y:1234>
|
||||
},
|
||||
|
||||
"aliases": {
|
||||
"enabled": true, // start the CDR Server service: <true|false>
|
||||
},
|
||||
|
||||
"cdre": {
|
||||
"*default": {
|
||||
"export_dir": "/tmp/cgrates/cdr/cdrexport/csv", // path where the exported CDRs will be placed
|
||||
|
||||
@@ -225,6 +225,7 @@ const (
|
||||
ALIAS_GROUP_RP = "*rating_profile"
|
||||
ALIAS_GROUP_ACC = "*account"
|
||||
NOT_AVAILABLE = "N/A"
|
||||
CALL = "call"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
Reference in New Issue
Block a user