code cleanups, used consts from utils

This commit is contained in:
Radu Ioan Fericean
2015-09-29 11:03:36 +03:00
parent 52d8cecd12
commit d6f528d090
19 changed files with 375 additions and 385 deletions

View File

@@ -42,15 +42,15 @@ func TestSetAccounts(t *testing.T) {
iscTenant := "itsyscom.com"
b10 := &engine.Balance{Value: 10, Weight: 10}
cgrAcnt1 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, cgrTenant, "account1"),
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
cgrAcnt2 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, cgrTenant, "account2"),
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
cgrAcnt3 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, cgrTenant, "account3"),
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
iscAcnt1 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, iscTenant, "account1"),
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
iscAcnt2 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, iscTenant, "account2"),
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
for _, account := range []*engine.Account{cgrAcnt1, cgrAcnt2, cgrAcnt3, iscAcnt1, iscAcnt2} {
if err := apierAcntsAcntStorage.SetAccount(account); err != nil {
t.Error(err)

View File

@@ -151,7 +151,7 @@ func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *string) error {
AccountIds: []string{tag},
}
if attr.Direction == "" {
attr.Direction = engine.OUTBOUND
attr.Direction = utils.OUT
}
aType := engine.DEBIT
// reverse the sign as it is a debit
@@ -200,7 +200,7 @@ func (self *ApierV1) EnableDisableBalance(attr *AttrAddBalance, reply *string) e
AccountIds: []string{tag},
}
if attr.Direction == "" {
attr.Direction = engine.OUTBOUND
attr.Direction = utils.OUT
}
at.SetActions(engine.Actions{
&engine.Action{
@@ -759,7 +759,7 @@ type AttrAddActionTrigger struct {
func (self *ApierV1) AddTriggeredAction(attr AttrAddActionTrigger, reply *string) error {
if attr.BalanceDirection == "" {
attr.BalanceDirection = engine.OUTBOUND
attr.BalanceDirection = utils.OUT
}
balExpiryTime, err := utils.ParseTimeDetectLayout(attr.BalanceExpiryTime, self.Config.DefaultTimezone)
if err != nil {
@@ -823,7 +823,7 @@ func (self *ApierV1) ResetTriggeredActions(attr AttrResetTriggeredAction, reply
a = &engine.Action{Id: attr.Id}
} else {
if attr.Direction == "" {
attr.Direction = engine.OUTBOUND
attr.Direction = utils.OUT
}
extraParameters, err := json.Marshal(struct {
ThresholdType string

View File

@@ -974,7 +974,7 @@ func TestApierSetActions(t *testing.T) {
if !*testLocal {
return
}
act1 := &utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: engine.OUTBOUND, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}
act1 := &utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: utils.OUT, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}
attrs1 := &utils.AttrSetActions{ActionsId: "ACTS_1", Actions: []*utils.TPAction{act1}}
reply1 := ""
if err := rater.Call("ApierV1.SetActions", attrs1, &reply1); err != nil {
@@ -993,7 +993,7 @@ func TestApierGetActions(t *testing.T) {
return
}
expectActs := []*utils.TPAction{
&utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: engine.OUTBOUND, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}}
&utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: utils.OUT, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}}
var reply []*utils.TPAction
if err := rater.Call("ApierV1.GetActions", "ACTS_1", &reply); err != nil {

View File

@@ -30,9 +30,6 @@ import (
)
const (
// Direction type
INBOUND = "*in"
OUTBOUND = "*out"
// action trigger threshold types
TRIGGER_MIN_COUNTER = "*min_counter"
TRIGGER_MAX_COUNTER = "*max_counter"
@@ -104,6 +101,9 @@ func (ub *Account) debitBalanceAction(a *Action, reset bool) error {
ub.BalanceMap = make(map[string]BalanceChain, 1)
}
found := false
if a.Direction == "" {
a.Direction = utils.OUT
}
id := a.BalanceType + a.Direction
ub.CleanExpiredBalances()
for _, b := range ub.BalanceMap[id] {
@@ -394,6 +394,9 @@ COMMIT:
}
func (ub *Account) GetDefaultMoneyBalance(direction string) *Balance {
if direction == "" {
direction = utils.OUT
}
for _, balance := range ub.BalanceMap[utils.MONETARY+direction] {
if balance.IsDefault() {
return balance
@@ -401,7 +404,7 @@ func (ub *Account) GetDefaultMoneyBalance(direction string) *Balance {
}
// create default balance
defaultBalance := &Balance{
Uuid: "DEFAULT" + utils.GenUUID(),
Uuid: utils.GenUUID(),
Weight: 0,
} // minimum weight
if ub.BalanceMap == nil {
@@ -517,7 +520,7 @@ func (ub *Account) getUnitCounter(a *Action) *UnitsCounter {
for _, uc := range ub.UnitCounters {
direction := a.Direction
if direction == "" {
direction = OUTBOUND
direction = utils.OUT
}
if uc.BalanceType == a.BalanceType && uc.Direction == direction {
return uc
@@ -534,7 +537,7 @@ func (ub *Account) countUnits(a *Action) {
if unitsCounter == nil {
direction := a.Direction
if direction == "" {
direction = OUTBOUND
direction = utils.OUT
}
unitsCounter = &UnitsCounter{BalanceType: a.BalanceType, Direction: direction}
ub.UnitCounters = append(ub.UnitCounters, unitsCounter)
@@ -556,7 +559,7 @@ func (ub *Account) initCounters() {
if a.Balance != nil {
direction := at.BalanceDirection
if direction == "" {
direction = OUTBOUND
direction = utils.OUT
}
uc, exists := ucTempMap[direction]
if !exists {

View File

@@ -84,19 +84,19 @@ func TestBalanceChainStoreRestore(t *testing.T) {
func TestAccountStorageStoreRestore(t *testing.T) {
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
accountingStorage.SetAccount(rifsBalance)
ub1, err := accountingStorage.GetAccount("other")
if err != nil || !ub1.BalanceMap[utils.MONETARY+OUTBOUND].Equal(rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND]) {
if err != nil || !ub1.BalanceMap[utils.MONETARY+utils.OUT].Equal(rifsBalance.BalanceMap[utils.MONETARY+utils.OUT]) {
t.Log("UB: ", ub1)
t.Errorf("Expected %v was %v", rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND], ub1.BalanceMap[utils.MONETARY+OUTBOUND])
t.Errorf("Expected %v was %v", rifsBalance.BalanceMap[utils.MONETARY+utils.OUT], ub1.BalanceMap[utils.MONETARY+utils.OUT])
}
}
func TestGetSecondsForPrefix(t *testing.T) {
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 200}}}}
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 200}}}}
cd := &CallDescriptor{
Category: "0",
Tenant: "vdf",
@@ -104,7 +104,7 @@ func TestGetSecondsForPrefix(t *testing.T) {
TimeEnd: time.Date(2013, 10, 4, 15, 46, 10, 0, time.UTC),
LoopIndex: 0,
DurationIndex: 10 * time.Second,
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723",
TOR: utils.VOICE,
}
@@ -123,8 +123,8 @@ func TestGetSpecialPricedSeconds(t *testing.T) {
ub1 := &Account{
Id: "OUT:CUSTOMER_1:rif",
BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1, b2},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
utils.VOICE + utils.OUT: BalanceChain{b1, b2},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
},
}
cd := &CallDescriptor{
@@ -133,7 +133,7 @@ func TestGetSpecialPricedSeconds(t *testing.T) {
TimeStart: time.Date(2013, 10, 4, 15, 46, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 10, 4, 15, 46, 60, 0, time.UTC),
LoopIndex: 0,
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723",
TOR: utils.VOICE,
}
@@ -148,14 +148,14 @@ func TestGetSpecialPricedSeconds(t *testing.T) {
func TestAccountStorageStore(t *testing.T) {
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
accountingStorage.SetAccount(rifsBalance)
result, err := accountingStorage.GetAccount(rifsBalance.Id)
if err != nil || rifsBalance.Id != result.Id ||
len(rifsBalance.BalanceMap[utils.VOICE+OUTBOUND]) < 2 || len(result.BalanceMap[utils.VOICE+OUTBOUND]) < 2 ||
!(rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].Equal(result.BalanceMap[utils.VOICE+OUTBOUND][0])) ||
!(rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1].Equal(result.BalanceMap[utils.VOICE+OUTBOUND][1])) ||
!rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND].Equal(result.BalanceMap[utils.MONETARY+OUTBOUND]) {
len(rifsBalance.BalanceMap[utils.VOICE+utils.OUT]) < 2 || len(result.BalanceMap[utils.VOICE+utils.OUT]) < 2 ||
!(rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].Equal(result.BalanceMap[utils.VOICE+utils.OUT][0])) ||
!(rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1].Equal(result.BalanceMap[utils.VOICE+utils.OUT][1])) ||
!rifsBalance.BalanceMap[utils.MONETARY+utils.OUT].Equal(result.BalanceMap[utils.MONETARY+utils.OUT]) {
t.Errorf("Expected %v was %v", rifsBalance, result)
}
}
@@ -163,7 +163,7 @@ func TestAccountStorageStore(t *testing.T) {
func TestDebitCreditZeroSecond(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 10, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1s"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -178,13 +178,13 @@ func TestDebitCreditZeroSecond(t *testing.T) {
cd := &CallDescriptor{
TimeStart: time.Date(2013, 9, 24, 10, 48, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 9, 24, 10, 48, 10, 0, time.UTC),
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Category: "0",
TOR: utils.VOICE,
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Category: "0", Value: 21}}}}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Category: "0", Value: 21}}}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
if err != nil {
@@ -194,16 +194,16 @@ func TestDebitCreditZeroSecond(t *testing.T) {
t.Logf("%+v", cc.Timespans[0])
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
}
}
func TestDebitCreditZeroMinute(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -218,15 +218,15 @@ func TestDebitCreditZeroMinute(t *testing.T) {
cd := &CallDescriptor{
TimeStart: time.Date(2013, 9, 24, 10, 48, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 9, 24, 10, 48, 10, 0, time.UTC),
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Category: "0",
TOR: utils.VOICE,
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
utils.VOICE + utils.OUT: BalanceChain{b1},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -238,10 +238,10 @@ func TestDebitCreditZeroMinute(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != time.Minute {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
t.Error("Error extracting minutes from balance: ",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
}
}
@@ -249,7 +249,7 @@ func TestDebitCreditZeroMixedMinute(t *testing.T) {
b1 := &Balance{Uuid: "testm", Value: 70, Weight: 5, DestinationIds: "NAT", RatingSubject: "*zero1m"}
b2 := &Balance{Uuid: "tests", Value: 10, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1s"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -272,8 +272,8 @@ func TestDebitCreditZeroMixedMinute(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1, b2},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
utils.VOICE + utils.OUT: BalanceChain{b1, b2},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -284,19 +284,19 @@ func TestDebitCreditZeroMixedMinute(t *testing.T) {
cc.Timespans[1].Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
t.Error("Error setting balance id to increment: ", cc.Timespans)
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
t.Logf("TS0: %+v", cc.Timespans[0])
t.Logf("TS1: %+v", cc.Timespans[1])
t.Errorf("Error extracting minutes from balance: %+v", rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1])
t.Errorf("Error extracting minutes from balance: %+v", rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1])
}
}
func TestDebitCreditNoCredit(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -324,7 +324,7 @@ func TestDebitCreditNoCredit(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.VOICE + utils.OUT: BalanceChain{b1},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -335,9 +335,9 @@ func TestDebitCreditNoCredit(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != time.Minute {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 {
t.Error("Error extracting minutes from balance: ",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
}
if len(cc.Timespans) != 1 || cc.Timespans[0].GetDuration() != time.Minute {
t.Error("Error truncating extra timespans: ", cc.Timespans)
@@ -347,7 +347,7 @@ func TestDebitCreditNoCredit(t *testing.T) {
func TestDebitCreditHasCredit(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -375,8 +375,8 @@ func TestDebitCreditHasCredit(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 110}},
utils.VOICE + utils.OUT: BalanceChain{b1},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 110}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -387,10 +387,10 @@ func TestDebitCreditHasCredit(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != time.Minute {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 30 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 30 {
t.Errorf("Error extracting minutes from balance: %+v, %+v",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
if len(cc.Timespans) != 3 || cc.Timespans[0].GetDuration() != time.Minute {
t.Error("Error truncating extra timespans: ", cc.Timespans)
@@ -400,7 +400,7 @@ func TestDebitCreditHasCredit(t *testing.T) {
func TestDebitCreditSplitMinutesMoney(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 10, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1s"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -423,8 +423,8 @@ func TestDebitCreditSplitMinutesMoney(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 50}},
utils.VOICE + utils.OUT: BalanceChain{b1},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 50}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -435,10 +435,10 @@ func TestDebitCreditSplitMinutesMoney(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != 1*time.Second {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0].Duration)
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 30 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 30 {
t.Errorf("Error extracting minutes from balance: %+v, %+v",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
if len(cc.Timespans) != 2 || cc.Timespans[0].GetDuration() != 10*time.Second || cc.Timespans[1].GetDuration() != 20*time.Second {
t.Error("Error truncating extra timespans: ", cc.Timespans[1].GetDuration())
@@ -448,7 +448,7 @@ func TestDebitCreditSplitMinutesMoney(t *testing.T) {
func TestDebitCreditMoreTimespans(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 150, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -476,7 +476,7 @@ func TestDebitCreditMoreTimespans(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.VOICE + utils.OUT: BalanceChain{b1},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -487,9 +487,9 @@ func TestDebitCreditMoreTimespans(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != time.Minute {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 30 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 30 {
t.Error("Error extracting minutes from balance: ",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
}
}
@@ -497,7 +497,7 @@ func TestDebitCreditMoreTimespansMixed(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
b2 := &Balance{Uuid: "testa", Value: 150, Weight: 5, DestinationIds: "NAT", RatingSubject: "*zero1s"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -525,7 +525,7 @@ func TestDebitCreditMoreTimespansMixed(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1, b2},
utils.VOICE + utils.OUT: BalanceChain{b1, b2},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -536,17 +536,17 @@ func TestDebitCreditMoreTimespansMixed(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != time.Minute {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue() != 130 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1].GetValue() != 130 {
t.Error("Error extracting minutes from balance: ",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1], cc.Timespans[1])
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1], cc.Timespans[1])
}
}
func TestDebitCreditNoConectFeeCredit(t *testing.T) {
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -575,7 +575,7 @@ func TestDebitCreditNoConectFeeCredit(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.VOICE + utils.OUT: BalanceChain{b1},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -583,14 +583,14 @@ func TestDebitCreditNoConectFeeCredit(t *testing.T) {
t.Error("Error showing debiting balance error: ", err)
}
if len(cc.Timespans) != 1 || rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 0 {
t.Error("Error cutting at no connect fee: ", rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND])
if len(cc.Timespans) != 1 || rifsBalance.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 0 {
t.Error("Error cutting at no connect fee: ", rifsBalance.BalanceMap[utils.MONETARY+utils.OUT])
}
}
func TestDebitCreditMoneyOnly(t *testing.T) {
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -619,7 +619,7 @@ func TestDebitCreditMoneyOnly(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "money", Value: 50}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "money", Value: 50}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -631,9 +631,9 @@ func TestDebitCreditMoneyOnly(t *testing.T) {
t.Logf("%+v", cc.Timespans[0].Increments)
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0].BalanceInfo)
}
if rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 0 {
if rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 0 {
t.Error("Error extracting minutes from balance: ",
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0])
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0])
}
if len(cc.Timespans) != 2 ||
cc.Timespans[0].GetDuration() != 10*time.Second ||
@@ -647,7 +647,7 @@ func TestDebitCreditSubjectMinutes(t *testing.T) {
cc := &CallCost{
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -672,8 +672,8 @@ func TestDebitCreditSubjectMinutes(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 350}},
utils.VOICE + utils.OUT: BalanceChain{b1},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 350}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -685,10 +685,10 @@ func TestDebitCreditSubjectMinutes(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != 10*time.Second {
t.Errorf("Error setting balance id to increment: %+v", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 180 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 280 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 180 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 280 {
t.Errorf("Error extracting minutes from balance: %+v, %+v",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
if len(cc.Timespans) != 1 || cc.Timespans[0].GetDuration() != 70*time.Second {
for _, ts := range cc.Timespans {
@@ -702,7 +702,7 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
cc := &CallCost{
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -727,7 +727,7 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 75, DestinationIds: "NAT", RatingSubject: "minu"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 75, DestinationIds: "NAT", RatingSubject: "minu"}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -738,9 +738,9 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != 10*time.Second {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 5 {
if rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 5 {
t.Errorf("Error extracting minutes from balance: %+v",
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
if len(cc.Timespans) != 1 || cc.Timespans[0].GetDuration() != 70*time.Second {
t.Error("Error truncating extra timespans: ", cc.Timespans)
@@ -752,7 +752,7 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
cc := &CallCost{
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -777,8 +777,8 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{b1},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 19500, RatingSubject: "minu"}},
utils.VOICE + utils.OUT: BalanceChain{b1},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 19500, RatingSubject: "minu"}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -790,10 +790,10 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
cc.Timespans[0].Increments[0].Duration != 10*time.Second {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 7 {
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 7 {
t.Errorf("Error extracting minutes from balance: %+v, %+v",
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
if len(cc.Timespans) != 2 || cc.Timespans[0].GetDuration() != 40*time.Second {
for _, ts := range cc.Timespans {
@@ -807,13 +807,13 @@ func TestAccountdebitBalance(t *testing.T) {
ub := &Account{
Id: "rif",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
}
newMb := &Balance{Weight: 20, DestinationIds: "NEW"}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: newMb}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: newMb}
ub.debitBalanceAction(a, false)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 3 || ub.BalanceMap[utils.VOICE+OUTBOUND][2].DestinationIds != newMb.DestinationIds {
t.Errorf("Error adding minute bucket! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+OUTBOUND]), ub.BalanceMap[utils.VOICE+OUTBOUND][2], newMb)
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 3 || ub.BalanceMap[utils.VOICE+utils.OUT][2].DestinationIds != newMb.DestinationIds {
t.Errorf("Error adding minute bucket! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+utils.OUT]), ub.BalanceMap[utils.VOICE+utils.OUT][2], newMb)
}
}
@@ -821,13 +821,13 @@ func TestAccountDisableBalance(t *testing.T) {
ub := &Account{
Id: "rif",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
}
newMb := &Balance{Weight: 20, DestinationIds: "NAT", Disabled: true}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: newMb}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: newMb}
ub.enableDisableBalanceAction(a)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].Disabled != true {
t.Errorf("Error disabling balance! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+OUTBOUND]), ub.BalanceMap[utils.VOICE+OUTBOUND][0], newMb)
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 || ub.BalanceMap[utils.VOICE+utils.OUT][0].Disabled != true {
t.Errorf("Error disabling balance! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+utils.OUT]), ub.BalanceMap[utils.VOICE+utils.OUT][0], newMb)
}
}
@@ -836,12 +836,12 @@ func TestAccountdebitBalanceExists(t *testing.T) {
ub := &Account{
Id: "rif",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.SMS + OUTBOUND: BalanceChain{&Balance{Value: 14}}, utils.DATA + OUTBOUND: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 15, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.SMS + utils.OUT: BalanceChain{&Balance{Value: 14}}, utils.DATA + utils.OUT: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 15, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
}
newMb := &Balance{Value: -10, Weight: 20, DestinationIds: "NAT"}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: newMb}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: newMb}
ub.debitBalanceAction(a, false)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 25 {
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 25 {
t.Error("Error adding minute bucket!")
}
}
@@ -850,10 +850,10 @@ func TestAccountAddMinuteNil(t *testing.T) {
ub := &Account{
Id: "rif",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.SMS + OUTBOUND: BalanceChain{&Balance{Value: 14}}, utils.DATA + OUTBOUND: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.SMS + utils.OUT: BalanceChain{&Balance{Value: 14}}, utils.DATA + utils.OUT: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
}
ub.debitBalanceAction(nil, false)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 {
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 {
t.Error("Error adding minute bucket!")
}
}
@@ -863,100 +863,100 @@ func TestAccountAddMinutBucketEmpty(t *testing.T) {
mb2 := &Balance{Value: -10, DestinationIds: "NAT"}
mb3 := &Balance{Value: -10, DestinationIds: "OTHER"}
ub := &Account{}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: mb1}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: mb1}
ub.debitBalanceAction(a, false)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 1 {
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+OUTBOUND])
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 1 {
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+utils.OUT])
}
a = &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: mb2}
a = &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: mb2}
ub.debitBalanceAction(a, false)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 1 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+OUTBOUND])
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 1 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+utils.OUT])
}
a = &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: mb3}
a = &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: mb3}
ub.debitBalanceAction(a, false)
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 {
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+OUTBOUND])
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 {
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+utils.OUT])
}
}
func TestAccountExecuteTriggeredActions(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS"}},
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS"}},
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Balance: &Balance{Value: 1}})
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
// are set to executed
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 1}})
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 1}})
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
// we can reset them
ub.ResetActionTriggers(nil)
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 120 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 30 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 120 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 30 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
}
func TestAccountExecuteTriggeredActionsBalance(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 100, ThresholdType: TRIGGER_MIN_COUNTER, ActionsId: "TEST_ACTIONS"}},
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 100, ThresholdType: TRIGGER_MIN_COUNTER, ActionsId: "TEST_ACTIONS"}},
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Balance: &Balance{Value: 1}})
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
}
func TestAccountExecuteTriggeredActionsOrder(t *testing.T) {
ub := &Account{
Id: "TEST_UB_OREDER",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS_ORDER"}},
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS_ORDER"}},
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 1}})
if len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 1 || ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 10 {
t.Error("Error executing triggered actions in order", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 1}})
if len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 1 || ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 10 {
t.Error("Error executing triggered actions in order", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
}
func TestCleanExpired(t *testing.T) {
ub := &Account{
Id: "TEST_UB_OREDER",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)},
&Balance{ExpirationDate: time.Date(2013, 7, 18, 14, 33, 0, 0, time.UTC)},
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)}}, utils.VOICE + OUTBOUND: BalanceChain{
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)}}, utils.VOICE + utils.OUT: BalanceChain{
&Balance{ExpirationDate: time.Date(2013, 7, 18, 14, 33, 0, 0, time.UTC)},
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)},
}},
}
ub.CleanExpiredBalances()
if len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 2 {
if len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 2 {
t.Error("Error cleaning expired balances!")
}
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 1 {
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 1 {
t.Error("Error cleaning expired minute buckets!")
}
}
func TestAccountUnitCounting(t *testing.T) {
ub := &Account{}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 10 {
t.Error("Error counting units")
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 {
t.Error("Error counting units")
}
@@ -964,15 +964,15 @@ func TestAccountUnitCounting(t *testing.T) {
func TestAccountUnitCountingOutbound(t *testing.T) {
ub := &Account{}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 10 {
t.Error("Error counting units")
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 {
t.Error("Error counting units")
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 30 {
t.Error("Error counting units")
}
@@ -984,11 +984,11 @@ func TestAccountUnitCountingOutboundInbound(t *testing.T) {
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 10 {
t.Errorf("Error counting units: %+v", ub.UnitCounters[0])
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 {
t.Error("Error counting units")
}
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: INBOUND, Balance: &Balance{Value: 10}})
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.IN, Balance: &Balance{Value: 10}})
if len(ub.UnitCounters) != 2 && ub.UnitCounters[1].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 || ub.UnitCounters[1].Balances[0].GetValue() != 10 {
t.Error("Error counting units")
}
@@ -997,10 +997,10 @@ func TestAccountUnitCountingOutboundInbound(t *testing.T) {
func TestAccountRefund(t *testing.T) {
ub := &Account{
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Uuid: "moneya", Value: 100},
},
utils.VOICE + OUTBOUND: BalanceChain{
utils.VOICE + utils.OUT: BalanceChain{
&Balance{Uuid: "minutea", Value: 10, Weight: 20, DestinationIds: "NAT"},
&Balance{Uuid: "minuteb", Value: 10, DestinationIds: "RET"},
},
@@ -1012,12 +1012,12 @@ func TestAccountRefund(t *testing.T) {
&Increment{Duration: 4 * time.Second, BalanceInfo: &BalanceInfo{UnitBalanceUuid: "minuteb", MoneyBalanceUuid: ""}},
}
for _, increment := range increments {
ub.refundIncrement(increment, OUTBOUND, utils.VOICE, false)
ub.refundIncrement(increment, utils.OUT, utils.VOICE, false)
}
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 104 ||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 13 ||
ub.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue() != 14 {
t.Error("Error refounding money: ", ub.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue())
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 104 ||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 13 ||
ub.BalanceMap[utils.VOICE+utils.OUT][1].GetValue() != 14 {
t.Error("Error refounding money: ", ub.BalanceMap[utils.VOICE+utils.OUT][1].GetValue())
}
}
@@ -1025,7 +1025,7 @@ func TestDebitShared(t *testing.T) {
cc := &CallCost{
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -1049,10 +1049,10 @@ func TestDebitShared(t *testing.T) {
testCallcost: cc,
}
rif := &Account{Id: "rif", BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
}}
groupie := &Account{Id: "groupie", BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
}}
sg := &SharedGroup{Id: "SG_TEST", MemberIds: []string{rif.Id, groupie.Id}, AccountParameters: map[string]*SharingParameters{"*any": &SharingParameters{Strategy: STRATEGY_MINE_RANDOM}}}
@@ -1064,12 +1064,12 @@ func TestDebitShared(t *testing.T) {
if err != nil {
t.Error("Error debiting balance: ", err)
}
if rif.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 0 {
t.Errorf("Error debiting from shared group: %+v", rif.BalanceMap[utils.MONETARY+OUTBOUND][0])
if rif.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 0 {
t.Errorf("Error debiting from shared group: %+v", rif.BalanceMap[utils.MONETARY+utils.OUT][0])
}
groupie, _ = accountingStorage.GetAccount("groupie")
if groupie.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 10 {
t.Errorf("Error debiting from shared group: %+v", groupie.BalanceMap[utils.MONETARY+OUTBOUND][0])
if groupie.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 10 {
t.Errorf("Error debiting from shared group: %+v", groupie.BalanceMap[utils.MONETARY+utils.OUT][0])
}
if len(cc.Timespans) != 1 {
@@ -1095,7 +1095,7 @@ func TestMaxDurationShared(t *testing.T) {
cc := &CallCost{
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -1119,10 +1119,10 @@ func TestMaxDurationShared(t *testing.T) {
testCallcost: cc,
}
rif := &Account{Id: "rif", BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
}}
groupie := &Account{Id: "groupie", BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
}}
sg := &SharedGroup{Id: "SG_TEST", MemberIds: []string{rif.Id, groupie.Id}, AccountParameters: map[string]*SharingParameters{"*any": &SharingParameters{Strategy: STRATEGY_MINE_RANDOM}}}
@@ -1142,7 +1142,7 @@ func TestMaxDurationShared(t *testing.T) {
func TestDebitSMS(t *testing.T) {
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -1165,8 +1165,8 @@ func TestDebitSMS(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.SMS + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
utils.SMS + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -1176,16 +1176,16 @@ func TestDebitSMS(t *testing.T) {
if cc.Timespans[0].Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.SMS+OUTBOUND][0].GetValue() != 99 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
if rifsBalance.BalanceMap[utils.SMS+utils.OUT][0].GetValue() != 99 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
t.Log(cc.Timespans[0].Increments)
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.SMS+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.SMS+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
}
func TestDebitGeneric(t *testing.T) {
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -1208,8 +1208,8 @@ func TestDebitGeneric(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.GENERIC + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
utils.GENERIC + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -1219,16 +1219,16 @@ func TestDebitGeneric(t *testing.T) {
if cc.Timespans[0].Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
}
if rifsBalance.BalanceMap[utils.GENERIC+OUTBOUND][0].GetValue() != 99 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
if rifsBalance.BalanceMap[utils.GENERIC+utils.OUT][0].GetValue() != 99 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
t.Log(cc.Timespans[0].Increments)
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.GENERIC+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.GENERIC+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
}
func TestDebitDataUnits(t *testing.T) {
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -1258,8 +1258,8 @@ func TestDebitDataUnits(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.DATA + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
utils.DATA + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
@@ -1274,16 +1274,16 @@ func TestDebitDataUnits(t *testing.T) {
if ts.Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
t.Error("Error setting balance id to increment: ", ts.Increments[0])
}
if rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue() != 20 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
if rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue() != 20 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
t.Log(ts.Increments)
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
}
func TestDebitDataMoney(t *testing.T) {
cc := &CallCost{
Direction: OUTBOUND,
Direction: utils.OUT,
Destination: "0723045326",
Timespans: []*TimeSpan{
&TimeSpan{
@@ -1312,23 +1312,23 @@ func TestDebitDataMoney(t *testing.T) {
testCallcost: cc,
}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
utils.DATA + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 0, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 160}},
utils.DATA + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 0, Weight: 5, DestinationIds: "NAT"}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 160}},
}}
var err error
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
if err != nil {
t.Error("Error debiting balance: ", err)
}
if rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 0 {
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
if rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue() != 0 ||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 0 {
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
}
}
func TestAccountGetDefaultMoneyBalanceEmpty(t *testing.T) {
acc := &Account{}
defBal := acc.GetDefaultMoneyBalance(OUTBOUND)
defBal := acc.GetDefaultMoneyBalance(utils.OUT)
if defBal == nil || len(acc.BalanceMap) != 1 || !defBal.IsDefault() {
t.Errorf("Bad default money balance: %+v", defBal)
}
@@ -1337,9 +1337,9 @@ func TestAccountGetDefaultMoneyBalanceEmpty(t *testing.T) {
func TestAccountGetDefaultMoneyBalance(t *testing.T) {
acc := &Account{}
acc.BalanceMap = make(map[string]BalanceChain)
tag := utils.MONETARY + OUTBOUND
tag := utils.MONETARY + utils.OUT
acc.BalanceMap[tag] = append(acc.BalanceMap[tag], &Balance{Weight: 10})
defBal := acc.GetDefaultMoneyBalance(OUTBOUND)
defBal := acc.GetDefaultMoneyBalance(utils.OUT)
if defBal == nil || len(acc.BalanceMap[tag]) != 2 || !defBal.IsDefault() {
t.Errorf("Bad default money balance: %+v", defBal)
}
@@ -1352,7 +1352,7 @@ func BenchmarkGetSecondForPrefix(b *testing.B) {
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
ub1 := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
ub1 := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
cd := &CallDescriptor{
Destination: "0723",
}
@@ -1365,7 +1365,7 @@ func BenchmarkGetSecondForPrefix(b *testing.B) {
func BenchmarkAccountStorageStoreRestore(b *testing.B) {
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
for i := 0; i < b.N; i++ {
accountingStorage.SetAccount(rifsBalance)
accountingStorage.GetAccount(rifsBalance.Id)
@@ -1375,7 +1375,7 @@ func BenchmarkAccountStorageStoreRestore(b *testing.B) {
func BenchmarkGetSecondsForPrefix(b *testing.B) {
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
cd := &CallDescriptor{
Destination: "0723",
}

View File

@@ -514,7 +514,7 @@ func TestActionPlansRemoveMember(t *testing.T) {
func TestActionTriggerMatchNil(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
@@ -527,7 +527,7 @@ func TestActionTriggerMatchNil(t *testing.T) {
func TestActionTriggerMatchAllBlank(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
@@ -540,12 +540,12 @@ func TestActionTriggerMatchAllBlank(t *testing.T) {
func TestActionTriggerMatchMinuteBucketBlank(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
}
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY}
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY}
if !at.Match(a) {
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
}
@@ -553,7 +553,7 @@ func TestActionTriggerMatchMinuteBucketBlank(t *testing.T) {
func TestActionTriggerMatchMinuteBucketFull(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
@@ -566,12 +566,12 @@ func TestActionTriggerMatchMinuteBucketFull(t *testing.T) {
func TestActionTriggerMatchAllFull(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
}
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
if !at.Match(a) {
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
}
@@ -579,12 +579,12 @@ func TestActionTriggerMatchAllFull(t *testing.T) {
func TestActionTriggerMatchSomeFalse(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
}
a := &Action{Direction: INBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
a := &Action{Direction: utils.IN, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
if at.Match(a) {
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
}
@@ -592,12 +592,12 @@ func TestActionTriggerMatchSomeFalse(t *testing.T) {
func TestActionTriggerMatcBalanceFalse(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
}
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 3.0)}
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 3.0)}
if at.Match(a) {
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
}
@@ -605,12 +605,12 @@ func TestActionTriggerMatcBalanceFalse(t *testing.T) {
func TestActionTriggerMatcAllFalse(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
}
a := &Action{Direction: INBOUND, BalanceType: utils.VOICE, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_COUNTER, 3)}
a := &Action{Direction: utils.IN, BalanceType: utils.VOICE, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_COUNTER, 3)}
if at.Match(a) {
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
}
@@ -618,7 +618,7 @@ func TestActionTriggerMatcAllFalse(t *testing.T) {
func TestActionTriggerMatchAll(t *testing.T) {
at := &ActionTrigger{
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
BalanceType: utils.MONETARY,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 2,
@@ -627,7 +627,7 @@ func TestActionTriggerMatchAll(t *testing.T) {
BalanceRatingSubject: "test1",
BalanceSharedGroup: "test2",
}
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "DestinationIds": "%v", "BalanceWeight": %v, "BalanceRatingSubject": "%v", "BalanceSharedGroup": "%v"}`, TRIGGER_MAX_BALANCE, 2, "NAT", 1.0, "test1", "test2")}
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "DestinationIds": "%v", "BalanceWeight": %v, "BalanceRatingSubject": "%v", "BalanceSharedGroup": "%v"}`, TRIGGER_MAX_BALANCE, 2, "NAT", 1.0, "test1", "test2")}
if !at.Match(a) {
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
}
@@ -648,7 +648,7 @@ func TestActionTriggers(t *testing.T) {
func TestActionResetTriggres(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
@@ -674,7 +674,7 @@ func TestActionResetTriggresExecutesThem(t *testing.T) {
func TestActionResetTriggresActionFilter(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
@@ -687,7 +687,7 @@ func TestActionResetTriggresActionFilter(t *testing.T) {
func TestActionSetPostpaid(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
@@ -701,7 +701,7 @@ func TestActionSetPrepaid(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
@@ -715,7 +715,7 @@ func TestActionResetPrepaid(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
@@ -723,7 +723,7 @@ func TestActionResetPrepaid(t *testing.T) {
if !ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 0 ||
len(ub.UnitCounters) != 0 ||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
ub.ActionTriggers[0].Executed == true || ub.ActionTriggers[1].Executed == true {
t.Log(ub.BalanceMap)
t.Error("Reset prepaid action failed!")
@@ -733,14 +733,14 @@ func TestActionResetPrepaid(t *testing.T) {
func TestActionResetPostpaid(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
resetAccountAction(ub, nil, nil, nil)
if ub.BalanceMap[utils.MONETARY].GetTotalValue() != 0 ||
len(ub.UnitCounters) != 0 ||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
ub.ActionTriggers[0].Executed == true || ub.ActionTriggers[1].Executed == true {
t.Error("Reset postpaid action failed!")
}
@@ -749,18 +749,18 @@ func TestActionResetPostpaid(t *testing.T) {
func TestActionTopupResetCredit(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
topupResetAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 10 ||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 10 ||
len(ub.UnitCounters) != 1 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+OUTBOUND][0])
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+utils.OUT][0])
}
}
@@ -768,18 +768,18 @@ func TestActionTopupResetCreditId(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Value: 100},
&Balance{Id: "TEST_B", Value: 15},
},
},
}
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Id: "TEST_B", Value: 10}}
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Id: "TEST_B", Value: 10}}
topupResetAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 110 ||
len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 2 {
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+OUTBOUND][0])
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 110 ||
len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 2 {
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+utils.OUT][0])
}
}
@@ -787,18 +787,18 @@ func TestActionTopupResetCreditNoId(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Value: 100},
&Balance{Id: "TEST_B", Value: 15},
},
},
}
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
topupResetAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 20 ||
len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 2 {
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+OUTBOUND][1])
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 20 ||
len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 2 {
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+utils.OUT][1])
}
}
@@ -806,94 +806,94 @@ func TestActionTopupResetMinutes(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}},
utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}},
utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
topupResetAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.VOICE+OUTBOUND].GetTotalValue() != 5 ||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 100 ||
ub.BalanceMap[utils.VOICE+utils.OUT].GetTotalValue() != 5 ||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 100 ||
len(ub.UnitCounters) != 1 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
t.Errorf("Topup reset minutes action failed: %+v", ub.BalanceMap[utils.VOICE+OUTBOUND][0])
t.Errorf("Topup reset minutes action failed: %+v", ub.BalanceMap[utils.VOICE+utils.OUT][0])
}
}
func TestActionTopupCredit(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
topupAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 110 ||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 110 ||
len(ub.UnitCounters) != 1 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
t.Error("Topup action failed!", ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue())
t.Error("Topup action failed!", ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue())
}
}
func TestActionTopupMinutes(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
topupAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.VOICE+OUTBOUND].GetTotalValue() != 15 ||
ub.BalanceMap[utils.VOICE+utils.OUT].GetTotalValue() != 15 ||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
len(ub.UnitCounters) != 1 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
t.Error("Topup minutes action failed!", ub.BalanceMap[utils.VOICE+OUTBOUND])
t.Error("Topup minutes action failed!", ub.BalanceMap[utils.VOICE+utils.OUT])
}
}
func TestActionDebitCredit(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
debitAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 90 ||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 90 ||
len(ub.UnitCounters) != 1 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
t.Error("Debit action failed!", ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue())
t.Error("Debit action failed!", ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue())
}
}
func TestActionDebitMinutes(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
debitAction(ub, nil, a, nil)
if ub.AllowNegative ||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 5 ||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 5 ||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
len(ub.UnitCounters) != 1 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
t.Error("Debit minutes action failed!", ub.BalanceMap[utils.VOICE+OUTBOUND][0])
t.Error("Debit minutes action failed!", ub.BalanceMap[utils.VOICE+utils.OUT][0])
}
}
@@ -963,16 +963,16 @@ func TestActionResetCounterCredit(t *testing.T) {
ub := &Account{
Id: "TEST_UB",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}, &UnitsCounter{BalanceType: utils.SMS, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}, &UnitsCounter{BalanceType: utils.SMS, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
}
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND}
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT}
resetCounterAction(ub, nil, a, nil)
if !ub.AllowNegative ||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
len(ub.UnitCounters) != 2 ||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
ub.ActionTriggers[0].Executed != true {
t.Error("Reset counters action failed!", ub.UnitCounters)
}
@@ -982,7 +982,7 @@ func TestActionTriggerLogging(t *testing.T) {
at := &ActionTrigger{
Id: "some_uuid",
BalanceType: utils.MONETARY,
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
ThresholdValue: 100.0,
BalanceDestinationIds: "NAT",
Weight: 10.0,
@@ -1089,7 +1089,7 @@ func TestTopupAction(t *testing.T) {
a := &Action{
ActionType: TOPUP,
BalanceType: utils.MONETARY,
Direction: OUTBOUND,
Direction: utils.OUT,
Balance: &Balance{Value: 25, DestinationIds: "RET", Weight: 20},
}
@@ -1100,8 +1100,8 @@ func TestTopupAction(t *testing.T) {
at.Execute()
afterUb, _ := accountingStorage.GetAccount("*out:vdf:minu")
initialValue := initialUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
afterValue := afterUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
initialValue := initialUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
afterValue := afterUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
if initialValue != 50 || afterValue != 75 {
t.Error("Bad topup before and after: ", initialValue, afterValue)
}
@@ -1112,7 +1112,7 @@ func TestTopupActionLoaded(t *testing.T) {
a := &Action{
ActionType: TOPUP,
BalanceType: utils.MONETARY,
Direction: OUTBOUND,
Direction: utils.OUT,
Balance: &Balance{Value: 25, DestinationIds: "RET", Weight: 20},
}
@@ -1123,8 +1123,8 @@ func TestTopupActionLoaded(t *testing.T) {
at.Execute()
afterUb, _ := accountingStorage.GetAccount("*out:vdf:minitsboy")
initialValue := initialUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
afterValue := afterUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
initialValue := initialUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
afterValue := afterUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
if initialValue != 100 || afterValue != 125 {
t.Logf("Initial: %+v", initialUb)
t.Logf("After: %+v", afterUb)

View File

@@ -628,22 +628,6 @@ func (bc BalanceChain) GetTotalValue() (total float64) {
return
}
func (bc BalanceChain) Debit(amount float64) float64 {
bc.Sort()
for i, b := range bc {
if b.IsExpired() {
continue
}
if b.GetValue() >= amount || i == len(bc)-1 { // if last one go negative
b.SubstractValue(amount)
break
}
b.SetValue(0)
amount -= b.GetValue()
}
return bc.GetTotalValue()
}
func (bc BalanceChain) Equal(o BalanceChain) bool {
if len(bc) != len(o) {
return false

View File

@@ -28,14 +28,14 @@ import (
func TestSingleResultMerge(t *testing.T) {
t1 := time.Date(2012, time.February, 2, 17, 0, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 2, 17, 1, 0, 0, time.UTC)
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc1, _ := cd.getCost()
if cc1.Cost != 61 {
t.Errorf("expected 61 was %v", cc1.Cost)
}
/*t1 = time.Date(2012, time.February, 2, 17, 1, 0, 0, time.UTC)
t2 = time.Date(2012, time.February, 2, 17, 2, 0, 0, time.UTC)
cd = &CallDescriptor{Direction: OUTBOUND, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd = &CallDescriptor{Direction: utils.OUT, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc2, _ := cd.GetCost()
if cc2.Cost != 60 {
t.Errorf("expected 60 was %v", cc2.Cost)
@@ -52,7 +52,7 @@ func TestSingleResultMerge(t *testing.T) {
func TestMultipleResultMerge(t *testing.T) {
t1 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 2, 18, 0, 0, 0, time.UTC)
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc1, _ := cd.getCost()
if cc1.Cost != 61 {
//ils.LogFull(cc1)
@@ -63,7 +63,7 @@ func TestMultipleResultMerge(t *testing.T) {
}
t1 = time.Date(2012, time.February, 2, 18, 00, 0, 0, time.UTC)
t2 = time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
cd = &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd = &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc2, _ := cd.getCost()
if cc2.Cost != 30 {
t.Errorf("expected 30 was %v", cc2.Cost)
@@ -83,7 +83,7 @@ func TestMultipleResultMerge(t *testing.T) {
func TestMultipleInputLeftMerge(t *testing.T) {
t1 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc1, _ := cd.getCost()
//log.Printf("Timing: %+v", cc1.Timespans[1].RateInterval.Timing)
//log.Printf("Rating: %+v", cc1.Timespans[1].RateInterval.Rating)
@@ -92,7 +92,7 @@ func TestMultipleInputLeftMerge(t *testing.T) {
}
/*t1 = time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
t2 = time.Date(2012, time.February, 2, 18, 02, 0, 0, time.UTC)
cd = &CallDescriptor{Direction: OUTBOUND, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd = &CallDescriptor{Direction: utils.OUT, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc2, _ := cd.getCost()
if cc2.Cost != 30 {
t.Errorf("expected 30 was %v", cc2.Cost)
@@ -109,14 +109,14 @@ func TestMultipleInputLeftMerge(t *testing.T) {
func TestMultipleInputRightMerge(t *testing.T) {
t1 := time.Date(2012, time.February, 2, 17, 58, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc1, _ := cd.getCost()
if cc1.Cost != 61 {
t.Errorf("expected 61 was %v", cc1.Cost)
}
t1 = time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
t2 = time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
cd = &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd = &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc2, _ := cd.getCost()
if cc2.Cost != 91 {
t.Errorf("expected 91 was %v", cc2.Cost)
@@ -133,7 +133,7 @@ func TestMultipleInputRightMerge(t *testing.T) {
func TestCallCostMergeEmpty(t *testing.T) {
t1 := time.Date(2012, time.February, 2, 17, 58, 0, 0, time.UTC)
t2 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
cc1, _ := cd.getCost()
cc2 := &CallCost{}
cc1.Merge(cc2)

View File

@@ -41,20 +41,20 @@ func init() {
func populateDB() {
ats := []*Action{
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}},
&Action{ActionType: "*topup", BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Weight: 20, Value: 10, DestinationIds: "NAT"}},
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}},
&Action{ActionType: "*topup", BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Weight: 20, Value: 10, DestinationIds: "NAT"}},
}
ats1 := []*Action{
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}, Weight: 10},
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}, Weight: 10},
&Action{ActionType: "*reset_account", Weight: 20},
}
minu := &Account{
Id: "*out:vdf:minu",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 50}},
utils.VOICE + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 50}},
utils.VOICE + utils.OUT: BalanceChain{
&Balance{Value: 200, DestinationIds: "NAT", Weight: 10},
&Balance{Value: 100, DestinationIds: "RET", Weight: 20},
}},
@@ -62,7 +62,7 @@ func populateDB() {
broker := &Account{
Id: "*out:vdf:broker",
BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{
utils.VOICE + utils.OUT: BalanceChain{
&Balance{Value: 20, DestinationIds: "NAT", Weight: 10, RatingSubject: "rif"},
&Balance{Value: 100, DestinationIds: "RET", Weight: 20},
}},
@@ -70,7 +70,7 @@ func populateDB() {
luna := &Account{
Id: "*out:vdf:luna",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Value: 0, Weight: 20},
}},
}
@@ -78,11 +78,11 @@ func populateDB() {
minitsboy := &Account{
Id: "*out:vdf:minitsboy",
BalanceMap: map[string]BalanceChain{
utils.VOICE + OUTBOUND: BalanceChain{
utils.VOICE + utils.OUT: BalanceChain{
&Balance{Value: 20, DestinationIds: "NAT", Weight: 10, RatingSubject: "rif"},
&Balance{Value: 100, DestinationIds: "RET", Weight: 20},
},
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Value: 100, Weight: 10},
},
},
@@ -90,14 +90,14 @@ func populateDB() {
max := &Account{
Id: "*out:cgrates.org:max",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Value: 11, Weight: 20},
}},
}
money := &Account{
Id: "*out:cgrates.org:money",
BalanceMap: map[string]BalanceChain{
utils.MONETARY + OUTBOUND: BalanceChain{
utils.MONETARY + utils.OUT: BalanceChain{
&Balance{Value: 10000, Weight: 10},
}},
}
@@ -129,7 +129,7 @@ func TestSplitSpans(t *testing.T) {
}
func TestSplitSpansWeekend(t *testing.T) {
cd := &CallDescriptor{Direction: OUTBOUND,
cd := &CallDescriptor{Direction: utils.OUT,
Category: "postpaid",
TOR: utils.VOICE,
Tenant: "foehn",
@@ -710,13 +710,13 @@ func TestMaxDebitWithAccountShared(t *testing.T) {
t.Errorf("Wrong callcost in shared debit: %+v, %v", cc, err)
}
acc, _ := cd.getAccount()
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
if len(balanceMap) != 1 || balanceMap[0].GetValue() != 0 {
t.Errorf("Wrong shared balance debited: %+v", balanceMap[0])
}
other, err := accountingStorage.GetAccount("*out:vdf:empty10")
if err != nil || other.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 7.5 {
t.Errorf("Error debiting shared balance: %+v", other.BalanceMap[utils.MONETARY+OUTBOUND][0])
if err != nil || other.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 7.5 {
t.Errorf("Error debiting shared balance: %+v", other.BalanceMap[utils.MONETARY+utils.OUT][0])
}
}
@@ -923,7 +923,7 @@ func TestDebitFromShareAndNormal(t *testing.T) {
}
cc, err := cd.MaxDebit()
acc, _ := cd.getAccount()
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
if err != nil || cc.Cost != 2.5 {
t.Errorf("Debit from share and normal error: %+v, %v", cc, err)
}
@@ -955,7 +955,7 @@ func TestDebitFromEmptyShare(t *testing.T) {
t.Errorf("Debit from empty share error: %+v, %v", cc, err)
}
acc, _ := cd.getAccount()
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
if len(balanceMap) != 2 || balanceMap[0].GetValue() != 0 || balanceMap[1].GetValue() != -2.5 {
t.Errorf("Error debiting from empty share: %+v", balanceMap[1].GetValue())
}
@@ -984,13 +984,13 @@ func TestDebitNegatve(t *testing.T) {
}
acc, _ := cd.getAccount()
//utils.PrintFull(acc)
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
if len(balanceMap) != 1 || balanceMap[0].GetValue() != -2.5 {
t.Errorf("Error debiting from empty share: %+v", balanceMap[0].GetValue())
}
cc, err = cd.MaxDebit()
acc, _ = cd.getAccount()
balanceMap = acc.BalanceMap[utils.MONETARY+OUTBOUND]
balanceMap = acc.BalanceMap[utils.MONETARY+utils.OUT]
//utils.LogFull(balanceMap)
if err != nil || cc.Cost != 2.5 {
t.Errorf("Debit from empty share error: %+v, %v", cc, err)
@@ -1073,8 +1073,8 @@ func TestMaxDebitConsumesMinutes(t *testing.T) {
LoopIndex: 0,
DurationIndex: 0}
cd1.MaxDebit()
if cd1.account.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
t.Error("Error using minutes: ", cd1.account.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
if cd1.account.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
t.Error("Error using minutes: ", cd1.account.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
}

View File

@@ -809,7 +809,7 @@ func TestLoadActions(t *testing.T) {
Id: "MINI0",
ActionType: TOPUP_RESET,
BalanceType: utils.MONETARY,
Direction: OUTBOUND,
Direction: utils.OUT,
ExpirationString: UNLIMITED,
ExtraParameters: "",
Weight: 10,
@@ -823,7 +823,7 @@ func TestLoadActions(t *testing.T) {
Id: "MINI1",
ActionType: TOPUP,
BalanceType: utils.VOICE,
Direction: OUTBOUND,
Direction: utils.OUT,
ExpirationString: UNLIMITED,
ExtraParameters: "",
Weight: 10,
@@ -845,7 +845,7 @@ func TestLoadActions(t *testing.T) {
Id: "SHARED0",
ActionType: TOPUP,
BalanceType: utils.MONETARY,
Direction: OUTBOUND,
Direction: utils.OUT,
ExpirationString: UNLIMITED,
Weight: 10,
Balance: &Balance{
@@ -995,7 +995,7 @@ func TestLoadActionTriggers(t *testing.T) {
atr := csvr.actionsTriggers["STANDARD_TRIGGER"][0]
expected := &ActionTrigger{
BalanceType: utils.VOICE,
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
ThresholdType: TRIGGER_MIN_COUNTER,
ThresholdValue: 10,
BalanceDestinationIds: "GERMANY_O2",
@@ -1009,7 +1009,7 @@ func TestLoadActionTriggers(t *testing.T) {
atr = csvr.actionsTriggers["STANDARD_TRIGGER"][1]
expected = &ActionTrigger{
BalanceType: utils.VOICE,
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
ThresholdType: TRIGGER_MAX_BALANCE,
ThresholdValue: 200,
BalanceDestinationIds: "GERMANY",

View File

@@ -32,7 +32,7 @@ func TestApRestoreFromStorage(t *testing.T) {
cd := &CallDescriptor{
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
Direction: OUTBOUND,
Direction: utils.OUT,
Category: "0",
Tenant: "CUSTOMER_1",
Subject: "rif:from:tm",
@@ -77,7 +77,7 @@ func TestFallbackDirect(t *testing.T) {
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Tenant: "CUSTOMER_2",
Subject: "danb:87.139.12.167",
Destination: "41"}
@@ -92,7 +92,7 @@ func TestFallbackMultiple(t *testing.T) {
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Tenant: "vdf",
Subject: "fall",
Destination: "0723045"}
@@ -107,7 +107,7 @@ func TestFallbackWithBackTrace(t *testing.T) {
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Tenant: "CUSTOMER_2",
Subject: "danb:87.139.12.167",
Destination: "4123"}
@@ -122,7 +122,7 @@ func TestFallbackNoDefault(t *testing.T) {
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Tenant: "vdf",
Subject: "one",
Destination: "0723"}
@@ -133,7 +133,7 @@ func TestFallbackNoDefault(t *testing.T) {
}
func TestFallbackNoInfiniteLoop(t *testing.T) {
cd := &CallDescriptor{Category: "0", Direction: OUTBOUND, Tenant: "vdf", Subject: "rif", Destination: "0721"}
cd := &CallDescriptor{Category: "0", Direction: utils.OUT, Tenant: "vdf", Subject: "rif", Destination: "0721"}
cd.LoadRatingPlans()
if len(cd.RatingInfos) != 0 {
t.Error("Error restoring activation periods: ", len(cd.RatingInfos))
@@ -141,7 +141,7 @@ func TestFallbackNoInfiniteLoop(t *testing.T) {
}
func TestFallbackNoInfiniteLoopSelf(t *testing.T) {
cd := &CallDescriptor{Category: "0", Direction: OUTBOUND, Tenant: "vdf", Subject: "inf", Destination: "0721"}
cd := &CallDescriptor{Category: "0", Direction: utils.OUT, Tenant: "vdf", Subject: "inf", Destination: "0721"}
cd.LoadRatingPlans()
if len(cd.RatingInfos) != 0 {
t.Error("Error restoring activation periods: ", len(cd.RatingInfos))

View File

@@ -21,6 +21,8 @@ package engine
import (
"testing"
"time"
"github.com/cgrates/cgrates/utils"
)
func TestGetRatingProfileForPrefix(t *testing.T) {
@@ -29,7 +31,7 @@ func TestGetRatingProfileForPrefix(t *testing.T) {
TimeEnd: time.Date(2013, 11, 18, 13, 47, 30, 0, time.UTC),
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Subject: "fallback1",
Destination: "0256098",
}
@@ -48,7 +50,7 @@ func TestGetRatingProfileForPrefixFirstEmpty(t *testing.T) {
TimeEnd: time.Date(2013, 11, 18, 13, 47, 30, 0, time.UTC),
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Subject: "fallback1",
Destination: "0256098",
}
@@ -68,7 +70,7 @@ func TestGetRatingProfileNotFound(t *testing.T) {
TimeEnd: time.Date(2015, 8, 18, 22, 06, 30, 0, time.UTC),
Tenant: "vdf",
Category: "0",
Direction: OUTBOUND,
Direction: utils.OUT,
Subject: "no_rating_profile",
Destination: "0256098",
}
@@ -84,7 +86,7 @@ func TestGetRatingProfileFoundButNoDestination(t *testing.T) {
TimeEnd: time.Date(2015, 8, 18, 22, 06, 30, 0, time.UTC),
Tenant: "cgrates.org",
Category: "call",
Direction: OUTBOUND,
Direction: utils.OUT,
Subject: "nt",
Destination: "447956",
}

View File

@@ -73,8 +73,8 @@ func TestGetDerivedMaxSessionTime(t *testing.T) {
}
b10 := &Balance{Value: 10, Weight: 10, DestinationIds: "DE_TMOBILE"}
b20 := &Balance{Value: 20, Weight: 10, DestinationIds: "DE_TMOBILE"}
rifsAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "rif"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b10}}}
dansAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "dan"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b20}}}
rifsAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "rif"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b10}}}
dansAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "dan"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b20}}}
if err := accountingStorage.SetAccount(rifsAccount); err != nil {
t.Error(err)
}
@@ -96,15 +96,15 @@ func TestGetDerivedMaxSessionTime(t *testing.T) {
ratingStorage.CacheRatingAll()
if rifStoredAcnt, err := accountingStorage.GetAccount(utils.ConcatenatedKey(utils.OUT, testTenant, "rif")); err != nil {
t.Error(err)
//} else if rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND].Equal(rifsAccount.BalanceMap[utils.VOICE+OUTBOUND]) {
// t.Errorf("Expected: %+v, received: %+v", rifsAccount.BalanceMap[utils.VOICE+OUTBOUND][0], rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0])
} else if rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != rifsAccount.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() {
t.Error("BalanceValue: ", rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
//} else if rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT].Equal(rifsAccount.BalanceMap[utils.VOICE+utils.OUT]) {
// t.Errorf("Expected: %+v, received: %+v", rifsAccount.BalanceMap[utils.VOICE+utils.OUT][0], rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0])
} else if rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != rifsAccount.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() {
t.Error("BalanceValue: ", rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
if danStoredAcnt, err := accountingStorage.GetAccount(utils.ConcatenatedKey(utils.OUT, testTenant, "dan")); err != nil {
t.Error(err)
} else if danStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != dansAccount.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() {
t.Error("BalanceValue: ", danStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
} else if danStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != dansAccount.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() {
t.Error("BalanceValue: ", danStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
}
var dcs utils.DerivedChargers
attrs := &utils.AttrDerivedChargers{Tenant: testTenant, Category: "call", Direction: "*out", Account: "dan", Subject: "dan"}
@@ -430,8 +430,8 @@ func TestGetLCR(t *testing.T) {
}
bRif12 := &Balance{Value: 40, Weight: 10, DestinationIds: dstDe.Id}
bIvo12 := &Balance{Value: 60, Weight: 10, DestinationIds: dstDe.Id}
rif12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "rif12"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{bRif12}}, AllowNegative: true}
ivo12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "ivo12"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{bIvo12}}, AllowNegative: true}
rif12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "rif12"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{bRif12}}, AllowNegative: true}
ivo12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "ivo12"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{bIvo12}}, AllowNegative: true}
for _, acnt := range []*Account{rif12sAccount, ivo12sAccount} {
if err := accountingStorage.SetAccount(acnt); err != nil {
t.Error(err)

View File

@@ -273,14 +273,14 @@ func TestDifferentUuid(t *testing.T) {
func GetUB() *Account {
uc := &UnitsCounter{
Direction: OUTBOUND,
Direction: utils.OUT,
BalanceType: utils.SMS,
Balances: BalanceChain{&Balance{Value: 1}, &Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}},
}
at := &ActionTrigger{
Id: "some_uuid",
BalanceType: utils.MONETARY,
BalanceDirection: OUTBOUND,
BalanceDirection: utils.OUT,
ThresholdValue: 100.0,
BalanceDestinationIds: "NAT",
Weight: 10.0,
@@ -291,7 +291,7 @@ func GetUB() *Account {
ub := &Account{
Id: "rif",
AllowNegative: true,
BalanceMap: map[string]BalanceChain{utils.SMS + OUTBOUND: BalanceChain{&Balance{Value: 14, ExpirationDate: zeroTime}}, utils.DATA + OUTBOUND: BalanceChain{&Balance{Value: 1024, ExpirationDate: zeroTime}}, utils.VOICE: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
BalanceMap: map[string]BalanceChain{utils.SMS + utils.OUT: BalanceChain{&Balance{Value: 14, ExpirationDate: zeroTime}}, utils.DATA + utils.OUT: BalanceChain{&Balance{Value: 1024, ExpirationDate: zeroTime}}, utils.VOICE: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
UnitCounters: []*UnitsCounter{uc, uc},
ActionTriggers: ActionTriggers{at, at, at},
}

View File

@@ -26,7 +26,7 @@ import (
func TestUnitsCounterAddBalance(t *testing.T) {
uc := &UnitsCounter{
Direction: OUTBOUND,
Direction: utils.OUT,
BalanceType: utils.SMS,
Balances: BalanceChain{&Balance{Value: 1}, &Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}},
}
@@ -38,7 +38,7 @@ func TestUnitsCounterAddBalance(t *testing.T) {
func TestUnitsCounterAddBalanceExists(t *testing.T) {
uc := &UnitsCounter{
Direction: OUTBOUND,
Direction: utils.OUT,
BalanceType: utils.SMS,
Balances: BalanceChain{&Balance{Value: 1}, &Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}},
}

View File

@@ -135,10 +135,10 @@ func TestExecuteActions(t *testing.T) {
t.Error(err)
} else if len(acnt.BalanceMap) != 2 {
t.Error("Account does not have enough balances: ", acnt.BalanceMap)
} else if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 40 {
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
} else if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != 10 {
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
} else if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 40 {
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
} else if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != 10 {
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
}
}
@@ -162,10 +162,10 @@ func TestDebit(t *testing.T) {
if err != nil {
t.Error(err)
}
if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 20 {
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 20 {
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
}
if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != 9.99 {
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != 9.99 {
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
}
}

View File

@@ -134,10 +134,10 @@ func TestExecuteActions2(t *testing.T) {
t.Error(err)
} else if len(acnt.BalanceMap) != 2 {
t.Error("Account does not have enough balances: ", acnt.BalanceMap)
} else if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 40 {
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
} else if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != 0 {
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
} else if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 40 {
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
} else if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != 0 {
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
}
}
@@ -164,10 +164,10 @@ func TestDebit2(t *testing.T) {
if len(acnt.BalanceMap) != 2 {
t.Error("Wrong number of user balances found", acnt.BalanceMap)
}
if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 20 {
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 20 {
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
}
for _, blnc := range acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND] { // Test negative balance for default one
for _, blnc := range acnt.BalanceMap[utils.MONETARY+utils.OUT] { // Test negative balance for default one
if blnc.Weight == 10 && blnc.Value != 0 {
t.Errorf("Balance with weight: %f, having value: %f ", blnc.Weight, blnc.Value)
} else if blnc.Weight == 0 && blnc.Value != -0.01 {

View File

@@ -132,8 +132,8 @@ func TestExecuteActions3(t *testing.T) {
t.Error(err)
} else if len(acnt.BalanceMap) != 1 {
t.Error("Account does not have enough balances: ", acnt.BalanceMap)
} else if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 40 {
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
} else if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 40 {
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
}
}
@@ -160,10 +160,10 @@ func TestDebit3(t *testing.T) {
if len(acnt.BalanceMap) != 2 {
t.Error("Wrong number of user balances found", acnt.BalanceMap)
}
if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 20 {
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 20 {
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
}
if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != -0.01 {
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != -0.01 {
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
}
}

View File

@@ -156,6 +156,7 @@ const (
NANOSECONDS = "nanoseconds"
SECONDS = "seconds"
OUT = "*out"
IN = "*in"
META_OUT = "*out"
META_ANY = "*any"
CDR_IMPORT = "cdr_import"