Updated integration tests

This commit is contained in:
Trial97
2021-11-25 17:04:20 +02:00
committed by Dan Christian Bogos
parent 6a3c682f42
commit fca363623e
13 changed files with 1269 additions and 1667 deletions

View File

@@ -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,

View File

@@ -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"},
],

View File

@@ -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

View File

@@ -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,
},
},

View File

@@ -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,

View File

@@ -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",

View File

@@ -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))

View File

@@ -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:

View File

@@ -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)