diff --git a/apier/v1/attributes_it_test.go b/apier/v1/attributes_it_test.go index 559faf7fd..0d7d7c261 100644 --- a/apier/v1/attributes_it_test.go +++ b/apier/v1/attributes_it_test.go @@ -167,13 +167,13 @@ func testAttributeSGetAttributeForEvent(t *testing.T) { ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 1, 14, 0, 0, 0, 0, time.UTC)}, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), Append: false, }, - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), @@ -212,7 +212,7 @@ func testAttributeSGetAttributeForEventNotFound(t *testing.T) { ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 1, 14, 0, 0, 0, 0, time.UTC)}, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), @@ -262,7 +262,7 @@ func testAttributeSGetAttributeForEventWithMetaAnyContext(t *testing.T) { ActivationInterval: &utils.ActivationInterval{ ActivationTime: time.Date(2014, 1, 14, 0, 0, 0, 0, time.UTC)}, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), @@ -367,13 +367,13 @@ func testAttributeSProcessEventWithNoneSubstitute(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: "1008", Substitute: config.NewRSRParsersMustCompile("1001", true), Append: false, }, - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile(utils.META_NONE, true), @@ -434,13 +434,13 @@ func testAttributeSProcessEventWithNoneSubstitute2(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: "1008", Substitute: config.NewRSRParsersMustCompile("1001", true), Append: false, }, - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile(utils.META_NONE, true), @@ -513,13 +513,13 @@ func testAttributeSProcessEventWithNoneSubstitute3(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: "1008", Substitute: config.NewRSRParsersMustCompile("1001", true), Append: false, }, - &engine.Attribute{ + { FieldName: utils.Subject, Initial: "1008", Substitute: config.NewRSRParsersMustCompile(utils.META_NONE, true), @@ -568,7 +568,7 @@ func testAttributeSProcessEventWithHeader(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("~Field1", true), @@ -639,7 +639,7 @@ func testAttributeSSetAlsPrf(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: "FL1", Initial: "In1", Substitute: config.NewRSRParsersMustCompile("Al1", true), @@ -668,13 +668,13 @@ func testAttributeSSetAlsPrf(t *testing.T) { func testAttributeSUpdateAlsPrf(t *testing.T) { alsPrf.Attributes = []*engine.Attribute{ - &engine.Attribute{ + { FieldName: "FL1", Initial: "In1", Substitute: config.NewRSRParsersMustCompile("Al1", true), Append: true, }, - &engine.Attribute{ + { FieldName: "FL2", Initial: "In2", Substitute: config.NewRSRParsersMustCompile("Al2", true), @@ -727,7 +727,7 @@ func testAttributeSSetAlsPrf2(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.RSRParsers{ @@ -771,7 +771,7 @@ func testAttributeSSetAlsPrf3(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.RSRParsers{ @@ -802,7 +802,7 @@ func testAttributeSSetAlsPrf4(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.RSRParsers{ diff --git a/apier/v1/filter_indexes_it_test.go b/apier/v1/filter_indexes_it_test.go index d158ab711..17d74faa8 100644 --- a/apier/v1/filter_indexes_it_test.go +++ b/apier/v1/filter_indexes_it_test.go @@ -94,8 +94,10 @@ var sTestsFilterIndexesSV1 = []func(t *testing.T){ // Test start here func TestFIdxV1ITMySQL(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() - rdsITdb, err = engine.NewRedisStorage(fmt.Sprintf("%s:%s", cfg.DataDbHost, cfg.DataDbPort), 10, - cfg.DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, nil, "") + rdsITdb, err = engine.NewRedisStorage( + fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), + 10, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, + nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) @@ -113,8 +115,9 @@ func TestFIdxV1ITMongo(t *testing.T) { if err != nil { t.Fatal(err) } - if mgoITdb, err = engine.NewMongoStorage(mgoITCfg.DataDbHost, mgoITCfg.DataDbPort, - mgoITCfg.DataDbName, mgoITCfg.DataDbUser, mgoITCfg.DataDbPass, + if mgoITdb, err = engine.NewMongoStorage(mgoITCfg.DataDbCfg().DataDbHost, + mgoITCfg.DataDbCfg().DataDbPort, mgoITCfg.DataDbCfg().DataDbName, + mgoITCfg.DataDbCfg().DataDbUser, mgoITCfg.DataDbCfg().DataDbPass, utils.DataDB, nil, mgoITCfg.CacheCfg()); err != nil { t.Fatal(err) } @@ -182,7 +185,7 @@ func testV1FIdxSetThresholdProfile(t *testing.T) { Tenant: tenant, ID: "TestFilter", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -280,7 +283,7 @@ func testV1FIdxSetSecondThresholdProfile(t *testing.T) { Tenant: tenant, ID: "TestFilter2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1002"}, @@ -466,7 +469,7 @@ func testV1FIdxSetStatQueueProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_1", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -499,11 +502,11 @@ func testV1FIdxSetStatQueueProfileIndexes(t *testing.T) { QueueLength: 10, TTL: time.Duration(10) * time.Second, Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{ + { MetricID: "*sum", Parameters: "", }, - &utils.MetricWithParams{ + { MetricID: "*acd", Parameters: "", }, @@ -574,7 +577,7 @@ func testV1FIdxSetSecondStatQueueProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -607,11 +610,11 @@ func testV1FIdxSetSecondStatQueueProfileIndexes(t *testing.T) { QueueLength: 10, TTL: time.Duration(10) * time.Second, Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{ + { MetricID: "*sum", Parameters: "", }, - &utils.MetricWithParams{ + { MetricID: "*acd", Parameters: "", }, @@ -734,7 +737,7 @@ func testV1FIdxSetResourceProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_RES_RCFG1", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -830,7 +833,7 @@ func testV1FIdxSetSecondResourceProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -972,7 +975,7 @@ func testV1FIdxSetSupplierProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_1", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -1001,7 +1004,7 @@ func testV1FIdxSetSupplierProfileIndexes(t *testing.T) { Sorting: "Sort1", SortingParameters: []string{"Param1", "Param2"}, Suppliers: []*engine.Supplier{ - &engine.Supplier{ + { ID: "SPL1", RatingPlanIDs: []string{"RP1"}, FilterIDs: []string{"FLTR_1"}, @@ -1074,7 +1077,7 @@ func testV1FIdxSetSecondSupplierProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -1103,7 +1106,7 @@ func testV1FIdxSetSecondSupplierProfileIndexes(t *testing.T) { Sorting: "Sort1", SortingParameters: []string{"Param1", "Param2"}, Suppliers: []*engine.Supplier{ - &engine.Supplier{ + { ID: "SPL1", RatingPlanIDs: []string{"RP1"}, FilterIDs: []string{"FLTR_2"}, @@ -1228,7 +1231,7 @@ func testV1FIdxSetAttributeProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_1", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -1260,7 +1263,7 @@ func testV1FIdxSetAttributeProfileIndexes(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: "FL1", Initial: "In1", Substitute: config.NewRSRParsersMustCompile("Al1", true), @@ -1335,7 +1338,7 @@ func testV1FIdxSetSecondAttributeProfileIndexes(t *testing.T) { Tenant: tenant, ID: "FLTR_2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001"}, @@ -1367,7 +1370,7 @@ func testV1FIdxSetSecondAttributeProfileIndexes(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: "FL1", Initial: "In1", Substitute: config.NewRSRParsersMustCompile("Al1", true), diff --git a/apier/v1/filterindexecache_it_test.go b/apier/v1/filterindexecache_it_test.go index 126123c49..264ce0fca 100644 --- a/apier/v1/filterindexecache_it_test.go +++ b/apier/v1/filterindexecache_it_test.go @@ -83,8 +83,10 @@ var sTestsFilterIndexesSV1Ca = []func(t *testing.T){ // Test start here func TestFIdxCaV1ITMySQL(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() - rdsITdb, err := engine.NewRedisStorage(fmt.Sprintf("%s:%s", cfg.DataDbHost, cfg.DataDbPort), 10, - cfg.DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, nil, "") + rdsITdb, err := engine.NewRedisStorage( + fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), + 10, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, + nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } @@ -101,8 +103,9 @@ func TestFIdxCaV1ITMongo(t *testing.T) { if err != nil { t.Fatal(err) } - mgoITdb, err := engine.NewMongoStorage(mgoITCfg.DataDbHost, mgoITCfg.DataDbPort, - mgoITCfg.DataDbName, mgoITCfg.DataDbUser, mgoITCfg.DataDbPass, + mgoITdb, err := engine.NewMongoStorage(mgoITCfg.DataDbCfg().DataDbHost, + mgoITCfg.DataDbCfg().DataDbPort, mgoITCfg.DataDbCfg().DataDbName, + mgoITCfg.DataDbCfg().DataDbUser, mgoITCfg.DataDbCfg().DataDbPass, utils.DataDB, nil, mgoITCfg.CacheCfg()) if err != nil { t.Fatal(err) @@ -185,12 +188,12 @@ func testV1FIdxCaSetThresholdProfile(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1001"}, }, - &engine.FilterRule{ + { FieldName: utils.EventType, Type: "*string", Values: []string{utils.BalanceUpdate}, @@ -275,12 +278,12 @@ func testV1FIdxCaUpdateThresholdProfile(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1002"}, }, - &engine.FilterRule{ + { FieldName: utils.EventType, Type: "*string", Values: []string{utils.AccountUpdate}, @@ -351,12 +354,12 @@ func testV1FIdxCaUpdateThresholdProfileFromTP(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter3", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1003"}, }, - &engine.FilterRule{ + { FieldName: utils.EventType, Type: "*string", Values: []string{utils.BalanceUpdate}, @@ -505,12 +508,12 @@ func testV1FIdxCaSetStatQueueProfile(t *testing.T) { Tenant: tenant, ID: "FLTR_1", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1001"}, }, - &engine.FilterRule{ + { FieldName: utils.EventType, Type: "*string", Values: []string{utils.AccountUpdate}, @@ -537,7 +540,7 @@ func testV1FIdxCaSetStatQueueProfile(t *testing.T) { QueueLength: 10, TTL: time.Duration(10) * time.Second, Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{ + { MetricID: "*sum", Parameters: "Val", }, @@ -633,12 +636,12 @@ func testV1FIdxCaUpdateStatQueueProfile(t *testing.T) { Tenant: "cgrates.org", ID: "FLTR_2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1003"}, }, - &engine.FilterRule{ + { FieldName: utils.EventType, Type: "*string", Values: []string{utils.BalanceUpdate}, @@ -664,7 +667,7 @@ func testV1FIdxCaUpdateStatQueueProfile(t *testing.T) { QueueLength: 10, TTL: time.Duration(10) * time.Second, Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{ + { MetricID: "*sum", Parameters: "", }, @@ -701,12 +704,12 @@ func testV1FIdxCaUpdateStatQueueProfileFromTP(t *testing.T) { Tenant: "cgrates.org", ID: "FLTR_3", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1003"}, }, - &engine.FilterRule{ + { FieldName: utils.EventType, Type: "*string", Values: []string{utils.AccountUpdate}, @@ -843,12 +846,12 @@ func testV1FIdxCaSetAttributeProfile(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1009"}, }, - &engine.FilterRule{ + { FieldName: utils.Destination, Type: "*string", Values: []string{"+491511231234"}, @@ -873,13 +876,13 @@ func testV1FIdxCaSetAttributeProfile(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), Append: false, }, - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), @@ -932,12 +935,12 @@ func testV1FIdxCaUpdateAttributeProfile(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"2009"}, }, - &engine.FilterRule{ + { FieldName: utils.Destination, Type: "*string", Values: []string{"+492511231234"}, @@ -962,13 +965,13 @@ func testV1FIdxCaUpdateAttributeProfile(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), Append: false, }, - &engine.Attribute{ + { FieldName: utils.Subject, Initial: "*any", Substitute: config.NewRSRParsersMustCompile("1001", true), @@ -1003,12 +1006,12 @@ func testV1FIdxCaUpdateAttributeProfileFromTP(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter3", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"3009"}, }, - &engine.FilterRule{ + { FieldName: utils.Destination, Type: "*string", Values: []string{"+492511231234"}, @@ -1144,17 +1147,17 @@ func testV1FIdxCaSetResourceProfile(t *testing.T) { Tenant: "cgrates.org", ID: "FLTR_RES_RCFG1", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1001"}, }, - &engine.FilterRule{ + { FieldName: utils.Subject, Type: "*string", Values: []string{"1002"}, }, - &engine.FilterRule{ + { FieldName: utils.Destination, Type: "*string", Values: []string{"1001"}, @@ -1266,17 +1269,17 @@ func testV1FIdxCaUpdateResourceProfile(t *testing.T) { Tenant: "cgrates.org", ID: "FLTR_RES_RCFG2", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"2002"}, }, - &engine.FilterRule{ + { FieldName: utils.Subject, Type: "*string", Values: []string{"2001"}, }, - &engine.FilterRule{ + { FieldName: utils.Destination, Type: "*string", Values: []string{"2002"}, @@ -1337,17 +1340,17 @@ func testV1FIdxCaUpdateResourceProfileFromTP(t *testing.T) { Tenant: "cgrates.org", ID: "FLTR_RES_RCFG3", Rules: []*engine.FilterRule{ - &engine.FilterRule{ + { FieldName: utils.Account, Type: "*string", Values: []string{"1002"}, }, - &engine.FilterRule{ + { FieldName: utils.Subject, Type: "*string", Values: []string{"1001"}, }, - &engine.FilterRule{ + { FieldName: utils.Destination, Type: "*string", Values: []string{"1002"}, diff --git a/apier/v2/apierv2_it_test.go b/apier/v2/apierv2_it_test.go index 63f79caf4..4859452f6 100644 --- a/apier/v2/apierv2_it_test.go +++ b/apier/v2/apierv2_it_test.go @@ -68,9 +68,11 @@ func TestApierV2itResetStorDb(t *testing.T) { } func TestApierV2itConnectDataDB(t *testing.T) { - rdsDb, _ := strconv.Atoi(apierCfg.DataDbName) - if rdsITdb, err := engine.NewRedisStorage(fmt.Sprintf("%s:%s", apierCfg.DataDbHost, apierCfg.DataDbPort), - rdsDb, apierCfg.DataDbPass, apierCfg.DBDataEncoding, utils.REDIS_MAX_CONNS, nil, ""); err != nil { + rdsDb, _ := strconv.Atoi(apierCfg.DataDbCfg().DataDbName) + if rdsITdb, err := engine.NewRedisStorage( + fmt.Sprintf("%s:%s", apierCfg.DataDbCfg().DataDbHost, apierCfg.DataDbCfg().DataDbPort), + rdsDb, apierCfg.DataDbCfg().DataDbPass, apierCfg.DBDataEncoding, + utils.REDIS_MAX_CONNS, nil, ""); err != nil { t.Fatal("Could not connect to Redis", err.Error()) } else { dm = engine.NewDataManager(rdsITdb) @@ -115,7 +117,7 @@ func TestApierV2itAddBalance(t *testing.T) { func TestApierV2itSetAction(t *testing.T) { attrs := utils.AttrSetActions{ActionsId: "DISABLE_ACCOUNT", Actions: []*utils.TPAction{ - &utils.TPAction{Identifier: engine.DISABLE_ACCOUNT, Weight: 10.0}, + {Identifier: engine.DISABLE_ACCOUNT, Weight: 10.0}, }} var reply string if err := apierRPC.Call("ApierV2.SetActions", attrs, &reply); err != nil { @@ -201,7 +203,7 @@ func TestApierV2itFraudMitigation(t *testing.T) { func TestApierV2itSetAccountWithAP(t *testing.T) { argActs1 := utils.AttrSetActions{ActionsId: "TestApierV2itSetAccountWithAP_ACT_1", Actions: []*utils.TPAction{ - &utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Directions: utils.OUT, Units: "5.0", Weight: 20.0}, + {Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Directions: utils.OUT, Units: "5.0", Weight: 20.0}, }} var reply string if err := apierRPC.Call("ApierV2.SetActions", argActs1, &reply); err != nil { @@ -209,7 +211,7 @@ func TestApierV2itSetAccountWithAP(t *testing.T) { } argAP1 := &v1.AttrSetActionPlan{Id: "TestApierV2itSetAccountWithAP_AP_1", ActionPlan: []*v1.AttrActionPlan{ - &v1.AttrActionPlan{ActionsId: argActs1.ActionsId, + {ActionsId: argActs1.ActionsId, Time: time.Now().Add(time.Duration(time.Minute)).String(), Weight: 20.0}}} if _, err := dm.DataDB().GetActionPlan(argAP1.Id, true, utils.NonTransactional); err == nil || err != utils.ErrNotFound { @@ -246,7 +248,7 @@ func TestApierV2itSetAccountWithAP(t *testing.T) { // Set second AP so we can see the proper indexing done argAP2 := &v1.AttrSetActionPlan{Id: "TestApierV2itSetAccountWithAP_AP_2", ActionPlan: []*v1.AttrActionPlan{ - &v1.AttrActionPlan{ActionsId: argActs1.ActionsId, MonthDays: "1", Time: "00:00:00", Weight: 20.0}}} + {ActionsId: argActs1.ActionsId, MonthDays: "1", Time: "00:00:00", Weight: 20.0}}} if _, err := dm.DataDB().GetActionPlan(argAP2.Id, true, utils.NonTransactional); err == nil || err != utils.ErrNotFound { t.Error(err) } diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index caaaa1dc5..d83407255 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -1163,9 +1163,11 @@ func main() { cfg.AliasesServerEnabled || cfg.UserServerEnabled || cfg.SchedulerCfg().Enabled || cfg.AttributeSCfg().Enabled || cfg.ResourceSCfg().Enabled || cfg.StatSCfg().Enabled || cfg.ThresholdSCfg().Enabled || cfg.SupplierSCfg().Enabled { // Some services can run without db, ie: SessionS or CDRC - dm, err = engine.ConfigureDataStorage(cfg.DataDbType, cfg.DataDbHost, - cfg.DataDbPort, cfg.DataDbName, cfg.DataDbUser, cfg.DataDbPass, - cfg.DBDataEncoding, cfg.CacheCfg(), cfg.DataDbSentinelName) + dm, err = engine.ConfigureDataStorage(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, + cfg.CacheCfg(), cfg.DataDbCfg().DataDbSentinelName) if err != nil { // Cannot configure getter database, show stopper utils.Logger.Crit(fmt.Sprintf("Could not configure dataDb: %s exiting!", err)) return diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index 0931bf5a1..6e084ee76 100755 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -37,21 +37,21 @@ var ( cfgDir = flag.String("config_dir", "", "Configuration directory path.") - dataDBType = flag.String("datadb_type", dfltCfg.DataDbType, + dataDBType = flag.String("datadb_type", dfltCfg.DataDbCfg().DataDbType, "The type of the DataDB database <*redis|*mongo>") - dataDBHost = flag.String("datadb_host", dfltCfg.DataDbHost, + dataDBHost = flag.String("datadb_host", dfltCfg.DataDbCfg().DataDbHost, "The DataDb host to connect to.") - dataDBPort = flag.String("datadb_port", dfltCfg.DataDbPort, + dataDBPort = flag.String("datadb_port", dfltCfg.DataDbCfg().DataDbPort, "The DataDb port to bind to.") - dataDBName = flag.String("datadb_name", dfltCfg.DataDbName, + dataDBName = flag.String("datadb_name", dfltCfg.DataDbCfg().DataDbName, "The name/number of the DataDb to connect to.") - dataDBUser = flag.String("datadb_user", dfltCfg.DataDbUser, + dataDBUser = flag.String("datadb_user", dfltCfg.DataDbCfg().DataDbUser, "The DataDb user to sign in as.") - dataDBPasswd = flag.String("datadb_passwd", dfltCfg.DataDbPass, + dataDBPasswd = flag.String("datadb_passwd", dfltCfg.DataDbCfg().DataDbPass, "The DataDb user's password.") dbDataEncoding = flag.String("dbdata_encoding", dfltCfg.DBDataEncoding, "The encoding used to store object data in strings") - dbRedisSentinel = flag.String("redis_sentinel", dfltCfg.DataDbSentinelName, + dbRedisSentinel = flag.String("redis_sentinel", dfltCfg.DataDbCfg().DataDbSentinelName, "The name of redis sentinel") storDBType = flag.String("stordb_type", dfltCfg.StorDBType, @@ -116,32 +116,32 @@ func main() { } } - if *dataDBType != dfltCfg.DataDbType { - ldrCfg.DataDbType = *dataDBType + if *dataDBType != dfltCfg.DataDbCfg().DataDbType { + ldrCfg.DataDbCfg().DataDbType = *dataDBType } - if *dataDBHost != dfltCfg.DataDbHost { - ldrCfg.DataDbHost = *dataDBHost + if *dataDBHost != dfltCfg.DataDbCfg().DataDbHost { + ldrCfg.DataDbCfg().DataDbHost = *dataDBHost } - if *dataDBPort != dfltCfg.DataDbPort { - ldrCfg.DataDbPort = *dataDBPort + if *dataDBPort != dfltCfg.DataDbCfg().DataDbPort { + ldrCfg.DataDbCfg().DataDbPort = *dataDBPort } - if *dataDBName != dfltCfg.DataDbName { - ldrCfg.DataDbName = *dataDBName + if *dataDBName != dfltCfg.DataDbCfg().DataDbName { + ldrCfg.DataDbCfg().DataDbName = *dataDBName } - if *dataDBUser != dfltCfg.DataDbUser { - ldrCfg.DataDbUser = *dataDBUser + if *dataDBUser != dfltCfg.DataDbCfg().DataDbUser { + ldrCfg.DataDbCfg().DataDbUser = *dataDBUser } - if *dataDBPasswd != dfltCfg.DataDbPass { - ldrCfg.DataDbPass = *dataDBPasswd + if *dataDBPasswd != dfltCfg.DataDbCfg().DataDbPass { + ldrCfg.DataDbCfg().DataDbPass = *dataDBPasswd } - if *dbRedisSentinel != dfltCfg.DataDbSentinelName { - ldrCfg.DataDbSentinelName = *dbRedisSentinel + if *dbRedisSentinel != dfltCfg.DataDbCfg().DataDbSentinelName { + ldrCfg.DataDbCfg().DataDbSentinelName = *dbRedisSentinel } if *storDBType != dfltCfg.StorDBType { @@ -214,10 +214,11 @@ func main() { } if !*toStorDB { - if dm, err = engine.ConfigureDataStorage(ldrCfg.DataDbType, ldrCfg.DataDbHost, - ldrCfg.DataDbPort, ldrCfg.DataDbName, - ldrCfg.DataDbUser, ldrCfg.DataDbPass, ldrCfg.DBDataEncoding, - config.CgrConfig().CacheCfg(), ldrCfg.DataDbSentinelName); err != nil { + if dm, err = engine.ConfigureDataStorage(ldrCfg.DataDbCfg().DataDbType, + ldrCfg.DataDbCfg().DataDbHost, ldrCfg.DataDbCfg().DataDbPort, + ldrCfg.DataDbCfg().DataDbName, ldrCfg.DataDbCfg().DataDbUser, + ldrCfg.DataDbCfg().DataDbPass, ldrCfg.DBDataEncoding, + config.CgrConfig().CacheCfg(), ldrCfg.DataDbCfg().DataDbSentinelName); err != nil { log.Fatalf("Coud not open dataDB connection: %s", err.Error()) } defer dm.DataDB().Close() diff --git a/cmd/cgr-migrator/cgr-migrator.go b/cmd/cgr-migrator/cgr-migrator.go index 0408c707a..b67f53d1e 100755 --- a/cmd/cgr-migrator/cgr-migrator.go +++ b/cmd/cgr-migrator/cgr-migrator.go @@ -29,8 +29,6 @@ import ( "github.com/cgrates/cgrates/utils" ) -const () - var ( sameDataDB, sameStorDB bool dmIN, dmOUT migrator.MigratorDataDB @@ -44,21 +42,21 @@ var ( "\n <*set_versions|*cost_details|*accounts|*actions|*action_triggers|*action_plans|*shared_groups|*stordb|*datadb>") version = flag.Bool("version", false, "prints the application version") - inDataDBType = flag.String("datadb_type", dfltCfg.DataDbType, + inDataDBType = flag.String("datadb_type", dfltCfg.DataDbCfg().DataDbType, "the type of the DataDB Database <*redis|*mongo>") - inDataDBHost = flag.String("datadb_host", dfltCfg.DataDbHost, + inDataDBHost = flag.String("datadb_host", dfltCfg.DataDbCfg().DataDbHost, "the DataDB host") - inDataDBPort = flag.String("datadb_port", dfltCfg.DataDbPort, + inDataDBPort = flag.String("datadb_port", dfltCfg.DataDbCfg().DataDbPort, "the DataDB port") - inDataDBName = flag.String("datadb_name", dfltCfg.DataDbName, + inDataDBName = flag.String("datadb_name", dfltCfg.DataDbCfg().DataDbName, "the name/number of the DataDB") - inDataDBUser = flag.String("datadb_user", dfltCfg.DataDbUser, + inDataDBUser = flag.String("datadb_user", dfltCfg.DataDbCfg().DataDbUser, "the DataDB user") - inDataDBPass = flag.String("datadb_passwd", dfltCfg.DataDbPass, + inDataDBPass = flag.String("datadb_passwd", dfltCfg.DataDbCfg().DataDbPass, "the DataDB password") inDBDataEncoding = flag.String("dbdata_encoding", dfltCfg.DBDataEncoding, "the encoding used to store object Data in strings") - inDataDBRedisSentinel = flag.String("redis_sentinel", dfltCfg.DataDbSentinelName, + inDataDBRedisSentinel = flag.String("redis_sentinel", dfltCfg.DataDbCfg().DataDbSentinelName, "the name of redis sentinel") outDataDBType = flag.String("out_datadb_type", utils.MetaDataDB, @@ -124,35 +122,35 @@ func main() { } // inDataDB - if *inDataDBType != dfltCfg.DataDbType { - mgrCfg.DataDbType = strings.TrimPrefix(*inDataDBType, "*") + if *inDataDBType != dfltCfg.DataDbCfg().DataDbType { + mgrCfg.DataDbCfg().DataDbType = strings.TrimPrefix(*inDataDBType, "*") } - if *inDataDBHost != dfltCfg.DataDbHost { - mgrCfg.DataDbHost = *inDataDBHost + if *inDataDBHost != dfltCfg.DataDbCfg().DataDbHost { + mgrCfg.DataDbCfg().DataDbHost = *inDataDBHost } - if *inDataDBPort != dfltCfg.DataDbPort { - mgrCfg.DataDbPort = *inDataDBPort + if *inDataDBPort != dfltCfg.DataDbCfg().DataDbPort { + mgrCfg.DataDbCfg().DataDbPort = *inDataDBPort } - if *inDataDBName != dfltCfg.DataDbName { - mgrCfg.DataDbName = *inDataDBName + if *inDataDBName != dfltCfg.DataDbCfg().DataDbName { + mgrCfg.DataDbCfg().DataDbName = *inDataDBName } - if *inDataDBUser != dfltCfg.DataDbUser { - mgrCfg.DataDbUser = *inDataDBUser + if *inDataDBUser != dfltCfg.DataDbCfg().DataDbUser { + mgrCfg.DataDbCfg().DataDbUser = *inDataDBUser } - if *inDataDBPass != dfltCfg.DataDbPass { - mgrCfg.DataDbPass = *inDataDBPass + if *inDataDBPass != dfltCfg.DataDbCfg().DataDbPass { + mgrCfg.DataDbCfg().DataDbPass = *inDataDBPass } if *inDBDataEncoding != dfltCfg.DBDataEncoding { mgrCfg.DBDataEncoding = *inDBDataEncoding } - if *inDataDBRedisSentinel != dfltCfg.DataDbSentinelName { - mgrCfg.DataDbSentinelName = *inDataDBRedisSentinel + if *inDataDBRedisSentinel != dfltCfg.DataDbCfg().DataDbSentinelName { + mgrCfg.DataDbCfg().DataDbSentinelName = *inDataDBRedisSentinel } // outDataDB if *outDataDBType == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBType == mgrCfg.MigratorCgrConfig.OutDataDBType { - mgrCfg.MigratorCgrConfig.OutDataDBType = mgrCfg.DataDbType + mgrCfg.MigratorCgrConfig.OutDataDBType = mgrCfg.DataDbCfg().DataDbType } } else { mgrCfg.MigratorCgrConfig.OutDataDBType = strings.TrimPrefix(*outDataDBType, "*") @@ -160,35 +158,35 @@ func main() { if *outDataDBHost == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBHost == mgrCfg.MigratorCgrConfig.OutDataDBHost { - mgrCfg.MigratorCgrConfig.OutDataDBHost = mgrCfg.DataDbHost + mgrCfg.MigratorCgrConfig.OutDataDBHost = mgrCfg.DataDbCfg().DataDbHost } } else { mgrCfg.MigratorCgrConfig.OutDataDBHost = *outDataDBHost } if *outDataDBPort == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBPort == mgrCfg.MigratorCgrConfig.OutDataDBPort { - mgrCfg.MigratorCgrConfig.OutDataDBPort = mgrCfg.DataDbPort + mgrCfg.MigratorCgrConfig.OutDataDBPort = mgrCfg.DataDbCfg().DataDbPort } } else { mgrCfg.MigratorCgrConfig.OutDataDBPort = *outDataDBPort } if *outDataDBName == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBName == mgrCfg.MigratorCgrConfig.OutDataDBName { - mgrCfg.MigratorCgrConfig.OutDataDBName = mgrCfg.DataDbName + mgrCfg.MigratorCgrConfig.OutDataDBName = mgrCfg.DataDbCfg().DataDbName } } else { mgrCfg.MigratorCgrConfig.OutDataDBName = *outDataDBName } if *outDataDBUser == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBUser == mgrCfg.MigratorCgrConfig.OutDataDBUser { - mgrCfg.MigratorCgrConfig.OutDataDBUser = mgrCfg.DataDbUser + mgrCfg.MigratorCgrConfig.OutDataDBUser = mgrCfg.DataDbCfg().DataDbUser } } else { mgrCfg.MigratorCgrConfig.OutDataDBUser = *outDataDBUser } if *outDataDBPass == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBPassword == mgrCfg.MigratorCgrConfig.OutDataDBPassword { - mgrCfg.MigratorCgrConfig.OutDataDBPassword = mgrCfg.DataDbPass + mgrCfg.MigratorCgrConfig.OutDataDBPassword = mgrCfg.DataDbCfg().DataDbPass } } else { mgrCfg.MigratorCgrConfig.OutDataDBPassword = *outDataDBPass @@ -202,23 +200,23 @@ func main() { } if *outDataDBRedisSentinel == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBRedisSentinel == mgrCfg.MigratorCgrConfig.OutDataDBRedisSentinel { - mgrCfg.MigratorCgrConfig.OutDataDBRedisSentinel = mgrCfg.DataDbSentinelName + mgrCfg.MigratorCgrConfig.OutDataDBRedisSentinel = mgrCfg.DataDbCfg().DataDbSentinelName } } else { mgrCfg.MigratorCgrConfig.OutDataDBRedisSentinel = *outDataDBRedisSentinel } - sameDataDB = mgrCfg.MigratorCgrConfig.OutDataDBType == mgrCfg.DataDbType && - mgrCfg.MigratorCgrConfig.OutDataDBHost == mgrCfg.DataDbHost && - mgrCfg.MigratorCgrConfig.OutDataDBPort == mgrCfg.DataDbPort && - mgrCfg.MigratorCgrConfig.OutDataDBName == mgrCfg.DataDbName && + sameDataDB = mgrCfg.MigratorCgrConfig.OutDataDBType == mgrCfg.DataDbCfg().DataDbType && + mgrCfg.MigratorCgrConfig.OutDataDBHost == mgrCfg.DataDbCfg().DataDbHost && + mgrCfg.MigratorCgrConfig.OutDataDBPort == mgrCfg.DataDbCfg().DataDbPort && + mgrCfg.MigratorCgrConfig.OutDataDBName == mgrCfg.DataDbCfg().DataDbName && mgrCfg.MigratorCgrConfig.OutDataDBEncoding == mgrCfg.DBDataEncoding - if dmIN, err = migrator.NewMigratorDataDB(mgrCfg.DataDbType, - mgrCfg.DataDbHost, mgrCfg.DataDbPort, - mgrCfg.DataDbName, mgrCfg.DataDbUser, - mgrCfg.DataDbPass, mgrCfg.DBDataEncoding, - mgrCfg.CacheCfg(), mgrCfg.DataDbSentinelName); err != nil { + if dmIN, err = migrator.NewMigratorDataDB(mgrCfg.DataDbCfg().DataDbType, + mgrCfg.DataDbCfg().DataDbHost, mgrCfg.DataDbCfg().DataDbPort, + mgrCfg.DataDbCfg().DataDbName, mgrCfg.DataDbCfg().DataDbUser, + mgrCfg.DataDbCfg().DataDbPass, mgrCfg.DBDataEncoding, + mgrCfg.CacheCfg(), mgrCfg.DataDbCfg().DataDbSentinelName); err != nil { log.Fatal(err) } diff --git a/cmd/cgr-tester/cgr-tester.go b/cmd/cgr-tester/cgr-tester.go index 09d012b1e..f62f50fbc 100644 --- a/cmd/cgr-tester/cgr-tester.go +++ b/cmd/cgr-tester/cgr-tester.go @@ -45,14 +45,14 @@ var ( "Configuration directory path.") parallel = flag.Int("parallel", 0, "run n requests in parallel") - datadb_type = flag.String("datadb_type", cgrConfig.DataDbType, "The type of the DataDb database ") - datadb_host = flag.String("datadb_host", cgrConfig.DataDbHost, "The DataDb host to connect to.") - datadb_port = flag.String("datadb_port", cgrConfig.DataDbPort, "The DataDb port to bind to.") - datadb_name = flag.String("datadb_name", cgrConfig.DataDbName, "The name/number of the DataDb to connect to.") - datadb_user = flag.String("datadb_user", cgrConfig.DataDbUser, "The DataDb user to sign in as.") - datadb_pass = flag.String("datadb_pass", cgrConfig.DataDbPass, "The DataDb user's password.") + datadb_type = flag.String("datadb_type", cgrConfig.DataDbCfg().DataDbType, "The type of the DataDb database ") + datadb_host = flag.String("datadb_host", cgrConfig.DataDbCfg().DataDbHost, "The DataDb host to connect to.") + datadb_port = flag.String("datadb_port", cgrConfig.DataDbCfg().DataDbPort, "The DataDb port to bind to.") + datadb_name = flag.String("datadb_name", cgrConfig.DataDbCfg().DataDbName, "The name/number of the DataDb to connect to.") + datadb_user = flag.String("datadb_user", cgrConfig.DataDbCfg().DataDbUser, "The DataDb user to sign in as.") + datadb_pass = flag.String("datadb_pass", cgrConfig.DataDbCfg().DataDbPass, "The DataDb user's password.") dbdata_encoding = flag.String("dbdata_encoding", cgrConfig.DBDataEncoding, "The encoding used to store object data in strings.") - redis_sentinel = flag.String("redis_sentinel", cgrConfig.DataDbSentinelName, "The name of redis sentinel") + redis_sentinel = flag.String("redis_sentinel", cgrConfig.DataDbCfg().DataDbSentinelName, "The name of redis sentinel") raterAddress = flag.String("rater_address", "", "Rater address for remote tests. Empty for internal rater.") tor = flag.String("tor", utils.VOICE, "The type of record to use in queries.") category = flag.String("category", "call", "The Record category to test.") @@ -70,9 +70,11 @@ var ( ) func durInternalRater(cd *engine.CallDescriptor) (time.Duration, error) { - dm, err := engine.ConfigureDataStorage(tstCfg.DataDbType, tstCfg.DataDbHost, tstCfg.DataDbPort, - tstCfg.DataDbName, tstCfg.DataDbUser, tstCfg.DataDbPass, tstCfg.DBDataEncoding, - cgrConfig.CacheCfg(), tstCfg.DataDbSentinelName) // for the momentn we use here "" for sentinelName + dm, err := engine.ConfigureDataStorage(tstCfg.DataDbCfg().DataDbType, + tstCfg.DataDbCfg().DataDbHost, tstCfg.DataDbCfg().DataDbPort, + tstCfg.DataDbCfg().DataDbName, tstCfg.DataDbCfg().DataDbUser, + tstCfg.DataDbCfg().DataDbPass, tstCfg.DBDataEncoding, + cgrConfig.CacheCfg(), tstCfg.DataDbCfg().DataDbSentinelName) // for the momentn we use here "" for sentinelName if err != nil { return nilDuration, fmt.Errorf("Could not connect to data database: %s", err.Error()) } @@ -165,29 +167,29 @@ func main() { } } - if *datadb_type != cgrConfig.DataDbType { - tstCfg.DataDbType = *datadb_type + if *datadb_type != cgrConfig.DataDbCfg().DataDbType { + tstCfg.DataDbCfg().DataDbType = *datadb_type } - if *datadb_host != cgrConfig.DataDbHost { - tstCfg.DataDbHost = *datadb_host + if *datadb_host != cgrConfig.DataDbCfg().DataDbHost { + tstCfg.DataDbCfg().DataDbHost = *datadb_host } - if *datadb_port != cgrConfig.DataDbPort { - tstCfg.DataDbPort = *datadb_port + if *datadb_port != cgrConfig.DataDbCfg().DataDbPort { + tstCfg.DataDbCfg().DataDbPort = *datadb_port } - if *datadb_name != cgrConfig.DataDbName { - tstCfg.DataDbName = *datadb_name + if *datadb_name != cgrConfig.DataDbCfg().DataDbName { + tstCfg.DataDbCfg().DataDbName = *datadb_name } - if *datadb_user != cgrConfig.DataDbUser { - tstCfg.DataDbUser = *datadb_user + if *datadb_user != cgrConfig.DataDbCfg().DataDbUser { + tstCfg.DataDbCfg().DataDbUser = *datadb_user } - if *datadb_pass != cgrConfig.DataDbPass { - tstCfg.DataDbPass = *datadb_pass + if *datadb_pass != cgrConfig.DataDbCfg().DataDbPass { + tstCfg.DataDbCfg().DataDbPass = *datadb_pass } if *dbdata_encoding != "" { tstCfg.DBDataEncoding = *dbdata_encoding } if *redis_sentinel != "" { - tstCfg.DataDbSentinelName = *redis_sentinel + tstCfg.DataDbCfg().DataDbSentinelName = *redis_sentinel } if *cpuprofile != "" { diff --git a/config/config.go b/config/config.go index 5f406d221..275af7843 100755 --- a/config/config.go +++ b/config/config.go @@ -140,6 +140,7 @@ func NewDefaultCGRConfig() (*CGRConfig, error) { cfg.RALsMaxComputedUsage = make(map[string]time.Duration) cfg.NodeID = utils.UUIDSha1Prefix() cfg.DataFolderPath = "/usr/share/cgrates/" + cfg.dataDbCfg = new(DataDbCfg) cfg.sessionSCfg = new(SessionSCfg) cfg.cacheConfig = make(CacheConfig) cfg.fsAgentCfg = new(FsAgentConfig) @@ -182,16 +183,6 @@ func NewDefaultCGRConfig() (*CGRConfig, error) { return cfg, nil } -func NewCGRConfigFromJsonString(cfgJsonStr string) (*CGRConfig, error) { - cfg := new(CGRConfig) - if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJsonStr)); err != nil { - return nil, err - } else if err := cfg.loadFromJsonCfg(jsnCfg); err != nil { - return nil, err - } - return cfg, nil -} - func NewCGRConfigFromJsonStringWithDefaults(cfgJsonStr string) (*CGRConfig, error) { cfg, _ := NewDefaultCGRConfig() if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJsonStr)); err != nil { @@ -260,14 +251,6 @@ func NewCGRConfigFromFolder(cfgDir string) (*CGRConfig, error) { // Holds system configuration, defaults are overwritten with values from config file if found type CGRConfig struct { NodeID string // Identifier for this engine instance - DataDbType string - DataDbHost string // The host to connect to. Values that start with / are for UNIX domain sockets. - DataDbPort string // The port to bind to. - DataDbName string // The name of the database to connect to. - DataDbUser string // The user to sign in as. - DataDbPass string // The user's password. - DataDbSentinelName string - LoadHistorySize int // Maximum number of records to archive in load history StorDBType string // Should reflect the database type used to store logs StorDBHost string // The host to connect to. Values that start with / are for UNIX domain sockets. StorDBPort string // Th e port to bind to. @@ -380,6 +363,7 @@ type CGRConfig struct { // Cache defaults loaded from json and needing clones dfltCdreProfile *CdreConfig // Default cdreConfig profile dfltCdrcProfile *CdrcConfig // Default cdrcConfig profile + dataDbCfg *DataDbCfg // Database config } func (self *CGRConfig) checkConfigSanity() error { @@ -914,33 +898,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) { } if jsnDataDbCfg != nil { - if jsnDataDbCfg.Db_type != nil { - self.DataDbType = *jsnDataDbCfg.Db_type - } - if jsnDataDbCfg.Db_host != nil { - self.DataDbHost = *jsnDataDbCfg.Db_host - } - if jsnDataDbCfg.Db_port != nil { - port := strconv.Itoa(*jsnDataDbCfg.Db_port) - if port == "-1" { - port = utils.MetaDynamic - } - self.DataDbPort = NewDbDefaults().DBPort(*jsnDataDbCfg.Db_type, port) - } - if jsnDataDbCfg.Db_name != nil { - self.DataDbName = *jsnDataDbCfg.Db_name - } - if jsnDataDbCfg.Db_user != nil { - self.DataDbUser = *jsnDataDbCfg.Db_user - } - if jsnDataDbCfg.Db_password != nil { - self.DataDbPass = *jsnDataDbCfg.Db_password - } - if jsnDataDbCfg.Load_history_size != nil { - self.LoadHistorySize = *jsnDataDbCfg.Load_history_size - } - if jsnDataDbCfg.Redis_sentinel != nil { - self.DataDbSentinelName = *jsnDataDbCfg.Redis_sentinel + if err := self.dataDbCfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { + return err } } @@ -1626,3 +1585,7 @@ func (cfg *CGRConfig) MigratorCgrCfg() *MigratorCgrCfg { func (cfg *CGRConfig) SchedulerCfg() *SchedulerCfg { return cfg.schedulerCfg } + +func (cfg *CGRConfig) DataDbCfg() *DataDbCfg { + return cfg.dataDbCfg +} diff --git a/config/config_test.go b/config/config_test.go index 8be789e49..58386e704 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -55,8 +55,8 @@ func TestCgrCfgLoadWithDefaults(t *testing.T) { } eCgrCfg.fsAgentCfg.Enabled = true eCgrCfg.fsAgentCfg.EventSocketConns = []*FsConnConfig{ - &FsConnConfig{Address: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 3, Alias: "123"}, - &FsConnConfig{Address: "1.2.3.5:8021", Password: "ClueCon", Reconnects: 5, Alias: "124"}, + {Address: "1.2.3.4:8021", Password: "ClueCon", Reconnects: 3, Alias: "123"}, + {Address: "1.2.3.5:8021", Password: "ClueCon", Reconnects: 5, Alias: "124"}, } if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) @@ -75,10 +75,10 @@ func TestCgrCfgDataDBPortWithoutDynamic(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) - } else if cgrCfg.DataDbType != utils.MONGO { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbType, utils.MONGO) - } else if cgrCfg.DataDbPort != "6379" { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbPort, "6379") + } else if cgrCfg.DataDbCfg().DataDbType != utils.MONGO { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.MONGO) + } else if cgrCfg.DataDbCfg().DataDbPort != "6379" { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "6379") } JSN_CFG = ` { @@ -89,10 +89,10 @@ func TestCgrCfgDataDBPortWithoutDynamic(t *testing.T) { if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) - } else if cgrCfg.DataDbType != utils.INTERNAL { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbType, utils.INTERNAL) - } else if cgrCfg.DataDbPort != "6379" { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbPort, "6379") + } else if cgrCfg.DataDbCfg().DataDbType != utils.INTERNAL { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.INTERNAL) + } else if cgrCfg.DataDbCfg().DataDbPort != "6379" { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "6379") } } @@ -105,12 +105,12 @@ func TestCgrCfgDataDBPortWithDymanic(t *testing.T) { } }` - if cgrCfg, err := NewCGRConfigFromJsonString(JSN_CFG); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) - } else if cgrCfg.DataDbType != utils.MONGO { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbType, utils.MONGO) - } else if cgrCfg.DataDbPort != "27017" { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbPort, "27017") + } else if cgrCfg.DataDbCfg().DataDbType != utils.MONGO { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.MONGO) + } else if cgrCfg.DataDbCfg().DataDbPort != "27017" { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "27017") } JSN_CFG = ` { @@ -120,12 +120,12 @@ func TestCgrCfgDataDBPortWithDymanic(t *testing.T) { } }` - if cgrCfg, err := NewCGRConfigFromJsonString(JSN_CFG); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) - } else if cgrCfg.DataDbType != utils.INTERNAL { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbType, utils.INTERNAL) - } else if cgrCfg.DataDbPort != "internal" { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbPort, "internal") + } else if cgrCfg.DataDbCfg().DataDbType != utils.INTERNAL { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbType, utils.INTERNAL) + } else if cgrCfg.DataDbCfg().DataDbPort != "internal" { + t.Errorf("Expected: %+v, received: %+v", cgrCfg.DataDbCfg().DataDbPort, "internal") } } @@ -155,7 +155,7 @@ func TestCgrCfgStorDBPortWithDymanic(t *testing.T) { } }` - if cgrCfg, err := NewCGRConfigFromJsonString(JSN_CFG); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) } else if cgrCfg.StorDBType != utils.MONGO { t.Errorf("Expected: %+v, received: %+v", cgrCfg.StorDBType, utils.MONGO) @@ -174,12 +174,12 @@ func TestCgrCfgListener(t *testing.T) { } }` - if cgrCfg, err := NewCGRConfigFromJsonString(JSN_CFG); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) - } else if cgrCfg.RPCGOBTLSListen != "" { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.RPCGOBTLSListen, "") - } else if cgrCfg.RPCJSONTLSListen != "" { - t.Errorf("Expected: %+v, received: %+v", cgrCfg.RPCJSONTLSListen, "") + } else if cgrCfg.RPCGOBTLSListen != "127.0.0.1:2023" { + t.Errorf("Expected: 127.0.0.1:2023 , received: %+v", cgrCfg.RPCGOBTLSListen) + } else if cgrCfg.RPCJSONTLSListen != "127.0.0.1:2022" { + t.Errorf("Expected: 127.0.0.1:2022 , received: %+v", cgrCfg.RPCJSONTLSListen) } } @@ -200,11 +200,11 @@ func TestCgrCfgCDRC(t *testing.T) { }` eCgrCfg, _ := NewDefaultCGRConfig() eCgrCfg.CdrcProfiles["/var/spool/cgrates/cdrc/in"] = []*CdrcConfig{ - &CdrcConfig{ + { ID: utils.META_DEFAULT, Enabled: true, DryRun: false, - CdrsConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, + CdrsConns: []*HaPoolConfig{{Address: utils.MetaInternal}}, CdrFormat: "csv", FieldSeparator: rune(','), DataUsageMultiplyFactor: 1024, @@ -223,44 +223,44 @@ func TestCgrCfgCDRC(t *testing.T) { PartialCacheExpiryAction: "*dump_to_file", HeaderFields: make([]*FCTemplate, 0), ContentFields: []*FCTemplate{ - &FCTemplate{FieldId: "ToR", Type: utils.META_COMPOSED, + {FieldId: "ToR", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7:s/^(voice|data|sms|mms|generic)$/*$1/", true)}, - &FCTemplate{FieldId: "AnswerTime", Type: utils.META_COMPOSED, + {FieldId: "AnswerTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true)}, - &FCTemplate{FieldId: "Usage", Type: utils.META_COMPOSED, + {FieldId: "Usage", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9:s/^(\\d+)$/${1}s/", true)}, }, TrailerFields: make([]*FCTemplate, 0), CacheDumpFields: []*FCTemplate{ - &FCTemplate{Tag: "CGRID", Type: utils.META_COMPOSED, + {Tag: "CGRID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.CGRID, true)}, - &FCTemplate{Tag: "RunID", Type: utils.META_COMPOSED, + {Tag: "RunID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.RunID, true)}, - &FCTemplate{Tag: "TOR", Type: utils.META_COMPOSED, + {Tag: "TOR", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.ToR, true)}, - &FCTemplate{Tag: "OriginID", Type: utils.META_COMPOSED, + {Tag: "OriginID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.OriginID, true)}, - &FCTemplate{Tag: "RequestType", Type: utils.META_COMPOSED, + {Tag: "RequestType", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.RequestType, true)}, - &FCTemplate{Tag: "Tenant", Type: utils.META_COMPOSED, + {Tag: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Tenant, true)}, - &FCTemplate{Tag: "Category", Type: utils.META_COMPOSED, + {Tag: "Category", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Category, true)}, - &FCTemplate{Tag: "Account", Type: utils.META_COMPOSED, + {Tag: "Account", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Account, true)}, - &FCTemplate{Tag: "Subject", Type: utils.META_COMPOSED, + {Tag: "Subject", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Subject, true)}, - &FCTemplate{Tag: "Destination", Type: utils.META_COMPOSED, + {Tag: "Destination", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Destination, true)}, - &FCTemplate{Tag: "SetupTime", Type: utils.META_COMPOSED, + {Tag: "SetupTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.SetupTime, true), Layout: "2006-01-02T15:04:05Z07:00"}, - &FCTemplate{Tag: "AnswerTime", Type: utils.META_COMPOSED, + {Tag: "AnswerTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.AnswerTime, true), Layout: "2006-01-02T15:04:05Z07:00"}, - &FCTemplate{Tag: "Usage", Type: utils.META_COMPOSED, + {Tag: "Usage", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Usage, true)}, - &FCTemplate{Tag: "Cost", Type: utils.META_COMPOSED, + {Tag: "Cost", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.COST, true)}, }, }, @@ -293,13 +293,13 @@ func TestHttpAgentCfg(t *testing.T) { ` eCgrCfg, _ := NewDefaultCGRConfig() eCgrCfg.httpAgentCfg = []*HttpAgentCfg{ - &HttpAgentCfg{ + { ID: "conecto1", Url: "/conecto", RequestPayload: utils.MetaUrl, ReplyPayload: utils.MetaXml, SessionSConns: []*HaPoolConfig{ - &HaPoolConfig{Address: utils.MetaInternal}}, + {Address: utils.MetaInternal}}, RequestProcessors: nil, }, } @@ -412,23 +412,23 @@ func TestCgrCfgJSONDefaultsListen(t *testing.T) { } func TestCgrCfgJSONDefaultsjsnDataDb(t *testing.T) { - if cgrCfg.DataDbType != "redis" { - t.Error(cgrCfg.DataDbType) + if cgrCfg.DataDbCfg().DataDbType != "redis" { + t.Errorf("Expecting: redis , recived: %+v", cgrCfg.DataDbCfg().DataDbType) } - if cgrCfg.DataDbHost != "127.0.0.1" { - t.Error(cgrCfg.DataDbHost) + if cgrCfg.DataDbCfg().DataDbHost != "127.0.0.1" { + t.Errorf("Expecting: 127.0.0.1 , recived: %+v", cgrCfg.DataDbCfg().DataDbHost) } - if cgrCfg.DataDbPort != "6379" { - t.Error(cgrCfg.DataDbPort) + if cgrCfg.DataDbCfg().DataDbPort != "6379" { + t.Errorf("Expecting: 6379 , recived: %+v", cgrCfg.DataDbCfg().DataDbPort) } - if cgrCfg.DataDbName != "10" { - t.Error(cgrCfg.DataDbName) + if cgrCfg.DataDbCfg().DataDbName != "10" { + t.Errorf("Expecting: 10 , recived: %+v", cgrCfg.DataDbCfg().DataDbName) } - if cgrCfg.DataDbUser != "cgrates" { - t.Error(cgrCfg.DataDbUser) + if cgrCfg.DataDbCfg().DataDbUser != "cgrates" { + t.Errorf("Expecting: cgrates , recived: %+v", cgrCfg.DataDbCfg().DataDbUser) } - if cgrCfg.DataDbPass != "" { - t.Error(cgrCfg.DataDbPass) + if cgrCfg.DataDbCfg().DataDbPass != "" { + t.Errorf("Expecting: , recived: %+v", cgrCfg.DataDbCfg().DataDbPass) } } @@ -530,7 +530,7 @@ func TestCgrCfgJSONDefaultsCDRS(t *testing.T) { if cgrCfg.CDRSSMCostRetries != 5 { t.Error(cgrCfg.CDRSSMCostRetries) } - if !reflect.DeepEqual(cgrCfg.CDRSRaterConns, []*HaPoolConfig{&HaPoolConfig{Address: "*internal"}}) { + if !reflect.DeepEqual(cgrCfg.CDRSRaterConns, []*HaPoolConfig{{Address: "*internal"}}) { t.Error(cgrCfg.CDRSRaterConns) } if !reflect.DeepEqual(cgrCfg.CDRSChargerSConns, eHaPoolCfg) { @@ -584,11 +584,11 @@ func TestCgrCfgJSONLoadCDRS(t *testing.T) { t.Error(cgrCfg.CDRSEnabled) } if !reflect.DeepEqual(cgrCfg.CDRSChargerSConns, - []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}) { + []*HaPoolConfig{{Address: utils.MetaInternal}}) { t.Error(cgrCfg.CDRSChargerSConns) } if !reflect.DeepEqual(cgrCfg.CDRSRaterConns, - []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}) { + []*HaPoolConfig{{Address: utils.MetaInternal}}) { t.Error(cgrCfg.CDRSRaterConns) } } @@ -605,35 +605,35 @@ func TestCgrCfgJSONDefaultsCDRStats(t *testing.T) { func TestCgrCfgJSONDefaultsCdreProfiles(t *testing.T) { eFields := []*FCTemplate{} eContentFlds := []*FCTemplate{ - &FCTemplate{Tag: "CGRID", Type: "*composed", + {Tag: "CGRID", Type: "*composed", Value: NewRSRParsersMustCompile("~CGRID", true)}, - &FCTemplate{Tag: "RunID", Type: "*composed", + {Tag: "RunID", Type: "*composed", Value: NewRSRParsersMustCompile("~RunID", true)}, - &FCTemplate{Tag: "TOR", Type: "*composed", + {Tag: "TOR", Type: "*composed", Value: NewRSRParsersMustCompile("~ToR", true)}, - &FCTemplate{Tag: "OriginID", Type: "*composed", + {Tag: "OriginID", Type: "*composed", Value: NewRSRParsersMustCompile("~OriginID", true)}, - &FCTemplate{Tag: "RequestType", Type: "*composed", + {Tag: "RequestType", Type: "*composed", Value: NewRSRParsersMustCompile("~RequestType", true)}, - &FCTemplate{Tag: "Tenant", Type: "*composed", + {Tag: "Tenant", Type: "*composed", Value: NewRSRParsersMustCompile("~Tenant", true)}, - &FCTemplate{Tag: "Category", Type: "*composed", + {Tag: "Category", Type: "*composed", Value: NewRSRParsersMustCompile("~Category", true)}, - &FCTemplate{Tag: "Account", Type: "*composed", + {Tag: "Account", Type: "*composed", Value: NewRSRParsersMustCompile("~Account", true)}, - &FCTemplate{Tag: "Subject", Type: "*composed", + {Tag: "Subject", Type: "*composed", Value: NewRSRParsersMustCompile("~Subject", true)}, - &FCTemplate{Tag: "Destination", Type: "*composed", + {Tag: "Destination", Type: "*composed", Value: NewRSRParsersMustCompile("~Destination", true)}, - &FCTemplate{Tag: "SetupTime", Type: "*composed", + {Tag: "SetupTime", Type: "*composed", Value: NewRSRParsersMustCompile("~SetupTime", true), Layout: "2006-01-02T15:04:05Z07:00"}, - &FCTemplate{Tag: "AnswerTime", Type: "*composed", + {Tag: "AnswerTime", Type: "*composed", Value: NewRSRParsersMustCompile("~AnswerTime", true), Layout: "2006-01-02T15:04:05Z07:00"}, - &FCTemplate{Tag: "Usage", Type: "*composed", + {Tag: "Usage", Type: "*composed", Value: NewRSRParsersMustCompile("~Usage", true)}, - &FCTemplate{Tag: "Cost", Type: "*composed", + {Tag: "Cost", Type: "*composed", Value: NewRSRParsersMustCompile("~Cost", true), RoundingDecimals: 4}, } @@ -664,9 +664,9 @@ func TestCgrCfgJSONDefaultsSMGenericCfg(t *testing.T) { ListenBijson: "127.0.0.1:2014", ChargerSConns: []*HaPoolConfig{}, RALsConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, CDRsConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, ResSConns: []*HaPoolConfig{}, ThreshSConns: []*HaPoolConfig{}, StatSConns: []*HaPoolConfig{}, @@ -765,7 +765,7 @@ func TestCgrCfgJSONDefaultsFsAgentConfig(t *testing.T) { eFsAgentCfg := &FsAgentConfig{ Enabled: false, SessionSConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, SubscribePark: true, CreateCdr: false, ExtraFields: nil, @@ -773,7 +773,7 @@ func TestCgrCfgJSONDefaultsFsAgentConfig(t *testing.T) { EmptyBalanceAnnFile: "", MaxWaitConnection: 2 * time.Second, EventSocketConns: []*FsConnConfig{ - &FsConnConfig{Address: "127.0.0.1:8021", + {Address: "127.0.0.1:8021", Password: "ClueCon", Reconnects: 5, Alias: "127.0.0.1:8021"}}, } @@ -786,10 +786,10 @@ func TestCgrCfgJSONDefaultsKamAgentConfig(t *testing.T) { eKamAgentCfg := &KamAgentCfg{ Enabled: false, SessionSConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, CreateCdr: false, EvapiConns: []*KamConnConfig{ - &KamConnConfig{ + { Address: "127.0.0.1:8448", Reconnects: 5}}, } if !reflect.DeepEqual(cgrCfg.kamAgentCfg, eKamAgentCfg) { @@ -802,10 +802,10 @@ func TestCgrCfgJSONDefaultssteriskAgentCfg(t *testing.T) { eAstAgentCfg := &AsteriskAgentCfg{ Enabled: false, SessionSConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, CreateCDR: false, AsteriskConns: []*AsteriskConnCfg{ - &AsteriskConnCfg{Address: "127.0.0.1:8088", + {Address: "127.0.0.1:8088", User: "cgrates", Password: "CGRateS.org", ConnectAttempts: 3, Reconnects: 5}}, } @@ -918,7 +918,7 @@ func TestCgrCfgJSONDefaultSupplierSCfg(t *testing.T) { PrefixIndexedFields: &[]string{}, AttributeSConns: []*HaPoolConfig{}, RALsConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}, + {Address: "*internal"}, }, ResourceSConns: []*HaPoolConfig{}, StatSConns: []*HaPoolConfig{}, @@ -934,7 +934,7 @@ func TestCgrCfgJSONDefaultsDiameterAgentCfg(t *testing.T) { Listen: "127.0.0.1:3868", DictionariesDir: "/usr/share/cgrates/diameter/dict/", SessionSConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, PubSubConns: []*HaPoolConfig{}, CreateCDR: true, DebitInterval: 5 * time.Minute, @@ -1069,7 +1069,7 @@ func TestRadiusAgentCfg(t *testing.T) { ListenAcct: "127.0.0.1:1813", ClientSecrets: map[string]string{utils.META_DEFAULT: "CGRateS.org"}, ClientDictionaries: map[string]string{utils.META_DEFAULT: "/usr/share/cgrates/radius/dict/"}, - SessionSConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, + SessionSConns: []*HaPoolConfig{{Address: utils.MetaInternal}}, CDRRequiresSession: false, RequestProcessors: nil, } @@ -1108,7 +1108,7 @@ func TestDbDefaults(t *testing.T) { func TestCgrLoaderCfgITDefaults(t *testing.T) { eCfg := []*LoaderSConfig{ - &LoaderSConfig{ + { Id: utils.META_DEFAULT, Enabled: false, Tenant: NewRSRParsersMustCompile("cgrates.org", true), @@ -1116,7 +1116,7 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { RunDelay: 0, LockFileName: ".cgr.lck", CacheSConns: []*HaPoolConfig{ - &HaPoolConfig{ + { Address: utils.MetaInternal, }, }, @@ -1124,353 +1124,353 @@ func TestCgrLoaderCfgITDefaults(t *testing.T) { TpInDir: "/var/spool/cgrates/loader/in", TpOutDir: "/var/spool/cgrates/loader/out", Data: []*LoaderDataType{ - &LoaderDataType{ + { Type: utils.MetaAttributes, Filename: utils.AttributesCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "TenantID", + {Tag: "TenantID", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ProfileID", + {Tag: "ProfileID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "Contexts", + {Tag: "Contexts", FieldId: "Contexts", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "FilterIDs", + {Tag: "FilterIDs", FieldId: "FilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "FieldName", + {Tag: "FieldName", FieldId: "FieldName", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, - &FCTemplate{Tag: "Initial", + {Tag: "Initial", FieldId: "Initial", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true)}, - &FCTemplate{Tag: "Substitute", + {Tag: "Substitute", FieldId: "Substitute", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7", true)}, - &FCTemplate{Tag: "Append", + {Tag: "Append", FieldId: "Append", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~8", true)}, - &FCTemplate{Tag: "Weight", + {Tag: "Weight", FieldId: "Weight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9", true)}, }, }, - &LoaderDataType{ + { Type: utils.MetaFilters, Filename: utils.FiltersCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "Tenant", + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ID", + {Tag: "ID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "FilterType", + {Tag: "FilterType", FieldId: "FilterType", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "FilterFieldName", + {Tag: "FilterFieldName", FieldId: "FilterFieldName", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "FilterFieldValues", + {Tag: "FilterFieldValues", FieldId: "FilterFieldValues", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, }, }, - &LoaderDataType{ + { Type: utils.MetaResources, Filename: utils.ResourcesCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "Tenant", + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ID", + {Tag: "ID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "FilterIDs", + {Tag: "FilterIDs", FieldId: "FilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "TTL", + {Tag: "TTL", FieldId: "UsageTTL", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "Limit", + {Tag: "Limit", FieldId: "Limit", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, - &FCTemplate{Tag: "AllocationMessage", + {Tag: "AllocationMessage", FieldId: "AllocationMessage", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true)}, - &FCTemplate{Tag: "Blocker", + {Tag: "Blocker", FieldId: "Blocker", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7", true)}, - &FCTemplate{Tag: "Stored", + {Tag: "Stored", FieldId: "Stored", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~8", true)}, - &FCTemplate{Tag: "Weight", + {Tag: "Weight", FieldId: "Weight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9", true)}, - &FCTemplate{Tag: "ThresholdIDs", + {Tag: "ThresholdIDs", FieldId: "ThresholdIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~10", true)}, }, }, - &LoaderDataType{ + { Type: utils.MetaStats, Filename: utils.StatsCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "Tenant", + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ID", + {Tag: "ID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "FilterIDs", + {Tag: "FilterIDs", FieldId: "FilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "QueueLength", + {Tag: "QueueLength", FieldId: "QueueLength", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "TTL", + {Tag: "TTL", FieldId: "TTL", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, - &FCTemplate{Tag: "Metrics", + {Tag: "Metrics", FieldId: "Metrics", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true)}, - &FCTemplate{Tag: "MetricParams", + {Tag: "MetricParams", FieldId: "Parameters", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7", true)}, - &FCTemplate{Tag: "Blocker", + {Tag: "Blocker", FieldId: "Blocker", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~8", true)}, - &FCTemplate{Tag: "Stored", + {Tag: "Stored", FieldId: "Stored", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9", true)}, - &FCTemplate{Tag: "Weight", + {Tag: "Weight", FieldId: "Weight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~10", true)}, - &FCTemplate{Tag: "MinItems", + {Tag: "MinItems", FieldId: "MinItems", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~11", true)}, - &FCTemplate{Tag: "ThresholdIDs", + {Tag: "ThresholdIDs", FieldId: "ThresholdIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~12", true)}, }, }, - &LoaderDataType{ + { Type: utils.MetaThresholds, Filename: utils.ThresholdsCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "Tenant", + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ID", + {Tag: "ID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "FilterIDs", + {Tag: "FilterIDs", FieldId: "FilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "MaxHits", + {Tag: "MaxHits", FieldId: "MaxHits", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "MinHits", + {Tag: "MinHits", FieldId: "MinHits", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, - &FCTemplate{Tag: "MinSleep", + {Tag: "MinSleep", FieldId: "MinSleep", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true)}, - &FCTemplate{Tag: "Blocker", + {Tag: "Blocker", FieldId: "Blocker", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7", true)}, - &FCTemplate{Tag: "Weight", + {Tag: "Weight", FieldId: "Weight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~8", true)}, - &FCTemplate{Tag: "ActionIDs", + {Tag: "ActionIDs", FieldId: "ActionIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9", true)}, - &FCTemplate{Tag: "Async", + {Tag: "Async", FieldId: "Async", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~10", true)}, }, }, - &LoaderDataType{ + { Type: utils.MetaSuppliers, Filename: utils.SuppliersCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "Tenant", + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ID", + {Tag: "ID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "FilterIDs", + {Tag: "FilterIDs", FieldId: "FilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "Sorting", + {Tag: "Sorting", FieldId: "Sorting", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "SortingParamameters", + {Tag: "SortingParamameters", FieldId: "SortingParamameters", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, - &FCTemplate{Tag: "SupplierID", + {Tag: "SupplierID", FieldId: "SupplierID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true)}, - &FCTemplate{Tag: "SupplierFilterIDs", + {Tag: "SupplierFilterIDs", FieldId: "SupplierFilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7", true)}, - &FCTemplate{Tag: "SupplierAccountIDs", + {Tag: "SupplierAccountIDs", FieldId: "SupplierAccountIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~8", true)}, - &FCTemplate{Tag: "SupplierRatingPlanIDs", + {Tag: "SupplierRatingPlanIDs", FieldId: "SupplierRatingPlanIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9", true)}, - &FCTemplate{Tag: "SupplierResourceIDs", + {Tag: "SupplierResourceIDs", FieldId: "SupplierResourceIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~10", true)}, - &FCTemplate{Tag: "SupplierStatIDs", + {Tag: "SupplierStatIDs", FieldId: "SupplierStatIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~11", true)}, - &FCTemplate{Tag: "SupplierWeight", + {Tag: "SupplierWeight", FieldId: "SupplierWeight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~12", true)}, - &FCTemplate{Tag: "SupplierBlocker", + {Tag: "SupplierBlocker", FieldId: "SupplierBlocker", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~13", true)}, - &FCTemplate{Tag: "SupplierParameters", + {Tag: "SupplierParameters", FieldId: "SupplierParameters", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~14", true)}, - &FCTemplate{Tag: "Weight", + {Tag: "Weight", FieldId: "Weight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~15", true)}, }, }, - &LoaderDataType{ + { Type: utils.MetaChargers, Filename: utils.ChargersCsv, Fields: []*FCTemplate{ - &FCTemplate{Tag: "Tenant", + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~0", true), Mandatory: true}, - &FCTemplate{Tag: "ID", + {Tag: "ID", FieldId: "ID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~1", true), Mandatory: true}, - &FCTemplate{Tag: "FilterIDs", + {Tag: "FilterIDs", FieldId: "FilterIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true)}, - &FCTemplate{Tag: "ActivationInterval", + {Tag: "ActivationInterval", FieldId: "ActivationInterval", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true)}, - &FCTemplate{Tag: "RunID", + {Tag: "RunID", FieldId: "RunID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true)}, - &FCTemplate{Tag: "AttributeIDs", + {Tag: "AttributeIDs", FieldId: "AttributeIDs", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~5", true)}, - &FCTemplate{Tag: "Weight", + {Tag: "Weight", FieldId: "Weight", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true)}, @@ -1509,13 +1509,13 @@ func TestCgrLoaderCfgDefault(t *testing.T) { DataPath: "", DisableReverse: false, CachesConns: []*HaPoolConfig{ - &HaPoolConfig{ + { Address: "127.0.0.1:2012", Transport: utils.MetaJSONrpc, }, }, SchedulerConns: []*HaPoolConfig{ - &HaPoolConfig{ + { Address: "127.0.0.1:2012", }, }, @@ -1549,11 +1549,11 @@ func TestCgrMigratorCfgDefault(t *testing.T) { func TestCDRCWithDefault(t *testing.T) { eCgrCfg, _ := NewDefaultCGRConfig() eCgrCfg.CdrcProfiles["/var/spool/cgrates/cdrc/in"] = []*CdrcConfig{ - &CdrcConfig{ + { ID: utils.META_DEFAULT, Enabled: false, DryRun: false, - CdrsConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, + CdrsConns: []*HaPoolConfig{{Address: utils.MetaInternal}}, CdrFormat: "csv", FieldSeparator: rune(','), DataUsageMultiplyFactor: 1024, @@ -1572,60 +1572,60 @@ func TestCDRCWithDefault(t *testing.T) { PartialCacheExpiryAction: "*dump_to_file", HeaderFields: make([]*FCTemplate, 0), ContentFields: []*FCTemplate{ - &FCTemplate{Tag: "TOR", FieldId: "ToR", Type: utils.META_COMPOSED, + {Tag: "TOR", FieldId: "ToR", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~2", true), Mandatory: true}, - &FCTemplate{Tag: "OriginID", FieldId: "OriginID", Type: utils.META_COMPOSED, + {Tag: "OriginID", FieldId: "OriginID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~3", true), Mandatory: true}, - &FCTemplate{Tag: "RequestType", FieldId: "RequestType", Type: utils.META_COMPOSED, + {Tag: "RequestType", FieldId: "RequestType", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~4", true), Mandatory: true}, - &FCTemplate{Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, + {Tag: "Tenant", FieldId: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~6", true), Mandatory: true}, - &FCTemplate{Tag: "Category", FieldId: "Category", Type: utils.META_COMPOSED, + {Tag: "Category", FieldId: "Category", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~7", true), Mandatory: true}, - &FCTemplate{Tag: "Account", FieldId: "Account", Type: utils.META_COMPOSED, + {Tag: "Account", FieldId: "Account", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~8", true), Mandatory: true}, - &FCTemplate{Tag: "Subject", FieldId: "Subject", Type: utils.META_COMPOSED, + {Tag: "Subject", FieldId: "Subject", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~9", true), Mandatory: true}, - &FCTemplate{Tag: "Destination", FieldId: "Destination", Type: utils.META_COMPOSED, + {Tag: "Destination", FieldId: "Destination", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~10", true), Mandatory: true}, - &FCTemplate{Tag: "SetupTime", FieldId: "SetupTime", Type: utils.META_COMPOSED, + {Tag: "SetupTime", FieldId: "SetupTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~11", true), Mandatory: true}, - &FCTemplate{Tag: "AnswerTime", FieldId: "AnswerTime", Type: utils.META_COMPOSED, + {Tag: "AnswerTime", FieldId: "AnswerTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~12", true), Mandatory: true}, - &FCTemplate{Tag: "Usage", FieldId: "Usage", Type: utils.META_COMPOSED, + {Tag: "Usage", FieldId: "Usage", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile("~13", true), Mandatory: true}, }, TrailerFields: make([]*FCTemplate, 0), CacheDumpFields: []*FCTemplate{ - &FCTemplate{Tag: "CGRID", Type: utils.META_COMPOSED, + {Tag: "CGRID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.CGRID, true)}, - &FCTemplate{Tag: "RunID", Type: utils.META_COMPOSED, + {Tag: "RunID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.RunID, true)}, - &FCTemplate{Tag: "TOR", Type: utils.META_COMPOSED, + {Tag: "TOR", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.ToR, true)}, - &FCTemplate{Tag: "OriginID", Type: utils.META_COMPOSED, + {Tag: "OriginID", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.OriginID, true)}, - &FCTemplate{Tag: "RequestType", Type: utils.META_COMPOSED, + {Tag: "RequestType", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.RequestType, true)}, - &FCTemplate{Tag: "Tenant", Type: utils.META_COMPOSED, + {Tag: "Tenant", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Tenant, true)}, - &FCTemplate{Tag: "Category", Type: utils.META_COMPOSED, + {Tag: "Category", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Category, true)}, - &FCTemplate{Tag: "Account", Type: utils.META_COMPOSED, + {Tag: "Account", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Account, true)}, - &FCTemplate{Tag: "Subject", Type: utils.META_COMPOSED, + {Tag: "Subject", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Subject, true)}, - &FCTemplate{Tag: "Destination", Type: utils.META_COMPOSED, + {Tag: "Destination", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Destination, true)}, - &FCTemplate{Tag: "SetupTime", Type: utils.META_COMPOSED, + {Tag: "SetupTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.SetupTime, true), Layout: "2006-01-02T15:04:05Z07:00"}, - &FCTemplate{Tag: "AnswerTime", Type: utils.META_COMPOSED, + {Tag: "AnswerTime", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.AnswerTime, true), Layout: "2006-01-02T15:04:05Z07:00"}, - &FCTemplate{Tag: "Usage", Type: utils.META_COMPOSED, + {Tag: "Usage", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.Usage, true)}, - &FCTemplate{Tag: "Cost", Type: utils.META_COMPOSED, + {Tag: "Cost", Type: utils.META_COMPOSED, Value: NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.COST, true)}, }, }, @@ -1657,7 +1657,7 @@ func TestCgrMigratorCfg2(t *testing.T) { }, }` - if cgrCfg, err := NewCGRConfigFromJsonString(JSN_CFG); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(JSN_CFG); err != nil { t.Error(err) } else if cgrCfg.MigratorCgrConfig.OutDataDBHost != "0.0.0.0" { t.Errorf("Expected: 0.0.0.0 , received: %+v", cgrCfg.MigratorCgrConfig.OutDataDBHost) diff --git a/config/datadbcfg.go b/config/datadbcfg.go new file mode 100644 index 000000000..80ce3d7da --- /dev/null +++ b/config/datadbcfg.go @@ -0,0 +1,69 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package config + +import ( + "strconv" + + "github.com/cgrates/cgrates/utils" +) + +// DataDbCfg Database config +type DataDbCfg struct { + DataDbType string + DataDbHost string + DataDbPort string + DataDbName string + DataDbUser string + DataDbPass string + DataDbSentinelName string +} + +//loadFromJsonCfg loads Database config from JsonCfg +func (dbcfg *DataDbCfg) loadFromJsonCfg(jsnDbCfg *DbJsonCfg) (err error) { + if jsnDbCfg == nil { + return nil + } + if jsnDbCfg.Db_type != nil { + dbcfg.DataDbType = *jsnDbCfg.Db_type + } + if jsnDbCfg.Db_host != nil { + dbcfg.DataDbHost = *jsnDbCfg.Db_host + } + if jsnDbCfg.Db_port != nil { + port := strconv.Itoa(*jsnDbCfg.Db_port) + if port == "-1" { + port = utils.MetaDynamic + } + dbcfg.DataDbPort = NewDbDefaults().DBPort(*jsnDbCfg.Db_type, port) + } + if jsnDbCfg.Db_name != nil { + dbcfg.DataDbName = *jsnDbCfg.Db_name + } + if jsnDbCfg.Db_user != nil { + dbcfg.DataDbUser = *jsnDbCfg.Db_user + } + if jsnDbCfg.Db_password != nil { + dbcfg.DataDbPass = *jsnDbCfg.Db_password + } + if jsnDbCfg.Redis_sentinel != nil { + dbcfg.DataDbSentinelName = *jsnDbCfg.Redis_sentinel + } + return nil +} diff --git a/config/datadbcfg_test.go b/config/datadbcfg_test.go new file mode 100644 index 000000000..d03c4e711 --- /dev/null +++ b/config/datadbcfg_test.go @@ -0,0 +1,125 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ +package config + +import ( + "reflect" + "strings" + "testing" +) + +func TestDataDbCfgloadFromJsonCfg(t *testing.T) { + var dbcfg, expected DataDbCfg + if err := dbcfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(dbcfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, dbcfg) + } + if err := dbcfg.loadFromJsonCfg(new(DbJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(dbcfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, dbcfg) + } + cfgJSONStr := `{ +"data_db": { // database used to store runtime data (eg: accounts, cdr stats) + "db_type": "redis", // data_db type: + "db_host": "127.0.0.1", // data_db host address + "db_port": -1, // data_db port to reach the database + "db_name": "10", // data_db database name to connect to + "db_user": "cgrates", // username to use when connecting to data_db + "db_password": "password", // password to use when connecting to data_db + "redis_sentinel":"sentinel", // redis_sentinel is the name of sentinel + } +}` + expected = DataDbCfg{ + DataDbType: "redis", + DataDbHost: "127.0.0.1", + DataDbPort: "6379", + DataDbName: "10", + DataDbUser: "cgrates", + DataDbPass: "password", + DataDbSentinelName: "sentinel", + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDataDbCfg, err := jsnCfg.DbJsonCfg(DATADB_JSN); err != nil { + t.Error(err) + } else if err = dbcfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, dbcfg) { + t.Errorf("Expected: %+v , recived: %+v", expected, dbcfg) + } +} +func TestDataDbCfgloadFromJsonCfgPort(t *testing.T) { + var dbcfg DataDbCfg + cfgJSONStr := `{ +"data_db": { + "db_type": "mongo", + } +}` + expected := DataDbCfg{ + DataDbType: "mongo", + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDataDbCfg, err := jsnCfg.DbJsonCfg(DATADB_JSN); err != nil { + t.Error(err) + } else if err = dbcfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, dbcfg) { + t.Errorf("Expected: %+v , recived: %+v", expected, dbcfg) + } + cfgJSONStr = `{ +"data_db": { + "db_type": "mongo", + "db_port": -1, + } +}` + expected = DataDbCfg{ + DataDbType: "mongo", + DataDbPort: "27017", + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDataDbCfg, err := jsnCfg.DbJsonCfg(DATADB_JSN); err != nil { + t.Error(err) + } else if err = dbcfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, dbcfg) { + t.Errorf("Expected: %+v , recived: %+v", expected, dbcfg) + } + cfgJSONStr = `{ +"data_db": { + "db_type": "internal", + "db_port": -1, + } +}` + expected = DataDbCfg{ + DataDbType: "internal", + DataDbPort: "internal", + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDataDbCfg, err := jsnCfg.DbJsonCfg(DATADB_JSN); err != nil { + t.Error(err) + } else if err = dbcfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, dbcfg) { + t.Errorf("Expected: %+v , recived: %+v", expected, dbcfg) + } +} diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 3d360e0ab..249b82b93 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -79,7 +79,6 @@ type DbJsonCfg struct { Max_open_conns *int // Used only in case of storDb Max_idle_conns *int Conn_max_lifetime *int // Used only in case of storDb - Load_history_size *int // Used in case of dataDb to limit the length of the loads history Cdrs_indexes *[]string Redis_sentinel *string } diff --git a/engine/datamanager_it_test.go b/engine/datamanager_it_test.go index 5f144b271..545a11e93 100644 --- a/engine/datamanager_it_test.go +++ b/engine/datamanager_it_test.go @@ -41,8 +41,10 @@ var sTestsDMit = []func(t *testing.T){ func TestDMitRedis(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() - dataDB, err := NewRedisStorage(fmt.Sprintf("%s:%s", cfg.DataDbHost, cfg.DataDbPort), 4, - cfg.DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, nil, "") + dataDB, err := NewRedisStorage( + fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), + 4, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, + nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } diff --git a/engine/filterindexer_it_test.go b/engine/filterindexer_it_test.go index fa67feb38..0fea1bef7 100644 --- a/engine/filterindexer_it_test.go +++ b/engine/filterindexer_it_test.go @@ -62,12 +62,14 @@ var sTests = []func(t *testing.T){ func TestFilterIndexerITRedis(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() - redisDB, err := NewRedisStorage(fmt.Sprintf("%s:%s", cfg.DataDbHost, cfg.DataDbPort), 4, - cfg.DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, nil, "") + redisDB, err := NewRedisStorage( + fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), + 4, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, + nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } - cfgDBName = cfg.DataDbName + cfgDBName = cfg.DataDbCfg().DataDbName dataManager = NewDataManager(redisDB) for _, stest := range sTests { t.Run("TestITRedis", stest) @@ -122,21 +124,21 @@ func testITIsDBEmpty(t *testing.T) { func testITSetFilterIndexes(t *testing.T) { idxes := map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "RL1": true, }, - "*string:Account:1002": utils.StringMap{ + "*string:Account:1002": { "RL1": true, "RL2": true, }, - "*string:Account:dan": utils.StringMap{ + "*string:Account:dan": { "RL2": true, }, - "*string:Subject:dan": utils.StringMap{ + "*string:Subject:dan": { "RL2": true, "RL3": true, }, - utils.ConcatenatedKey(utils.META_NONE, utils.ANY, utils.ANY): utils.StringMap{ + utils.ConcatenatedKey(utils.META_NONE, utils.ANY, utils.ANY): { "RL4": true, "RL5": true, }, @@ -150,21 +152,21 @@ func testITSetFilterIndexes(t *testing.T) { func testITGetFilterIndexes(t *testing.T) { eIdxes := map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "RL1": true, }, - "*string:Account:1002": utils.StringMap{ + "*string:Account:1002": { "RL1": true, "RL2": true, }, - "*string:Account:dan": utils.StringMap{ + "*string:Account:dan": { "RL2": true, }, - "*string:Subject:dan": utils.StringMap{ + "*string:Subject:dan": { "RL2": true, "RL3": true, }, - utils.ConcatenatedKey(utils.META_NONE, utils.ANY, utils.ANY): utils.StringMap{ + utils.ConcatenatedKey(utils.META_NONE, utils.ANY, utils.ANY): { "RL4": true, "RL5": true, }, @@ -173,7 +175,7 @@ func testITGetFilterIndexes(t *testing.T) { "Subject": "dan", } expectedsbjDan := map[string]utils.StringMap{ - "*string:Subject:dan": utils.StringMap{ + "*string:Subject:dan": { "RL2": true, "RL3": true, }, @@ -224,7 +226,7 @@ func testITTestThresholdFilterIndexes(t *testing.T) { Tenant: "cgrates.org", ID: "Filter1", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "EventType", Type: "*string", Values: []string{"Event1", "Event2"}, @@ -268,11 +270,11 @@ func testITTestThresholdFilterIndexes(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*string:EventType:Event1": utils.StringMap{ + "*string:EventType:Event1": { "THD_Test": true, "THD_Test2": true, }, - "*string:EventType:Event2": utils.StringMap{ + "*string:EventType:Event2": { "THD_Test": true, "THD_Test2": true, }, @@ -291,7 +293,7 @@ func testITTestThresholdFilterIndexes(t *testing.T) { Tenant: "cgrates.org", ID: "Filter2", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001", "1002"}, @@ -311,16 +313,16 @@ func testITTestThresholdFilterIndexes(t *testing.T) { t.Error(err) } eIdxes = map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "THD_Test": true, }, - "*string:Account:1002": utils.StringMap{ + "*string:Account:1002": { "THD_Test": true, }, - "*string:EventType:Event1": utils.StringMap{ + "*string:EventType:Event1": { "THD_Test2": true, }, - "*string:EventType:Event2": utils.StringMap{ + "*string:EventType:Event2": { "THD_Test2": true, }, } @@ -336,7 +338,7 @@ func testITTestThresholdFilterIndexes(t *testing.T) { Tenant: "cgrates.org", ID: "Filter3", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "Destination", Type: "*string", Values: []string{"10", "20"}, @@ -356,17 +358,17 @@ func testITTestThresholdFilterIndexes(t *testing.T) { t.Error(err) } eIdxes = map[string]utils.StringMap{ - "*string:Destination:10": utils.StringMap{ + "*string:Destination:10": { "THD_Test": true, }, - "*string:Destination:20": utils.StringMap{ + "*string:Destination:20": { "THD_Test": true, }, - "*string:EventType:Event1": utils.StringMap{ + "*string:EventType:Event1": { "THD_Test": true, "THD_Test2": true, }, - "*string:EventType:Event2": utils.StringMap{ + "*string:EventType:Event2": { "THD_Test": true, "THD_Test2": true, }, @@ -399,7 +401,7 @@ func testITTestAttributeProfileFilterIndexes(t *testing.T) { Tenant: "cgrates.org", ID: "AttrFilter", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "EventType", Type: "*string", Values: []string{"Event1", "Event2"}, @@ -422,7 +424,7 @@ func testITTestAttributeProfileFilterIndexes(t *testing.T) { }, Contexts: []string{"con1", "con2"}, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "FN1", Initial: "Init1", Substitute: config.NewRSRParsersMustCompile("Val1", true), @@ -436,10 +438,10 @@ func testITTestAttributeProfileFilterIndexes(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*string:EventType:Event1": utils.StringMap{ + "*string:EventType:Event1": { "AttrPrf": true, }, - "*string:EventType:Event2": utils.StringMap{ + "*string:EventType:Event2": { "AttrPrf": true, }, } @@ -501,7 +503,7 @@ func testITTestThresholdInlineFilterIndexing(t *testing.T) { Tenant: "cgrates.org", ID: "Filter1", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "EventType", Type: "*string", Values: []string{"Event1", "Event2"}, @@ -531,10 +533,10 @@ func testITTestThresholdInlineFilterIndexing(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*string:EventType:Event1": utils.StringMap{ + "*string:EventType:Event1": { "THD_Test": true, }, - "*string:EventType:Event2": utils.StringMap{ + "*string:EventType:Event2": { "THD_Test": true, }, } @@ -553,13 +555,13 @@ func testITTestThresholdInlineFilterIndexing(t *testing.T) { t.Error(err) } eIdxes = map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "THD_Test": true, }, - "*string:EventType:Event1": utils.StringMap{ + "*string:EventType:Event1": { "THD_Test": true, }, - "*string:EventType:Event2": utils.StringMap{ + "*string:EventType:Event2": { "THD_Test": true, }, } @@ -584,22 +586,22 @@ func testITTestThresholdInlineFilterIndexing(t *testing.T) { func testITTestStoreFilterIndexesWithTransID(t *testing.T) { idxes := map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "RL1": true, }, - "*string:Account:1002": utils.StringMap{ + "*string:Account:1002": { "RL1": true, "RL2": true, }, - "*string:Account:dan": utils.StringMap{ + "*string:Account:dan": { "RL2": true, }, - "*string:Subject:dan": utils.StringMap{ + "*string:Subject:dan": { "RL2": true, "RL3": true, }, utils.ConcatenatedKey(utils.META_NONE, - utils.ANY, utils.ANY): utils.StringMap{ + utils.ANY, utils.ANY): { "RL4": true, "RL5": true, }, @@ -617,22 +619,22 @@ func testITTestStoreFilterIndexesWithTransID(t *testing.T) { t.Error(err) } eIdx := map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "RL1": true, }, - "*string:Account:1002": utils.StringMap{ + "*string:Account:1002": { "RL1": true, "RL2": true, }, - "*string:Account:dan": utils.StringMap{ + "*string:Account:dan": { "RL2": true, }, - "*string:Subject:dan": utils.StringMap{ + "*string:Subject:dan": { "RL2": true, "RL3": true, }, utils.ConcatenatedKey(utils.META_NONE, - utils.ANY, utils.ANY): utils.StringMap{ + utils.ANY, utils.ANY): { "RL4": true, "RL5": true, }, @@ -650,10 +652,10 @@ func testITTestStoreFilterIndexesWithTransID(t *testing.T) { func testITTestStoreFilterIndexesWithTransID2(t *testing.T) { idxes := map[string]utils.StringMap{ - "*string:Event:Event1": utils.StringMap{ + "*string:Event:Event1": { "RL1": true, }, - "*string:Event:Event2": utils.StringMap{ + "*string:Event:Event2": { "RL1": true, "RL2": true, }, @@ -718,7 +720,7 @@ func testITTestIndexingWithEmptyFltrID(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*none:*any:*any": utils.StringMap{ + "*none:*any:*any": { "THD_Test": true, "THD_Test2": true, }, @@ -756,7 +758,7 @@ func testITTestIndexingWithEmptyFltrID2(t *testing.T) { Sorting: "*weight", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{""}, AccountIDs: []string{""}, @@ -779,7 +781,7 @@ func testITTestIndexingWithEmptyFltrID2(t *testing.T) { Sorting: "*weight", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{""}, AccountIDs: []string{""}, @@ -800,7 +802,7 @@ func testITTestIndexingWithEmptyFltrID2(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*none:*any:*any": utils.StringMap{ + "*none:*any:*any": { "SPL_Weight": true, "SPL_Weight2": true, }, @@ -857,11 +859,11 @@ func testITTestIndexingThresholds(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*string:Account:1001": utils.StringMap{ + "*string:Account:1001": { "TH1": true, "TH2": true, }, - "*string:Account:1002": utils.StringMap{ + "*string:Account:1002": { "TH3": true, }, } diff --git a/engine/fscdr_test.go b/engine/fscdr_test.go index d9efa1544..5fce802d9 100644 --- a/engine/fscdr_test.go +++ b/engine/fscdr_test.go @@ -411,7 +411,7 @@ func TestFsCdrFirstNonEmpty(t *testing.T) { } func TestFsCdrCDRFields(t *testing.T) { - fsCdrCfg.CDRSExtraFields = []*utils.RSRField{&utils.RSRField{Id: "sip_user_agent"}} + fsCdrCfg.CDRSExtraFields = []*utils.RSRField{{Id: "sip_user_agent"}} fsCdr, err := NewFSCdr(body, fsCdrCfg) if err != nil { t.Errorf("Error loading cdr: %v", err) @@ -445,7 +445,7 @@ func TestFsCdrSearchExtraField(t *testing.T) { fsCdr, _ := NewFSCdr(body, fsCdrCfg) rsrSt1, _ := utils.NewRSRField("^injected_value") rsrSt2, _ := utils.NewRSRField("^injected_hdr::injected_value/") - fsCdrCfg.CDRSExtraFields = []*utils.RSRField{&utils.RSRField{Id: "caller_id_name"}, rsrSt1, rsrSt2} + fsCdrCfg.CDRSExtraFields = []*utils.RSRField{{Id: "caller_id_name"}, rsrSt1, rsrSt2} extraFields := fsCdr.getExtraFields() if len(extraFields) != 3 || extraFields["caller_id_name"] != "1001" || extraFields["injected_value"] != "injected_value" || @@ -510,7 +510,7 @@ func TestFsCdrDDazRSRExtraFields(t *testing.T) { } }`) var err error - fsCdrCfg, err = config.NewCGRConfigFromJsonString(eFieldsCfg) + fsCdrCfg, err = config.NewCGRConfigFromJsonStringWithDefaults(eFieldsCfg) expCdrExtra := utils.ParseRSRFieldsMustCompile(`~effective_caller_id_number:s/(\d+)/+$1/`, utils.INFIELD_SEP) if err != nil { t.Error("Could not parse the config", err.Error()) diff --git a/engine/libtest.go b/engine/libtest.go index 1e3a81170..715652fef 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -34,9 +34,11 @@ import ( ) func InitDataDb(cfg *config.CGRConfig) error { - dm, err := ConfigureDataStorage(cfg.DataDbType, cfg.DataDbHost, cfg.DataDbPort, - cfg.DataDbName, cfg.DataDbUser, cfg.DataDbPass, cfg.DBDataEncoding, - cfg.CacheCfg(), cfg.DataDbSentinelName) + dm, err := ConfigureDataStorage(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, + cfg.CacheCfg(), cfg.DataDbCfg().DataDbSentinelName) if err != nil { return err } diff --git a/engine/loader_it_test.go b/engine/loader_it_test.go index 624b4e854..3d0d312fe 100644 --- a/engine/loader_it_test.go +++ b/engine/loader_it_test.go @@ -43,16 +43,22 @@ func TestLoaderITConnDataDbs(t *testing.T) { lCfg, _ = config.NewDefaultCGRConfig() lCfg.StorDBPass = "CGRateS.org" var err error - if dataDbCsv, err = ConfigureDataStorage(lCfg.DataDbType, lCfg.DataDbHost, lCfg.DataDbPort, "7", - lCfg.DataDbUser, lCfg.DataDbPass, lCfg.DBDataEncoding, nil, ""); err != nil { + if dataDbCsv, err = ConfigureDataStorage(lCfg.DataDbCfg().DataDbType, + lCfg.DataDbCfg().DataDbHost, lCfg.DataDbCfg().DataDbPort, "7", + lCfg.DataDbCfg().DataDbUser, lCfg.DataDbCfg().DataDbPass, + lCfg.DBDataEncoding, nil, ""); err != nil { t.Fatal("Error on dataDb connection: ", err.Error()) } - if dataDbStor, err = ConfigureDataStorage(lCfg.DataDbType, lCfg.DataDbHost, lCfg.DataDbPort, "8", - lCfg.DataDbUser, lCfg.DataDbPass, lCfg.DBDataEncoding, nil, ""); err != nil { + if dataDbStor, err = ConfigureDataStorage(lCfg.DataDbCfg().DataDbType, + lCfg.DataDbCfg().DataDbHost, lCfg.DataDbCfg().DataDbPort, "8", + lCfg.DataDbCfg().DataDbUser, lCfg.DataDbCfg().DataDbPass, + lCfg.DBDataEncoding, nil, ""); err != nil { t.Fatal("Error on dataDb connection: ", err.Error()) } - if dataDbApier, err = ConfigureDataStorage(lCfg.DataDbType, lCfg.DataDbHost, lCfg.DataDbPort, "9", - lCfg.DataDbUser, lCfg.DataDbPass, lCfg.DBDataEncoding, nil, ""); err != nil { + if dataDbApier, err = ConfigureDataStorage(lCfg.DataDbCfg().DataDbType, + lCfg.DataDbCfg().DataDbHost, lCfg.DataDbCfg().DataDbPort, "9", + lCfg.DataDbCfg().DataDbUser, lCfg.DataDbCfg().DataDbPass, + lCfg.DBDataEncoding, nil, ""); err != nil { t.Fatal("Error on dataDb connection: ", err.Error()) } for _, db := range []Storage{dataDbCsv.DataDB(), dataDbStor.DataDB(), dataDbApier.DataDB(), @@ -69,10 +75,8 @@ func TestLoaderITCreateStorTpTables(t *testing.T) { lCfg.StorDBUser, lCfg.StorDBPass, lCfg.StorDBMaxOpenConns, lCfg.StorDBMaxIdleConns, lCfg.StorDBConnMaxLifetime) if err != nil { t.Error("Error on opening database connection: ", err) - return - } else { - storDb = db } + storDb = db // Creating the table serves also as reset since there is a drop prior to create if err := db.CreateTablesFromScript(path.Join(*dataDir, "storage", "mysql", utils.CREATE_TARIFFPLAN_TABLES_SQL)); err != nil { t.Error("Error on db creation: ", err.Error()) diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index 0817dc8fd..bd63f9799 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -93,12 +93,14 @@ var sTestsOnStorIT = []func(t *testing.T){ func TestOnStorITRedis(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() - rdsITdb, err = NewRedisStorage(fmt.Sprintf("%s:%s", cfg.DataDbHost, cfg.DataDbPort), 4, - cfg.DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, nil, "") + rdsITdb, err = NewRedisStorage( + fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), + 4, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, + nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } - onStorCfg = cfg.DataDbName + onStorCfg = cfg.DataDbCfg().DataDbName onStor = NewDataManager(rdsITdb) for _, stest := range sTestsOnStorIT { t.Run("TestOnStorITRedis", stest) @@ -147,9 +149,9 @@ func testOnStorITSetGetDerivedCharges(t *testing.T) { } charger1 := &utils.DerivedChargers{DestinationIDs: make(utils.StringMap), Chargers: []*utils.DerivedCharger{ - &utils.DerivedCharger{RunID: "extra1", RequestTypeField: "^prepaid", DirectionField: "*default", TenantField: "*default", CategoryField: "*default", + {RunID: "extra1", RequestTypeField: "^prepaid", DirectionField: "*default", TenantField: "*default", CategoryField: "*default", AccountField: "rif", SubjectField: "rif", DestinationField: "*default", SetupTimeField: "*default", AnswerTimeField: "*default", UsageField: "*default"}, - &utils.DerivedCharger{RunID: "extra2", RequestTypeField: "*default", DirectionField: "*default", TenantField: "*default", CategoryField: "*default", + {RunID: "extra2", RequestTypeField: "*default", DirectionField: "*default", TenantField: "*default", CategoryField: "*default", AccountField: "ivo", SubjectField: "ivo", DestinationField: "*default", SetupTimeField: "*default", AnswerTimeField: "*default", UsageField: "*default"}, }} if err := onStor.DataDB().SetDerivedChargers(keyCharger1, charger1, utils.NonTransactional); err != nil { @@ -235,7 +237,7 @@ func testOnStorITCacheActionPlan(t *testing.T) { Id: "MORE_MINUTES", AccountIDs: utils.StringMap{"vdf:minitsboy": true}, ActionTimings: []*ActionTiming{ - &ActionTiming{ + { Uuid: utils.GenUUID(), Timing: &RateInterval{ Timing: &RITiming{ @@ -249,7 +251,7 @@ func testOnStorITCacheActionPlan(t *testing.T) { Weight: 10, ActionsID: "MINI", }, - &ActionTiming{ + { Uuid: utils.GenUUID(), Timing: &RateInterval{ Timing: &RITiming{ @@ -351,11 +353,11 @@ func testOnStorITCacheDerivedChargers(t *testing.T) { dcs := &utils.DerivedChargers{ DestinationIDs: make(utils.StringMap), Chargers: []*utils.DerivedCharger{ - &utils.DerivedCharger{RunID: "extra1", RunFilters: "^filteredHeader1/filterValue1/", RequestTypeField: "^prepaid", DirectionField: utils.META_DEFAULT, + {RunID: "extra1", RunFilters: "^filteredHeader1/filterValue1/", RequestTypeField: "^prepaid", DirectionField: utils.META_DEFAULT, TenantField: utils.META_DEFAULT, CategoryField: utils.META_DEFAULT, AccountField: "rif", SubjectField: "rif", DestinationField: utils.META_DEFAULT, SetupTimeField: utils.META_DEFAULT, PDDField: utils.META_DEFAULT, AnswerTimeField: utils.META_DEFAULT, UsageField: utils.META_DEFAULT, SupplierField: utils.META_DEFAULT, DisconnectCauseField: utils.META_DEFAULT, CostField: utils.META_DEFAULT, PreRatedField: utils.META_DEFAULT}, - &utils.DerivedCharger{RunID: "extra2", RequestTypeField: utils.META_DEFAULT, DirectionField: utils.META_DEFAULT, TenantField: utils.META_DEFAULT, + {RunID: "extra2", RequestTypeField: utils.META_DEFAULT, DirectionField: utils.META_DEFAULT, TenantField: utils.META_DEFAULT, CategoryField: utils.META_DEFAULT, AccountField: "ivo", SubjectField: "ivo", DestinationField: utils.META_DEFAULT, SetupTimeField: utils.META_DEFAULT, PDDField: utils.META_DEFAULT, AnswerTimeField: utils.META_DEFAULT, UsageField: utils.META_DEFAULT, SupplierField: utils.META_DEFAULT, DisconnectCauseField: utils.META_DEFAULT, CostField: utils.META_DEFAULT, PreRatedField: utils.META_DEFAULT}, @@ -481,7 +483,7 @@ func testOnStorITHasData(t *testing.T) { rp := &RatingPlan{ Id: "HasData", Timings: map[string]*RITiming{ - "59a981b9": &RITiming{ + "59a981b9": { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, @@ -490,10 +492,10 @@ func testOnStorITHasData(t *testing.T) { }, }, Ratings: map[string]*RIRate{ - "ebefae11": &RIRate{ + "ebefae11": { ConnectFee: 0, Rates: []*Rate{ - &Rate{ + { GroupIntervalStart: 0, Value: 0.2, RateIncrement: time.Second, @@ -506,7 +508,7 @@ func testOnStorITHasData(t *testing.T) { }, DestinationRates: map[string]RPRateList{ "GERMANY": []*RPRate{ - &RPRate{ + { Timing: "59a981b9", Rating: "ebefae11", Weight: 10, @@ -564,7 +566,7 @@ func testOnStorITRatingPlan(t *testing.T) { rp := &RatingPlan{ Id: "CRUDRatingPlan", Timings: map[string]*RITiming{ - "59a981b9": &RITiming{ + "59a981b9": { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, @@ -573,10 +575,10 @@ func testOnStorITRatingPlan(t *testing.T) { }, }, Ratings: map[string]*RIRate{ - "ebefae11": &RIRate{ + "ebefae11": { ConnectFee: 0, Rates: []*Rate{ - &Rate{ + { GroupIntervalStart: 0, Value: 0.2, RateIncrement: time.Second, @@ -589,7 +591,7 @@ func testOnStorITRatingPlan(t *testing.T) { }, DestinationRates: map[string]RPRateList{ "GERMANY": []*RPRate{ - &RPRate{ + { Timing: "59a981b9", Rating: "ebefae11", Weight: 10, @@ -624,14 +626,14 @@ func testOnStorITRatingPlan(t *testing.T) { } //update rp.Timings = map[string]*RITiming{ - "59a981b9": &RITiming{ + "59a981b9": { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, WeekDays: utils.WeekDays{1, 2, 3, 4, 5}, StartTime: "00:00:00", }, - "59a981a1": &RITiming{ + "59a981a1": { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, @@ -797,7 +799,7 @@ func testOnStorITCRUDReverseDestinations(t *testing.T) { if err := onStor.DataDB().SetReverseDestination(dst, utils.NonTransactional); err != nil { t.Error(err) } - for i, _ := range dst.Prefixes { + for i := range dst.Prefixes { if rcv, err := onStor.DataDB().GetReverseDestination(dst.Prefixes[i], true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual([]string{dst.Id}, rcv) { @@ -807,7 +809,7 @@ func testOnStorITCRUDReverseDestinations(t *testing.T) { if err := onStor.DataDB().UpdateReverseDestination(dst, dst2, utils.NonTransactional); err != nil { t.Error(err) } - for i, _ := range dst.Prefixes { + for i := range dst.Prefixes { if rcv, err := onStor.DataDB().GetReverseDestination(dst2.Prefixes[i], true, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual([]string{dst2.Id}, rcv) { @@ -822,7 +824,7 @@ func testOnStorITCRUDReverseDestinations(t *testing.T) { // t.Error(rcvErr) // } // - for i, _ := range dst.Prefixes { + for i := range dst.Prefixes { if rcv, err := onStor.DataDB().GetReverseDestination(dst2.Prefixes[i], false, utils.NonTransactional); err != nil { t.Error(err) } else if !reflect.DeepEqual([]string{dst2.Id}, rcv) { @@ -842,17 +844,17 @@ func testOnStorITLCR(t *testing.T) { Account: "*any", Subject: "*any", Activations: []*LCRActivation{ - &LCRActivation{ + { ActivationTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), Entries: []*LCREntry{ - &LCREntry{ + { DestinationId: "EU_LANDLINE", RPCategory: "LCR_STANDARD", Strategy: "*static", StrategyParams: "ivo;dan;rif", Weight: 10, }, - &LCREntry{ + { DestinationId: "*any", RPCategory: "LCR_STANDARD", Strategy: "*lowest_cost", @@ -893,17 +895,17 @@ func testOnStorITLCR(t *testing.T) { } //update lcr.Activations = []*LCRActivation{ - &LCRActivation{ + { ActivationTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), Entries: []*LCREntry{ - &LCREntry{ + { DestinationId: "EU_LANDLINE", RPCategory: "LCR_STANDARD", Strategy: "*static", StrategyParams: "ivo;dan;teo", Weight: 10, }, - &LCREntry{ + { DestinationId: "*any", RPCategory: "LCR_STANDARD", Strategy: "*lowest_cost", @@ -961,7 +963,7 @@ func testOnStorITActions(t *testing.T) { Weight: utils.Float64Pointer(10), Disabled: utils.BoolPointer(false), Timings: []*RITiming{ - &RITiming{ + { Years: utils.Years{2016, 2017}, Months: utils.Months{time.January, time.February, time.March}, MonthDays: utils.MonthDays{1, 2, 3, 4}, @@ -988,7 +990,7 @@ func testOnStorITActions(t *testing.T) { DestinationIDs: utils.StringMapPointer(utils.NewStringMap("NAT")), Disabled: utils.BoolPointer(false), Timings: []*RITiming{ - &RITiming{ + { Years: utils.Years{2016, 2017}, Months: utils.Months{time.January, time.February, time.March}, MonthDays: utils.MonthDays{1, 2, 3, 4}, @@ -1044,7 +1046,7 @@ func testOnStorITActions(t *testing.T) { Weight: utils.Float64Pointer(10), Disabled: utils.BoolPointer(false), Timings: []*RITiming{ - &RITiming{ + { Years: utils.Years{2016, 2017}, Months: utils.Months{time.January, time.February, time.March}, MonthDays: utils.MonthDays{1, 2, 3, 4}, @@ -1071,7 +1073,7 @@ func testOnStorITActions(t *testing.T) { DestinationIDs: utils.StringMapPointer(utils.NewStringMap("NAT")), Disabled: utils.BoolPointer(false), Timings: []*RITiming{ - &RITiming{ + { Years: utils.Years{2016, 2017}, Months: utils.Months{time.January, time.February, time.March}, MonthDays: utils.MonthDays{1, 2, 3, 4}, @@ -1098,7 +1100,7 @@ func testOnStorITActions(t *testing.T) { DestinationIDs: utils.StringMapPointer(utils.NewStringMap("NAT")), Disabled: utils.BoolPointer(false), Timings: []*RITiming{ - &RITiming{ + { Years: utils.Years{2016, 2017}, Months: utils.Months{time.January, time.February, time.March}, MonthDays: utils.MonthDays{1, 2, 3, 4}, @@ -1148,7 +1150,7 @@ func testOnStorITSharedGroup(t *testing.T) { sg := &SharedGroup{ Id: "SG2", AccountParameters: map[string]*SharingParameters{ - "*any": &SharingParameters{ + "*any": { Strategy: "*lowest", RatingSubject: "", }, @@ -1178,11 +1180,11 @@ func testOnStorITSharedGroup(t *testing.T) { } //update sg.AccountParameters = map[string]*SharingParameters{ - "*any": &SharingParameters{ + "*any": { Strategy: "*lowest", RatingSubject: "", }, - "*any2": &SharingParameters{ + "*any2": { Strategy: "*lowest2", RatingSubject: "", }, @@ -1273,7 +1275,7 @@ func testOnStorITCRUDActionPlan(t *testing.T) { Id: "MORE_MINUTES2", AccountIDs: utils.StringMap{"vdf:minitsboy": true}, ActionTimings: []*ActionTiming{ - &ActionTiming{ + { Uuid: utils.GenUUID(), Timing: &RateInterval{ Timing: &RITiming{ @@ -1287,7 +1289,7 @@ func testOnStorITCRUDActionPlan(t *testing.T) { Weight: 10, ActionsID: "MINI", }, - &ActionTiming{ + { Uuid: utils.GenUUID(), Timing: &RateInterval{ Timing: &RITiming{ @@ -1396,7 +1398,7 @@ func testOnStorITCRUDAccountActionPlans(t *testing.T) { func testOnStorITCRUDAccount(t *testing.T) { acc := &Account{ ID: utils.ConcatenatedKey("cgrates.org", "account2"), - BalanceMap: map[string]Balances{utils.MONETARY: Balances{&Balance{Value: 10, Weight: 10}}}, + BalanceMap: map[string]Balances{utils.MONETARY: {&Balance{Value: 10, Weight: 10}}}, } if _, rcvErr := onStor.DataDB().GetAccount(acc.ID); rcvErr != utils.ErrNotFound { t.Error(rcvErr) @@ -1425,7 +1427,7 @@ func testOnStorITCRUDCdrStatsQueue(t *testing.T) { sq := &CDRStatsQueue{ conf: &CdrStats{Id: "TTT"}, Cdrs: []*QCdr{ - &QCdr{Cost: 9.0, + {Cost: 9.0, SetupTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), AnswerTime: time.Date(2012, 1, 1, 0, 0, 10, 0, time.UTC), EventTime: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), @@ -1718,7 +1720,7 @@ func testOnStorITResource(t *testing.T) { Tenant: "cgrates.org", ID: "RL1", Usages: map[string]*ResourceUsage{ - "RU1": &ResourceUsage{ + "RU1": { ID: "RU1", ExpiryTime: time.Date(2014, 7, 3, 13, 43, 0, 0, time.UTC), Units: 2, @@ -1937,7 +1939,7 @@ func testOnStorITStatQueueProfile(t *testing.T) { QueueLength: 2, TTL: time.Duration(0 * time.Second), Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{}, + {}, }, Stored: true, ThresholdIDs: []string{"Thresh1"}, @@ -2106,7 +2108,7 @@ func testOnStorITThresholdProfile(t *testing.T) { Tenant: "cgrates.org", ID: "TestFilter2", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001", "1002"}, @@ -2268,7 +2270,7 @@ func testOnStorITFilter(t *testing.T) { Tenant: "cgrates.org", ID: "Filter1", Rules: []*FilterRule{ - &FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001", "1002"}, @@ -2308,12 +2310,12 @@ func testOnStorITFilter(t *testing.T) { } //update fp.Rules = []*FilterRule{ - &FilterRule{ + { FieldName: "Account", Type: "*string", Values: []string{"1001", "1002"}, }, - &FilterRule{ + { FieldName: "Destination", Type: "*string", Values: []string{"10", "20"}, @@ -2363,7 +2365,7 @@ func testOnStorITSupplierProfile(t *testing.T) { Sorting: "*lowest_cost", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{"FLTR_DST_DE"}, AccountIDs: []string{"Account1"}, @@ -2405,7 +2407,7 @@ func testOnStorITSupplierProfile(t *testing.T) { } //update splProfile.Suppliers = []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{"FLTR_DST_DE"}, AccountIDs: []string{"Account1"}, @@ -2415,7 +2417,7 @@ func testOnStorITSupplierProfile(t *testing.T) { Weight: 10, SupplierParameters: "param1", }, - &Supplier{ + { ID: "supplier2", FilterIDs: []string{"FLTR_DST_DE"}, AccountIDs: []string{"Account2"}, @@ -2478,7 +2480,7 @@ func testOnStorITAttributeProfile(t *testing.T) { }, Contexts: []string{"con1"}, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "FN1", Initial: "Init1", Substitute: config.NewRSRParsersMustCompile("Al1", true), @@ -2570,7 +2572,7 @@ func testOnStorITTestAttributeSubstituteIface(t *testing.T) { }, Contexts: []string{"con1"}, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "FN1", Initial: "Init1", Substitute: config.NewRSRParsersMustCompile("Val1", true), @@ -2609,7 +2611,7 @@ func testOnStorITTestAttributeSubstituteIface(t *testing.T) { Append: true, } attrProfile.Attributes = []*Attribute{ - &Attribute{ + { FieldName: "FN1", Initial: "Init1", Substitute: config.NewRSRParsersMustCompile("123.123", true), @@ -2642,7 +2644,7 @@ func testOnStorITTestAttributeSubstituteIface(t *testing.T) { Append: true, } attrProfile.Attributes = []*Attribute{ - &Attribute{ + { FieldName: "FN1", Initial: "Init1", Substitute: config.NewRSRParsersMustCompile("true", true), diff --git a/engine/versions_it_test.go b/engine/versions_it_test.go index 609507c72..f4c332e79 100644 --- a/engine/versions_it_test.go +++ b/engine/versions_it_test.go @@ -45,9 +45,11 @@ func TestVersionsITMongo(t *testing.T) { if cfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "conf", "samples", "tutmongo")); err != nil { t.Fatal(err) } - if dm3, err = ConfigureDataStorage(cfg.DataDbType, cfg.DataDbHost, - cfg.DataDbPort, cfg.DataDbName, cfg.DataDbUser, cfg.DataDbPass, - cfg.DBDataEncoding, cfg.CacheCfg(), ""); err != nil { + if dm3, err = ConfigureDataStorage(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, + cfg.CacheCfg(), ""); err != nil { log.Fatal(err) } storageDb, err = ConfigureStorStorage(cfg.StorDBType, cfg.StorDBHost, @@ -68,8 +70,10 @@ func TestVersionsITRedisMYSQL(t *testing.T) { if cfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "conf", "samples", "tutmysql")); err != nil { t.Fatal(err) } - dm3, err = ConfigureDataStorage(cfg.DataDbType, cfg.DataDbHost, cfg.DataDbPort, - cfg.DataDbName, cfg.DataDbUser, cfg.DataDbPass, cfg.DBDataEncoding, cfg.CacheCfg(), "") + dm3, err = ConfigureDataStorage(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, cfg.CacheCfg(), "") if err != nil { log.Fatal(err) } @@ -92,8 +96,10 @@ func TestVersionsITRedisPostgres(t *testing.T) { if cfg, err = config.NewCGRConfigFromFolder(path.Join(*dataDir, "conf", "samples", "storage", "postgres")); err != nil { t.Fatal(err) } - dm3, err = ConfigureDataStorage(cfg.DataDbType, cfg.DataDbHost, cfg.DataDbPort, - cfg.DataDbName, cfg.DataDbUser, cfg.DataDbPass, cfg.DBDataEncoding, cfg.CacheCfg(), "") + dm3, err = ConfigureDataStorage(cfg.DataDbCfg().DataDbType, + cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, + cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, + cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, cfg.CacheCfg(), "") if err != nil { log.Fatal(err) } diff --git a/general_tests/sentinel_it_test.go b/general_tests/sentinel_it_test.go index 579502576..b5fe3c8f1 100755 --- a/general_tests/sentinel_it_test.go +++ b/general_tests/sentinel_it_test.go @@ -129,7 +129,7 @@ func testRedisSentinelSetGetAttribute(t *testing.T) { Contexts: []string{utils.MetaSessionS, utils.MetaCDRs}, FilterIDs: []string{"*string:Account:1001"}, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), @@ -251,7 +251,7 @@ func testRedisSentinelGetAttrAfterFailover(t *testing.T) { Contexts: []string{utils.MetaSessionS, utils.MetaCDRs}, FilterIDs: []string{"*string:Account:1001"}, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), diff --git a/migrator/accounts2_it_test.go b/migrator/accounts2_it_test.go index 74b54667b..69f063beb 100755 --- a/migrator/accounts2_it_test.go +++ b/migrator/accounts2_it_test.go @@ -63,16 +63,18 @@ func TestAccMigrateWithInternal(t *testing.T) { } func testAcc2ITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(acc2CfgIn.DataDbType, - acc2CfgIn.DataDbHost, acc2CfgIn.DataDbPort, acc2CfgIn.DataDbName, - acc2CfgIn.DataDbUser, acc2CfgIn.DataDbPass, acc2CfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(acc2CfgIn.DataDbCfg().DataDbType, + acc2CfgIn.DataDbCfg().DataDbHost, acc2CfgIn.DataDbCfg().DataDbPort, + acc2CfgIn.DataDbCfg().DataDbName, acc2CfgIn.DataDbCfg().DataDbUser, + acc2CfgIn.DataDbCfg().DataDbPass, acc2CfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { t.Error(err) } - dataDBOut, err := NewMigratorDataDB(acc2CfgOut.DataDbType, - acc2CfgOut.DataDbHost, acc2CfgOut.DataDbPort, acc2CfgOut.DataDbName, - acc2CfgOut.DataDbUser, acc2CfgOut.DataDbPass, acc2CfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(acc2CfgOut.DataDbCfg().DataDbType, + acc2CfgOut.DataDbCfg().DataDbHost, acc2CfgOut.DataDbCfg().DataDbPort, + acc2CfgOut.DataDbCfg().DataDbName, acc2CfgOut.DataDbCfg().DataDbUser, + acc2CfgOut.DataDbCfg().DataDbPass, acc2CfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { t.Error(err) @@ -122,7 +124,7 @@ func testAcc2ITFlush(t *testing.T) { func testAcc2ITMigrate(t *testing.T) { timingSlice := []*engine.RITiming{ - &engine.RITiming{ + { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, @@ -139,9 +141,9 @@ func testAcc2ITMigrate(t *testing.T) { v1Acc := &v1Account{ Id: "*OUT:CUSTOMER_1:rif", BalanceMap: map[string]v1BalanceChain{ - utils.DATA: v1BalanceChain{v1b}, - utils.VOICE: v1BalanceChain{v1b}, - utils.MONETARY: v1BalanceChain{ + utils.DATA: {v1b}, + utils.VOICE: {v1b}, + utils.MONETARY: { &v1Balance{Value: 21, ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), Timings: timingSlice}}}} @@ -188,9 +190,9 @@ func testAcc2ITMigrate(t *testing.T) { testAccount := &engine.Account{ ID: "CUSTOMER_1:rif", BalanceMap: map[string]engine.Balances{ - utils.DATA: engine.Balances{v2d}, - utils.VOICE: engine.Balances{v2b}, - utils.MONETARY: engine.Balances{m2}}, + utils.DATA: {v2d}, + utils.VOICE: {v2b}, + utils.MONETARY: {m2}}, UnitCounters: engine.UnitCounters{}, ActionTriggers: engine.ActionTriggers{}, } diff --git a/migrator/accounts_it_test.go b/migrator/accounts_it_test.go index b49318d42..2f4b47b2a 100755 --- a/migrator/accounts_it_test.go +++ b/migrator/accounts_it_test.go @@ -138,16 +138,18 @@ func TestAccountITMoveEncoding2(t *testing.T) { } func testAccITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(accCfgIn.DataDbType, - accCfgIn.DataDbHost, accCfgIn.DataDbPort, accCfgIn.DataDbName, - accCfgIn.DataDbUser, accCfgIn.DataDbPass, accCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(accCfgIn.DataDbCfg().DataDbType, + accCfgIn.DataDbCfg().DataDbHost, accCfgIn.DataDbCfg().DataDbPort, + accCfgIn.DataDbCfg().DataDbName, accCfgIn.DataDbCfg().DataDbUser, + accCfgIn.DataDbCfg().DataDbPass, accCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(accCfgOut.DataDbType, - accCfgOut.DataDbHost, accCfgOut.DataDbPort, accCfgOut.DataDbName, - accCfgOut.DataDbUser, accCfgOut.DataDbPass, accCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(accCfgOut.DataDbCfg().DataDbType, + accCfgOut.DataDbCfg().DataDbHost, accCfgOut.DataDbCfg().DataDbPort, + accCfgOut.DataDbCfg().DataDbName, accCfgOut.DataDbCfg().DataDbUser, + accCfgOut.DataDbCfg().DataDbPass, accCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -173,7 +175,7 @@ func testAccITFlush(t *testing.T) { func testAccITMigrateAndMove(t *testing.T) { timingSlice := []*engine.RITiming{ - &engine.RITiming{ + { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, @@ -190,9 +192,9 @@ func testAccITMigrateAndMove(t *testing.T) { v1Acc := &v1Account{ Id: "*OUT:CUSTOMER_1:rif", BalanceMap: map[string]v1BalanceChain{ - utils.DATA: v1BalanceChain{v1b}, - utils.VOICE: v1BalanceChain{v1b}, - utils.MONETARY: v1BalanceChain{ + utils.DATA: {v1b}, + utils.VOICE: {v1b}, + utils.MONETARY: { &v1Balance{Value: 21, ExpirationDate: time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), Timings: timingSlice}}}} @@ -239,9 +241,9 @@ func testAccITMigrateAndMove(t *testing.T) { testAccount := &engine.Account{ ID: "CUSTOMER_1:rif", BalanceMap: map[string]engine.Balances{ - utils.DATA: engine.Balances{v2d}, - utils.VOICE: engine.Balances{v2b}, - utils.MONETARY: engine.Balances{m2}}, + utils.DATA: {v2d}, + utils.VOICE: {v2b}, + utils.MONETARY: {m2}}, UnitCounters: engine.UnitCounters{}, ActionTriggers: engine.ActionTriggers{}, } diff --git a/migrator/action_it_test.go b/migrator/action_it_test.go index 6dd0f6a3b..93b96cedd 100644 --- a/migrator/action_it_test.go +++ b/migrator/action_it_test.go @@ -136,16 +136,18 @@ func TestActionITMoveEncoding2(t *testing.T) { }*/ func testActITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(actCfgIn.DataDbType, - actCfgIn.DataDbHost, actCfgIn.DataDbPort, actCfgIn.DataDbName, - actCfgIn.DataDbUser, actCfgIn.DataDbPass, actCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(actCfgIn.DataDbCfg().DataDbType, + actCfgIn.DataDbCfg().DataDbHost, actCfgIn.DataDbCfg().DataDbPort, + actCfgIn.DataDbCfg().DataDbName, actCfgIn.DataDbCfg().DataDbUser, + actCfgIn.DataDbCfg().DataDbPass, actCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(actCfgOut.DataDbType, - actCfgOut.DataDbHost, actCfgOut.DataDbPort, actCfgOut.DataDbName, - actCfgOut.DataDbUser, actCfgOut.DataDbPass, actCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(actCfgOut.DataDbCfg().DataDbType, + actCfgOut.DataDbCfg().DataDbHost, actCfgOut.DataDbCfg().DataDbPort, + actCfgOut.DataDbCfg().DataDbName, actCfgOut.DataDbCfg().DataDbUser, + actCfgOut.DataDbCfg().DataDbPass, actCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -167,7 +169,7 @@ func testActITFlush(t *testing.T) { func testActITMigrateAndMove(t *testing.T) { timingSlice := []*engine.RITiming{ - &engine.RITiming{ + { Years: utils.Years{}, Months: utils.Months{}, MonthDays: utils.MonthDays{}, diff --git a/migrator/action_plan_it_test.go b/migrator/action_plan_it_test.go index 2f964ccdb..75e65c58f 100644 --- a/migrator/action_plan_it_test.go +++ b/migrator/action_plan_it_test.go @@ -135,16 +135,18 @@ func TestActionPlanITMoveEncoding2(t *testing.T) { } func testActPlnITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(actPlnCfgIn.DataDbType, - actPlnCfgIn.DataDbHost, actPlnCfgIn.DataDbPort, actPlnCfgIn.DataDbName, - actPlnCfgIn.DataDbUser, actPlnCfgIn.DataDbPass, actPlnCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(actPlnCfgIn.DataDbCfg().DataDbType, + actPlnCfgIn.DataDbCfg().DataDbHost, actPlnCfgIn.DataDbCfg().DataDbPort, + actPlnCfgIn.DataDbCfg().DataDbName, actPlnCfgIn.DataDbCfg().DataDbUser, + actPlnCfgIn.DataDbCfg().DataDbPass, actPlnCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(actPlnCfgOut.DataDbType, - actPlnCfgOut.DataDbHost, actPlnCfgOut.DataDbPort, actPlnCfgOut.DataDbName, - actPlnCfgOut.DataDbUser, actPlnCfgOut.DataDbPass, actPlnCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(actPlnCfgOut.DataDbCfg().DataDbType, + actPlnCfgOut.DataDbCfg().DataDbHost, actPlnCfgOut.DataDbCfg().DataDbPort, + actPlnCfgOut.DataDbCfg().DataDbName, actPlnCfgOut.DataDbCfg().DataDbUser, + actPlnCfgOut.DataDbCfg().DataDbPass, actPlnCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -186,7 +188,7 @@ func testActPlnITMigrateAndMove(t *testing.T) { Id: "test", AccountIDs: utils.StringMap{"one": true}, ActionTimings: []*engine.ActionTiming{ - &engine.ActionTiming{ + { Timing: &engine.RateInterval{ Timing: timingSlice, }, diff --git a/migrator/attributes_it_test.go b/migrator/attributes_it_test.go index d936fa9dd..8e9411dea 100755 --- a/migrator/attributes_it_test.go +++ b/migrator/attributes_it_test.go @@ -154,16 +154,18 @@ func TestAttributeITMoveEncoding2(t *testing.T) { } func testAttrITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(attrCfgIn.DataDbType, - attrCfgIn.DataDbHost, attrCfgIn.DataDbPort, attrCfgIn.DataDbName, - attrCfgIn.DataDbUser, attrCfgIn.DataDbPass, attrCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(attrCfgIn.DataDbCfg().DataDbType, + attrCfgIn.DataDbCfg().DataDbHost, attrCfgIn.DataDbCfg().DataDbPort, + attrCfgIn.DataDbCfg().DataDbName, attrCfgIn.DataDbCfg().DataDbUser, + attrCfgIn.DataDbCfg().DataDbPass, attrCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(attrCfgOut.DataDbType, - attrCfgOut.DataDbHost, attrCfgOut.DataDbPort, attrCfgOut.DataDbName, - attrCfgOut.DataDbUser, attrCfgOut.DataDbPass, attrCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(attrCfgOut.DataDbCfg().DataDbType, + attrCfgOut.DataDbCfg().DataDbHost, attrCfgOut.DataDbCfg().DataDbPort, + attrCfgOut.DataDbCfg().DataDbName, attrCfgOut.DataDbCfg().DataDbUser, + attrCfgOut.DataDbCfg().DataDbPass, attrCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -226,7 +228,7 @@ func testAttrITMigrateAndMove(t *testing.T) { ExpiryTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: "FL1", Initial: "In1", Substitute: config.NewRSRParsersMustCompile("Al1", true), diff --git a/migrator/sharedgroup_it_test.go b/migrator/sharedgroup_it_test.go index 80139c182..3786f7522 100644 --- a/migrator/sharedgroup_it_test.go +++ b/migrator/sharedgroup_it_test.go @@ -135,16 +135,18 @@ func TestSharedGroupITMoveEncoding2(t *testing.T) { } func testShrGrpITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(shrGrpCfgIn.DataDbType, - shrGrpCfgIn.DataDbHost, shrGrpCfgIn.DataDbPort, shrGrpCfgIn.DataDbName, - shrGrpCfgIn.DataDbUser, shrGrpCfgIn.DataDbPass, shrGrpCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(shrGrpCfgIn.DataDbCfg().DataDbType, + shrGrpCfgIn.DataDbCfg().DataDbHost, shrGrpCfgIn.DataDbCfg().DataDbPort, + shrGrpCfgIn.DataDbCfg().DataDbName, shrGrpCfgIn.DataDbCfg().DataDbUser, + shrGrpCfgIn.DataDbCfg().DataDbPass, shrGrpCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(shrGrpCfgOut.DataDbType, - shrGrpCfgOut.DataDbHost, shrGrpCfgOut.DataDbPort, shrGrpCfgOut.DataDbName, - shrGrpCfgOut.DataDbUser, shrGrpCfgOut.DataDbPass, shrGrpCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(shrGrpCfgOut.DataDbCfg().DataDbType, + shrGrpCfgOut.DataDbCfg().DataDbHost, shrGrpCfgOut.DataDbCfg().DataDbPort, + shrGrpCfgOut.DataDbCfg().DataDbName, shrGrpCfgOut.DataDbCfg().DataDbUser, + shrGrpCfgOut.DataDbCfg().DataDbPass, shrGrpCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -168,14 +170,14 @@ func testShrGrpITMigrateAndMove(t *testing.T) { v1shrGrp := &v1SharedGroup{ Id: "Test", AccountParameters: map[string]*engine.SharingParameters{ - "test": &engine.SharingParameters{Strategy: "*highest"}, + "test": {Strategy: "*highest"}, }, MemberIds: []string{"1", "2", "3"}, } shrGrp := &engine.SharedGroup{ Id: "Test", AccountParameters: map[string]*engine.SharingParameters{ - "test": &engine.SharingParameters{Strategy: "*highest"}, + "test": {Strategy: "*highest"}, }, MemberIds: utils.NewStringMap("1", "2", "3"), } diff --git a/migrator/stats_it_test.go b/migrator/stats_it_test.go index 237e5ecc6..2c51101c0 100755 --- a/migrator/stats_it_test.go +++ b/migrator/stats_it_test.go @@ -101,16 +101,18 @@ func TestStatsQueueITMove(t *testing.T) { } func testStsITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(stsCfgIn.DataDbType, - stsCfgIn.DataDbHost, stsCfgIn.DataDbPort, stsCfgIn.DataDbName, - stsCfgIn.DataDbUser, stsCfgIn.DataDbPass, stsCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(stsCfgIn.DataDbCfg().DataDbType, + stsCfgIn.DataDbCfg().DataDbHost, stsCfgIn.DataDbCfg().DataDbPort, + stsCfgIn.DataDbCfg().DataDbName, stsCfgIn.DataDbCfg().DataDbUser, + stsCfgIn.DataDbCfg().DataDbPass, stsCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(stsCfgOut.DataDbType, - stsCfgOut.DataDbHost, stsCfgOut.DataDbPort, stsCfgOut.DataDbName, - stsCfgOut.DataDbUser, stsCfgOut.DataDbPass, stsCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(stsCfgOut.DataDbCfg().DataDbType, + stsCfgOut.DataDbCfg().DataDbHost, stsCfgOut.DataDbCfg().DataDbPort, + stsCfgOut.DataDbCfg().DataDbName, stsCfgOut.DataDbCfg().DataDbUser, + stsCfgOut.DataDbCfg().DataDbPass, stsCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -203,9 +205,9 @@ func testStsITMigrateAndMove(t *testing.T) { QueueLength: 10, TTL: time.Duration(0) * time.Second, Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{MetricID: "*asr", Parameters: ""}, - &utils.MetricWithParams{MetricID: "*acd", Parameters: ""}, - &utils.MetricWithParams{MetricID: "*acc", Parameters: ""}, + {MetricID: "*asr", Parameters: ""}, + {MetricID: "*acd", Parameters: ""}, + {MetricID: "*acc", Parameters: ""}, }, ThresholdIDs: []string{"Test"}, Blocker: false, diff --git a/migrator/thresholds_it_test.go b/migrator/thresholds_it_test.go index 01e7aa6a9..a88f6fd52 100644 --- a/migrator/thresholds_it_test.go +++ b/migrator/thresholds_it_test.go @@ -136,16 +136,18 @@ func TestThresholdsITMoveEncoding2(t *testing.T) { } func testTrsITConnect(t *testing.T) { - dataDBIn, err := NewMigratorDataDB(trsCfgIn.DataDbType, - trsCfgIn.DataDbHost, trsCfgIn.DataDbPort, trsCfgIn.DataDbName, - trsCfgIn.DataDbUser, trsCfgIn.DataDbPass, trsCfgIn.DBDataEncoding, + dataDBIn, err := NewMigratorDataDB(trsCfgIn.DataDbCfg().DataDbType, + trsCfgIn.DataDbCfg().DataDbHost, trsCfgIn.DataDbCfg().DataDbPort, + trsCfgIn.DataDbCfg().DataDbName, trsCfgIn.DataDbCfg().DataDbUser, + trsCfgIn.DataDbCfg().DataDbPass, trsCfgIn.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - dataDBOut, err := NewMigratorDataDB(trsCfgOut.DataDbType, - trsCfgOut.DataDbHost, trsCfgOut.DataDbPort, trsCfgOut.DataDbName, - trsCfgOut.DataDbUser, trsCfgOut.DataDbPass, trsCfgOut.DBDataEncoding, + dataDBOut, err := NewMigratorDataDB(trsCfgOut.DataDbCfg().DataDbType, + trsCfgOut.DataDbCfg().DataDbHost, trsCfgOut.DataDbCfg().DataDbPort, + trsCfgOut.DataDbCfg().DataDbName, trsCfgOut.DataDbCfg().DataDbUser, + trsCfgOut.DataDbCfg().DataDbPass, trsCfgOut.DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err)