various lcr bits test

This commit is contained in:
Radu Ioan Fericean
2015-04-06 14:59:26 +03:00
parent 041646f38a
commit 4cc9789871
3 changed files with 98 additions and 13 deletions

View File

@@ -685,7 +685,7 @@ func (cd *CallDescriptor) GetLCR(stats StatsInterface) (LCRCost, error) {
}
for _, ts := range lcrCost {
if ts.Entry.Strategy == LCR_STRATEGY_STATIC {
for _, supplier := range ts.Entry.GetSuppliers() {
for _, supplier := range ts.Entry.GetParams() {
lcrCD := cd.Clone()
lcrCD.Subject = supplier
if cd.account, err = accountingStorage.GetAccount(cd.GetAccountKey()); err != nil {
@@ -751,7 +751,7 @@ func (cd *CallDescriptor) GetLCR(stats StatsInterface) (LCRCost, error) {
asr = utils.Avg(asrValues)
acd = utils.Avg(acdValues)
if ts.Entry.Strategy == LCR_STRATEGY_QOS_WITH_THRESHOLD {
qosSortParams = ts.Entry.GetQOSSortParams()
qosSortParams = ts.Entry.GetParams()
}
if ts.Entry.Strategy == LCR_STRATEGY_QOS_WITH_THRESHOLD {
// filter suppliers by qos thresholds

View File

@@ -93,14 +93,6 @@ func (lcr *LCR) Sort() {
sort.Sort(lcr)
}
func (le *LCREntry) GetSuppliers() []string {
suppliers := strings.Split(le.StrategyParams, utils.INFIELD_SEP)
for i := 0; i < len(suppliers); i++ {
suppliers[i] = strings.TrimSpace(suppliers[i])
}
return suppliers
}
func (le *LCREntry) GetQOSLimits() (minASR, maxASR float64, minACD, maxACD time.Duration) {
// MIN_ASR;MAX_ASR;MIN_ACD;MAX_ACD
params := strings.Split(le.StrategyParams, utils.INFIELD_SEP)
@@ -122,10 +114,19 @@ func (le *LCREntry) GetQOSLimits() (minASR, maxASR float64, minACD, maxACD time.
return
}
func (le *LCREntry) GetQOSSortParams() []string {
func (le *LCREntry) GetParams() []string {
// ASR;ACD
if params := strings.Split(le.StrategyParams, utils.INFIELD_SEP); len(params) > 0 {
return params
params := strings.Split(le.StrategyParams, utils.INFIELD_SEP)
// eliminate empty strings
var cleanParams []string
for _, p := range params {
p = strings.TrimSpace(p)
if p != "" {
cleanParams = append(cleanParams, p)
}
}
if len(cleanParams) > 0 {
return cleanParams
}
return []string{ASR, ACD}
}

View File

@@ -21,6 +21,7 @@ package engine
import (
"sort"
"testing"
"time"
)
func TestLcrQOSSorter(t *testing.T) {
@@ -86,3 +87,86 @@ func TestLcrQOSSorterOACD(t *testing.T) {
t.Error("Lcr qos sort failed: ", s)
}
}
func TestLcrGetQosLimitsAll(t *testing.T) {
le := &LCREntry{
StrategyParams: "1.2;2.3;45s;67m",
}
minAsr, maxAsr, minAcd, maxAcd := le.GetQOSLimits()
if minAsr != 1.2 || maxAsr != 2.3 ||
minAcd != time.Duration(45)*time.Second || maxAcd != time.Duration(67)*time.Minute {
t.Error("Wrong qos limits parsed: ", minAsr, maxAsr, minAcd, maxAcd)
}
}
func TestLcrGetQosLimitsSome(t *testing.T) {
le := &LCREntry{
StrategyParams: "1.2;;;67m",
}
minAsr, maxAsr, minAcd, maxAcd := le.GetQOSLimits()
if minAsr != 1.2 || maxAsr != -1 ||
minAcd != -1 || maxAcd != time.Duration(67)*time.Minute {
t.Error("Wrong qos limits parsed: ", minAsr, maxAsr, minAcd, maxAcd)
}
}
func TestLcrGetQosLimitsNone(t *testing.T) {
le := &LCREntry{
StrategyParams: ";;;",
}
minAsr, maxAsr, minAcd, maxAcd := le.GetQOSLimits()
if minAsr != -1 || maxAsr != -1 ||
minAcd != -1 || maxAcd != -1 {
t.Error("Wrong qos limits parsed: ", minAsr, maxAsr, minAcd, maxAcd)
}
}
func TestLcrGetQosSortParamsNone(t *testing.T) {
le := &LCREntry{
StrategyParams: "",
}
sort := le.GetParams()
if sort[0] != ASR || sort[1] != ACD {
t.Error("Wrong qos sort params parsed: ", sort)
}
}
func TestLcrGetQosSortParamsEmpty(t *testing.T) {
le := &LCREntry{
StrategyParams: ";",
}
sort := le.GetParams()
if sort[0] != ASR || sort[1] != ACD {
t.Error("Wrong qos sort params parsed: ", sort)
}
}
func TestLcrGetQosSortParamsOne(t *testing.T) {
le := &LCREntry{
StrategyParams: "ACD",
}
sort := le.GetParams()
if sort[0] != ACD || len(sort) != 1 {
t.Error("Wrong qos sort params parsed: ", sort)
}
}
func TestLcrGetQosSortParamsSpace(t *testing.T) {
le := &LCREntry{
StrategyParams: "; ",
}
sort := le.GetParams()
if sort[0] != ASR || sort[1] != ACD {
t.Error("Wrong qos sort params parsed: ", sort)
}
}
func TestLcrGetQosSortParamsFull(t *testing.T) {
le := &LCREntry{
StrategyParams: "ACD;ASR",
}
sort := le.GetParams()
if sort[0] != ACD || sort[1] != ASR {
t.Error("Wrong qos sort params parsed: ", sort)
}
}