mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 02:26:26 +05:00
Updated integration tests
This commit is contained in:
committed by
Dan Christian Bogos
parent
6a3c682f42
commit
fca363623e
@@ -296,9 +296,11 @@ func testLoadersGetAccount(t *testing.T) {
|
||||
Weight: 20,
|
||||
},
|
||||
},
|
||||
Opts: make(map[string]interface{}),
|
||||
Balances: map[string]*utils.Balance{
|
||||
"MonetaryBalance": {
|
||||
ID: "MonetaryBalance",
|
||||
ID: "MonetaryBalance",
|
||||
Opts: make(map[string]interface{}),
|
||||
Weights: utils.DynamicWeights{
|
||||
{
|
||||
Weight: 10,
|
||||
@@ -370,6 +372,7 @@ func testLoadersGetActionProfile(t *testing.T) {
|
||||
{
|
||||
ID: "TOPUP",
|
||||
Type: utils.MetaAddBalance,
|
||||
Opts: make(map[string]interface{}),
|
||||
Diktats: []*engine.APDiktat{
|
||||
{
|
||||
Path: "*balance.TestBalance.Units",
|
||||
@@ -482,14 +485,16 @@ func testLoadersGetDispatcherProfile(t *testing.T) {
|
||||
}
|
||||
|
||||
expDspPrf := engine.DispatcherProfile{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "DSP1",
|
||||
FilterIDs: []string{"FLTR_ACCOUNT_1001"},
|
||||
Strategy: utils.MetaWeight,
|
||||
Tenant: "cgrates.org",
|
||||
ID: "DSP1",
|
||||
FilterIDs: []string{"FLTR_ACCOUNT_1001"},
|
||||
Strategy: utils.MetaWeight,
|
||||
StrategyParams: make(map[string]interface{}),
|
||||
Hosts: engine.DispatcherHostProfiles{
|
||||
{
|
||||
ID: "ALL",
|
||||
Weight: 20,
|
||||
Params: make(map[string]interface{}),
|
||||
},
|
||||
},
|
||||
Weight: 10,
|
||||
|
||||
@@ -1211,7 +1211,7 @@ const CGRATES_CFG_JSON = `
|
||||
"fields": [
|
||||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||||
{"tag": "Type", "path": "Rules.Type", "type": "*variable", "value": "~*req.2"},
|
||||
{"tag": "Type", "path": "Rules.Type", "type": "*variable", "value": "~*req.2", "new_branch":true},
|
||||
{"tag": "Element", "path": "Rules.Element", "type": "*variable", "value": "~*req.3"},
|
||||
{"tag": "Values", "path": "Rules.Values", "type": "*variable", "value": "~*req.4"},
|
||||
],
|
||||
|
||||
@@ -1168,15 +1168,16 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Value: utils.StringPointer("~*req.1"),
|
||||
Mandatory: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("Type"),
|
||||
Path: utils.StringPointer("Type"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.2")},
|
||||
Path: utils.StringPointer("Rules.Type"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.2"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("Element"),
|
||||
Path: utils.StringPointer("Element"),
|
||||
Path: utils.StringPointer("Rules.Element"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.3")},
|
||||
{Tag: utils.StringPointer("Values"),
|
||||
Path: utils.StringPointer("Values"),
|
||||
Path: utils.StringPointer("Rules.Values"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.4")},
|
||||
},
|
||||
@@ -1204,19 +1205,20 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.3")},
|
||||
{Tag: utils.StringPointer("AttributeFilterIDs"),
|
||||
Path: utils.StringPointer("AttributeFilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.4")},
|
||||
Path: utils.StringPointer("Attributes.FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.4"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("Path"),
|
||||
Path: utils.StringPointer(utils.Path),
|
||||
Path: utils.StringPointer("Attributes." + utils.Path),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.5")},
|
||||
{Tag: utils.StringPointer("Type"),
|
||||
Path: utils.StringPointer("Type"),
|
||||
Path: utils.StringPointer("Attributes.Type"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
{Tag: utils.StringPointer("Value"),
|
||||
Path: utils.StringPointer("Value"),
|
||||
Path: utils.StringPointer("Attributes.Value"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
{Tag: utils.StringPointer("Blocker"),
|
||||
@@ -1308,11 +1310,12 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
{Tag: utils.StringPointer("MetricIDs"),
|
||||
Path: utils.StringPointer("MetricIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
Path: utils.StringPointer("Metrics.MetricID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("MetricFilterIDs"),
|
||||
Path: utils.StringPointer("MetricFilterIDs"),
|
||||
Path: utils.StringPointer("Metrics.FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
{Tag: utils.StringPointer("Blocker"),
|
||||
@@ -1408,39 +1411,40 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.5")},
|
||||
{Tag: utils.StringPointer("RouteID"),
|
||||
Path: utils.StringPointer("RouteID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
Path: utils.StringPointer("Routes.ID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("RouteFilterIDs"),
|
||||
Path: utils.StringPointer("RouteFilterIDs"),
|
||||
Path: utils.StringPointer("Routes.FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
{Tag: utils.StringPointer("RouteAccountIDs"),
|
||||
Path: utils.StringPointer("RouteAccountIDs"),
|
||||
Path: utils.StringPointer("Routes.AccountIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
{Tag: utils.StringPointer("RouteRateProfileIDs"),
|
||||
Path: utils.StringPointer("RouteRateProfileIDs"),
|
||||
Path: utils.StringPointer("Routes.RateProfileIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
{Tag: utils.StringPointer("RouteResourceIDs"),
|
||||
Path: utils.StringPointer("RouteResourceIDs"),
|
||||
Path: utils.StringPointer("Routes.ResourceIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
{Tag: utils.StringPointer("RouteStatIDs"),
|
||||
Path: utils.StringPointer("RouteStatIDs"),
|
||||
Path: utils.StringPointer("Routes.StatIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
{Tag: utils.StringPointer("RouteWeights"),
|
||||
Path: utils.StringPointer("RouteWeights"),
|
||||
Path: utils.StringPointer("Routes.Weights"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.12")},
|
||||
{Tag: utils.StringPointer("RouteBlocker"),
|
||||
Path: utils.StringPointer("RouteBlocker"),
|
||||
Path: utils.StringPointer("Routes.Blocker"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.13")},
|
||||
{Tag: utils.StringPointer("RouteParameters"),
|
||||
Path: utils.StringPointer("RouteParameters"),
|
||||
Path: utils.StringPointer("Routes.RouteParameters"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
},
|
||||
@@ -1504,27 +1508,28 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.4")},
|
||||
{Tag: utils.StringPointer("StrategyParameters"),
|
||||
Path: utils.StringPointer("StrategyParameters"),
|
||||
Path: utils.StringPointer("StrategyParams"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.5")},
|
||||
{Tag: utils.StringPointer("ConnID"),
|
||||
Path: utils.StringPointer("ConnID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
Path: utils.StringPointer("Hosts.ID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("ConnFilterIDs"),
|
||||
Path: utils.StringPointer("ConnFilterIDs"),
|
||||
Path: utils.StringPointer("Hosts.FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
{Tag: utils.StringPointer("ConnWeight"),
|
||||
Path: utils.StringPointer("ConnWeight"),
|
||||
Path: utils.StringPointer("Hosts.Weight"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
{Tag: utils.StringPointer("ConnBlocker"),
|
||||
Path: utils.StringPointer("ConnBlocker"),
|
||||
Path: utils.StringPointer("Hosts.Blocker"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
{Tag: utils.StringPointer("ConnParameters"),
|
||||
Path: utils.StringPointer("ConnParameters"),
|
||||
Path: utils.StringPointer("Hosts.Params"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
},
|
||||
@@ -1627,46 +1632,52 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Path: utils.StringPointer("MaxCostStrategy"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
{Tag: utils.StringPointer("RateID"),
|
||||
Path: utils.StringPointer("RateID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
{Tag: utils.StringPointer("RateFilterIDs"),
|
||||
Path: utils.StringPointer("RateFilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
{Tag: utils.StringPointer("RateActivationTimes"),
|
||||
Path: utils.StringPointer("RateActivationTimes"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].ActivationTimes"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
{Tag: utils.StringPointer("RateWeights"),
|
||||
Path: utils.StringPointer("RateWeights"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].Weights"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
{Tag: utils.StringPointer("RateBlocker"),
|
||||
Path: utils.StringPointer("RateBlocker"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].Blocker"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
{Tag: utils.StringPointer("RateIntervalStart"),
|
||||
Path: utils.StringPointer("RateIntervalStart"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.12")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].IntervalRates.IntervalStart"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.12"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("RateFixedFee"),
|
||||
Path: utils.StringPointer("RateFixedFee"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.13")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].IntervalRates.FixedFee"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.13")},
|
||||
{Tag: utils.StringPointer("RateRecurrentFee"),
|
||||
Path: utils.StringPointer("RateRecurrentFee"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].IntervalRates.RecurrentFee"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
{Tag: utils.StringPointer("RateUnit"),
|
||||
Path: utils.StringPointer("RateUnit"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.15")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].IntervalRates.Unit"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.15")},
|
||||
{Tag: utils.StringPointer("RateIncrement"),
|
||||
Path: utils.StringPointer("RateIncrement"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.16")},
|
||||
Path: utils.StringPointer("Rates[<~*req.7>].IntervalRates.Increment"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.16")},
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -1695,46 +1706,46 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Path: utils.StringPointer("Schedule"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.4")},
|
||||
{Tag: utils.StringPointer("TargetType"),
|
||||
Path: utils.StringPointer("TargetType"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.5")},
|
||||
{Tag: utils.StringPointer("TargetIDs"),
|
||||
Path: utils.StringPointer("TargetIDs"),
|
||||
Path: utils.StringPointer("Targets[<~*req.5>]"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
{Tag: utils.StringPointer("ActionID"),
|
||||
Path: utils.StringPointer("ActionID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
{Tag: utils.StringPointer("ActionFilterIDs"),
|
||||
Path: utils.StringPointer("ActionFilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
{Tag: utils.StringPointer("ActionBlocker"),
|
||||
Path: utils.StringPointer("ActionBlocker"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].Blocker"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
{Tag: utils.StringPointer("ActionTTL"),
|
||||
Path: utils.StringPointer("ActionTTL"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].TTL"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
{Tag: utils.StringPointer("ActionType"),
|
||||
Path: utils.StringPointer("ActionType"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].Type"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
{Tag: utils.StringPointer("ActionOpts"),
|
||||
Path: utils.StringPointer("ActionOpts"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.12")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].Opts"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.12")},
|
||||
{Tag: utils.StringPointer("ActionPath"),
|
||||
Path: utils.StringPointer("ActionPath"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.13")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].Diktats.Path"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.13"),
|
||||
New_branch: utils.BoolPointer(true)},
|
||||
{Tag: utils.StringPointer("ActionValue"),
|
||||
Path: utils.StringPointer("ActionValue"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
Path: utils.StringPointer("Actions[<~*req.7>].Diktats.Value"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.7:"},
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -1763,46 +1774,51 @@ func TestDfLoaderJsonCfg(t *testing.T) {
|
||||
Path: utils.StringPointer("Opts"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.4")},
|
||||
{Tag: utils.StringPointer("BalanceID"),
|
||||
Path: utils.StringPointer("BalanceID"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.5")},
|
||||
{Tag: utils.StringPointer("BalanceFilterIDs"),
|
||||
Path: utils.StringPointer("BalanceFilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].FilterIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.6")},
|
||||
{Tag: utils.StringPointer("BalanceWeights"),
|
||||
Path: utils.StringPointer("BalanceWeights"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].Weights"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.7")},
|
||||
{Tag: utils.StringPointer("BalanceType"),
|
||||
Path: utils.StringPointer("BalanceType"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].Type"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.8")},
|
||||
{Tag: utils.StringPointer("BalanceUnits"),
|
||||
Path: utils.StringPointer("BalanceUnits"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].Units"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.9")},
|
||||
{Tag: utils.StringPointer("BalanceUnitFactors"),
|
||||
Path: utils.StringPointer("BalanceUnitFactors"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].UnitFactors"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.10")},
|
||||
{Tag: utils.StringPointer("BalanceOpts"),
|
||||
Path: utils.StringPointer("BalanceOpts"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].Opts"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.11")},
|
||||
{Tag: utils.StringPointer("BalanceCostIncrements"),
|
||||
Path: utils.StringPointer("BalanceCostIncrements"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.12")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].CostIncrements"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.12")},
|
||||
{Tag: utils.StringPointer("BalanceAttributeIDs"),
|
||||
Path: utils.StringPointer("BalanceAttributeIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.13")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].AttributeIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.13")},
|
||||
{Tag: utils.StringPointer("BalanceRateProfileIDs"),
|
||||
Path: utils.StringPointer("BalanceRateProfileIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
Path: utils.StringPointer("Balances[<~*req.5>].RateProfileIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
Filters: &[]string{"*notempty:~*req.5:"},
|
||||
Value: utils.StringPointer("~*req.14")},
|
||||
{Tag: utils.StringPointer("ThresholdIDs"),
|
||||
Path: utils.StringPointer("ThresholdIDs"),
|
||||
Type: utils.StringPointer(utils.MetaVariable),
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -197,7 +197,7 @@ func testLdPrMatchAcCDRSProcessEvent(t *testing.T) {
|
||||
"CostIncrements": nil,
|
||||
"FilterIDs": nil,
|
||||
"ID": "VoiceBalance",
|
||||
"Opts": nil,
|
||||
"Opts": map[string]interface{}{},
|
||||
"RateProfileIDs": nil,
|
||||
"Type": utils.MetaAbstract,
|
||||
"UnitFactors": nil,
|
||||
@@ -210,12 +210,15 @@ func testLdPrMatchAcCDRSProcessEvent(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
"FilterIDs": []string{},
|
||||
"FilterIDs": nil,
|
||||
"ID": "1001",
|
||||
"Opts": nil,
|
||||
"Opts": map[string]interface{}{},
|
||||
"Tenant": "cgrates.org",
|
||||
"ThresholdIDs": []string{},
|
||||
"Weights": nil,
|
||||
"ThresholdIDs": nil,
|
||||
"Weights": []map[string]interface{}{{
|
||||
"FilterIDs": nil,
|
||||
"Weight": 0,
|
||||
}},
|
||||
},
|
||||
},
|
||||
"Charges": nil,
|
||||
@@ -234,8 +237,8 @@ func testLdPrMatchAcCDRSProcessEvent(t *testing.T) {
|
||||
|
||||
APIOpts: map[string]interface{}{
|
||||
utils.MetaUsage: 2 * time.Minute,
|
||||
utils.OptsRateS: false,
|
||||
utils.OptsCDRsExport: true,
|
||||
utils.OptsRateS: false,
|
||||
utils.OptsAccountS: true,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -208,7 +208,7 @@ func testLdPrMatchRtCDRSProcessEvent(t *testing.T) {
|
||||
"MinCost": 0,
|
||||
"Rates": map[string]interface{}{
|
||||
utils.IfaceAsString(costIntervalRatesID): map[string]interface{}{
|
||||
"FixedFee": 0,
|
||||
"FixedFee": nil,
|
||||
"Increment": 30000000000,
|
||||
"IntervalStart": 0,
|
||||
"RecurrentFee": 0.4,
|
||||
|
||||
@@ -152,11 +152,10 @@ func testV1RtsCaseFromFolder(t *testing.T) {
|
||||
func testV1RtsCaseGetRoutesAfterLoading(t *testing.T) {
|
||||
// ROUTE_ACNT_1001
|
||||
expRt1 := &engine.APIRouteProfile{
|
||||
ID: "ROUTE_ACNT_1001",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"*string:~*req.Account:1001"},
|
||||
Sorting: "*weight",
|
||||
SortingParameters: []string{},
|
||||
ID: "ROUTE_ACNT_1001",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"*string:~*req.Account:1001"},
|
||||
Sorting: "*weight",
|
||||
Routes: []*engine.ExternalRoute{
|
||||
{
|
||||
ID: "vendor1",
|
||||
@@ -195,11 +194,10 @@ func testV1RtsCaseGetRoutesAfterLoading(t *testing.T) {
|
||||
|
||||
// ROUTE_ACNT_1002
|
||||
expRt2 := &engine.APIRouteProfile{
|
||||
ID: "ROUTE_ACNT_1002",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"*string:~*req.Account:1002"},
|
||||
Sorting: "*lc",
|
||||
SortingParameters: []string{},
|
||||
ID: "ROUTE_ACNT_1002",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"*string:~*req.Account:1002"},
|
||||
Sorting: "*lc",
|
||||
Routes: []*engine.ExternalRoute{
|
||||
{
|
||||
ID: "vendor1",
|
||||
@@ -283,11 +281,10 @@ func testV1RtsCaseGetRoutesAfterLoading(t *testing.T) {
|
||||
|
||||
// ROUTE_ACNT_1004
|
||||
expRt4 := &engine.APIRouteProfile{
|
||||
ID: "ROUTE_ACNT_1004",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"*string:~*req.Account:1004"},
|
||||
Sorting: "*reas",
|
||||
SortingParameters: []string{},
|
||||
ID: "ROUTE_ACNT_1004",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"*string:~*req.Account:1004"},
|
||||
Sorting: "*reas",
|
||||
Routes: []*engine.ExternalRoute{
|
||||
{
|
||||
ID: "vendor1",
|
||||
@@ -360,11 +357,10 @@ func testV1RtsCaseGetRoutesAfterLoading(t *testing.T) {
|
||||
|
||||
// ROUTE_STATS1
|
||||
expRt6 := &engine.APIRouteProfile{
|
||||
ID: "ROUTE_HC1",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"Fltr_tcc"},
|
||||
Sorting: "*hc",
|
||||
SortingParameters: []string{},
|
||||
ID: "ROUTE_HC1",
|
||||
Tenant: "cgrates.org",
|
||||
FilterIDs: []string{"Fltr_tcc"},
|
||||
Sorting: "*hc",
|
||||
Routes: []*engine.ExternalRoute{
|
||||
{
|
||||
ID: "route1",
|
||||
|
||||
@@ -743,49 +743,53 @@ func (bL *Balance) Set(path []string, val interface{}, newBranch bool) (err erro
|
||||
case Weights:
|
||||
bL.Weights, err = NewDynamicWeightsFromString(IfaceAsString(val), InfieldSep, ANDSep)
|
||||
case UnitFactors:
|
||||
sls := strings.Split(IfaceAsString(val), InfieldSep)
|
||||
if len(sls)%2 != 0 {
|
||||
return fmt.Errorf("invalid key: <%s> for BalanceUnitFactors", IfaceAsString(val))
|
||||
}
|
||||
for j := 0; j < len(sls); j += 2 {
|
||||
uf := new(UnitFactor)
|
||||
if len(sls[j]) != 0 {
|
||||
uf.FilterIDs = strings.Split(sls[j], ANDSep)
|
||||
if ufStr := IfaceAsString(val); len(ufStr) != 0 {
|
||||
sls := strings.Split(ufStr, InfieldSep)
|
||||
if len(sls)%2 != 0 {
|
||||
return fmt.Errorf("invalid key: <%s> for BalanceUnitFactors", IfaceAsString(val))
|
||||
}
|
||||
for j := 0; j < len(sls); j += 2 {
|
||||
uf := new(UnitFactor)
|
||||
if len(sls[j]) != 0 {
|
||||
uf.FilterIDs = strings.Split(sls[j], ANDSep)
|
||||
}
|
||||
|
||||
var valB *decimal.Big
|
||||
if valB, err = IfaceAsBig(sls[j+1]); err != nil {
|
||||
return
|
||||
var valB *decimal.Big
|
||||
if valB, err = IfaceAsBig(sls[j+1]); err != nil {
|
||||
return
|
||||
}
|
||||
uf.Factor = &Decimal{valB}
|
||||
bL.UnitFactors = append(bL.UnitFactors, uf)
|
||||
}
|
||||
uf.Factor = &Decimal{valB}
|
||||
bL.UnitFactors = append(bL.UnitFactors, uf)
|
||||
}
|
||||
case CostIncrements:
|
||||
sls := strings.Split(IfaceAsString(val), InfieldSep)
|
||||
if len(sls)%4 != 0 {
|
||||
return fmt.Errorf("invalid key: <%s> for BalanceCostIncrements", IfaceAsString(val))
|
||||
}
|
||||
for j := 0; j < len(sls); j += 4 {
|
||||
cI := new(CostIncrement)
|
||||
if len(sls[j]) != 0 {
|
||||
cI.FilterIDs = strings.Split(sls[j], ANDSep)
|
||||
if ciStr := IfaceAsString(val); len(ciStr) != 0 {
|
||||
sls := strings.Split(ciStr, InfieldSep)
|
||||
if len(sls)%4 != 0 {
|
||||
return fmt.Errorf("invalid key: <%s> for BalanceCostIncrements", IfaceAsString(val))
|
||||
}
|
||||
if len(sls[j+1]) != 0 {
|
||||
if cI.Increment, err = NewDecimalFromString(sls[j+1]); err != nil {
|
||||
return
|
||||
for j := 0; j < len(sls); j += 4 {
|
||||
cI := new(CostIncrement)
|
||||
if len(sls[j]) != 0 {
|
||||
cI.FilterIDs = strings.Split(sls[j], ANDSep)
|
||||
}
|
||||
}
|
||||
if len(sls[j+2]) != 0 {
|
||||
if cI.FixedFee, err = NewDecimalFromString(sls[j+2]); err != nil {
|
||||
return
|
||||
if len(sls[j+1]) != 0 {
|
||||
if cI.Increment, err = NewDecimalFromString(sls[j+1]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(sls[j+3]) != 0 {
|
||||
if cI.RecurrentFee, err = NewDecimalFromString(sls[j+3]); err != nil {
|
||||
return
|
||||
if len(sls[j+2]) != 0 {
|
||||
if cI.FixedFee, err = NewDecimalFromString(sls[j+2]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
if len(sls[j+3]) != 0 {
|
||||
if cI.RecurrentFee, err = NewDecimalFromString(sls[j+3]); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
bL.CostIncrements = append(bL.CostIncrements, cI)
|
||||
}
|
||||
bL.CostIncrements = append(bL.CostIncrements, cI)
|
||||
}
|
||||
case Opts:
|
||||
bL.Opts, err = NewMapFromCSV(IfaceAsString(val))
|
||||
|
||||
@@ -649,7 +649,7 @@ func (rt *Rate) Set(path []string, val interface{}, newBranch bool) (err error)
|
||||
return ErrWrongPath
|
||||
}
|
||||
if len(rt.IntervalRates) == 0 || newBranch {
|
||||
rt.IntervalRates = append(rt.IntervalRates, new(IntervalRate))
|
||||
rt.IntervalRates = append(rt.IntervalRates, &IntervalRate{IntervalStart: NewDecimal(0, 0), FixedFee: NewDecimal(0, 0)})
|
||||
}
|
||||
switch path[1] {
|
||||
case IntervalStart:
|
||||
|
||||
@@ -39,7 +39,7 @@ type DataStorage interface {
|
||||
func NewMapFromCSV(str string) (MapStorage, error) {
|
||||
m := make(MapStorage)
|
||||
if len(str) == 0 {
|
||||
return nil, nil
|
||||
return m, nil
|
||||
}
|
||||
for _, opt := range InfieldSplit(str) {
|
||||
keyVal := strings.SplitN(opt, ConcatenatedKeySep, 2)
|
||||
|
||||
Reference in New Issue
Block a user