Aliases old implementation compatibility, local tests modified

This commit is contained in:
DanB
2015-09-14 13:22:50 +02:00
parent 3bd40c6dbe
commit a86fcad2ff
4 changed files with 94 additions and 72 deletions

View File

@@ -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
}
*/

View File

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

View File

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

View File

@@ -225,6 +225,7 @@ const (
ALIAS_GROUP_RP = "*rating_profile"
ALIAS_GROUP_ACC = "*account"
NOT_AVAILABLE = "N/A"
CALL = "call"
)
var (