From c1ccbbef0d6eb875ebb6854cc0999d2c34303db5 Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Mon, 28 Sep 2020 16:20:48 +0300 Subject: [PATCH] Updated load tests for loaderscfg --- config/loaderscfg.go | 14 +++++ config/loaderscfg_test.go | 123 +++++++++++++++++++------------------- 2 files changed, 75 insertions(+), 62 deletions(-) diff --git a/config/loaderscfg.go b/config/loaderscfg.go index 3df06dd46..7ed895ab3 100644 --- a/config/loaderscfg.go +++ b/config/loaderscfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "log" "strings" "time" @@ -36,6 +37,19 @@ func NewDfltLoaderSCfg() *LoaderSCfg { // LoaderSCfgs to export some methods for LoaderS profiles type LoaderSCfgs []*LoaderSCfg +func (ldrs *LoaderSCfgs) LoadFromJsonSlice(snCfg *LoaderJsonCfg, msgTemplates map[string][]*FCTemplate, separator string) error { + if snCfg == nil { + return nil + } else { + for _, item := range *ldrs { + if err := item.loadFromJsonCfg(snCfg, msgTemplates, separator); err != nil { + log.Fatal(err) + } + } + } + return nil +} + func (ldrs LoaderSCfgs) AsMapInterface(separator string) (loaderCfg []map[string]interface{}) { loaderCfg = make([]map[string]interface{}, len(ldrs)) for i, item := range ldrs { diff --git a/config/loaderscfg_test.go b/config/loaderscfg_test.go index ac3ca2204..b94918606 100644 --- a/config/loaderscfg_test.go +++ b/config/loaderscfg_test.go @@ -26,41 +26,34 @@ import ( ) func TestLoaderSCfgloadFromJsonCfg(t *testing.T) { - var loadscfg, expected LoaderSCfg - if err := loadscfg.loadFromJsonCfg(nil, nil, utils.INFIELD_SEP); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(loadscfg, expected) { - t.Errorf("Expected: %+v ,recived: %+v", expected, loadscfg) - } - if err := loadscfg.loadFromJsonCfg(new(LoaderJsonCfg), nil, utils.INFIELD_SEP); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(loadscfg, expected) { - t.Errorf("Expected: %+v ,recived: %+v", expected, loadscfg) - } - cfgJSONStr := `{ -"loaders": [ - { - "id": "*default", // identifier of the Loader - "enabled": false, // starts as service: . - "tenant": "cgrates.org", // tenant used in filterS.Pass - "dry_run": false, // do not send the CDRs to CDRS, just parse them - "run_delay": 0, // sleep interval in seconds between consecutive runs, 0 to use automation via inotify - "lock_filename": ".cgr.lck", // Filename containing concurrency lock in case of delayed processing - "caches_conns": ["*internal"], - "field_separator": ",", // separator used in case of csv files - "tp_in_dir": "/var/spool/cgrates/loader/in", // absolute path towards the directory where the CDRs are stored - "tp_out_dir": "/var/spool/cgrates/loader/out", // absolute path towards the directory where processed CDRs will be moved - "data":[ // data profiles to load + cfgJSONStr := &LoaderJsonCfg{ + ID: utils.StringPointer(utils.MetaDefault), + Enabled: utils.BoolPointer(true), + Tenant: utils.StringPointer("cgrates.org"), + Dry_run: utils.BoolPointer(true), + Run_delay: utils.IntPointer(10), + Lock_filename: utils.StringPointer(".cgr.lck"), + Caches_conns: &[]string{utils.MetaInternal}, + Field_separator: utils.StringPointer(","), + Tp_in_dir: utils.StringPointer("/var/spool/cgrates/loader/in"), + Tp_out_dir: utils.StringPointer("/var/spool/cgrates/loader/out"), + Data: &[]*LoaderJsonDataType{ { - "type": "*attributes", // data source type - "file_name": "Attributes.csv", // file name in the tp_in_dir - "fields": [ - {"tag": "TenantID", "path": "Tenant", "type": "*composed", "value": "~0", "mandatory": true}, - ], - },] - } - ] -}` + Type: utils.StringPointer(utils.MetaAttributes), + File_name: utils.StringPointer("Attributes.csv"), + Fields: &[]*FcTemplateJsonCfg{ + { + Tag: utils.StringPointer("TenantID"), + Path: utils.StringPointer("Tenant"), + Type: utils.StringPointer(utils.META_COMPOSED), + Value: utils.StringPointer("~0"), + Mandatory: utils.BoolPointer(true), + Layout: utils.StringPointer(string(time.RFC3339)), + }, + }, + }, + }, + } val, err := NewRSRParsers("~0", utils.INFIELD_SEP) if err != nil { t.Error(err) @@ -69,41 +62,47 @@ func TestLoaderSCfgloadFromJsonCfg(t *testing.T) { if err != nil { t.Error(err) } - expected = LoaderSCfg{ - Id: utils.MetaDefault, - Tenant: ten, - LockFileName: ".cgr.lck", - CacheSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}, - FieldSeparator: ",", - TpInDir: "/var/spool/cgrates/loader/in", - TpOutDir: "/var/spool/cgrates/loader/out", - Data: []*LoaderDataType{ - { - Type: "*attributes", - Filename: "Attributes.csv", - Fields: []*FCTemplate{ - { - Tag: "TenantID", - Path: "Tenant", - pathSlice: []string{"Tenant"}, - pathItems: utils.PathItems{{Field: "Tenant"}}, - Type: "*composed", - Value: val, - Mandatory: true, - Layout: time.RFC3339, + expected := LoaderSCfgs{ + { + Id: utils.MetaDefault, + Tenant: ten, + LockFileName: ".cgr.lck", + CacheSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches)}, + FieldSeparator: ",", + TpInDir: "/var/spool/cgrates/loader/in", + TpOutDir: "/var/spool/cgrates/loader/out", + Data: []*LoaderDataType{ + { + Type: "*attributes", + Filename: "Attributes.csv", + Fields: []*FCTemplate{ + { + Tag: "TenantID", + Path: "Tenant", + pathSlice: []string{"Tenant"}, + pathItems: utils.PathItems{{Field: "Tenant"}}, + Type: "*composed", + Value: val, + Mandatory: true, + Layout: time.RFC3339, + }, }, }, }, }, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if jsnCfg, err := NewDefaultCGRConfig(); err != nil { t.Error(err) - } else if jsnLoadersCfg, err := jsnCfg.LoaderJsonCfg(); err != nil { + } else if err = jsnCfg.loaderCfg.LoadFromJsonSlice(cfgJSONStr, jsnCfg.templates, jsnCfg.generalCfg.RSRSep); err != nil { t.Error(err) - } else if err = loadscfg.loadFromJsonCfg(jsnLoadersCfg[0], nil, utils.INFIELD_SEP); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(expected, loadscfg) { - t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(loadscfg)) + } else if !reflect.DeepEqual(expected[0].Tenant, jsnCfg.loaderCfg[0].Tenant) { + t.Errorf("Expected %+v \n, received %+v", expected[0].Tenant, jsnCfg.loaderCfg[0].Tenant) + } else if !reflect.DeepEqual(expected[0].CacheSConns, jsnCfg.loaderCfg[0].CacheSConns) { + t.Errorf("Expected %+v \n, received %+v", expected[0].CacheSConns, jsnCfg.loaderCfg[0].CacheSConns) + } else if !reflect.DeepEqual(expected[0].Data[0].Filename, jsnCfg.loaderCfg[0].Data[0].Filename) { + t.Errorf("Expected %+v \n, received %+v", expected[0].Data[0].Filename, jsnCfg.loaderCfg[0].Data[0].Filename) + } else if !reflect.DeepEqual(expected[0].Data[0].Fields[0], jsnCfg.loaderCfg[0].Data[0].Fields[0]) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(expected[0].Data[0].Fields[0]), utils.ToJSON(jsnCfg.loaderCfg[0].Data[0].Fields[0])) } }