diff --git a/apier/v1/accounts_it_test.go b/apier/v1/accounts_it_test.go index e0f78b775..4d88f3286 100644 --- a/apier/v1/accounts_it_test.go +++ b/apier/v1/accounts_it_test.go @@ -78,9 +78,6 @@ func TestAccITWithRemove(t *testing.T) { default: t.Fatal("Unknown Database type") } - if *encoding == utils.MetaGOB { - accTestsConfig += "_gob" - } accCfgPath = path.Join(*dataDir, "conf", "samples", accTestsConfig) for _, stest := range accTests { diff --git a/apier/v1/config_it_test.go b/apier/v1/config_it_test.go index 89d0b725f..4ebf7e9ab 100644 --- a/apier/v1/config_it_test.go +++ b/apier/v1/config_it_test.go @@ -154,7 +154,12 @@ func testConfigSReloadConfigFromJSONSessionS(t *testing.T) { "StoreSCosts": false, "AlterableFields": map[string]interface{}{}, } - + if *encoding == utils.MetaGOB { + var empty []interface{} + exp["ThreshSConns"] = empty + exp["StatSConns"] = empty + exp["ReplicationConns"] = empty + } var rpl map[string]interface{} if err := configRPC.Call(utils.ConfigSv1GetJSONSection, &config.StringWithArgDispatcher{ Section: config.SessionSJson, diff --git a/apier/v1/dm_remote_it_test.go b/apier/v1/dm_remote_it_test.go index 9d77cb976..387b9d596 100644 --- a/apier/v1/dm_remote_it_test.go +++ b/apier/v1/dm_remote_it_test.go @@ -930,7 +930,7 @@ func testInternalSetAccount(t *testing.T) { func testInternalReplicateStats(t *testing.T) { var reply string - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "StatsToReplicate", diff --git a/apier/v1/filter_indexes_it_test.go b/apier/v1/filter_indexes_it_test.go index e704e7b88..3dfa81adb 100644 --- a/apier/v1/filter_indexes_it_test.go +++ b/apier/v1/filter_indexes_it_test.go @@ -438,7 +438,7 @@ func testV1FIdxSetStatQueueProfileIndexes(t *testing.T) { err.Error() != utils.ErrNotFound.Error() { t.Error(err) } - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: tenant, ID: "TEST_PROFILE1", @@ -541,7 +541,7 @@ func testV1FIdxSetSecondStatQueueProfileIndexes(t *testing.T) { err.Error() != utils.ErrNotFound.Error() { t.Error(err) } - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: tenant, ID: "TEST_PROFILE2", diff --git a/apier/v1/filterindexecache_it_test.go b/apier/v1/filterindexecache_it_test.go index f5106bbfa..4d7e0d5a2 100644 --- a/apier/v1/filterindexecache_it_test.go +++ b/apier/v1/filterindexecache_it_test.go @@ -522,7 +522,7 @@ func testV1FIdxCaSetStatQueueProfile(t *testing.T) { } else if result != utils.OK { t.Error("Unexpected reply returned", result) } - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "TEST_PROFILE1", @@ -675,7 +675,7 @@ func testV1FIdxCaUpdateStatQueueProfile(t *testing.T) { } else if result != utils.OK { t.Error("Unexpected reply returned", result) } - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "TEST_PROFILE1", @@ -758,7 +758,7 @@ func testV1FIdxCaUpdateStatQueueProfileFromTP(t *testing.T) { reply.FilterIDs = []string{"FLTR_3"} reply.ActivationInterval = &utils.ActivationInterval{ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC)} if err := tFIdxCaRpc.Call(utils.APIerSv1SetStatQueueProfile, - &StatQueueWithCache{StatQueueProfile: &reply}, &result); err != nil { + &engine.StatQueueWithCache{StatQueueProfile: &reply}, &result); err != nil { t.Error(err) } else if result != utils.OK { t.Error("Unexpected reply returned", result) diff --git a/apier/v1/stats.go b/apier/v1/stats.go index 7d7535f19..07ca5e13e 100644 --- a/apier/v1/stats.go +++ b/apier/v1/stats.go @@ -60,13 +60,8 @@ func (APIerSv1 *APIerSv1) GetStatQueueProfileIDs(args utils.TenantArgWithPaginat return nil } -type StatQueueWithCache struct { - *engine.StatQueueProfile - Cache *string -} - // SetStatQueueProfile alters/creates a StatQueueProfile -func (APIerSv1 *APIerSv1) SetStatQueueProfile(arg *StatQueueWithCache, reply *string) error { +func (APIerSv1 *APIerSv1) SetStatQueueProfile(arg *engine.StatQueueWithCache, reply *string) error { if missing := utils.MissingStructFields(arg.StatQueueProfile, []string{"Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index 711f9bb06..617cf6873 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -36,7 +36,7 @@ var ( stsV1CfgPath string stsV1Cfg *config.CGRConfig stsV1Rpc *rpc.Client - statConfig *StatQueueWithCache + statConfig *engine.StatQueueWithCache stsV1ConfDIR string //run tests for specific configuration evs = []*utils.CGREvent{ @@ -150,7 +150,7 @@ func testV1STSGetStats(t *testing.T) { var reply []string expectedIDs := []string{"Stats1"} if err := stsV1Rpc.Call(utils.StatSv1GetQueueIDs, - &utils.TenantWithArgDispatcher{TenantArg: &utils.TenantArg{"cgrates.org"}}, &reply); err != nil { + &utils.TenantWithArgDispatcher{TenantArg: &utils.TenantArg{Tenant: "cgrates.org"}}, &reply); err != nil { t.Error(err) } else if !reflect.DeepEqual(expectedIDs, reply) { t.Errorf("expecting: %+v, received reply: %s", expectedIDs, reply) @@ -362,7 +362,7 @@ func testV1STSSetStatQueueProfile(t *testing.T) { err.Error() != utils.ErrNotFound.Error() { t.Error(err) } - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "TEST_PROFILE1", @@ -374,10 +374,10 @@ func testV1STSSetStatQueueProfile(t *testing.T) { QueueLength: 10, TTL: time.Duration(10) * time.Second, Metrics: []*engine.MetricWithFilters{ - &engine.MetricWithFilters{ + { MetricID: utils.MetaACD, }, - &engine.MetricWithFilters{ + { MetricID: utils.MetaTCD, }, }, @@ -471,7 +471,7 @@ func testV1STSRemoveStatQueueProfile(t *testing.T) { } func testV1STSProcessMetricsWithFilter(t *testing.T) { - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "CustomStatProfile", @@ -482,15 +482,15 @@ func testV1STSProcessMetricsWithFilter(t *testing.T) { QueueLength: 100, TTL: time.Duration(1) * time.Second, Metrics: []*engine.MetricWithFilters{ - &engine.MetricWithFilters{ + { MetricID: utils.MetaACD, FilterIDs: []string{"*rsr::~*req.Usage{*duration}(>10s)"}, }, - &engine.MetricWithFilters{ + { MetricID: utils.MetaTCD, FilterIDs: []string{"*gt:~*req.Usage:5s"}, }, - &engine.MetricWithFilters{ + { MetricID: utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+"CustomValue"), FilterIDs: []string{"*exists:~*req.CustomValue:", "*gte:~*req.CustomValue:10.0"}, }, @@ -590,7 +590,7 @@ func testV1STSProcessMetricsWithFilter(t *testing.T) { } func testV1STSProcessStaticMetrics(t *testing.T) { - statConfig = &StatQueueWithCache{ + statConfig = &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "StaticStatQueue", @@ -601,10 +601,10 @@ func testV1STSProcessStaticMetrics(t *testing.T) { QueueLength: 100, TTL: time.Duration(1) * time.Second, Metrics: []*engine.MetricWithFilters{ - &engine.MetricWithFilters{ + { MetricID: utils.ConcatenatedKey(utils.MetaSum, "1"), }, - &engine.MetricWithFilters{ + { MetricID: utils.ConcatenatedKey(utils.MetaAverage, "2"), }, }, @@ -695,7 +695,7 @@ func testV1STSStatsPing(t *testing.T) { } func testV1STSProcessStatWithThreshold(t *testing.T) { - stTh := &StatQueueWithCache{ + stTh := &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "StatWithThreshold", @@ -706,10 +706,10 @@ func testV1STSProcessStatWithThreshold(t *testing.T) { QueueLength: 100, TTL: time.Duration(1) * time.Second, Metrics: []*engine.MetricWithFilters{ - &engine.MetricWithFilters{ + { MetricID: utils.MetaTCD, }, - &engine.MetricWithFilters{ + { MetricID: utils.ConcatenatedKey(utils.MetaSum, "2"), }, }, diff --git a/apier/v1/tpaccountactions_it_test.go b/apier/v1/tpaccountactions_it_test.go index b9d4036b7..ab659795c 100644 --- a/apier/v1/tpaccountactions_it_test.go +++ b/apier/v1/tpaccountactions_it_test.go @@ -63,29 +63,19 @@ var sTestsTPAccActions = []func(t *testing.T){ } //Test start here -func TestTPAccActionsITMySql(t *testing.T) { - tpAccActionsConfigDIR = "tutmysql" - for _, stest := range sTestsTPAccActions { - t.Run(tpAccActionsConfigDIR, stest) +func TestTPAccActionsIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpAccActionsConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpAccActionsConfigDIR = "tutmysql" + case utils.MetaMongo: + tpAccActionsConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpAccActionsConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPAccActionsITMongo(t *testing.T) { - tpAccActionsConfigDIR = "tutmongo" - for _, stest := range sTestsTPAccActions { - t.Run(tpAccActionsConfigDIR, stest) - } -} - -func TestTPAccActionsITPG(t *testing.T) { - tpAccActionsConfigDIR = "tutpostgres" - for _, stest := range sTestsTPAccActions { - t.Run(tpAccActionsConfigDIR, stest) - } -} - -func TestTPAccActionsITInternal(t *testing.T) { - tpAccActionsConfigDIR = "tutinternal" for _, stest := range sTestsTPAccActions { t.Run(tpAccActionsConfigDIR, stest) } diff --git a/apier/v1/tpactionplans_it_test.go b/apier/v1/tpactionplans_it_test.go index c0d303770..819e1b558 100644 --- a/apier/v1/tpactionplans_it_test.go +++ b/apier/v1/tpactionplans_it_test.go @@ -60,29 +60,19 @@ var sTestsTPAccPlans = []func(t *testing.T){ } //Test start here -func TestTPAccPlansITMySql(t *testing.T) { - tpAccPlansConfigDIR = "tutmysql" - for _, stest := range sTestsTPAccPlans { - t.Run(tpAccPlansConfigDIR, stest) +func TestTPAccPlansIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpAccPlansConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpAccPlansConfigDIR = "tutmysql" + case utils.MetaMongo: + tpAccPlansConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpAccPlansConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPAccPlansITMongo(t *testing.T) { - tpAccPlansConfigDIR = "tutmongo" - for _, stest := range sTestsTPAccPlans { - t.Run(tpAccPlansConfigDIR, stest) - } -} - -func TestTPAccPlansITPG(t *testing.T) { - tpAccPlansConfigDIR = "tutpostgres" - for _, stest := range sTestsTPAccPlans { - t.Run(tpAccPlansConfigDIR, stest) - } -} - -func TestTPAccPlansITInternal(t *testing.T) { - tpAccPlansConfigDIR = "tutinternal" for _, stest := range sTestsTPAccPlans { t.Run(tpAccPlansConfigDIR, stest) } diff --git a/apier/v1/tpactions_it_test.go b/apier/v1/tpactions_it_test.go index 137ac0c78..1b522a95e 100644 --- a/apier/v1/tpactions_it_test.go +++ b/apier/v1/tpactions_it_test.go @@ -60,29 +60,19 @@ var sTestsTPActions = []func(t *testing.T){ } //Test start here -func TestTPActionsITMySql(t *testing.T) { - tpActionConfigDIR = "tutmysql" - for _, stest := range sTestsTPActions { - t.Run(tpActionConfigDIR, stest) +func TestTPActionsIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpActionConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpActionConfigDIR = "tutmysql" + case utils.MetaMongo: + tpActionConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpActionConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPActionsITMongo(t *testing.T) { - tpActionConfigDIR = "tutmongo" - for _, stest := range sTestsTPActions { - t.Run(tpActionConfigDIR, stest) - } -} - -func TestTPActionsITPG(t *testing.T) { - tpActionConfigDIR = "tutpostgres" - for _, stest := range sTestsTPActions { - t.Run(tpActionConfigDIR, stest) - } -} - -func TestTPActionsITInternal(t *testing.T) { - tpActionConfigDIR = "tutinternal" for _, stest := range sTestsTPActions { t.Run(tpActionConfigDIR, stest) } diff --git a/apier/v1/tpactiontriggers_it_test.go b/apier/v1/tpactiontriggers_it_test.go index ecea476c8..eacf1affc 100644 --- a/apier/v1/tpactiontriggers_it_test.go +++ b/apier/v1/tpactiontriggers_it_test.go @@ -60,29 +60,19 @@ var sTestsTPActionTriggers = []func(t *testing.T){ } //Test start here -func TestTPActionTriggersITMySql(t *testing.T) { - tpActionTriggerConfigDIR = "tutmysql" - for _, stest := range sTestsTPActionTriggers { - t.Run(tpActionTriggerConfigDIR, stest) +func TestTPActionTriggersIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpActionTriggerConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpActionTriggerConfigDIR = "tutmysql" + case utils.MetaMongo: + tpActionTriggerConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpActionTriggerConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPActionTriggersITMongo(t *testing.T) { - tpActionTriggerConfigDIR = "tutmongo" - for _, stest := range sTestsTPActionTriggers { - t.Run(tpActionTriggerConfigDIR, stest) - } -} - -func TestTPActionTriggersITPG(t *testing.T) { - tpActionTriggerConfigDIR = "tutpostgres" - for _, stest := range sTestsTPActionTriggers { - t.Run(tpActionTriggerConfigDIR, stest) - } -} - -func TestTPActionTriggersITInternal(t *testing.T) { - tpActionTriggerConfigDIR = "tutinternal" for _, stest := range sTestsTPActionTriggers { t.Run(tpActionTriggerConfigDIR, stest) } diff --git a/apier/v1/tpattributes.go b/apier/v1/tpattributes.go index 20129fee5..69b81f2f3 100644 --- a/apier/v1/tpattributes.go +++ b/apier/v1/tpattributes.go @@ -22,31 +22,31 @@ import ( "github.com/cgrates/cgrates/utils" ) -// Creates a new AttributeProfile within a tariff plan -func (self *APIerSv1) SetTPAttributeProfile(attrs *utils.TPAttributeProfile, reply *string) error { +// SetTPAttributeProfile creates a new AttributeProfile within a tariff plan +func (api *APIerSv1) SetTPAttributeProfile(attrs *utils.TPAttributeProfile, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPAttributes([]*utils.TPAttributeProfile{attrs}); err != nil { + if err := api.StorDb.SetTPAttributes([]*utils.TPAttributeProfile{attrs}); err != nil { return utils.NewErrServerError(err) } *reply = utils.OK return nil } -// Queries specific AttributeProfile on Tariff plan -func (self *APIerSv1) GetTPAttributeProfile(attr *utils.TPTntID, reply *utils.TPAttributeProfile) error { +// GetTPAttributeProfile queries specific AttributeProfile on Tariff plan +func (api *APIerSv1) GetTPAttributeProfile(attr *utils.TPTntID, reply *utils.TPAttributeProfile) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if als, err := self.StorDb.GetTPAttributes(attr.TPid, attr.Tenant, attr.ID); err != nil { + als, err := api.StorDb.GetTPAttributes(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *als[0] } + *reply = *als[0] return nil } @@ -55,32 +55,32 @@ type AttrGetTPAttributeProfileIds struct { utils.PaginatorWithSearch } -// Queries attribute identities on specific tariff plan. -func (self *APIerSv1) GetTPAttributeProfileIds(attrs *AttrGetTPAttributeProfileIds, reply *[]string) error { +// GetTPAttributeProfileIds queries attribute identities on specific tariff plan. +func (api *APIerSv1) GetTPAttributeProfileIds(attrs *AttrGetTPAttributeProfileIds, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPAttributes, - utils.TPDistinctIds{"id"}, nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPAttributes, + utils.TPDistinctIds{"tenant", "id"}, nil, &attrs.PaginatorWithSearch) + if err != nil { return utils.NewErrServerError(err) - } else if ids == nil { - return utils.ErrNotFound - } else { - *reply = ids } + if ids == nil { + return utils.ErrNotFound + } + *reply = ids return nil } -// Removes specific AttributeProfile on Tariff plan -func (self *APIerSv1) RemoveTPAttributeProfile(attrs *utils.TPTntID, reply *string) error { +// RemoveTPAttributeProfile removes specific AttributeProfile on Tariff plan +func (api *APIerSv1) RemoveTPAttributeProfile(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPAttributes, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPAttributes, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } diff --git a/apier/v1/tpattributes_it_test.go b/apier/v1/tpattributes_it_test.go index 7d71c69b3..d5e3707ee 100644 --- a/apier/v1/tpattributes_it_test.go +++ b/apier/v1/tpattributes_it_test.go @@ -61,22 +61,19 @@ var sTestsTPAlsPrf = []func(t *testing.T){ } //Test start here -func TestTPAlsPrfITMySql(t *testing.T) { - tpAlsPrfConfigDIR = "tutmysql" - for _, stest := range sTestsTPAlsPrf { - t.Run(tpAlsPrfConfigDIR, stest) +func TestTPAlsPrfIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpAlsPrfConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpAlsPrfConfigDIR = "tutmysql" + case utils.MetaMongo: + tpAlsPrfConfigDIR = "tutmongo" + case utils.MetaPostgres: + t.SkipNow() + default: + t.Fatal("Unknown Database type") } -} - -func TestTPAlsPrfITMongo(t *testing.T) { - tpAlsPrfConfigDIR = "tutmongo" - for _, stest := range sTestsTPAlsPrf { - t.Run(tpAlsPrfConfigDIR, stest) - } -} - -func TestTPAlsPrfITInternal(t *testing.T) { - tpAlsPrfConfigDIR = "tutinternal" for _, stest := range sTestsTPAlsPrf { t.Run(tpAlsPrfConfigDIR, stest) } @@ -168,7 +165,7 @@ func testTPAlsPrfGetTPAlsPrfAfterSet(t *testing.T) { func testTPAlsPrfGetTPAlsPrfIDs(t *testing.T) { var result []string - expectedTPID := []string{"Attr1"} + expectedTPID := []string{"cgrates.org:Attr1"} if err := tpAlsPrfRPC.Call(utils.APIerSv1GetTPAttributeProfileIds, &AttrGetTPAttributeProfileIds{TPid: "TP1"}, &result); err != nil { t.Error(err) diff --git a/apier/v1/tpchargers.go b/apier/v1/tpchargers.go index 2339ab5b5..f34419147 100755 --- a/apier/v1/tpchargers.go +++ b/apier/v1/tpchargers.go @@ -22,31 +22,31 @@ import ( "github.com/cgrates/cgrates/utils" ) -// Creates a new ChargerProfile within a tariff plan -func (self *APIerSv1) SetTPCharger(attr *utils.TPChargerProfile, reply *string) error { +// SetTPCharger creates a new ChargerProfile within a tariff plan +func (api *APIerSv1) SetTPCharger(attr *utils.TPChargerProfile, reply *string) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPChargers([]*utils.TPChargerProfile{attr}); err != nil { + if err := api.StorDb.SetTPChargers([]*utils.TPChargerProfile{attr}); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -// Queries specific ChargerProfile on Tariff plan -func (self *APIerSv1) GetTPCharger(attr *utils.TPTntID, reply *utils.TPChargerProfile) error { +// GetTPCharger queries specific ChargerProfile on Tariff plan +func (api *APIerSv1) GetTPCharger(attr *utils.TPTntID, reply *utils.TPChargerProfile) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if rls, err := self.StorDb.GetTPChargers(attr.TPid, attr.Tenant, attr.ID); err != nil { + rls, err := api.StorDb.GetTPChargers(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *rls[0] } + *reply = *rls[0] return nil } @@ -55,33 +55,32 @@ type AttrGetTPChargerIds struct { utils.PaginatorWithSearch } -// Queries Charger identities on specific tariff plan. -func (self *APIerSv1) GetTPChargerIDs(attrs *AttrGetTPChargerIds, reply *[]string) error { +// GetTPChargerIDs queries Charger identities on specific tariff plan. +func (api *APIerSv1) GetTPChargerIDs(attrs *AttrGetTPChargerIds, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPChargers, utils.TPDistinctIds{"id"}, - nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPChargers, utils.TPDistinctIds{"tenant", "id"}, + nil, &attrs.PaginatorWithSearch) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = ids } + *reply = ids return nil } -// Removes specific ChargerProfile on Tariff plan -func (self *APIerSv1) RemoveTPCharger(attrs *utils.TPTntID, reply *string) error { +// RemoveTPCharger removes specific ChargerProfile on Tariff plan +func (api *APIerSv1) RemoveTPCharger(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPChargers, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPChargers, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } diff --git a/apier/v1/tpchargers_it_test.go b/apier/v1/tpchargers_it_test.go index d8eb48fe1..92335b541 100644 --- a/apier/v1/tpchargers_it_test.go +++ b/apier/v1/tpchargers_it_test.go @@ -60,22 +60,19 @@ var sTestsTPChrgs = []func(t *testing.T){ } //Test start here -func TestTPChrgsITMySql(t *testing.T) { - tpChrgsConfigDIR = "tutmysql" - for _, stest := range sTestsTPChrgs { - t.Run(tpChrgsConfigDIR, stest) +func TestTPChrgsIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpChrgsConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpChrgsConfigDIR = "tutmysql" + case utils.MetaMongo: + tpChrgsConfigDIR = "tutmongo" + case utils.MetaPostgres: + t.SkipNow() + default: + t.Fatal("Unknown Database type") } -} - -func TestTPChrgsITMongo(t *testing.T) { - tpChrgsConfigDIR = "tutmongo" - for _, stest := range sTestsTPChrgs { - t.Run(tpChrgsConfigDIR, stest) - } -} - -func TestTPChrgsITInternal(t *testing.T) { - tpChrgsConfigDIR = "tutinternal" for _, stest := range sTestsTPChrgs { t.Run(tpChrgsConfigDIR, stest) } @@ -165,7 +162,7 @@ func testTPChrgsGetTPChrgsAfterSet(t *testing.T) { func testTPChrgsGetTPChrgsIDs(t *testing.T) { var result []string - expectedTPID := []string{"Chrgs"} + expectedTPID := []string{"cgrates.org:Chrgs"} if err := tpChrgsRPC.Call(utils.APIerSv1GetTPChargerIDs, &AttrGetTPAttributeProfileIds{TPid: "TP1"}, &result); err != nil { t.Error(err) diff --git a/apier/v1/tpdestinationrates_it_test.go b/apier/v1/tpdestinationrates_it_test.go index 27a65aeef..58424f106 100644 --- a/apier/v1/tpdestinationrates_it_test.go +++ b/apier/v1/tpdestinationrates_it_test.go @@ -59,29 +59,19 @@ var sTestsTPDstRates = []func(t *testing.T){ } //Test start here -func TestTPDstRateITMySql(t *testing.T) { - tpDstRateConfigDIR = "tutmysql" - for _, stest := range sTestsTPDstRates { - t.Run(tpDstRateConfigDIR, stest) +func TestTPDstRateIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpDstRateConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpDstRateConfigDIR = "tutmysql" + case utils.MetaMongo: + tpDstRateConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpDstRateConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPDstRateITMongo(t *testing.T) { - tpDstRateConfigDIR = "tutmongo" - for _, stest := range sTestsTPDstRates { - t.Run(tpDstRateConfigDIR, stest) - } -} - -func TestTPDstRateITPG(t *testing.T) { - tpDstRateConfigDIR = "tutpostgres" - for _, stest := range sTestsTPDstRates { - t.Run(tpDstRateConfigDIR, stest) - } -} - -func TestTPDstRateITInternal(t *testing.T) { - tpDstRateConfigDIR = "tutinternal" for _, stest := range sTestsTPDstRates { t.Run(tpDstRateConfigDIR, stest) } diff --git a/apier/v1/tpdestinations_it_test.go b/apier/v1/tpdestinations_it_test.go index 1a0cbd009..bd2b34c6b 100644 --- a/apier/v1/tpdestinations_it_test.go +++ b/apier/v1/tpdestinations_it_test.go @@ -59,29 +59,19 @@ var sTestsTPDestinations = []func(t *testing.T){ } //Test start here -func TestTPDestinationsITMySql(t *testing.T) { - tpDestinationConfigDIR = "tutmysql" - for _, stest := range sTestsTPDestinations { - t.Run(tpDestinationConfigDIR, stest) +func TestTPDestinationsIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpDestinationConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpDestinationConfigDIR = "tutmysql" + case utils.MetaMongo: + tpDestinationConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpDestinationConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPDestinationsITMongo(t *testing.T) { - tpDestinationConfigDIR = "tutmongo" - for _, stest := range sTestsTPDestinations { - t.Run(tpDestinationConfigDIR, stest) - } -} - -func TestTPDestinationsITPG(t *testing.T) { - tpDestinationConfigDIR = "tutpostgres" - for _, stest := range sTestsTPDestinations { - t.Run(tpDestinationConfigDIR, stest) - } -} - -func TestTPDestinationsITInternal(t *testing.T) { - tpDestinationConfigDIR = "tutinternal" for _, stest := range sTestsTPDestinations { t.Run(tpDestinationConfigDIR, stest) } diff --git a/apier/v1/tpdispatchers.go b/apier/v1/tpdispatchers.go index 6f37beb07..bc846d725 100644 --- a/apier/v1/tpdispatchers.go +++ b/apier/v1/tpdispatchers.go @@ -22,31 +22,31 @@ import ( "github.com/cgrates/cgrates/utils" ) -//SetTPDispatcher creates a new DispatcherProfile within a tariff plan -func (self *APIerSv1) SetTPDispatcherProfile(attr *utils.TPDispatcherProfile, reply *string) error { +// SetTPDispatcherProfile creates a new DispatcherProfile within a tariff plan +func (api *APIerSv1) SetTPDispatcherProfile(attr *utils.TPDispatcherProfile, reply *string) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPDispatcherProfiles([]*utils.TPDispatcherProfile{attr}); err != nil { + if err := api.StorDb.SetTPDispatcherProfiles([]*utils.TPDispatcherProfile{attr}); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -//GetTPCharger queries specific DispatcherProfile on Tariff plan -func (self *APIerSv1) GetTPDispatcherProfile(attr *utils.TPTntID, reply *utils.TPDispatcherProfile) error { +// GetTPDispatcherProfile queries specific DispatcherProfile on Tariff plan +func (api *APIerSv1) GetTPDispatcherProfile(attr *utils.TPTntID, reply *utils.TPDispatcherProfile) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if rls, err := self.StorDb.GetTPDispatcherProfiles(attr.TPid, attr.Tenant, attr.ID); err != nil { + rls, err := api.StorDb.GetTPDispatcherProfiles(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *rls[0] } + *reply = *rls[0] return nil } @@ -55,92 +55,90 @@ type AttrGetTPDispatcherIds struct { utils.PaginatorWithSearch } -//GetTPDispatcherIDs queries dispatcher identities on specific tariff plan. -func (self *APIerSv1) GetTPDispatcherProfileIDs(attrs *AttrGetTPDispatcherIds, reply *[]string) error { +// GetTPDispatcherProfileIDs queries dispatcher identities on specific tariff plan. +func (api *APIerSv1) GetTPDispatcherProfileIDs(attrs *AttrGetTPDispatcherIds, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPDispatchers, utils.TPDistinctIds{"id"}, - nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPDispatchers, utils.TPDistinctIds{"tenant", "id"}, + nil, &attrs.PaginatorWithSearch) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = ids } + *reply = ids return nil } -//RemoveTPCharger removes specific DispatcherProfile on Tariff plan -func (self *APIerSv1) RemoveTPDispatcherProfile(attrs *utils.TPTntID, reply *string) error { +// RemoveTPDispatcherProfile removes specific DispatcherProfile on Tariff plan +func (api *APIerSv1) RemoveTPDispatcherProfile(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPDispatchers, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPDispatchers, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } -//SetTPDispatcherHost creates a new DispatcherHost within a tariff plan -func (self *APIerSv1) SetTPDispatcherHost(attr *utils.TPDispatcherHost, reply *string) error { +// SetTPDispatcherHost creates a new DispatcherHost within a tariff plan +func (api *APIerSv1) SetTPDispatcherHost(attr *utils.TPDispatcherHost, reply *string) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPDispatcherHosts([]*utils.TPDispatcherHost{attr}); err != nil { + if err := api.StorDb.SetTPDispatcherHosts([]*utils.TPDispatcherHost{attr}); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -//GetTPDispatcherHost queries specific DispatcherHosts on Tariff plan -func (self *APIerSv1) GetTPDispatcherHost(attr *utils.TPTntID, reply *utils.TPDispatcherHost) error { +// GetTPDispatcherHost queries specific DispatcherHosts on Tariff plan +func (api *APIerSv1) GetTPDispatcherHost(attr *utils.TPTntID, reply *utils.TPDispatcherHost) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if rls, err := self.StorDb.GetTPDispatcherHosts(attr.TPid, attr.Tenant, attr.ID); err != nil { + rls, err := api.StorDb.GetTPDispatcherHosts(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *rls[0] } + *reply = *rls[0] return nil } -//GetTPDispatcherHostIDs queries dispatcher host identities on specific tariff plan. -func (self *APIerSv1) GetTPDispatcherHostIDs(attrs *AttrGetTPDispatcherIds, reply *[]string) error { +// GetTPDispatcherHostIDs queries dispatcher host identities on specific tariff plan. +func (api *APIerSv1) GetTPDispatcherHostIDs(attrs *AttrGetTPDispatcherIds, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPDispatcherHosts, utils.TPDistinctIds{"id"}, - nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPDispatcherHosts, utils.TPDistinctIds{"tenant", "id"}, + nil, &attrs.PaginatorWithSearch) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = ids } + *reply = ids return nil } -//RemoveTPDispatcherHost removes specific DispatcherHost on Tariff plan -func (self *APIerSv1) RemoveTPDispatcherHost(attrs *utils.TPTntID, reply *string) error { +// RemoveTPDispatcherHost removes specific DispatcherHost on Tariff plan +func (api *APIerSv1) RemoveTPDispatcherHost(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPDispatcherHosts, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPDispatcherHosts, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } diff --git a/apier/v1/tpdispatchers_it_test.go b/apier/v1/tpdispatchers_it_test.go index 3ffc75eb4..24ad31312 100644 --- a/apier/v1/tpdispatchers_it_test.go +++ b/apier/v1/tpdispatchers_it_test.go @@ -50,7 +50,7 @@ var sTestsTPDispatchers = []func(t *testing.T){ ttestTPDispatcherGetTPDispatcherBeforeSet, testTPDispatcherSetTPDispatcher, testTPDispatcherGetTPDispatcherAfterSet, - testTPDispatcherGetFilterIds, + testTPDispatcherGetTPDispatcherIds, testTPDispatcherUpdateTPDispatcher, testTPDispatcherGetTPDispatcherAfterUpdate, testTPDispatcherRemTPDispatcher, @@ -59,22 +59,19 @@ var sTestsTPDispatchers = []func(t *testing.T){ } //Test start here -func TestTPDispatcherITMySql(t *testing.T) { - tpDispatcherConfigDIR = "tutmysql" - for _, stest := range sTestsTPDispatchers { - t.Run(tpDispatcherConfigDIR, stest) +func TestTPDispatcherIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpDispatcherConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpDispatcherConfigDIR = "tutmysql" + case utils.MetaMongo: + tpDispatcherConfigDIR = "tutmongo" + case utils.MetaPostgres: + t.SkipNow() + default: + t.Fatal("Unknown Database type") } -} - -func TestTPDispatcherITMongo(t *testing.T) { - tpDispatcherConfigDIR = "tutmongo" - for _, stest := range sTestsTPDispatchers { - t.Run(tpDispatcherConfigDIR, stest) - } -} - -func TestTPDispatcherITInternal(t *testing.T) { - tpDispatcherConfigDIR = "tutinternal" for _, stest := range sTestsTPDispatchers { t.Run(tpDispatcherConfigDIR, stest) } @@ -157,9 +154,9 @@ func testTPDispatcherGetTPDispatcherAfterSet(t *testing.T) { } } -func testTPDispatcherGetFilterIds(t *testing.T) { +func testTPDispatcherGetTPDispatcherIds(t *testing.T) { var result []string - expectedTPID := []string{"Dsp1"} + expectedTPID := []string{"cgrates.org:Dsp1"} if err := tpDispatcherRPC.Call(utils.APIerSv1GetTPDispatcherProfileIDs, &AttrGetTPDispatcherIds{TPid: "TP1"}, &result); err != nil { t.Error(err) diff --git a/apier/v1/tpfilters.go b/apier/v1/tpfilters.go index 65c942375..940dc8618 100644 --- a/apier/v1/tpfilters.go +++ b/apier/v1/tpfilters.go @@ -22,31 +22,31 @@ import ( "github.com/cgrates/cgrates/utils" ) -// Creates a new FilterProfile within a tariff plan -func (self *APIerSv1) SetTPFilterProfile(attrs *utils.TPFilterProfile, reply *string) error { +// SetTPFilterProfile creates a new FilterProfile within a tariff plan +func (api *APIerSv1) SetTPFilterProfile(attrs *utils.TPFilterProfile, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPFilters([]*utils.TPFilterProfile{attrs}); err != nil { + if err := api.StorDb.SetTPFilters([]*utils.TPFilterProfile{attrs}); err != nil { return utils.NewErrServerError(err) } *reply = utils.OK return nil } -// Queries specific FilterProfile on tariff plan -func (self *APIerSv1) GetTPFilterProfile(attr *utils.TPTntID, reply *utils.TPFilterProfile) error { +// GetTPFilterProfile queries specific FilterProfile on tariff plan +func (api *APIerSv1) GetTPFilterProfile(attr *utils.TPTntID, reply *utils.TPFilterProfile) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if filter, err := self.StorDb.GetTPFilters(attr.TPid, attr.Tenant, attr.ID); err != nil { + filter, err := api.StorDb.GetTPFilters(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *filter[0] } + *reply = *filter[0] return nil } @@ -55,33 +55,32 @@ type AttrGetTPFilterProfileIds struct { utils.PaginatorWithSearch } -// Queries FilterProfile identities on specific tariff plan. -func (self *APIerSv1) GetTPFilterProfileIds(attrs *AttrGetTPFilterProfileIds, reply *[]string) error { +// GetTPFilterProfileIds queries FilterProfile identities on specific tariff plan. +func (api *APIerSv1) GetTPFilterProfileIds(attrs *AttrGetTPFilterProfileIds, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPFilters, utils.TPDistinctIds{"id"}, - nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPFilters, utils.TPDistinctIds{"tenant", "id"}, + nil, &attrs.PaginatorWithSearch) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = ids } + *reply = ids return nil } -// Removes specific FilterProfile on Tariff plan -func (self *APIerSv1) RemoveTPFilterProfile(attrs *utils.TPTntID, reply *string) error { +// RemoveTPFilterProfile removes specific FilterProfile on Tariff plan +func (api *APIerSv1) RemoveTPFilterProfile(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPFilters, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPFilters, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } diff --git a/apier/v1/tpfilters_it_test.go b/apier/v1/tpfilters_it_test.go index 77b2c3883..62b316392 100644 --- a/apier/v1/tpfilters_it_test.go +++ b/apier/v1/tpfilters_it_test.go @@ -62,28 +62,18 @@ var sTestsTPFilters = []func(t *testing.T){ //Test start here func TestTPFilterITMySql(t *testing.T) { - tpFilterConfigDIR = "tutmysql" - for _, stest := range sTestsTPFilters { - t.Run(tpFilterConfigDIR, stest) + switch *dbType { + case utils.MetaInternal: + tpFilterConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpFilterConfigDIR = "tutmysql" + case utils.MetaMongo: + tpFilterConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpFilterConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPFilterITMongo(t *testing.T) { - tpFilterConfigDIR = "tutmongo" - for _, stest := range sTestsTPFilters { - t.Run(tpFilterConfigDIR, stest) - } -} - -func TestTPFilterITPG(t *testing.T) { - tpFilterConfigDIR = "tutpostgres" - for _, stest := range sTestsTPFilters { - t.Run(tpFilterConfigDIR, stest) - } -} - -func TestTPFilterITInternal(t *testing.T) { - tpFilterConfigDIR = "tutinternal" for _, stest := range sTestsTPFilters { t.Run(tpFilterConfigDIR, stest) } @@ -175,7 +165,7 @@ func testTPFilterGetTPFilterAfterSet(t *testing.T) { func testTPFilterGetFilterIds(t *testing.T) { var result []string - expectedTPID := []string{"Filter"} + expectedTPID := []string{"cgrates.org:Filter"} if err := tpFilterRPC.Call(utils.APIerSv1GetTPFilterProfileIds, &AttrGetTPFilterProfileIds{TPid: "TP1"}, &result); err != nil { t.Error(err) diff --git a/apier/v1/tprates_it_test.go b/apier/v1/tprates_it_test.go index 010ce23c4..06809907d 100644 --- a/apier/v1/tprates_it_test.go +++ b/apier/v1/tprates_it_test.go @@ -59,29 +59,19 @@ var sTestsTPRates = []func(t *testing.T){ } //Test start here -func TestTPRatesITMySql(t *testing.T) { - tpRateConfigDIR = "tutmysql" - for _, stest := range sTestsTPRates { - t.Run(tpRateConfigDIR, stest) +func TestTPRatesIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpRateConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpRateConfigDIR = "tutmysql" + case utils.MetaMongo: + tpRateConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpRateConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPRatesITMongo(t *testing.T) { - tpRateConfigDIR = "tutmongo" - for _, stest := range sTestsTPRates { - t.Run(tpRateConfigDIR, stest) - } -} - -func TestTPRatesITPG(t *testing.T) { - tpRateConfigDIR = "tutpostgres" - for _, stest := range sTestsTPRates { - t.Run(tpRateConfigDIR, stest) - } -} - -func TestTPRatesITInternal(t *testing.T) { - tpRateConfigDIR = "tutinternal" for _, stest := range sTestsTPRates { t.Run(tpRateConfigDIR, stest) } diff --git a/apier/v1/tpratingplans_it_test.go b/apier/v1/tpratingplans_it_test.go index 16b7694f0..0f32684cf 100644 --- a/apier/v1/tpratingplans_it_test.go +++ b/apier/v1/tpratingplans_it_test.go @@ -59,29 +59,19 @@ var sTestsTPRatingPlans = []func(t *testing.T){ } //Test start here -func TestTPRatingPlansITMySql(t *testing.T) { - tpRatingPlanConfigDIR = "tutmysql" - for _, stest := range sTestsTPRatingPlans { - t.Run(tpRatingPlanConfigDIR, stest) +func TestTPRatingPlansIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpRatingPlanConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpRatingPlanConfigDIR = "tutmysql" + case utils.MetaMongo: + tpRatingPlanConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpRatingPlanConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPRatingPlansITMongo(t *testing.T) { - tpRatingPlanConfigDIR = "tutmongo" - for _, stest := range sTestsTPRatingPlans { - t.Run(tpRatingPlanConfigDIR, stest) - } -} - -func TestTPRatingPlansITPG(t *testing.T) { - tpRatingPlanConfigDIR = "tutpostgres" - for _, stest := range sTestsTPRatingPlans { - t.Run(tpRatingPlanConfigDIR, stest) - } -} - -func TestTPRatingPlansITInternal(t *testing.T) { - tpRatingPlanConfigDIR = "tutinternal" for _, stest := range sTestsTPRatingPlans { t.Run(tpRatingPlanConfigDIR, stest) } diff --git a/apier/v1/tpratingprofiles_it_test.go b/apier/v1/tpratingprofiles_it_test.go index 264a60035..d8a1ac15a 100644 --- a/apier/v1/tpratingprofiles_it_test.go +++ b/apier/v1/tpratingprofiles_it_test.go @@ -63,29 +63,19 @@ var sTestsTPRatingProfiles = []func(t *testing.T){ } //Test start here -func TestTPRatingProfilesITMySql(t *testing.T) { - tpRatingProfileConfigDIR = "tutmysql" - for _, stest := range sTestsTPRatingProfiles { - t.Run(tpRatingProfileConfigDIR, stest) +func TestTPRatingProfilesIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpRatingProfileConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpRatingProfileConfigDIR = "tutmysql" + case utils.MetaMongo: + tpRatingProfileConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpRatingProfileConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPRatingProfilesITMongo(t *testing.T) { - tpRatingProfileConfigDIR = "tutmongo" - for _, stest := range sTestsTPRatingProfiles { - t.Run(tpRatingProfileConfigDIR, stest) - } -} - -func TestTPRatingProfilesITPG(t *testing.T) { - tpRatingProfileConfigDIR = "tutpostgres" - for _, stest := range sTestsTPRatingProfiles { - t.Run(tpRatingProfileConfigDIR, stest) - } -} - -func TestTPRatingProfilesITInternal(t *testing.T) { - tpRatingProfileConfigDIR = "tutinternal" for _, stest := range sTestsTPRatingProfiles { t.Run(tpRatingProfileConfigDIR, stest) } diff --git a/apier/v1/tpresources_it_test.go b/apier/v1/tpresources_it_test.go index 076f2c1b5..3d71384df 100644 --- a/apier/v1/tpresources_it_test.go +++ b/apier/v1/tpresources_it_test.go @@ -59,29 +59,19 @@ var sTestsTPResources = []func(t *testing.T){ } //Test start here -func TestTPResITMySql(t *testing.T) { - tpResConfigDIR = "tutmysql" - for _, stest := range sTestsTPResources { - t.Run(tpResConfigDIR, stest) +func TestTPResIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpResConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpResConfigDIR = "tutmysql" + case utils.MetaMongo: + tpResConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpResConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPResITMongo(t *testing.T) { - tpResConfigDIR = "tutmongo" - for _, stest := range sTestsTPResources { - t.Run(tpResConfigDIR, stest) - } -} - -func TestTPResITPG(t *testing.T) { - tpResConfigDIR = "tutpostgres" - for _, stest := range sTestsTPResources { - t.Run(tpResConfigDIR, stest) - } -} - -func TestTPResITInternal(t *testing.T) { - tpResConfigDIR = "tutinternal" for _, stest := range sTestsTPResources { t.Run(tpResConfigDIR, stest) } diff --git a/apier/v1/tpsharedgroups_it_test.go b/apier/v1/tpsharedgroups_it_test.go index 99018d316..b4b792dc3 100644 --- a/apier/v1/tpsharedgroups_it_test.go +++ b/apier/v1/tpsharedgroups_it_test.go @@ -59,29 +59,19 @@ var sTestsTPSharedGroups = []func(t *testing.T){ } //Test start here -func TestTPSharedGroupsITMySql(t *testing.T) { - tpSharedGroupConfigDIR = "tutmysql" - for _, stest := range sTestsTPSharedGroups { - t.Run(tpSharedGroupConfigDIR, stest) +func TestTPSharedGroupsIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpSharedGroupConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpSharedGroupConfigDIR = "tutmysql" + case utils.MetaMongo: + tpSharedGroupConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpSharedGroupConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPSharedGroupsITMongo(t *testing.T) { - tpSharedGroupConfigDIR = "tutmongo" - for _, stest := range sTestsTPSharedGroups { - t.Run(tpSharedGroupConfigDIR, stest) - } -} - -func TestTPSharedGroupsITPG(t *testing.T) { - tpSharedGroupConfigDIR = "tutpostgres" - for _, stest := range sTestsTPSharedGroups { - t.Run(tpSharedGroupConfigDIR, stest) - } -} - -func TestTPSharedGroupsITInternal(t *testing.T) { - tpSharedGroupConfigDIR = "tutinternal" for _, stest := range sTestsTPSharedGroups { t.Run(tpSharedGroupConfigDIR, stest) } diff --git a/apier/v1/tpstats_it_test.go b/apier/v1/tpstats_it_test.go index 93e601767..d0c8ad798 100644 --- a/apier/v1/tpstats_it_test.go +++ b/apier/v1/tpstats_it_test.go @@ -60,29 +60,19 @@ var sTestsTPStats = []func(t *testing.T){ } //Test start here -func TestTPStatITMySql(t *testing.T) { - tpStatConfigDIR = "tutmysql" - for _, stest := range sTestsTPStats { - t.Run(tpStatConfigDIR, stest) +func TestTPStatIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpStatConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpStatConfigDIR = "tutmysql" + case utils.MetaMongo: + tpStatConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpStatConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPStatITMongo(t *testing.T) { - tpStatConfigDIR = "tutmongo" - for _, stest := range sTestsTPStats { - t.Run(tpStatConfigDIR, stest) - } -} - -func TestTPStatITPG(t *testing.T) { - tpStatConfigDIR = "tutpostgres" - for _, stest := range sTestsTPStats { - t.Run(tpStatConfigDIR, stest) - } -} - -func TestTPStatITInternal(t *testing.T) { - tpStatConfigDIR = "tutinternal" for _, stest := range sTestsTPStats { t.Run(tpStatConfigDIR, stest) } diff --git a/apier/v1/tpsuppliers.go b/apier/v1/tpsuppliers.go index 8491cee78..e5555d676 100644 --- a/apier/v1/tpsuppliers.go +++ b/apier/v1/tpsuppliers.go @@ -22,31 +22,31 @@ import ( "github.com/cgrates/cgrates/utils" ) -// Creates a new SupplierProfile within a tariff plan -func (self *APIerSv1) SetTPSupplierProfile(attrs *utils.TPSupplierProfile, reply *string) error { +// SetTPSupplierProfile creates a new SupplierProfile within a tariff plan +func (api *APIerSv1) SetTPSupplierProfile(attrs *utils.TPSupplierProfile, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPSuppliers([]*utils.TPSupplierProfile{attrs}); err != nil { + if err := api.StorDb.SetTPSuppliers([]*utils.TPSupplierProfile{attrs}); err != nil { return utils.NewErrServerError(err) } *reply = utils.OK return nil } -// Queries specific SupplierProfile on tariff plan -func (self *APIerSv1) GetTPSupplierProfile(attr *utils.TPTntID, reply *utils.TPSupplierProfile) error { +// GetTPSupplierProfile queries specific SupplierProfile on tariff plan +func (api *APIerSv1) GetTPSupplierProfile(attr *utils.TPTntID, reply *utils.TPSupplierProfile) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if spp, err := self.StorDb.GetTPSuppliers(attr.TPid, attr.Tenant, attr.ID); err != nil { + spp, err := api.StorDb.GetTPSuppliers(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *spp[0] } + *reply = *spp[0] return nil } @@ -55,33 +55,32 @@ type AttrGetTPSupplierProfileIDs struct { utils.PaginatorWithSearch } -// Queries SupplierProfile identities on specific tariff plan. -func (self *APIerSv1) GetTPSupplierProfileIDs(attrs *AttrGetTPSupplierProfileIDs, reply *[]string) error { +// GetTPSupplierProfileIDs queries SupplierProfile identities on specific tariff plan. +func (api *APIerSv1) GetTPSupplierProfileIDs(attrs *AttrGetTPSupplierProfileIDs, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPSuppliers, - utils.TPDistinctIds{"id"}, nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPSuppliers, + utils.TPDistinctIds{"tenant", "id"}, nil, &attrs.PaginatorWithSearch) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = ids } + *reply = ids return nil } -// Removes specific SupplierProfile on Tariff plan -func (self *APIerSv1) RemoveTPSupplierProfile(attrs *utils.TPTntID, reply *string) error { +// RemoveTPSupplierProfile removes specific SupplierProfile on Tariff plan +func (api *APIerSv1) RemoveTPSupplierProfile(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPSuppliers, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPSuppliers, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } diff --git a/apier/v1/tpsuppliers_it_test.go b/apier/v1/tpsuppliers_it_test.go index fd5c050c8..9662355d0 100644 --- a/apier/v1/tpsuppliers_it_test.go +++ b/apier/v1/tpsuppliers_it_test.go @@ -61,22 +61,19 @@ var sTestsTPSplPrf = []func(t *testing.T){ } //Test start here -func TestTPSplPrfITMySql(t *testing.T) { - tpSplPrfConfigDIR = "tutmysql" - for _, stest := range sTestsTPSplPrf { - t.Run(tpSplPrfConfigDIR, stest) +func TestTPSplPrfIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpSplPrfConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpSplPrfConfigDIR = "tutmysql" + case utils.MetaMongo: + tpSplPrfConfigDIR = "tutmongo" + case utils.MetaPostgres: + t.SkipNow() + default: + t.Fatal("Unknown Database type") } -} - -func TestTPSplPrfITMongo(t *testing.T) { - tpSplPrfConfigDIR = "tutmongo" - for _, stest := range sTestsTPSplPrf { - t.Run(tpSplPrfConfigDIR, stest) - } -} - -func TestTPSplPrfITInternal(t *testing.T) { - tpSplPrfConfigDIR = "tutinternal" for _, stest := range sTestsTPSplPrf { t.Run(tpSplPrfConfigDIR, stest) } @@ -178,7 +175,7 @@ func testTPSplPrfGetTPSplPrfAfterSet(t *testing.T) { func testTPSplPrfGetTPSplPrfIDs(t *testing.T) { var result []string - expectedTPID := []string{"SUPL_1"} + expectedTPID := []string{"cgrates.org:SUPL_1"} if err := tpSplPrfRPC.Call(utils.APIerSv1GetTPSupplierProfileIDs, &AttrGetTPSupplierProfileIDs{TPid: "TP1"}, &result); err != nil { t.Error(err) diff --git a/apier/v1/tpthresholds.go b/apier/v1/tpthresholds.go index 721ad58d2..619f5fe6b 100644 --- a/apier/v1/tpthresholds.go +++ b/apier/v1/tpthresholds.go @@ -22,31 +22,31 @@ import ( "github.com/cgrates/cgrates/utils" ) -// Creates a new threshold within a tariff plan -func (self *APIerSv1) SetTPThreshold(attr *utils.TPThresholdProfile, reply *string) error { +// SetTPThreshold creates a new threshold within a tariff plan +func (api *APIerSv1) SetTPThreshold(attr *utils.TPThresholdProfile, reply *string) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.SetTPThresholds([]*utils.TPThresholdProfile{attr}); err != nil { + if err := api.StorDb.SetTPThresholds([]*utils.TPThresholdProfile{attr}); err != nil { return utils.APIErrorHandler(err) } *reply = utils.OK return nil } -// Queries specific Threshold on Tariff plan -func (self *APIerSv1) GetTPThreshold(attr *utils.TPTntID, reply *utils.TPThresholdProfile) error { +// GetTPThreshold queries specific Threshold on Tariff plan +func (api *APIerSv1) GetTPThreshold(attr *utils.TPTntID, reply *utils.TPThresholdProfile) error { if missing := utils.MissingStructFields(attr, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if rls, err := self.StorDb.GetTPThresholds(attr.TPid, attr.Tenant, attr.ID); err != nil { + rls, err := api.StorDb.GetTPThresholds(attr.TPid, attr.Tenant, attr.ID) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = *rls[0] } + *reply = *rls[0] return nil } @@ -56,34 +56,33 @@ type AttrGetTPThresholdIds struct { utils.PaginatorWithSearch } -// Queries Threshold identities on specific tariff plan. -func (self *APIerSv1) GetTPThresholdIDs(attrs *AttrGetTPThresholdIds, reply *[]string) error { +// GetTPThresholdIDs queries Threshold identities on specific tariff plan. +func (api *APIerSv1) GetTPThresholdIDs(attrs *AttrGetTPThresholdIds, reply *[]string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if ids, err := self.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPThresholds, - utils.TPDistinctIds{"id"}, nil, &attrs.PaginatorWithSearch); err != nil { + ids, err := api.StorDb.GetTpTableIds(attrs.TPid, utils.TBLTPThresholds, + utils.TPDistinctIds{"tenant", "id"}, nil, &attrs.PaginatorWithSearch) + if err != nil { if err.Error() != utils.ErrNotFound.Error() { err = utils.NewErrServerError(err) } return err - } else { - *reply = ids } + *reply = ids return nil } -// Removes specific Threshold on Tariff plan -func (self *APIerSv1) RemoveTPThreshold(attrs *utils.TPTntID, reply *string) error { +// RemoveTPThreshold removes specific Threshold on Tariff plan +func (api *APIerSv1) RemoveTPThreshold(attrs *utils.TPTntID, reply *string) error { if missing := utils.MissingStructFields(attrs, []string{"TPid", "Tenant", "ID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } - if err := self.StorDb.RemTpData(utils.TBLTPThresholds, attrs.TPid, + if err := api.StorDb.RemTpData(utils.TBLTPThresholds, attrs.TPid, map[string]string{"tenant": attrs.Tenant, "id": attrs.ID}); err != nil { return utils.NewErrServerError(err) - } else { - *reply = utils.OK } + *reply = utils.OK return nil } diff --git a/apier/v1/tpthresholds_it_test.go b/apier/v1/tpthresholds_it_test.go index 8d699be57..b490bd72b 100644 --- a/apier/v1/tpthresholds_it_test.go +++ b/apier/v1/tpthresholds_it_test.go @@ -60,29 +60,19 @@ var sTestsTPThreshold = []func(t *testing.T){ } //Test start here -func TestTPThresholdITMySql(t *testing.T) { - tpThresholdConfigDIR = "tutmysql" - for _, stest := range sTestsTPThreshold { - t.Run(tpThresholdConfigDIR, stest) +func TestTPThresholdIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpThresholdConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpThresholdConfigDIR = "tutmysql" + case utils.MetaMongo: + tpThresholdConfigDIR = "tutmongo" + case utils.MetaPostgres: + tpThresholdConfigDIR = "tutpostgres" + default: + t.Fatal("Unknown Database type") } -} - -func TestTPThresholdITMongo(t *testing.T) { - tpThresholdConfigDIR = "tutmongo" - for _, stest := range sTestsTPThreshold { - t.Run(tpThresholdConfigDIR, stest) - } -} - -func TestTPThresholdITPG(t *testing.T) { - tpThresholdConfigDIR = "tutpostgres" - for _, stest := range sTestsTPThreshold { - t.Run(tpThresholdConfigDIR, stest) - } -} - -func TestTPThresholdITInternal(t *testing.T) { - tpThresholdConfigDIR = "tutinternal" for _, stest := range sTestsTPThreshold { t.Run(tpThresholdConfigDIR, stest) } @@ -174,7 +164,7 @@ func testTPThreholdGetTPThreholdAfterSet(t *testing.T) { func testTPThreholdGetTPThreholdIds(t *testing.T) { var result []string - expectedTPID := []string{"Threshold"} + expectedTPID := []string{"cgrates.org:Threshold"} if err := tpThresholdRPC.Call(utils.APIerSv1GetTPThresholdIDs, &AttrGetTPThresholdIds{TPid: tpThreshold.TPid}, &result); err != nil { t.Fatal(err) diff --git a/apier/v1/tptimings_it_test.go b/apier/v1/tptimings_it_test.go index fe74c4775..3f4936ec8 100644 --- a/apier/v1/tptimings_it_test.go +++ b/apier/v1/tptimings_it_test.go @@ -59,29 +59,19 @@ var sTestsTPTiming = []func(t *testing.T){ } //Test start here -func TestTPTimingITMySql(t *testing.T) { - tpTimingConfigDIR = "tutmysql" - for _, stest := range sTestsTPTiming { - t.Run(tpTimingConfigDIR, stest) +func TestTPTimingIT(t *testing.T) { + switch *dbType { + case utils.MetaInternal: + tpTimingConfigDIR = "tutinternal" + case utils.MetaMySQL: + tpTimingConfigDIR = "tutmysql" + case utils.MetaMongo: + tpTimingConfigDIR = "tutmongo" + case utils.MetaPostgres: + t.SkipNow() + default: + t.Fatal("Unknown Database type") } -} - -func TestTPTimingITMongo(t *testing.T) { - tpTimingConfigDIR = "tutmongo" - for _, stest := range sTestsTPTiming { - t.Run(tpTimingConfigDIR, stest) - } -} - -func TestTPTimingITPG(t *testing.T) { - tpTimingConfigDIR = "tutpostgres" - for _, stest := range sTestsTPTiming { - t.Run(tpTimingConfigDIR, stest) - } -} - -func TestTPTimingITInternal(t *testing.T) { - tpTimingConfigDIR = "tutinternal" for _, stest := range sTestsTPTiming { t.Run(tpTimingConfigDIR, stest) } diff --git a/config/config_it_test.go b/config/config_it_test.go index 14354e15c..f45444194 100644 --- a/config/config_it_test.go +++ b/config/config_it_test.go @@ -429,17 +429,17 @@ func testCGRConfigReloadERs(t *testing.T) { flags, _ := utils.FlagsWithParamsFromSlice([]string{"*dryrun"}) flagsDefault, _ := utils.FlagsWithParamsFromSlice([]string{}) content := []*FCTemplate{ - &FCTemplate{Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, - &FCTemplate{Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.ToR, Path: utils.MetaCgreq + utils.NestingSep + utils.ToR, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.2", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.OriginID, Path: utils.MetaCgreq + utils.NestingSep + utils.OriginID, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.3", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.RequestType, Path: utils.MetaCgreq + utils.NestingSep + utils.RequestType, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.4", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.Tenant, Path: utils.MetaCgreq + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.6", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.Category, Path: utils.MetaCgreq + utils.NestingSep + utils.Category, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.7", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.Account, Path: utils.MetaCgreq + utils.NestingSep + utils.Account, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.8", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.Subject, Path: utils.MetaCgreq + utils.NestingSep + utils.Subject, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.9", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.Destination, Path: utils.MetaCgreq + utils.NestingSep + utils.Destination, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.10", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.SetupTime, Path: utils.MetaCgreq + utils.NestingSep + utils.SetupTime, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.11", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.AnswerTime, Path: utils.MetaCgreq + utils.NestingSep + utils.AnswerTime, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.12", true, utils.INFIELD_SEP), Mandatory: true}, + {Tag: utils.Usage, Path: utils.MetaCgreq + utils.NestingSep + utils.Usage, Type: utils.MetaVariable, Value: NewRSRParsersMustCompile("~*req.13", true, utils.INFIELD_SEP), Mandatory: true}, } expAttr := &ERsCfg{ Enabled: true, diff --git a/console/statqueue_set.go b/console/statqueue_set.go index 2d7ed65b5..7fc97db36 100644 --- a/console/statqueue_set.go +++ b/console/statqueue_set.go @@ -19,7 +19,6 @@ along with this program. If not, see package console import ( - v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -28,7 +27,7 @@ func init() { c := &CmdSetStatQueue{ name: "statqueue_set", rpcMethod: utils.APIerSv1SetStatQueueProfile, - rpcParams: &v1.StatQueueWithCache{}, + rpcParams: &engine.StatQueueWithCache{}, } commands[c.Name()] = c c.CommandExecuter = &CommandExecuter{c} @@ -38,7 +37,7 @@ func init() { type CmdSetStatQueue struct { name string rpcMethod string - rpcParams *v1.StatQueueWithCache + rpcParams *engine.StatQueueWithCache *CommandExecuter } @@ -52,7 +51,7 @@ func (self *CmdSetStatQueue) RpcMethod() string { func (self *CmdSetStatQueue) RpcParams(reset bool) interface{} { if reset || self.rpcParams == nil { - self.rpcParams = &v1.StatQueueWithCache{StatQueueProfile: new(engine.StatQueueProfile)} + self.rpcParams = &engine.StatQueueWithCache{StatQueueProfile: new(engine.StatQueueProfile)} } return self.rpcParams } diff --git a/engine/actions_it_test.go b/engine/actions_it_test.go index 905bd0a65..8465b1fbb 100644 --- a/engine/actions_it_test.go +++ b/engine/actions_it_test.go @@ -694,19 +694,21 @@ func testActionsitSetSDestinations(t *testing.T) { } // set a StatQueueProfile and simulate process event - statConfig := &StatQueueProfile{ - Tenant: "cgrates.org", - ID: "DistinctMetricProfile", - QueueLength: 10, - TTL: time.Duration(10) * time.Second, - Metrics: []*MetricWithFilters{ - &MetricWithFilters{ - MetricID: utils.MetaDDC, + statConfig := &StatQueueWithCache{ + StatQueueProfile: &StatQueueProfile{ + Tenant: "cgrates.org", + ID: "DistinctMetricProfile", + QueueLength: 10, + TTL: time.Duration(10) * time.Second, + Metrics: []*MetricWithFilters{ + &MetricWithFilters{ + MetricID: utils.MetaDDC, + }, }, + ThresholdIDs: []string{utils.META_NONE}, + Stored: true, + Weight: 20, }, - ThresholdIDs: []string{utils.META_NONE}, - Stored: true, - Weight: 20, } if err := actsLclRpc.Call(utils.APIerSv1SetStatQueueProfile, statConfig, &reply); err != nil { diff --git a/engine/caches.go b/engine/caches.go index 3a3a52e81..e4860aae0 100644 --- a/engine/caches.go +++ b/engine/caches.go @@ -19,6 +19,7 @@ along with this program. If not, see package engine import ( + "encoding/gob" "fmt" "sync" "time" @@ -33,6 +34,20 @@ var Cache *ltcache.TransCache func init() { InitCache(nil) + + gob.Register(new(EventCost)) + + // StatMetrics + gob.Register(new(StatASR)) + gob.Register(new(StatACD)) + gob.Register(new(StatTCD)) + gob.Register(new(StatACC)) + gob.Register(new(StatTCC)) + gob.Register(new(StatPDD)) + gob.Register(new(StatDDC)) + gob.Register(new(StatSum)) + gob.Register(new(StatAverage)) + gob.Register(new(StatDistinct)) } // InitCache will instantiate the cache with specific or default configuraiton diff --git a/engine/libstats.go b/engine/libstats.go index 8ee3f4b6a..054cb18d8 100644 --- a/engine/libstats.go +++ b/engine/libstats.go @@ -48,6 +48,11 @@ func (sqp *StatQueueProfile) TenantID() string { return utils.ConcatenatedKey(sqp.Tenant, sqp.ID) } +type StatQueueWithCache struct { + *StatQueueProfile + Cache *string +} + type MetricWithFilters struct { FilterIDs []string MetricID string @@ -128,18 +133,30 @@ type SQItem struct { // StatQueue represents an individual stats instance type StatQueue struct { - sync.RWMutex // protect the elements from within - Tenant string - ID string - SQItems []SQItem - SQMetrics map[string]StatMetric - MinItems int - sqPrfl *StatQueueProfile - dirty *bool // needs save - ttl *time.Duration // timeToLeave, picked on each init + lk sync.RWMutex // protect the elements from within + Tenant string + ID string + SQItems []SQItem + SQMetrics map[string]StatMetric + MinItems int + sqPrfl *StatQueueProfile + dirty *bool // needs save + ttl *time.Duration // timeToLeave, picked on each init } -// SqID will compose the unique identifier for the StatQueue out of Tenant and ID +// RLock only to implement sync.RWMutex methods +func (sq *StatQueue) RLock() { sq.lk.RLock() } + +// RUnlock only to implement sync.RWMutex methods +func (sq *StatQueue) RUnlock() { sq.lk.RUnlock() } + +// Lock only to implement sync.RWMutex methods +func (sq *StatQueue) Lock() { sq.lk.Lock() } + +// Unlock only to implement sync.RWMutex methods +func (sq *StatQueue) Unlock() { sq.lk.Unlock() } + +// TenantID will compose the unique identifier for the StatQueue out of Tenant and ID func (sq *StatQueue) TenantID() string { return utils.ConcatenatedKey(sq.Tenant, sq.ID) } diff --git a/engine/statmetrics.go b/engine/statmetrics.go index cd6f74aee..60dc0fb97 100644 --- a/engine/statmetrics.go +++ b/engine/statmetrics.go @@ -59,7 +59,7 @@ func NewStatMetric(metricID string, minItems int, filterIDs []string) (sm StatMe utils.MetaDistinct: NewStatDistinct, } // split the metricID - // in case of *sum we have *sum:~FieldName + // in case of *sum we have *sum:~*req.FieldName metricSplit := utils.SplitConcatenatedKey(metricID) if _, has := metrics[metricSplit[0]]; !has { return nil, fmt.Errorf("unsupported metric type <%s>", metricSplit[0]) @@ -1037,16 +1037,17 @@ func (sum *StatSum) GetFloat64Value() (v float64) { func (sum *StatSum) AddEvent(ev *utils.CGREvent) (err error) { var val float64 - if strings.HasPrefix(sum.FieldName, utils.DynamicDataPrefix) { + switch { + case strings.HasPrefix(sum.FieldName, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep): // ~*req. //Remove the dynamic prefix and check in event for field - field := sum.FieldName[1:] + field := sum.FieldName[6:] if val, err = ev.FieldAsFloat64(field); err != nil { if err == utils.ErrNotFound { err = utils.ErrPrefix(err, field) } return } - } else { // in case we don't receive FieldName we consider that we receive a number + default: val, err = utils.IfaceAsFloat64(sum.FieldName) if err != nil { return @@ -1174,16 +1175,17 @@ func (avg *StatAverage) GetFloat64Value() (v float64) { func (avg *StatAverage) AddEvent(ev *utils.CGREvent) (err error) { var val float64 - if strings.HasPrefix(avg.FieldName, utils.DynamicDataPrefix) { + switch { + case strings.HasPrefix(avg.FieldName, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep): // ~*req. //Remove the dynamic prefix and check in event for field - field := avg.FieldName[1:] + field := avg.FieldName[6:] if val, err = ev.FieldAsFloat64(field); err != nil { if err == utils.ErrNotFound { err = utils.ErrPrefix(err, field) } return } - } else { // in case we don't receive FieldName we consider that we receive a number + default: val, err = utils.IfaceAsFloat64(avg.FieldName) if err != nil { return @@ -1303,8 +1305,11 @@ func (dst *StatDistinct) GetFloat64Value() (v float64) { func (dst *StatDistinct) AddEvent(ev *utils.CGREvent) (err error) { var fieldValue string - // simply remove the Dynamic prefix and do normal process - field := dst.FieldName[1:] + // simply remove the ~*req. prefix and do normal process + if !strings.HasPrefix(dst.FieldName, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep) { + return fmt.Errorf("Invalid format for field <%s>", dst.FieldName) + } + field := dst.FieldName[6:] if fieldValue, err = ev.FieldAsString(field); err != nil { return err } diff --git a/general_tests/cdrs_it_test.go b/general_tests/cdrs_it_test.go index 2bfa5525e..e262a423d 100644 --- a/general_tests/cdrs_it_test.go +++ b/general_tests/cdrs_it_test.go @@ -27,8 +27,6 @@ import ( "testing" "time" - v1 "github.com/cgrates/cgrates/apier/v1" - "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -473,17 +471,15 @@ func testV2CDRsSetStats(t *testing.T) { err.Error() != utils.ErrNotFound.Error() { t.Error(err) } - statConfig := &v1.StatQueueWithCache{ + statConfig := &engine.StatQueueWithCache{ StatQueueProfile: &engine.StatQueueProfile{ Tenant: "cgrates.org", ID: "STS_PoccessCDR", FilterIDs: []string{"*string:~*req.OriginID:testV2CDRsProcessCDR5"}, // QueueLength: 10, - Metrics: []*engine.MetricWithFilters{ - &engine.MetricWithFilters{ - MetricID: "*sum:~Usage", - }, - }, + Metrics: []*engine.MetricWithFilters{{ + MetricID: "*sum:~*req.Usage", + }}, ThresholdIDs: []string{utils.META_NONE}, Blocker: true, Stored: true, @@ -592,7 +588,7 @@ func testV2CDRsGetStats1(t *testing.T) { expectedIDs := []string{"STS_PoccessCDR"} var metrics map[string]string expectedMetrics := map[string]string{ - utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.Usage): utils.NOT_AVAILABLE, + utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.Usage): utils.NOT_AVAILABLE, } if err := cdrsRpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantIDWithArgDispatcher{ @@ -659,7 +655,7 @@ func testV2CDRsGetStats2(t *testing.T) { expectedIDs := []string{"STS_PoccessCDR"} var metrics map[string]string expectedMetrics := map[string]string{ - utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.Usage): "60000000000", + utils.ConcatenatedKey(utils.MetaSum, utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.Usage): "60000000000", } if err := cdrsRpc.Call(utils.StatSv1GetQueueStringMetrics, &utils.TenantIDWithArgDispatcher{ diff --git a/integration_test.sh b/integration_test.sh index c40837e62..6e7fb00c5 100755 --- a/integration_test.sh +++ b/integration_test.sh @@ -31,6 +31,9 @@ smg_internal=$? echo 'go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*internal' go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*internal dis_internal=$? +echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*internal' +go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*internal +offline_internal=$? # SQL echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=integration -dbtype=*mysql' go test github.com/cgrates/cgrates/apier/v1 -tags=integration -dbtype=*mysql @@ -59,6 +62,9 @@ smg_mysql=$? echo 'go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*mysql' go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*mysql dis_mysql=$? +echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*mysql' +go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*mysql +offline_mysql=$? # Mongo echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=integration -dbtype=*mongo' go test github.com/cgrates/cgrates/apier/v1 -tags=integration -dbtype=*mongo @@ -87,6 +93,9 @@ smg_mongo=$? echo 'go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*mongo' go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*mongo dis_mongo=$? +echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*mongo' +go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*mongo +offline_mongo=$? # Postgres echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=integration -dbtype=*postgres' go test github.com/cgrates/cgrates/apier/v1 -tags=integration -dbtype=*postgres @@ -115,6 +124,9 @@ smg_postgres=$? echo 'go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*postgres' go test github.com/cgrates/cgrates/dispatchers -tags=integration -dbtype=*postgres dis_postgres=$? +echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*postgres' +go test github.com/cgrates/cgrates/apier/v1 -tags=offline -dbtype=*postgres +offline_postgres=$? echo 'go test github.com/cgrates/cgrates/config -tags=integration' go test github.com/cgrates/cgrates/config -tags=integration @@ -125,10 +137,11 @@ mgr=$? echo 'go test github.com/cgrates/cgrates/services -tags=integration' go test github.com/cgrates/cgrates/services -tags=integration srv=$? -#All -echo 'go test github.com/cgrates/cgrates/apier/v1 -tags=offline' -go test github.com/cgrates/cgrates/apier/v1 -tags=offline -offline=$? -# to do: add '&& $ap1_internal' -exit $gen && $ap1_sql && $ap1_mongo && $ap2 && $en && $cfg && $utl && $gnr && $agts && $smg && $mgr && $dis && $lds && $ers && $srv && $offline +exit $gen && $ap1_internal && $ap2_internal && $en_internal && $ers_internal && $lds_internal && +$gnr_internal && $agts_internal && $smg_internal && $dis_internal && $offline_internal && $ap1_mysql && +$ap2_mysql && $en_mysql && $ers_mysql && $lds_mysql && $gnr_mysql && $agts_mysql && $smg_mysql && +$dis_mysql && $offline_mysql && $ap1_mongo && $ap2_mongo && $en_mongo && $ers_mongo && $lds_mongo && +$gnr_mongo && $agts_mongo && $smg_mongo && $dis_mongo && $offline_mongo && $ap1_postgres && +$ap2_postgres && $en_postgres && $ers_postgres && $lds_postgres && $gnr_postgres && $agts_postgres && +$smg_postgres && $dis_postgres && $offline_postgres && $cfg && $mgr && $srv \ No newline at end of file diff --git a/services/datadb_it_test.go b/services/datadb_it_test.go index d1baf4253..f4351e569 100644 --- a/services/datadb_it_test.go +++ b/services/datadb_it_test.go @@ -82,103 +82,128 @@ func TestDataDBReload(t *testing.T) { DataDbUser: "cgrates", QueryTimeout: 10 * time.Second, Items: map[string]*config.ItemOpt{ - utils.MetaAccounts: &config.ItemOpt{ + utils.MetaAccounts: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaReverseDestinations: &config.ItemOpt{ + utils.MetaReverseDestinations: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaDestinations: &config.ItemOpt{ + utils.MetaDestinations: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaRatingPlans: &config.ItemOpt{ + utils.MetaRatingPlans: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaRatingProfiles: &config.ItemOpt{ + utils.MetaRatingProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaActions: &config.ItemOpt{ + utils.MetaActions: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaActionPlans: &config.ItemOpt{ + utils.MetaActionPlans: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaAccountActionPlans: &config.ItemOpt{ + utils.MetaAccountActionPlans: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaActionTriggers: &config.ItemOpt{ + utils.MetaActionTriggers: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaSharedGroups: &config.ItemOpt{ + utils.MetaSharedGroups: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaTimings: &config.ItemOpt{ + utils.MetaTimings: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaResourceProfile: &config.ItemOpt{ + utils.MetaResourceProfile: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaStatQueues: &config.ItemOpt{ + utils.MetaStatQueues: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaResources: &config.ItemOpt{ + utils.MetaResources: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaStatQueueProfiles: &config.ItemOpt{ + utils.MetaStatQueueProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaThresholds: &config.ItemOpt{ + utils.MetaThresholds: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaThresholdProfiles: &config.ItemOpt{ + utils.MetaThresholdProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaFilters: &config.ItemOpt{ + utils.MetaFilters: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaSupplierProfiles: &config.ItemOpt{ + utils.MetaSupplierProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaAttributeProfiles: &config.ItemOpt{ + utils.MetaAttributeProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaDispatcherHosts: &config.ItemOpt{ + utils.MetaDispatcherHosts: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaChargerProfiles: &config.ItemOpt{ + utils.MetaChargerProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaDispatcherProfiles: &config.ItemOpt{ + utils.MetaDispatcherProfiles: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaFilterIndexes: &config.ItemOpt{ + utils.MetaFilterIndexes: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)}, - utils.MetaLoadIDs: &config.ItemOpt{ + utils.MetaLoadIDs: { + Limit: -1, Replicate: false, Remote: false, TTL: time.Duration(0)},