From 9d62d6520056efc49d7e0fcae71225724877e61d Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Thu, 2 Dec 2021 18:06:39 +0200 Subject: [PATCH] Fix routes' profileCount type --- config/config.go | 2 +- config/config_it_test.go | 2 +- config/config_test.go | 6 +++--- config/routescfg.go | 15 ++++++++------- config/routescfg_test.go | 22 +++++++++++----------- engine/routes.go | 10 +++++----- engine/routes_test.go | 12 ++++++++++++ 7 files changed, 41 insertions(+), 28 deletions(-) diff --git a/config/config.go b/config/config.go index ddd24c80e..88d03838d 100644 --- a/config/config.go +++ b/config/config.go @@ -196,7 +196,7 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) { Context: []*utils.DynamicStringOpt{}, IgnoreErrors: []*utils.DynamicBoolOpt{}, MaxCost: []*utils.DynamicInterfaceOpt{}, - ProfileCount: []*utils.DynamicIntOpt{}, + ProfileCount: []*utils.DynamicIntPointerOpt{}, Limit: []*utils.DynamicIntPointerOpt{}, Offset: []*utils.DynamicIntPointerOpt{}, Usage: []*utils.DynamicDecimalBigOpt{}, diff --git a/config/config_it_test.go b/config/config_it_test.go index 1054bceea..bb73c32a2 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -363,7 +363,7 @@ func testCGRConfigReloadSupplierS(t *testing.T) { DefaultRatio: 1, Opts: &RoutesOpts{ Context: []*utils.DynamicStringOpt{}, - ProfileCount: []*utils.DynamicIntOpt{}, + ProfileCount: []*utils.DynamicIntPointerOpt{}, IgnoreErrors: []*utils.DynamicBoolOpt{}, MaxCost: []*utils.DynamicInterfaceOpt{}, Limit: []*utils.DynamicIntPointerOpt{}, diff --git a/config/config_test.go b/config/config_test.go index 2f30c93e2..4fe8770b7 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -736,7 +736,7 @@ func TestCgrCfgJSONDefaultRouteSCfg(t *testing.T) { DefaultRatio: 1, Opts: &RoutesOpts{ Context: []*utils.DynamicStringOpt{}, - ProfileCount: []*utils.DynamicIntOpt{}, + ProfileCount: []*utils.DynamicIntPointerOpt{}, IgnoreErrors: []*utils.DynamicBoolOpt{}, MaxCost: []*utils.DynamicInterfaceOpt{}, Limit: []*utils.DynamicIntPointerOpt{}, @@ -1957,7 +1957,7 @@ func TestRouteSConfig(t *testing.T) { NestedFields: false, Opts: &RoutesOpts{ Context: []*utils.DynamicStringOpt{}, - ProfileCount: []*utils.DynamicIntOpt{}, + ProfileCount: []*utils.DynamicIntPointerOpt{}, IgnoreErrors: []*utils.DynamicBoolOpt{}, MaxCost: []*utils.DynamicInterfaceOpt{}, Limit: []*utils.DynamicIntPointerOpt{}, @@ -4438,7 +4438,7 @@ func TestV1GetConfigRoutes(t *testing.T) { utils.DefaultRatioCfg: 1, utils.OptsCfg: map[string]interface{}{ utils.OptsContext: []*utils.DynamicStringOpt{}, - utils.MetaProfileCountCfg: []*utils.DynamicIntOpt{}, + utils.MetaProfileCountCfg: []*utils.DynamicIntPointerOpt{}, utils.MetaIgnoreErrorsCfg: []*utils.DynamicBoolOpt{}, utils.MetaMaxCostCfg: []*utils.DynamicInterfaceOpt{}, utils.MetaLimitCfg: []*utils.DynamicIntPointerOpt{}, diff --git a/config/routescfg.go b/config/routescfg.go index 4c3ce9369..df22d8472 100644 --- a/config/routescfg.go +++ b/config/routescfg.go @@ -25,11 +25,12 @@ import ( "github.com/cgrates/cgrates/utils" ) +var RoutesProfileCountDftOpt = utils.IntPointer(1) + const ( RoutesContextDftOpt = "*routes" RoutesIgnoreErrorsDftOpt = false RoutesMaxCostDftOpt = utils.EmptyString - RoutesProfileCountDftOpt = 1 RoutesUsageDftOpt = time.Minute ) @@ -39,7 +40,7 @@ type RoutesOpts struct { MaxCost []*utils.DynamicInterfaceOpt Limit []*utils.DynamicIntPointerOpt Offset []*utils.DynamicIntPointerOpt - ProfileCount []*utils.DynamicIntOpt + ProfileCount []*utils.DynamicIntPointerOpt Usage []*utils.DynamicDecimalBigOpt } @@ -89,7 +90,7 @@ func (rtsOpts *RoutesOpts) loadFromJSONCfg(jsnCfg *RoutesOptsJson) (err error) { rtsOpts.Offset = append(rtsOpts.Offset, utils.IntToIntPointerDynamicOpts(jsnCfg.Offset)...) } if jsnCfg.ProfileCount != nil { - rtsOpts.ProfileCount = append(rtsOpts.ProfileCount, jsnCfg.ProfileCount...) + rtsOpts.ProfileCount = append(rtsOpts.ProfileCount, utils.IntToIntPointerDynamicOpts(jsnCfg.ProfileCount)...) } if jsnCfg.Usage != nil { var usage []*utils.DynamicDecimalBigOpt @@ -159,9 +160,9 @@ func (rts *RoutesOpts) Clone() (cln *RoutesOpts) { if rts.MaxCost != nil { maxCost = utils.CloneDynamicInterfaceOpt(rts.MaxCost) } - var profileCount []*utils.DynamicIntOpt + var profileCount []*utils.DynamicIntPointerOpt if rts.ProfileCount != nil { - profileCount = utils.CloneDynamicIntOpt(rts.ProfileCount) + profileCount = utils.CloneDynamicIntPointerOpt(rts.ProfileCount) } var limit []*utils.DynamicIntPointerOpt if rts.Limit != nil { @@ -318,8 +319,8 @@ func diffRoutesOptsJsonCfg(d *RoutesOptsJson, v1, v2 *RoutesOpts) *RoutesOptsJso if !utils.DynamicBoolOptEqual(v1.IgnoreErrors, v2.IgnoreErrors) { d.IgnoreErrors = v2.IgnoreErrors } - if !utils.DynamicIntOptEqual(v1.ProfileCount, v2.ProfileCount) { - d.ProfileCount = v2.ProfileCount + if !utils.DynamicIntPointerOptEqual(v1.ProfileCount, v2.ProfileCount) { + d.ProfileCount = utils.IntPointerToIntDynamicOpts(v2.ProfileCount) } if !utils.DynamicDecimalBigOptEqual(v1.Usage, v2.Usage) { d.Usage = utils.DecimalBigToStringDynamicOpts(v2.Usage) diff --git a/config/routescfg_test.go b/config/routescfg_test.go index ec896218a..fe2e76e78 100644 --- a/config/routescfg_test.go +++ b/config/routescfg_test.go @@ -56,7 +56,7 @@ func TestRouteSCfgloadFromJsonCfg(t *testing.T) { NestedFields: true, Opts: &RoutesOpts{ Context: []*utils.DynamicStringOpt{}, - ProfileCount: []*utils.DynamicIntOpt{}, + ProfileCount: []*utils.DynamicIntPointerOpt{}, IgnoreErrors: []*utils.DynamicBoolOpt{}, MaxCost: []*utils.DynamicInterfaceOpt{}, Limit: []*utils.DynamicIntPointerOpt{}, @@ -115,7 +115,7 @@ func TestRouteSCfgAsMapInterface(t *testing.T) { utils.OptsContext: []*utils.DynamicStringOpt{}, utils.MetaLimitCfg: []*utils.DynamicIntPointerOpt{}, utils.MetaOffsetCfg: []*utils.DynamicIntPointerOpt{}, - utils.MetaProfileCountCfg: []*utils.DynamicIntOpt{}, + utils.MetaProfileCountCfg: []*utils.DynamicIntPointerOpt{}, utils.MetaIgnoreErrorsCfg: []*utils.DynamicBoolOpt{}, utils.MetaMaxCostCfg: []*utils.DynamicInterfaceOpt{}, utils.MetaUsage: []*utils.DynamicDecimalBigOpt{}, @@ -163,7 +163,7 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) { utils.OptsContext: []*utils.DynamicStringOpt{}, utils.MetaLimitCfg: []*utils.DynamicIntPointerOpt{}, utils.MetaOffsetCfg: []*utils.DynamicIntPointerOpt{}, - utils.MetaProfileCountCfg: []*utils.DynamicIntOpt{}, + utils.MetaProfileCountCfg: []*utils.DynamicIntPointerOpt{}, utils.MetaIgnoreErrorsCfg: []*utils.DynamicBoolOpt{}, utils.MetaMaxCostCfg: []*utils.DynamicInterfaceOpt{}, utils.MetaUsage: []*utils.DynamicDecimalBigOpt{}, @@ -256,9 +256,9 @@ func TestDiffRouteSJsonCfg(t *testing.T) { Value: utils.IntPointer(2), }, }, - ProfileCount: []*utils.DynamicIntOpt{ + ProfileCount: []*utils.DynamicIntPointerOpt{ { - Value: 1, + Value: utils.IntPointer(1), }, }, Usage: []*utils.DynamicDecimalBigOpt{ @@ -309,9 +309,9 @@ func TestDiffRouteSJsonCfg(t *testing.T) { Value: utils.IntPointer(3), }, }, - ProfileCount: []*utils.DynamicIntOpt{ + ProfileCount: []*utils.DynamicIntPointerOpt{ { - Value: 2, + Value: utils.IntPointer(2), }, }, Usage: []*utils.DynamicDecimalBigOpt{ @@ -430,9 +430,9 @@ func TestRouteSCloneSection(t *testing.T) { Value: utils.IntPointer(1), }, }, - ProfileCount: []*utils.DynamicIntOpt{ + ProfileCount: []*utils.DynamicIntPointerOpt{ { - Value: 1, + Value: utils.IntPointer(1), }, }, }, @@ -475,9 +475,9 @@ func TestRouteSCloneSection(t *testing.T) { Value: utils.IntPointer(1), }, }, - ProfileCount: []*utils.DynamicIntOpt{ + ProfileCount: []*utils.DynamicIntPointerOpt{ { - Value: 1, + Value: utils.IntPointer(1), }, }, }, diff --git a/engine/routes.go b/engine/routes.go index 337041850..f243d1f32 100644 --- a/engine/routes.go +++ b/engine/routes.go @@ -386,13 +386,13 @@ func (rpS *RouteS) sortedRoutesForEvent(ctx *context.Context, tnt string, args * return } prfCount := len(rPrfs) // if the option is not present return for all profiles - var prfCountOpt int - if prfCountOpt, err = GetIntOpts(ctx, tnt, args, rpS.fltrS, rpS.cfg.RouteSCfg().Opts.ProfileCount, - config.RoutesProfileCountDftOpt, utils.OptsRoutesProfileCount); err != nil { + var prfCountOpt *int + if prfCountOpt, err = GetIntPointerOpts(ctx, tnt, args, rpS.fltrS, rpS.cfg.RouteSCfg().Opts.ProfileCount, + utils.OptsRoutesProfileCount); err != nil { return } - if prfCount > prfCountOpt { // it has the option and is smaller that the current number of profiles - prfCount = prfCountOpt + if prfCountOpt != nil || prfCount > *prfCountOpt { // it has the option and is smaller that the current number of profiles + prfCount = *prfCountOpt } var extraOpts *optsGetRoutes if extraOpts, err = newOptsGetRoutes(ctx, args, rpS.fltrS, rpS.cfg.RouteSCfg().Opts); err != nil { // convert routes arguments into internal options used to limit data diff --git a/engine/routes_test.go b/engine/routes_test.go index fca0721be..94f374f43 100644 --- a/engine/routes_test.go +++ b/engine/routes_test.go @@ -94,6 +94,9 @@ var ( "PddInterval": "1s", utils.Weight: "20.0", }, + APIOpts: map[string]interface{}{ + utils.OptsRoutesProfileCount: 1, + }, }, { //matching RouteProfile2 Tenant: "cgrates.org", @@ -105,6 +108,9 @@ var ( "PddInterval": "1s", utils.Weight: "20.0", }, + APIOpts: map[string]interface{}{ + utils.OptsRoutesProfileCount: 1, + }, }, { //matching RouteProfilePrefix Tenant: "cgrates.org", @@ -112,6 +118,9 @@ var ( Event: map[string]interface{}{ "Route": "RouteProfilePrefix", }, + APIOpts: map[string]interface{}{ + utils.OptsRoutesProfileCount: 1, + }, }, { //matching Tenant: "cgrates.org", @@ -120,6 +129,9 @@ var ( "UsageInterval": "1s", "PddInterval": "1s", }, + APIOpts: map[string]interface{}{ + utils.OptsRoutesProfileCount: 1, + }, }, } )