Add *refund dynamic opt for cdrs section

This commit is contained in:
ionutboangiu
2023-12-08 11:36:48 -05:00
committed by Dan Christian Bogos
parent 9273761ed2
commit 5f4da20881
5 changed files with 31 additions and 3 deletions

View File

@@ -33,6 +33,7 @@ const (
CDRsRatesDftOpt = false
CDRsStatsDftOpt = false
CDRsThresholdsDftOpt = false
CDRsRefundDftOpt = false
CDRsRerateDftOpt = false
CDRsStoreDftOpt = true
)
@@ -45,6 +46,7 @@ type CdrsOpts struct {
Rates []*utils.DynamicBoolOpt
Stats []*utils.DynamicBoolOpt
Thresholds []*utils.DynamicBoolOpt
Refund []*utils.DynamicBoolOpt
Rerate []*utils.DynamicBoolOpt
Store []*utils.DynamicBoolOpt
}
@@ -100,12 +102,15 @@ func (cdrsOpts *CdrsOpts) loadFromJSONCfg(jsnCfg *CdrsOptsJson) {
if jsnCfg.Thresholds != nil {
cdrsOpts.Thresholds = append(cdrsOpts.Thresholds, jsnCfg.Thresholds...)
}
if jsnCfg.Store != nil {
cdrsOpts.Store = append(cdrsOpts.Store, jsnCfg.Store...)
if jsnCfg.Refund != nil {
cdrsOpts.Refund = append(cdrsOpts.Refund, jsnCfg.Refund...)
}
if jsnCfg.Rerate != nil {
cdrsOpts.Rerate = append(cdrsOpts.Rerate, jsnCfg.Rerate...)
}
if jsnCfg.Store != nil {
cdrsOpts.Store = append(cdrsOpts.Store, jsnCfg.Store...)
}
}
// loadFromJSONCfg loads Cdrs config from JsonCfg
@@ -167,6 +172,7 @@ func (cdrscfg CdrsCfg) AsMapInterface(string) any {
utils.MetaRates: cdrscfg.Opts.Rates,
utils.MetaStats: cdrscfg.Opts.Stats,
utils.MetaThresholds: cdrscfg.Opts.Thresholds,
utils.MetaRefund: cdrscfg.Opts.Refund,
utils.MetaRerate: cdrscfg.Opts.Rerate,
utils.MetaStore: cdrscfg.Opts.Store,
}
@@ -237,6 +243,10 @@ func (cdrsOpts *CdrsOpts) Clone() *CdrsOpts {
if cdrsOpts.Thresholds != nil {
thdS = utils.CloneDynamicBoolOpt(cdrsOpts.Thresholds)
}
var refund []*utils.DynamicBoolOpt
if cdrsOpts.Refund != nil {
refund = utils.CloneDynamicBoolOpt(cdrsOpts.Refund)
}
var rerate []*utils.DynamicBoolOpt
if cdrsOpts.Rerate != nil {
rerate = utils.CloneDynamicBoolOpt(cdrsOpts.Rerate)
@@ -253,6 +263,7 @@ func (cdrsOpts *CdrsOpts) Clone() *CdrsOpts {
Rates: rtS,
Stats: stS,
Thresholds: thdS,
Refund: refund,
Rerate: rerate,
Store: store,
}
@@ -305,6 +316,7 @@ type CdrsOptsJson struct {
Rates []*utils.DynamicBoolOpt `json:"*rates"`
Stats []*utils.DynamicBoolOpt `json:"*stats"`
Thresholds []*utils.DynamicBoolOpt `json:"*thresholds"`
Refund []*utils.DynamicBoolOpt `json:"*refund"`
Rerate []*utils.DynamicBoolOpt `json:"*rerate"`
Store []*utils.DynamicBoolOpt `json:"*store"`
}
@@ -351,6 +363,9 @@ func diffCdrsOptsJsonCfg(d *CdrsOptsJson, v1, v2 *CdrsOpts) *CdrsOptsJson {
if !utils.DynamicBoolOptEqual(v1.Thresholds, v2.Thresholds) {
d.Thresholds = v2.Thresholds
}
if !utils.DynamicBoolOptEqual(v1.Refund, v2.Refund) {
d.Refund = v2.Refund
}
if !utils.DynamicBoolOptEqual(v1.Rerate, v2.Rerate) {
d.Rerate = v2.Rerate
}

View File

@@ -60,6 +60,7 @@ func TestCdrsCfgloadFromJsonCfg(t *testing.T) {
Rates: []*utils.DynamicBoolOpt{},
Stats: []*utils.DynamicBoolOpt{},
Thresholds: []*utils.DynamicBoolOpt{},
Refund: []*utils.DynamicBoolOpt{},
Rerate: []*utils.DynamicBoolOpt{},
Store: []*utils.DynamicBoolOpt{},
},
@@ -209,6 +210,7 @@ func TestCdrsCfgAsMapInterface(t *testing.T) {
utils.MetaRates: []*utils.DynamicBoolOpt{},
utils.MetaStats: []*utils.DynamicBoolOpt{},
utils.MetaThresholds: []*utils.DynamicBoolOpt{},
utils.MetaRefund: []*utils.DynamicBoolOpt{},
utils.MetaRerate: []*utils.DynamicBoolOpt{},
utils.MetaStore: []*utils.DynamicBoolOpt{},
},
@@ -250,6 +252,7 @@ func TestCdrsCfgAsMapInterface2(t *testing.T) {
utils.MetaRates: []*utils.DynamicBoolOpt{},
utils.MetaStats: []*utils.DynamicBoolOpt{},
utils.MetaThresholds: []*utils.DynamicBoolOpt{},
utils.MetaRefund: []*utils.DynamicBoolOpt{},
utils.MetaRerate: []*utils.DynamicBoolOpt{},
utils.MetaStore: []*utils.DynamicBoolOpt{},
},

View File

@@ -130,6 +130,7 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) {
Rates: []*utils.DynamicBoolOpt{},
Stats: []*utils.DynamicBoolOpt{},
Thresholds: []*utils.DynamicBoolOpt{},
Refund: []*utils.DynamicBoolOpt{},
Rerate: []*utils.DynamicBoolOpt{},
Store: []*utils.DynamicBoolOpt{},
}},

View File

@@ -369,6 +369,13 @@ const CGRATES_CFG_JSON = `
// "Value": false,
// },
// ],
// "*refund": [
// {
// "Tenant": "*any",
// "FilterIDs": [],
// "Value": false,
// },
// ],
// "*rerate": [
// {
// "Tenant": "*any",

View File

@@ -332,6 +332,7 @@ func TestCgrCfgJSONDefaultsCDRS(t *testing.T) {
Rates: []*utils.DynamicBoolOpt{},
Stats: []*utils.DynamicBoolOpt{},
Thresholds: []*utils.DynamicBoolOpt{},
Refund: []*utils.DynamicBoolOpt{},
Rerate: []*utils.DynamicBoolOpt{},
Store: []*utils.DynamicBoolOpt{},
},
@@ -3986,6 +3987,7 @@ func TestV1GetConfigCdrs(t *testing.T) {
utils.MetaRates: []*utils.DynamicBoolOpt{},
utils.MetaStats: []*utils.DynamicBoolOpt{},
utils.MetaThresholds: []*utils.DynamicBoolOpt{},
utils.MetaRefund: []*utils.DynamicBoolOpt{},
utils.MetaRerate: []*utils.DynamicBoolOpt{},
utils.MetaStore: []*utils.DynamicBoolOpt{},
},
@@ -5086,7 +5088,7 @@ func TestV1GetConfigAsJSONFilterS(t *testing.T) {
func TestV1GetConfigAsJSONCdrs(t *testing.T) {
var reply string
expected := `{"cdrs":{"accounts_conns":[],"actions_conns":[],"attributes_conns":[],"chargers_conns":[],"ees_conns":[],"enabled":false,"extra_fields":[],"online_cdr_exports":null,"opts":{"*accounts":[],"*attributes":[],"*chargers":[],"*ees":[],"*rates":[],"*rerate":[],"*stats":[],"*store":[],"*thresholds":[]},"rates_conns":[],"session_cost_retries":5,"stats_conns":[],"thresholds_conns":[]}}`
expected := `{"cdrs":{"accounts_conns":[],"actions_conns":[],"attributes_conns":[],"chargers_conns":[],"ees_conns":[],"enabled":false,"extra_fields":[],"online_cdr_exports":null,"opts":{"*accounts":[],"*attributes":[],"*chargers":[],"*ees":[],"*rates":[],"*refund":[],"*rerate":[],"*stats":[],"*store":[],"*thresholds":[]},"rates_conns":[],"session_cost_retries":5,"stats_conns":[],"thresholds_conns":[]}}`
cfgCgr := NewDefaultCGRConfig()
if err := cfgCgr.V1GetConfigAsJSON(context.Background(), &SectionWithAPIOpts{Sections: []string{CDRsJSON}}, &reply); err != nil {
t.Error(err)