From 4cc9789871e056f073b11316491744d28f461c8a Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Mon, 6 Apr 2015 14:59:26 +0300 Subject: [PATCH] various lcr bits test --- engine/calldesc.go | 4 +-- engine/lcr.go | 23 +++++++------ engine/lcr_test.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 13 deletions(-) diff --git a/engine/calldesc.go b/engine/calldesc.go index 50f4dd8c4..64c019bd6 100644 --- a/engine/calldesc.go +++ b/engine/calldesc.go @@ -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 diff --git a/engine/lcr.go b/engine/lcr.go index 9bdd4f54c..e69c71cbc 100644 --- a/engine/lcr.go +++ b/engine/lcr.go @@ -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} } diff --git a/engine/lcr_test.go b/engine/lcr_test.go index cf4837ac7..d4f867134 100644 --- a/engine/lcr_test.go +++ b/engine/lcr_test.go @@ -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) + } +}