Remove RSRSep opt from general section

- allows RSRParser to be split gracefully from config (was depending on
  RSRSep, which was retrieved from the global config variable)
- default separator (;) was the only one used except for splitting
  inline attribute values (where ANDSep is used)
This commit is contained in:
ionutboangiu
2025-02-14 14:44:48 +02:00
committed by Dan Christian Bogos
parent c60712f454
commit 36a7d174ab
152 changed files with 841 additions and 878 deletions

View File

@@ -519,7 +519,7 @@ type ArgsActRemoveBalances struct {
APIOpts map[string]any
}
func (ap *Account) Set(path []string, val any, newBranch bool, _ string) (err error) {
func (ap *Account) Set(path []string, val any, newBranch bool) (err error) {
switch len(path) {
case 0:
return ErrWrongPath

View File

@@ -992,146 +992,146 @@ func TestAccountSet(t *testing.T) {
},
},
}
if err := acc.Set([]string{}, "", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{}, "", false); err != ErrWrongPath {
t.Error(err)
}
if err := acc.Set([]string{"NotAField"}, "", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{"NotAField"}, "", false); err != ErrWrongPath {
t.Error(err)
}
if err := acc.Set([]string{"NotAField", "1"}, "", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{"NotAField", "1"}, "", false); err != ErrWrongPath {
t.Error(err)
}
expErr := `malformed map pair: <"bal">`
if err := acc.Set([]string{Opts}, "bal", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Opts}, "bal", false); err == nil || err.Error() != expErr {
t.Error(err)
}
if err := acc.Set([]string{Opts}, "bal:val;bal2:val2", false, EmptyString); err != nil {
if err := acc.Set([]string{Opts}, "bal:val;bal2:val2", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Opts, "bal3"}, "val2", false, EmptyString); err != nil {
if err := acc.Set([]string{Opts, "bal3"}, "val2", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Opts + "[bal4]"}, "val2", false, EmptyString); err != nil {
if err := acc.Set([]string{Opts + "[bal4]"}, "val2", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Opts + "[bal5]", "bal6"}, "val3", false, EmptyString); err != nil {
if err := acc.Set([]string{Opts + "[bal5]", "bal6"}, "val3", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Tenant}, "cgrates.org", false, EmptyString); err != nil {
if err := acc.Set([]string{Tenant}, "cgrates.org", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{ID}, "ID", false, EmptyString); err != nil {
if err := acc.Set([]string{ID}, "ID", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false, EmptyString); err != nil {
if err := acc.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{ThresholdIDs}, "TH1", false, EmptyString); err != nil {
if err := acc.Set([]string{ThresholdIDs}, "TH1", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Weights}, ";0", false, EmptyString); err != nil {
if err := acc.Set([]string{Weights}, ";0", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Blockers}, ";0", false, EmptyString); err != nil {
if err := acc.Set([]string{Blockers}, ";0", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances + "[bal1]", ID}, "bal1", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances + "[bal1]", ID}, "bal1", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Type}, MetaConcrete, false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Type}, MetaConcrete, false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Opts}, "", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Opts}, "", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]"}, "val3", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]"}, "val3", false); err != ErrWrongPath {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]", ""}, "val3", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{Balances, "bal1", Opts + "bal7]", ""}, "val3", false); err != ErrWrongPath {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Opts + "[bal7]"}, "val3", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Opts + "[bal7]"}, "val3", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Opts + "[bal8]", "bal9"}, "val3", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Opts + "[bal8]", "bal9"}, "val3", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Opts, "bal10"}, "val3", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Opts, "bal10"}, "val3", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", FilterIDs}, "*string:~*req.Account:1001", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", FilterIDs}, "*string:~*req.Account:1001", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", AttributeIDs}, "Attr1;Attr2", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", AttributeIDs}, "Attr1;Attr2", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", RateProfileIDs}, "Attr1;Attr2", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", RateProfileIDs}, "Attr1;Attr2", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Units}, "10", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Units}, "10", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Weights}, ";10", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Weights}, ";10", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", Blockers}, ";false", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", Blockers}, ";false", false); err != nil {
t.Error(err)
}
expErr = `invalid key: <1> for BalanceUnitFactors`
if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "1", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "1", false); err == nil || err.Error() != expErr {
t.Error(err)
}
expErr = `can't convert <a> to decimal`
if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "a;a", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "a;a", false); err == nil || err.Error() != expErr {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "fltr1;10", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", UnitFactors}, "fltr1;10", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", UnitFactors, "Wrong"}, "fltr1;10", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{Balances, "bal1", UnitFactors, "Wrong"}, "fltr1;10", false); err != ErrWrongPath {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", UnitFactors, Factor}, "101", true, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", UnitFactors, Factor}, "101", true); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", UnitFactors, FilterIDs}, "fltr1", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", UnitFactors, FilterIDs}, "fltr1", false); err != nil {
t.Error(err)
}
expErr = `invalid key: <1> for BalanceCostIncrements`
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "1", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "1", false); err == nil || err.Error() != expErr {
t.Error(err)
}
expErr = `can't convert <a> to decimal`
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;a;10", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;a;10", false); err == nil || err.Error() != expErr {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;a;10;10", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;a;10;10", false); err == nil || err.Error() != expErr {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;a", false, EmptyString); err == nil || err.Error() != expErr {
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;a", false); err == nil || err.Error() != expErr {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;10", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", CostIncrements}, "fltr1;10;10;10", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements, FixedFee}, "101", true, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", CostIncrements, FixedFee}, "101", true); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements, RecurrentFee}, "101", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", CostIncrements, RecurrentFee}, "101", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements, Increment}, "101", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", CostIncrements, Increment}, "101", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements, FilterIDs}, "fltr1", false, EmptyString); err != nil {
if err := acc.Set([]string{Balances, "bal1", CostIncrements, FilterIDs}, "fltr1", false); err != nil {
t.Error(err)
}
if err := acc.Set([]string{Balances, "bal1", CostIncrements, "Wrong"}, "fltr1", false, EmptyString); err != ErrWrongPath {
if err := acc.Set([]string{Balances, "bal1", CostIncrements, "Wrong"}, "fltr1", false); err != ErrWrongPath {
t.Error(err)
}

View File

@@ -150,6 +150,7 @@ const (
CSVSep = ','
FallbackSep = ';'
InfieldSep = ";"
RSRSep = ";"
MetaPipe = "*|"
FieldsSep = ","
InInFieldSep = ":"
@@ -1867,7 +1868,6 @@ const (
LockingTimeoutCfg = "locking_timeout"
DigestSeparatorCfg = "digest_separator"
DigestEqualCfg = "digest_equal"
RSRSepCfg = "rsr_separator"
MaxParallelConnsCfg = "max_parallel_conns"
EEsConnsCfg = "ees_conns"
DecimalMaxScaleCfg = "decimal_max_scale"

View File

@@ -669,7 +669,7 @@ type RemoveRPrfRates struct {
APIOpts map[string]any
}
func (rp *RateProfile) Set(path []string, val any, newBranch bool, _ string) (err error) {
func (rp *RateProfile) Set(path []string, val any, newBranch bool) (err error) {
if len(path) == 0 {
return ErrWrongPath
}

View File

@@ -1802,81 +1802,81 @@ func TestRateProfile(t *testing.T) {
},
},
}
if err := rp.Set([]string{}, "", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{}, "", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{"NotAField"}, "", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{"NotAField"}, "", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{"NotAField", "1"}, "", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{"NotAField", "1"}, "", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{Tenant}, "cgrates.org", false, EmptyString); err != nil {
if err := rp.Set([]string{Tenant}, "cgrates.org", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{ID}, ID, false, EmptyString); err != nil {
if err := rp.Set([]string{ID}, ID, false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false, EmptyString); err != nil {
if err := rp.Set([]string{FilterIDs}, "fltr1;*string:~*req.Account:1001", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Weights}, ";10", false, EmptyString); err != nil {
if err := rp.Set([]string{Weights}, ";10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{MinCost}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{MinCost}, "10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{MaxCost}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{MaxCost}, "10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{MaxCostStrategy}, "strategy", false, EmptyString); err != nil {
if err := rp.Set([]string{MaxCostStrategy}, "strategy", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates + "[rat1]", ID}, "rat1", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates + "[rat1]", ID}, "rat1", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", FilterIDs}, "fltr1", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", FilterIDs}, "fltr1", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", Weights}, ";20", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", Weights}, ";20", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", ActivationTimes}, "* * * * *", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", ActivationTimes}, "* * * * *", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", Blocker}, "true", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", Blocker}, "true", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", "Wrong"}, "true", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{Rates, "rat1", "Wrong"}, "true", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path"}, "true", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path"}, "true", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path", "2"}, "true", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{Rates, "rat1", "Wrong", "Path", "2"}, "true", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", IntervalRates, "Wrong"}, "true", false, EmptyString); err != ErrWrongPath {
if err := rp.Set([]string{Rates, "rat1", IntervalRates, "Wrong"}, "true", false); err != ErrWrongPath {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", IntervalRates, IntervalStart}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", IntervalRates, IntervalStart}, "10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", IntervalRates, FixedFee}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", IntervalRates, FixedFee}, "10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", IntervalRates, RecurrentFee}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", IntervalRates, RecurrentFee}, "10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", IntervalRates, Unit}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", IntervalRates, Unit}, "10", false); err != nil {
t.Error(err)
}
if err := rp.Set([]string{Rates, "rat1", IntervalRates, Increment}, "10", false, EmptyString); err != nil {
if err := rp.Set([]string{Rates, "rat1", IntervalRates, Increment}, "10", false); err != nil {
t.Error(err)
}