mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 05:09:54 +05:00
various lcr bits test
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user