Fixed tests for config with indexes

This commit is contained in:
porosnicuadrian
2021-12-07 15:35:39 +02:00
committed by Dan Christian Bogos
parent 4932e6d5e0
commit be6bdb7c11
16 changed files with 905 additions and 664 deletions

View File

@@ -65,14 +65,16 @@ func TestConfigSetGetConfig(t *testing.T) {
err = rlcCfg.GetConfig(context.Background(), argsGet, &replyGet)
expectedGet := map[string]interface{}{
"attributes": map[string]interface{}{
"accounts_conns": []string{"*localhost"},
"enabled": true,
"indexed_selects": true,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*localhost"},
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
"accounts_conns": []string{"*localhost"},
"enabled": true,
"indexed_selects": true,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*localhost"},
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
"exists_indexed_fields": []string{},
"notexists_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{},
@@ -102,14 +104,16 @@ func TestConfigSetGetReloadConfig(t *testing.T) {
Tenant: utils.CGRateSorg,
Config: map[string]interface{}{
"attributes": map[string]interface{}{
"accounts_conns": []string{"*internal"},
"enabled": true,
"indexed_selects": false,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*internal"},
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
"accounts_conns": []string{"*internal"},
"enabled": true,
"indexed_selects": false,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*internal"},
"stats_conns": []string{"*internal"},
"suffix_indexed_fields": []string{},
"exists_indexed_fields": []string{},
"notexists_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{
{
@@ -137,14 +141,16 @@ func TestConfigSetGetReloadConfig(t *testing.T) {
errGet := rlcCfg.GetConfig(context.Background(), argsGet, &replyGet)
expectedGet := map[string]interface{}{
"attributes": map[string]interface{}{
"accounts_conns": []string{"*localhost"},
"enabled": true,
"indexed_selects": true,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*localhost"},
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
"accounts_conns": []string{"*localhost"},
"enabled": true,
"indexed_selects": true,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*localhost"},
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
"exists_indexed_fields": []string{},
"notexists_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{},
@@ -181,14 +187,16 @@ func TestConfigSetGetReloadConfig(t *testing.T) {
errGetRld := rlcCfg.GetConfig(context.Background(), argsGetRld, &replyGetRld)
expectedGetRld := map[string]interface{}{
"attributes": map[string]interface{}{
"accounts_conns": []string{"*localhost"},
"enabled": true,
"indexed_selects": true,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*localhost"},
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
"accounts_conns": []string{"*localhost"},
"enabled": true,
"indexed_selects": true,
"nested_fields": false,
"prefix_indexed_fields": []string{},
"resources_conns": []string{"*localhost"},
"stats_conns": []string{"*localhost"},
"suffix_indexed_fields": []string{},
"exists_indexed_fields": []string{},
"notexists_indexed_fields": []string{},
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{},
@@ -240,6 +248,8 @@ func TestConfigGetSetConfigFromJSONErr(t *testing.T) {
"resources_conns":["*localhost"],
"stats_conns":["*localhost"],
"suffix_indexed_fields":[],
"exists_indexed_fields":[],
"notexists_indexed_fields":[],
},
}`,
DryRun: true,
@@ -261,7 +271,7 @@ func TestConfigGetSetConfigFromJSONErr(t *testing.T) {
}
var replyGet string
errGet := rlcCfg.GetConfigAsJSON(context.Background(), argsGet, &replyGet)
expectedGet := `{"attributes":{"accounts_conns":["*localhost"],"enabled":true,"indexed_selects":true,"nested_fields":false,"opts":{"*processRuns":[],"*profileIDs":[],"*profileIgnoreFilters":[],"*profileRuns":[]},"prefix_indexed_fields":[],"resources_conns":["*localhost"],"stats_conns":["*localhost"],"suffix_indexed_fields":[]}}`
expectedGet := `{"attributes":{"accounts_conns":["*localhost"],"enabled":true,"exists_indexed_fields":[],"indexed_selects":true,"nested_fields":false,"notexists_indexed_fields":[],"opts":{"*processRuns":[],"*profileIDs":[],"*profileIgnoreFilters":[],"*profileRuns":[]},"prefix_indexed_fields":[],"resources_conns":["*localhost"],"stats_conns":["*localhost"],"suffix_indexed_fields":[]}}`
if err != nil {
t.Errorf("Expected <%+v>, \nReceived <%+v>", nil, errGet)
}

View File

@@ -28,34 +28,38 @@ import (
func TestAccountSCfgLoadFromJSONCfg(t *testing.T) {
jsonCfg := &AccountSJsonCfg{
Enabled: utils.BoolPointer(true),
Attributes_conns: &[]string{utils.MetaInternal},
Rates_conns: &[]string{utils.MetaInternal},
Thresholds_conns: &[]string{utils.MetaInternal},
Indexed_selects: utils.BoolPointer(false),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Max_iterations: utils.IntPointer(1000),
Max_usage: utils.StringPointer("200h"),
Enabled: utils.BoolPointer(true),
Attributes_conns: &[]string{utils.MetaInternal},
Rates_conns: &[]string{utils.MetaInternal},
Thresholds_conns: &[]string{utils.MetaInternal},
Indexed_selects: utils.BoolPointer(false),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Exists_indexed_fields: &[]string{"*req.index1"},
Notexists_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Max_iterations: utils.IntPointer(1000),
Max_usage: utils.StringPointer("200h"),
}
usage, err := utils.NewDecimalFromUsage("200h")
if err != nil {
t.Error(err)
}
expected := &AccountSCfg{
Enabled: true,
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)},
RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS)},
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)},
IndexedSelects: false,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
MaxIterations: 1000,
MaxUsage: usage,
Enabled: true,
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)},
RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS)},
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)},
IndexedSelects: false,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
ExistsIndexedFields: &[]string{"*req.index1"},
NotExistsIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
MaxIterations: 1000,
MaxUsage: usage,
Opts: &AccountsOpts{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
Usage: []*utils.DynamicDecimalBigOpt{},
@@ -143,7 +147,9 @@ func TestAccountSCfgAsMapInterface(t *testing.T) {
"thresholds_conns": ["*internal:*thresholds"],
"string_indexed_fields": ["*req.index1"],
"prefix_indexed_fields": ["*req.index1"],
"suffix_indexed_fields": ["*req.index1"],
"suffix_indexed_fields": ["*req.index1"],
"exists_indexed_fields": ["*req.index1"],
"notexists_indexed_fields": ["*req.index1"],
"nested_fields": true,
"max_iterations": 100,
"max_usage": "72h",
@@ -151,17 +157,19 @@ func TestAccountSCfgAsMapInterface(t *testing.T) {
}`
eMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.IndexedSelectsCfg: false,
utils.AttributeSConnsCfg: []string{utils.MetaInternal},
utils.RateSConnsCfg: []string{utils.MetaInternal},
utils.ThresholdSConnsCfg: []string{utils.MetaInternal},
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1"},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1"},
utils.NestedFieldsCfg: true,
utils.MaxIterations: 100,
utils.MaxUsage: "259200000000000", // 72h in ns
utils.EnabledCfg: true,
utils.IndexedSelectsCfg: false,
utils.AttributeSConnsCfg: []string{utils.MetaInternal},
utils.RateSConnsCfg: []string{utils.MetaInternal},
utils.ThresholdSConnsCfg: []string{utils.MetaInternal},
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1"},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1"},
utils.ExistsIndexedFieldsCfg: []string{"*req.index1"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.index1"},
utils.NestedFieldsCfg: true,
utils.MaxIterations: 100,
utils.MaxUsage: "259200000000000", // 72h in ns
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaUsage: []*utils.DynamicDecimalBigOpt{},

View File

@@ -38,6 +38,8 @@ func TestActionSCfgLoadFromJSONCfg(t *testing.T) {
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Exists_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Notexists_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Dynaprepaid_actionprofile: &[]string{"val1", "val2"},
}
@@ -53,6 +55,8 @@ func TestActionSCfgLoadFromJSONCfg(t *testing.T) {
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1"},
NotExistsIndexedFields: &[]string{"*req.index1"},
ExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
NestedFields: true,
DynaprepaidActionProfile: []string{"val1", "val2"},
Opts: &ActionsOpts{
@@ -118,6 +122,8 @@ func TestActionSCfgAsMapInterface(t *testing.T) {
"string_indexed_fields": ["*req.index1"],
"prefix_indexed_fields": ["*req.index1","*req.index2"],
"suffix_indexed_fields": ["*req.index1"],
"exists_indexed_fields": ["*req.index1","*req.index2"],
"notexists_indexed_fields": ["*req.index1"],
"nested_fields": true,
"DynaprepaidActionProfile": [],
},
@@ -135,6 +141,8 @@ func TestActionSCfgAsMapInterface(t *testing.T) {
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1"},
utils.ExistsIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.index1"},
utils.NestedFieldsCfg: true,
utils.DynaprepaidActionplansCfg: []string{},
utils.OptsCfg: map[string]interface{}{

View File

@@ -26,26 +26,30 @@ import (
func TestAttributeSCfgloadFromJsonCfg(t *testing.T) {
jsonCfg := &AttributeSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(false),
Resources_conns: &[]string{"*internal", "*conn1"},
Stats_conns: &[]string{"*internal", "*conn1"},
Accounts_conns: &[]string{"*internal", "*conn1"},
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(false),
Resources_conns: &[]string{"*internal", "*conn1"},
Stats_conns: &[]string{"*internal", "*conn1"},
Accounts_conns: &[]string{"*internal", "*conn1"},
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Exists_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Notexists_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
}
expected := &AttributeSCfg{
Enabled: true,
AccountSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAccounts), "*conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "*conn1"},
IndexedSelects: false,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
Enabled: true,
AccountSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAccounts), "*conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "*conn1"},
IndexedSelects: false,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1"},
ExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
NotExistsIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
Opts: &AttributesOpts{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
ProcessRuns: []*utils.DynamicIntOpt{},
@@ -128,6 +132,8 @@ func TestAttributeSCfgAsMapInterface(t *testing.T) {
"accounts_conns": ["*internal"],
"prefix_indexed_fields": ["*req.index1","*req.index2"],
"string_indexed_fields": ["*req.index1"],
"exists_indexed_fields": ["*req.index1","*req.index2"],
"notexists_indexed_fields": ["*req.index1"],
"opts": {
"*processRuns": [
{
@@ -138,15 +144,17 @@ func TestAttributeSCfgAsMapInterface(t *testing.T) {
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.StatSConnsCfg: []string{utils.MetaInternal},
utils.ResourceSConnsCfg: []string{utils.MetaInternal},
utils.AccountSConnsCfg: []string{utils.MetaInternal},
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.IndexedSelectsCfg: true,
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{},
utils.EnabledCfg: true,
utils.StatSConnsCfg: []string{utils.MetaInternal},
utils.ResourceSConnsCfg: []string{utils.MetaInternal},
utils.AccountSConnsCfg: []string{utils.MetaInternal},
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.ExistsIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.index1"},
utils.IndexedSelectsCfg: true,
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{},
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{
@@ -169,6 +177,7 @@ func TestAttributeSCfgAsMapInterface2(t *testing.T) {
cfgJSONStr := `{
"attributes": {
"suffix_indexed_fields": ["*req.index1","*req.index2"],
"notexists_indexed_fields": ["*req.index1","*req.index2"],
"nested_fields": true,
"enabled": true,
"opts": {
@@ -181,14 +190,16 @@ func TestAttributeSCfgAsMapInterface2(t *testing.T) {
},
}`
expectedMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.StatSConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.AccountSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.NestedFieldsCfg: true,
utils.EnabledCfg: true,
utils.StatSConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.AccountSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.NestedFieldsCfg: true,
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{
@@ -214,14 +225,16 @@ func TestAttributeSCfgAsMapInterface3(t *testing.T) {
}
`
expectedMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.StatSConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.AccountSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.EnabledCfg: false,
utils.StatSConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.AccountSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProcessRunsCfg: []*utils.DynamicIntOpt{},

View File

@@ -70,8 +70,8 @@ func (cS *ChargerSCfg) loadFromJSONCfg(jsnCfg *ChargerSJsonCfg) (err error) {
if jsnCfg.Exists_indexed_fields != nil {
cS.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields))
}
if jsnCfg.NotExists_indexed_fields != nil {
cS.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.NotExists_indexed_fields))
if jsnCfg.Notexists_indexed_fields != nil {
cS.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields))
}
if jsnCfg.Nested_fields != nil {
cS.NestedFields = *jsnCfg.Nested_fields
@@ -148,7 +148,7 @@ type ChargerSJsonCfg struct {
Prefix_indexed_fields *[]string
Suffix_indexed_fields *[]string
Exists_indexed_fields *[]string
NotExists_indexed_fields *[]string
Notexists_indexed_fields *[]string
Nested_fields *bool // applies when indexed fields is not defined
}
@@ -169,7 +169,7 @@ func diffChargerSJsonCfg(d *ChargerSJsonCfg, v1, v2 *ChargerSCfg) *ChargerSJsonC
d.Prefix_indexed_fields = diffIndexSlice(d.Prefix_indexed_fields, v1.PrefixIndexedFields, v2.PrefixIndexedFields)
d.Suffix_indexed_fields = diffIndexSlice(d.Suffix_indexed_fields, v1.SuffixIndexedFields, v2.SuffixIndexedFields)
d.Exists_indexed_fields = diffIndexSlice(d.Exists_indexed_fields, v1.ExistsIndexedFields, v2.ExistsIndexedFields)
d.NotExists_indexed_fields = diffIndexSlice(d.NotExists_indexed_fields, v1.NotExistsIndexedFields, v2.NotExistsIndexedFields)
d.Notexists_indexed_fields = diffIndexSlice(d.Notexists_indexed_fields, v1.NotExistsIndexedFields, v2.NotExistsIndexedFields)
if v1.NestedFields != v2.NestedFields {
d.Nested_fields = utils.BoolPointer(v2.NestedFields)
}

View File

@@ -26,22 +26,26 @@ import (
func TestChargerSCfgloadFromJsonCfg(t *testing.T) {
jsonCfg := &ChargerSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
Attributes_conns: &[]string{utils.MetaInternal, "*conn1"},
String_indexed_fields: &[]string{"*req.Field1"},
Prefix_indexed_fields: &[]string{"*req.Field1", "*req.Field2"},
Suffix_indexed_fields: &[]string{"*req.Field1", "*req.Field2"},
Nested_fields: utils.BoolPointer(true),
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
Attributes_conns: &[]string{utils.MetaInternal, "*conn1"},
String_indexed_fields: &[]string{"*req.Field1"},
Prefix_indexed_fields: &[]string{"*req.Field1", "*req.Field2"},
Suffix_indexed_fields: &[]string{"*req.Field1", "*req.Field2"},
Exists_indexed_fields: &[]string{"*req.Field1", "*req.Field2"},
Notexists_indexed_fields: &[]string{"*req.Field1", "*req.Field2"},
Nested_fields: utils.BoolPointer(true),
}
expected := &ChargerSCfg{
Enabled: true,
IndexedSelects: true,
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"},
StringIndexedFields: &[]string{"*req.Field1"},
PrefixIndexedFields: &[]string{"*req.Field1", "*req.Field2"},
SuffixIndexedFields: &[]string{"*req.Field1", "*req.Field2"},
NestedFields: true,
Enabled: true,
IndexedSelects: true,
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"},
StringIndexedFields: &[]string{"*req.Field1"},
PrefixIndexedFields: &[]string{"*req.Field1", "*req.Field2"},
SuffixIndexedFields: &[]string{"*req.Field1", "*req.Field2"},
ExistsIndexedFields: &[]string{"*req.Field1", "*req.Field2"},
NotExistsIndexedFields: &[]string{"*req.Field1", "*req.Field2"},
NestedFields: true,
}
jsncfg := NewDefaultCGRConfig()
if err = jsncfg.chargerSCfg.loadFromJSONCfg(jsonCfg); err != nil {
@@ -67,12 +71,14 @@ func TestChargerSCfgAsMapInterface(t *testing.T) {
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.AttributeSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{},
utils.EnabledCfg: false,
utils.AttributeSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
@@ -88,19 +94,23 @@ func TestChargerSCfgAsMapInterface1(t *testing.T) {
"attributes_conns": ["*internal:*attributes", "*conn1"],
"indexed_selects":true,
"string_indexed_fields": ["*req.Field1","*req.Field2","*req.Field3"],
"prefix_indexed_fields": ["*req.DestinationPrefix"],
"suffix_indexed_fields": ["*req.Field1","*req.Field2","*req.Field3"],
"prefix_indexed_fields": ["*req.DestinationPrefix"],
"suffix_indexed_fields": ["*req.Field1","*req.Field2","*req.Field3"],
"exists_indexed_fields": ["*req.DestinationPrefix"],
"notexists_indexed_fields": [],
"nested_fields": false,
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.AttributeSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.IndexedSelectsCfg: true,
utils.StringIndexedFieldsCfg: []string{"*req.Field1", "*req.Field2", "*req.Field3"},
utils.PrefixIndexedFieldsCfg: []string{"*req.DestinationPrefix"},
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{"*req.Field1", "*req.Field2", "*req.Field3"},
utils.EnabledCfg: false,
utils.AttributeSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.IndexedSelectsCfg: true,
utils.StringIndexedFieldsCfg: []string{"*req.Field1", "*req.Field2", "*req.Field3"},
utils.PrefixIndexedFieldsCfg: []string{"*req.DestinationPrefix"},
utils.NestedFieldsCfg: false,
utils.SuffixIndexedFieldsCfg: []string{"*req.Field1", "*req.Field2", "*req.Field3"},
utils.ExistsIndexedFieldsCfg: []string{"*req.DestinationPrefix"},
utils.NotExistsIndexedFieldsCfg: []string{},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)

View File

@@ -943,6 +943,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"opts":{ //
"*profileIDs": [
@@ -984,6 +986,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
},
@@ -996,6 +1000,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"opts":{ //
"*usageID": [
@@ -1032,6 +1038,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"opts": { //
"*profileIDs": [
@@ -1066,6 +1074,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"actions_conns": [], // connections to ActionS to execute the actions
"opts":{ //
@@ -1093,6 +1103,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"attributes_conns": [], // connections to AttributeS for altering events before route queries: <""|*internal|$rpc_conns_id>
"resources_conns": [], // connections to ResourceS for *res sorting, empty to disable functionality: <""|*internal|$rpc_conns_id>
@@ -1479,6 +1491,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"attributes_conns": [], // connections to AttributeS for API authorization, empty to disable auth functionality: <""|*internal|$rpc_conns_id>
},
@@ -1524,11 +1538,15 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"rate_indexed_selects": true, // enable profile matching exclusively on indexes
//"rate_string_indexed_fields": [], // query indexes based on these fields for faster processing
"rate_prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"rate_suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"rate_exists_indexed_fields": [], // query indexes based on these fields for faster processing
"rate_notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"rate_nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"verbosity": 1000, // number of increment iterations allowed
"opts":{ //
@@ -1698,6 +1716,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"dynaprepaid_actionprofile": [], //
"opts":{ //
@@ -1728,6 +1748,8 @@ const CGRATES_CFG_JSON = `
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
"max_iterations": 1000, // maximum number of iterations
"max_usage": "72h", // maximum time of usage

View File

@@ -936,15 +936,17 @@ func TestDNSAgentJsonCfg(t *testing.T) {
func TestDfAttributeServJsonCfg(t *testing.T) {
eCfg := &AttributeSJsonCfg{
Enabled: utils.BoolPointer(false),
Stats_conns: &[]string{},
Resources_conns: &[]string{},
Accounts_conns: &[]string{},
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Enabled: utils.BoolPointer(false),
Stats_conns: &[]string{},
Resources_conns: &[]string{},
Accounts_conns: &[]string{},
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Opts: &AttributesOptsJson{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
ProcessRuns: []*utils.DynamicIntOpt{},
@@ -966,13 +968,15 @@ func TestDfAttributeServJsonCfg(t *testing.T) {
func TestDfChargerServJsonCfg(t *testing.T) {
eCfg := &ChargerSJsonCfg{
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
Attributes_conns: &[]string{},
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
Attributes_conns: &[]string{},
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
}
dfCgrJSONCfg, err := NewCgrJsonCfgFromBytes([]byte(CGRATES_CFG_JSON))
if err != nil {
@@ -1006,14 +1010,16 @@ func TestDfFilterSJsonCfg(t *testing.T) {
func TestDfResourceLimiterSJsonCfg(t *testing.T) {
eCfg := &ResourceSJsonCfg{
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
Thresholds_conns: &[]string{},
Store_interval: utils.StringPointer(""),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
Thresholds_conns: &[]string{},
Store_interval: utils.StringPointer(""),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Opts: &ResourcesOptsJson{
UsageID: []*utils.DynamicStringOpt{},
UsageTTL: []*utils.DynamicStringOpt{},
@@ -1042,6 +1048,8 @@ func TestDfStatServiceJsonCfg(t *testing.T) {
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Opts: &StatsOptsJson{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
@@ -1063,14 +1071,16 @@ func TestDfStatServiceJsonCfg(t *testing.T) {
func TestDfThresholdSJsonCfg(t *testing.T) {
eCfg := &ThresholdSJsonCfg{
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
Store_interval: utils.StringPointer(""),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Actions_conns: &[]string{},
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
Store_interval: utils.StringPointer(""),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Actions_conns: &[]string{},
Opts: &ThresholdsOptsJson{
ProfileIgnoreFilters: []*utils.DynamicBoolOpt{},
},
@@ -1089,18 +1099,20 @@ func TestDfThresholdSJsonCfg(t *testing.T) {
func TestDfRouteSJsonCfg(t *testing.T) {
eCfg := &RouteSJsonCfg{
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Attributes_conns: &[]string{},
Resources_conns: &[]string{},
Stats_conns: &[]string{},
Rates_conns: &[]string{},
Accounts_conns: &[]string{},
Default_ratio: utils.IntPointer(1),
Nested_fields: utils.BoolPointer(false),
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Attributes_conns: &[]string{},
Resources_conns: &[]string{},
Stats_conns: &[]string{},
Rates_conns: &[]string{},
Accounts_conns: &[]string{},
Default_ratio: utils.IntPointer(1),
Nested_fields: utils.BoolPointer(false),
Opts: &RoutesOptsJson{
Context: []*utils.DynamicStringOpt{},
ProfileCount: []*utils.DynamicIntOpt{},
@@ -1903,13 +1915,15 @@ func TestDfHttpJsonCfg(t *testing.T) {
func TestDfDispatcherSJsonCfg(t *testing.T) {
eCfg := &DispatcherSJsonCfg{
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Attributes_conns: &[]string{},
Nested_fields: utils.BoolPointer(false),
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Attributes_conns: &[]string{},
Nested_fields: utils.BoolPointer(false),
}
dfCgrJSONCfg, err := NewCgrJsonCfgFromBytes([]byte(CGRATES_CFG_JSON))
if err != nil {
@@ -2163,18 +2177,22 @@ func TestDfEventExporterCfg(t *testing.T) {
func TestDfRateSJsonCfg(t *testing.T) {
eCfg := &RateSJsonCfg{
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Rate_indexed_selects: utils.BoolPointer(true),
Rate_string_indexed_fields: nil,
Rate_prefix_indexed_fields: &[]string{},
Rate_suffix_indexed_fields: &[]string{},
Rate_nested_fields: utils.BoolPointer(false),
Verbosity: utils.IntPointer(1000),
Enabled: utils.BoolPointer(false),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Rate_indexed_selects: utils.BoolPointer(true),
Rate_string_indexed_fields: nil,
Rate_prefix_indexed_fields: &[]string{},
Rate_suffix_indexed_fields: &[]string{},
Rate_exists_indexed_fields: &[]string{},
Rate_notexists_indexed_fields: &[]string{},
Rate_nested_fields: utils.BoolPointer(false),
Verbosity: utils.IntPointer(1000),
Opts: &RatesOptsJson{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
StartTime: []*utils.DynamicStringOpt{},
@@ -2469,6 +2487,8 @@ func TestDfActionSJsonCfg(t *testing.T) {
String_indexed_fields: nil,
Prefix_indexed_fields: &[]string{},
Suffix_indexed_fields: &[]string{},
Exists_indexed_fields: &[]string{},
Notexists_indexed_fields: &[]string{},
Nested_fields: utils.BoolPointer(false),
Dynaprepaid_actionprofile: &[]string{},
Opts: &ActionsOptsJson{

File diff suppressed because one or more lines are too long

View File

@@ -27,22 +27,26 @@ import (
func TestDispatcherSCfgloadFromJsonCfg(t *testing.T) {
jsonCfg := &DispatcherSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: &[]string{"*req.prefix", "*req.indexed"},
Prefix_indexed_fields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
Suffix_indexed_fields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
Attributes_conns: &[]string{utils.MetaInternal, "*conn1"},
Nested_fields: utils.BoolPointer(true),
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: &[]string{"*req.prefix", "*req.indexed"},
Prefix_indexed_fields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
Suffix_indexed_fields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
Exists_indexed_fields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
Notexists_indexed_fields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
Attributes_conns: &[]string{utils.MetaInternal, "*conn1"},
Nested_fields: utils.BoolPointer(true),
}
expected := &DispatcherSCfg{
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.prefix", "*req.indexed"},
PrefixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
SuffixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"},
NestedFields: true,
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.prefix", "*req.indexed"},
PrefixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
SuffixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
ExistsIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
NotExistsIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"},
NestedFields: true,
}
jsnCfg := NewDefaultCGRConfig()
if err = jsnCfg.dispatcherSCfg.loadFromJSONCfg(jsonCfg); err != nil {
@@ -63,18 +67,22 @@ func TestDispatcherSCfgAsMapInterface(t *testing.T) {
"indexed_selects":true,
"prefix_indexed_fields": [],
"suffix_indexed_fields": [],
"exists_indexed_fields": [],
"notexists_indexed_fields": [],
"nested_fields": false,
"attributes_conns": [],
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{},
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
@@ -91,19 +99,23 @@ func TestDispatcherSCfgAsMapInterface1(t *testing.T) {
"string_indexed_fields": ["*req.prefix"],
"prefix_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"],
"suffix_indexed_fields": ["*req.prefix"],
"exists_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"],
"notexists_indexed_fields": ["*req.prefix"],
"nested_fields": false,
"attributes_conns": ["*internal:*attributes", "*conn1"],
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.StringIndexedFieldsCfg: []string{"*req.prefix"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.SuffixIndexedFieldsCfg: []string{"*req.prefix"},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{"*internal", "*conn1"},
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.StringIndexedFieldsCfg: []string{"*req.prefix"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.SuffixIndexedFieldsCfg: []string{"*req.prefix"},
utils.ExistsIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.prefix"},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{"*internal", "*conn1"},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
@@ -117,12 +129,14 @@ func TestDispatcherSCfgAsMapInterface2(t *testing.T) {
"dispatchers":{},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{},
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
t.Error(err)
@@ -132,13 +146,15 @@ func TestDispatcherSCfgAsMapInterface2(t *testing.T) {
}
func TestDispatcherSCfgClone(t *testing.T) {
ban := &DispatcherSCfg{
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.prefix", "*req.indexed"},
PrefixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
SuffixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"},
NestedFields: true,
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.prefix", "*req.indexed"},
PrefixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
SuffixIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
ExistsIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
NotExistsIndexedFields: &[]string{"*req.prefix", "*req.indexed", "*req.fields"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "*conn1"},
NestedFields: true,
}
rcv := ban.Clone()
if !reflect.DeepEqual(ban, rcv) {

View File

@@ -28,32 +28,40 @@ import (
func TestRateSConfigloadFromJsonCfg(t *testing.T) {
cfgJSON := &RateSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Rate_indexed_selects: utils.BoolPointer(true),
Rate_string_indexed_fields: &[]string{"*req.index1"},
Rate_prefix_indexed_fields: &[]string{"*req.index1"},
Rate_suffix_indexed_fields: &[]string{"*req.index1"},
Rate_nested_fields: utils.BoolPointer(true),
Verbosity: utils.IntPointer(20),
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Exists_indexed_fields: &[]string{"*req.index1"},
Notexists_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Rate_indexed_selects: utils.BoolPointer(true),
Rate_string_indexed_fields: &[]string{"*req.index1"},
Rate_prefix_indexed_fields: &[]string{"*req.index1"},
Rate_suffix_indexed_fields: &[]string{"*req.index1"},
Rate_exists_indexed_fields: &[]string{"*req.index1"},
Rate_notexists_indexed_fields: &[]string{"*req.index1"},
Rate_nested_fields: utils.BoolPointer(true),
Verbosity: utils.IntPointer(20),
}
expected := &RateSCfg{
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
RateIndexedSelects: true,
RateStringIndexedFields: &[]string{"*req.index1"},
RatePrefixIndexedFields: &[]string{"*req.index1"},
RateSuffixIndexedFields: &[]string{"*req.index1"},
RateNestedFields: true,
Verbosity: 20,
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
ExistsIndexedFields: &[]string{"*req.index1"},
NotExistsIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
RateIndexedSelects: true,
RateStringIndexedFields: &[]string{"*req.index1"},
RatePrefixIndexedFields: &[]string{"*req.index1"},
RateSuffixIndexedFields: &[]string{"*req.index1"},
RateExistsIndexedFields: &[]string{"*req.index1"},
RateNotExistsIndexedFields: &[]string{"*req.index1"},
RateNestedFields: true,
Verbosity: 20,
Opts: &RatesOpts{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
StartTime: []*utils.DynamicStringOpt{},
@@ -79,16 +87,20 @@ func TestRatesCfgAsMapInterface(t *testing.T) {
"rates": {}
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.RateIndexedSelectsCfg: true,
utils.RatePrefixIndexedFieldsCfg: []string{},
utils.RateSuffixIndexedFieldsCfg: []string{},
utils.RateNestedFieldsCfg: false,
utils.Verbosity: 1000,
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.RateIndexedSelectsCfg: true,
utils.RatePrefixIndexedFieldsCfg: []string{},
utils.RateSuffixIndexedFieldsCfg: []string{},
utils.RateExistsIndexedFieldsCfg: []string{},
utils.RateNotExistsIndexedFieldsCfg: []string{},
utils.RateNestedFieldsCfg: false,
utils.Verbosity: 1000,
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaStartTime: []*utils.DynamicStringOpt{},
@@ -109,30 +121,38 @@ func TestRatesCfgAsMapInterface1(t *testing.T) {
"rates": {
"enabled": true,
"indexed_selects": false,
"string_indexed_fields": ["*req.index1"],
"string_indexed_fields": ["*req.index1"],
"prefix_indexed_fields": ["*req.index1", "*req.index2"],
"suffix_indexed_fields": ["*req.index1"],
"suffix_indexed_fields": ["*req.index1"],
"exists_indexed_fields": ["*req.index1", "*req.index2"],
"notexists_indexed_fields": ["*req.index1"],
"nested_fields": true,
"rate_indexed_selects": false,
"rate_string_indexed_fields": ["*req.index1"],
"rate_prefix_indexed_fields": ["*req.index1", "*req.index2"],
"rate_suffix_indexed_fields": ["*req.index1", "*req.index2", "*req.index3"],
"rate_prefix_indexed_fields": ["*req.index1", "*req.index2"],
"rate_suffix_indexed_fields": ["*req.index1", "*req.index2", "*req.index3"],
"rate_exists_indexed_fields": ["*req.index1", "*req.index2"],
"rate_notexists_indexed_fields": ["*req.index1"],
"rate_nested_fields": true,
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.IndexedSelectsCfg: false,
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1"},
utils.NestedFieldsCfg: true,
utils.RateIndexedSelectsCfg: false,
utils.RateStringIndexedFieldsCfg: []string{"*req.index1"},
utils.RatePrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.RateSuffixIndexedFieldsCfg: []string{"*req.index1", "*req.index2", "*req.index3"},
utils.RateNestedFieldsCfg: true,
utils.Verbosity: 1000,
utils.EnabledCfg: true,
utils.IndexedSelectsCfg: false,
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.SuffixIndexedFieldsCfg: []string{"*req.index1"},
utils.ExistsIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.index1"},
utils.NestedFieldsCfg: true,
utils.RateIndexedSelectsCfg: false,
utils.RateStringIndexedFieldsCfg: []string{"*req.index1"},
utils.RatePrefixIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.RateSuffixIndexedFieldsCfg: []string{"*req.index1", "*req.index2", "*req.index3"},
utils.RateExistsIndexedFieldsCfg: []string{"*req.index1", "*req.index2"},
utils.RateNotExistsIndexedFieldsCfg: []string{"*req.index1"},
utils.RateNestedFieldsCfg: true,
utils.Verbosity: 1000,
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaStartTime: []*utils.DynamicStringOpt{},

View File

@@ -27,24 +27,28 @@ import (
func TestResourceSConfigloadFromJsonCfgCase1(t *testing.T) {
cfgJSON := &ResourceSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
Thresholds_conns: &[]string{utils.MetaInternal, "*conn1"},
Store_interval: utils.StringPointer("2s"),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
Thresholds_conns: &[]string{utils.MetaInternal, "*conn1"},
Store_interval: utils.StringPointer("2s"),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Exists_indexed_fields: &[]string{"*req.index1"},
Notexists_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
}
expected := &ResourceSConfig{
Enabled: true,
IndexedSelects: true,
StoreInterval: 2 * time.Second,
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"},
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
Enabled: true,
IndexedSelects: true,
StoreInterval: 2 * time.Second,
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"},
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
ExistsIndexedFields: &[]string{"*req.index1"},
NotExistsIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
Opts: &ResourcesOpts{
UsageID: []*utils.DynamicStringOpt{},
UsageTTL: []*utils.DynamicDurationOpt{},
@@ -128,13 +132,15 @@ func TestResourceSConfigAsMapInterface(t *testing.T) {
"resources": {},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.StoreIntervalCfg: utils.EmptyString,
utils.ThresholdSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.EnabledCfg: false,
utils.StoreIntervalCfg: utils.EmptyString,
utils.ThresholdSConnsCfg: []string{},
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.OptsCfg: map[string]interface{}{
utils.MetaUsageIDCfg: []*utils.DynamicStringOpt{},
utils.MetaUsageTTLCfg: []*utils.DynamicDurationOpt{},
@@ -158,18 +164,22 @@ func TestResourceSConfigAsMapInterface1(t *testing.T) {
"string_indexed_fields": ["*req.index1"],
"prefix_indexed_fields": ["*req.prefix_indexed_fields1","*req.prefix_indexed_fields2"],
"suffix_indexed_fields": ["*req.prefix_indexed_fields1"],
"exists_indexed_fields": ["*req.prefix_indexed_fields1","*req.prefix_indexed_fields2"],
"notexists_indexed_fields": ["*req.prefix_indexed_fields1"],
"nested_fields": true,
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.StoreIntervalCfg: "7m0s",
utils.ThresholdSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.IndexedSelectsCfg: true,
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1", "*req.prefix_indexed_fields2"},
utils.SuffixIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1"},
utils.NestedFieldsCfg: true,
utils.EnabledCfg: true,
utils.StoreIntervalCfg: "7m0s",
utils.ThresholdSConnsCfg: []string{utils.MetaInternal, "*conn1"},
utils.IndexedSelectsCfg: true,
utils.StringIndexedFieldsCfg: []string{"*req.index1"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1", "*req.prefix_indexed_fields2"},
utils.SuffixIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1"},
utils.ExistsIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1", "*req.prefix_indexed_fields2"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1"},
utils.NestedFieldsCfg: true,
utils.OptsCfg: map[string]interface{}{
utils.MetaUsageIDCfg: []*utils.DynamicStringOpt{},
utils.MetaUsageTTLCfg: []*utils.DynamicDurationOpt{},

View File

@@ -27,33 +27,37 @@ import (
func TestRouteSCfgloadFromJsonCfg(t *testing.T) {
cfgJSON := &RouteSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Suffix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Attributes_conns: &[]string{utils.MetaInternal, "conn1"},
Resources_conns: &[]string{utils.MetaInternal, "conn1"},
Stats_conns: &[]string{utils.MetaInternal, "conn1"},
Rates_conns: &[]string{utils.MetaInternal, "conn1"},
Accounts_conns: &[]string{utils.MetaInternal, "conn1"},
Default_ratio: utils.IntPointer(10),
Nested_fields: utils.BoolPointer(true),
Opts: &RoutesOptsJson{},
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
String_indexed_fields: &[]string{"*req.index1"},
Prefix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Suffix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Exists_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Notexists_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Attributes_conns: &[]string{utils.MetaInternal, "conn1"},
Resources_conns: &[]string{utils.MetaInternal, "conn1"},
Stats_conns: &[]string{utils.MetaInternal, "conn1"},
Rates_conns: &[]string{utils.MetaInternal, "conn1"},
Accounts_conns: &[]string{utils.MetaInternal, "conn1"},
Default_ratio: utils.IntPointer(10),
Nested_fields: utils.BoolPointer(true),
Opts: &RoutesOptsJson{},
}
expected := &RouteSCfg{
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "conn1"},
RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS), "conn1"},
AccountSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAccounts), "conn1"},
DefaultRatio: 10,
NestedFields: true,
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"},
ExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
NotExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "conn1"},
RateSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRateS), "conn1"},
AccountSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAccounts), "conn1"},
DefaultRatio: 10,
NestedFields: true,
Opts: &RoutesOpts{
Context: []*utils.DynamicStringOpt{},
ProfileCount: []*utils.DynamicIntPointerOpt{},
@@ -100,17 +104,19 @@ func TestRouteSCfgAsMapInterface(t *testing.T) {
"routes": {},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.StatSConnsCfg: []string{},
utils.RateSConnsCfg: []string{},
utils.AccountSConnsCfg: []string{},
utils.DefaultRatioCfg: 1,
utils.EnabledCfg: false,
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.AttributeSConnsCfg: []string{},
utils.ResourceSConnsCfg: []string{},
utils.StatSConnsCfg: []string{},
utils.RateSConnsCfg: []string{},
utils.AccountSConnsCfg: []string{},
utils.DefaultRatioCfg: 1,
utils.OptsCfg: map[string]interface{}{
utils.OptsContext: []*utils.DynamicStringOpt{},
utils.MetaLimitCfg: []*utils.DynamicIntPointerOpt{},
@@ -136,6 +142,8 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) {
"string_indexed_fields": ["*req.string"],
"prefix_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"],
"suffix_indexed_fields": ["*req.prefix","*req.indexed"],
"exists_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"],
"notexists_indexed_fields": ["*req.prefix","*req.indexed"],
"nested_fields": true,
"attributes_conns": ["*internal:*attributes", "conn1"],
"resources_conns": ["*internal:*resources", "conn1"],
@@ -147,18 +155,20 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) {
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.IndexedSelectsCfg: false,
utils.StringIndexedFieldsCfg: []string{"*req.string"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.SuffixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed"},
utils.NestedFieldsCfg: true,
utils.AttributeSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.ResourceSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.StatSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.RateSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.AccountSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.DefaultRatioCfg: 2,
utils.EnabledCfg: true,
utils.IndexedSelectsCfg: false,
utils.StringIndexedFieldsCfg: []string{"*req.string"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.SuffixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed"},
utils.ExistsIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed"},
utils.NestedFieldsCfg: true,
utils.AttributeSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.ResourceSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.StatSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.RateSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.AccountSConnsCfg: []string{utils.MetaInternal, "conn1"},
utils.DefaultRatioCfg: 2,
utils.OptsCfg: map[string]interface{}{
utils.OptsContext: []*utils.DynamicStringOpt{},
utils.MetaLimitCfg: []*utils.DynamicIntPointerOpt{},
@@ -178,17 +188,19 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) {
func TestRouteSCfgClone(t *testing.T) {
ban := &RouteSCfg{
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "conn1"},
DefaultRatio: 10,
NestedFields: true,
Opts: &RoutesOpts{},
Enabled: true,
IndexedSelects: true,
StringIndexedFields: &[]string{"*req.index1"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"},
ExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
NotExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
AttributeSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes), "conn1"},
ResourceSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources), "conn1"},
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "conn1"},
DefaultRatio: 10,
NestedFields: true,
Opts: &RoutesOpts{},
}
rcv := ban.Clone()
if !reflect.DeepEqual(ban, rcv) {

View File

@@ -204,11 +204,11 @@ func (st StatSCfg) Clone() (cln *StatSCfg) {
if st.SuffixIndexedFields != nil {
cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.SuffixIndexedFields))
}
if cln.ExistsIndexedFields != nil {
cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cln.ExistsIndexedFields))
if st.ExistsIndexedFields != nil {
cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.ExistsIndexedFields))
}
if cln.NotExistsIndexedFields != nil {
cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cln.NotExistsIndexedFields))
if st.NotExistsIndexedFields != nil {
cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.NotExistsIndexedFields))
}
return
}

View File

@@ -35,6 +35,8 @@ func TestStatSCfgloadFromJsonCfgCase1(t *testing.T) {
String_indexed_fields: &[]string{"*req.string"},
Prefix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Suffix_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Exists_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Notexists_indexed_fields: &[]string{"*req.index1", "*req.index2"},
Nested_fields: utils.BoolPointer(true),
}
expected := &StatSCfg{
@@ -46,6 +48,8 @@ func TestStatSCfgloadFromJsonCfgCase1(t *testing.T) {
StringIndexedFields: &[]string{"*req.string"},
PrefixIndexedFields: &[]string{"*req.index1", "*req.index2"},
SuffixIndexedFields: &[]string{"*req.index1", "*req.index2"},
ExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
NotExistsIndexedFields: &[]string{"*req.index1", "*req.index2"},
NestedFields: true,
Opts: &StatsOpts{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
@@ -121,6 +125,8 @@ func TestStatSCfgAsMapInterface(t *testing.T) {
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
@@ -146,6 +152,8 @@ func TestStatSCfgAsMapInterface1(t *testing.T) {
"string_indexed_fields": ["*req.string"],
"prefix_indexed_fields": ["*req.prefix_indexed_fields1","*req.prefix_indexed_fields2"],
"suffix_indexed_fields":["*req.suffix_indexed_fields"],
"exists_indexed_fields":["*req.exists_indexed_fields"],
"notexists_indexed_fields":["*req.notexists_indexed_fields"],
"nested_fields": true,
},
}`
@@ -158,6 +166,8 @@ func TestStatSCfgAsMapInterface1(t *testing.T) {
utils.StringIndexedFieldsCfg: []string{"*req.string"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix_indexed_fields1", "*req.prefix_indexed_fields2"},
utils.SuffixIndexedFieldsCfg: []string{"*req.suffix_indexed_fields"},
utils.ExistsIndexedFieldsCfg: []string{"*req.exists_indexed_fields"},
utils.NotExistsIndexedFieldsCfg: []string{"*req.notexists_indexed_fields"},
utils.NestedFieldsCfg: true,
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},

View File

@@ -27,25 +27,29 @@ import (
func TestThresholdSCfgloadFromJsonCfgCase1(t *testing.T) {
cfgJSON := &ThresholdSJsonCfg{
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
Store_interval: utils.StringPointer("2"),
String_indexed_fields: &[]string{"*req.prefix"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Actions_conns: &[]string{utils.MetaInternal},
Opts: &ThresholdsOptsJson{},
Enabled: utils.BoolPointer(true),
Indexed_selects: utils.BoolPointer(true),
Store_interval: utils.StringPointer("2"),
String_indexed_fields: &[]string{"*req.prefix"},
Prefix_indexed_fields: &[]string{"*req.index1"},
Suffix_indexed_fields: &[]string{"*req.index1"},
Exists_indexed_fields: &[]string{"*req.index1"},
Notexists_indexed_fields: &[]string{"*req.index1"},
Nested_fields: utils.BoolPointer(true),
Actions_conns: &[]string{utils.MetaInternal},
Opts: &ThresholdsOptsJson{},
}
expected := &ThresholdSCfg{
Enabled: true,
IndexedSelects: true,
StoreInterval: 2,
StringIndexedFields: &[]string{"*req.prefix"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
ActionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaActions)},
Enabled: true,
IndexedSelects: true,
StoreInterval: 2,
StringIndexedFields: &[]string{"*req.prefix"},
PrefixIndexedFields: &[]string{"*req.index1"},
SuffixIndexedFields: &[]string{"*req.index1"},
ExistsIndexedFields: &[]string{"*req.index1"},
NotExistsIndexedFields: &[]string{"*req.index1"},
NestedFields: true,
ActionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaActions)},
Opts: &ThresholdsOpts{
ProfileIDs: []*utils.DynamicStringSliceOpt{},
ProfileIgnoreFilters: []*utils.DynamicBoolOpt{},
@@ -115,13 +119,15 @@ func TestThresholdSCfgAsMapInterfaceCase1(t *testing.T) {
"thresholds": {},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: false,
utils.StoreIntervalCfg: "",
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.ActionSConnsCfg: []string{},
utils.EnabledCfg: false,
utils.StoreIntervalCfg: "",
utils.IndexedSelectsCfg: true,
utils.PrefixIndexedFieldsCfg: []string{},
utils.SuffixIndexedFieldsCfg: []string{},
utils.ExistsIndexedFieldsCfg: []string{},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: false,
utils.ActionSConnsCfg: []string{},
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProfileIgnoreFilters: []*utils.DynamicBoolOpt{},
@@ -143,19 +149,23 @@ func TestThresholdSCfgAsMapInterfaceCase2(t *testing.T) {
"string_indexed_fields": ["*req.string"],
"prefix_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"],
"suffix_indexed_fields": ["*req.suffix_indexed_fields1", "*req.suffix_indexed_fields2"],
"exists_indexed_fields": ["*req.prefix","*req.indexed","*req.fields"],
"notexists_indexed_fields": [],
"nested_fields": true,
"actions_conns": ["*internal"],
},
}`
eMap := map[string]interface{}{
utils.EnabledCfg: true,
utils.StoreIntervalCfg: "96h0m0s",
utils.IndexedSelectsCfg: false,
utils.StringIndexedFieldsCfg: []string{"*req.string"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.SuffixIndexedFieldsCfg: []string{"*req.suffix_indexed_fields1", "*req.suffix_indexed_fields2"},
utils.NestedFieldsCfg: true,
utils.ActionSConnsCfg: []string{utils.MetaInternal},
utils.EnabledCfg: true,
utils.StoreIntervalCfg: "96h0m0s",
utils.IndexedSelectsCfg: false,
utils.StringIndexedFieldsCfg: []string{"*req.string"},
utils.PrefixIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.SuffixIndexedFieldsCfg: []string{"*req.suffix_indexed_fields1", "*req.suffix_indexed_fields2"},
utils.ExistsIndexedFieldsCfg: []string{"*req.prefix", "*req.indexed", "*req.fields"},
utils.NotExistsIndexedFieldsCfg: []string{},
utils.NestedFieldsCfg: true,
utils.ActionSConnsCfg: []string{utils.MetaInternal},
utils.OptsCfg: map[string]interface{}{
utils.MetaProfileIDs: []*utils.DynamicStringSliceOpt{},
utils.MetaProfileIgnoreFilters: []*utils.DynamicBoolOpt{},