diff --git a/config/erscfg_test.go b/config/erscfg_test.go index c7a4f8385..a39c99b03 100644 --- a/config/erscfg_test.go +++ b/config/erscfg_test.go @@ -18,6 +18,7 @@ along with this program. If not, see package config import ( + "fmt" "reflect" "testing" "time" @@ -331,9 +332,13 @@ func TestERsCfgAsMapInterface(t *testing.T) { } func TestERSCFGClone(t *testing.T) { - ev := EventReaderCfg{} + ev := EventReaderCfg{ + CacheDumpFields: []*FCTemplate{ + {Tag: "test"}, + }, + } ev2 := EventReaderCfg{} - + e := ERsCfg{ Enabled: true, SessionSConns: []string{"val1", "val2"}, @@ -346,5 +351,236 @@ func TestERSCFGClone(t *testing.T) { if rcv.Enabled != exp.Enabled && !reflect.DeepEqual(rcv.SessionSConns, exp.SessionSConns) && !reflect.DeepEqual(rcv.Readers, exp.Readers) { t.Errorf("recived %v, expected %v", rcv, exp) } - + +} + +func TestEventReadersCFGAppendERsReaders(t *testing.T) { + + er := EventReaderCfg{ + ID: "test", + } + + e := ERsCfg{ + Enabled: false, + SessionSConns: []string{}, + Readers: []*EventReaderCfg{&er}, + } + + id := "test" + ten := "`test" + + ej := EventReaderJsonCfg{ + Id: &id, + Tenant: &ten, + } + + erj := []*EventReaderJsonCfg{&ej} + + type args struct { + jsnReaders *[]*EventReaderJsonCfg + sep string + dfltRdrCfg *EventReaderCfg + } + + tests := []struct { + name string + args args + exp error + }{ + { + name: "nil return", + args: args{jsnReaders: nil, sep: "", dfltRdrCfg: nil}, + exp: nil, + }, + { + name: "nil return", + args: args{jsnReaders: &erj, sep: "", dfltRdrCfg: nil}, + exp: fmt.Errorf("Unclosed unspilit syntax"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rcv := e.appendERsReaders(tt.args.jsnReaders, tt.args.sep, tt.args.dfltRdrCfg) + + if err != nil { + if rcv.Error() != tt.exp.Error() { + t.Errorf("recived %v, expected %v", rcv, tt.exp) + } + } + }) + } +} + +func TestEventReaderLoadFromJSON2(t *testing.T) { + + er := EventReaderCfg{ + ID: "test", + } + + rn := "test" + + ej1 := EventReaderJsonCfg{ + Run_delay: &rn, + } + + flt := []string{"val1", "val2"} + flg := []string{"1:2:3:4:5"} + + ej2 := EventReaderJsonCfg{ + Filters: &flt, + Flags: &flg, + } + + fcp := "test" + prc := "test" + + ej3 := EventReaderJsonCfg{ + Failed_calls_prefix: &fcp, + Partial_record_cache: &prc, + } + + vl := "`test" + + fcT := FcTemplateJsonCfg{ + Value: &vl, + } + + pcea := "test" + flds := []*FcTemplateJsonCfg{&fcT} + + ej4 := EventReaderJsonCfg{ + Partial_cache_expiry_action: &pcea, + Fields: &flds, + } + + ej5 := EventReaderJsonCfg{ + Cache_dump_fields: &flds, + } + + type args struct { + jsnCfg *EventReaderJsonCfg + sep string + } + + tests := []struct { + name string + args args + exp error + }{ + { + name: "nil return", + args: args{jsnCfg: nil, sep: ""}, + exp: nil, + }, + { + name: "check error invalid duration", + args: args{jsnCfg: &ej1, sep: ""}, + exp: fmt.Errorf(`time: invalid duration "test"`), + }, + { + name: "check error unsupported format", + args: args{jsnCfg: &ej2, sep: ""}, + exp: utils.ErrUnsupportedFormat, + }, + { + name: "check error invalid duration", + args: args{jsnCfg: &ej3, sep: ""}, + exp: fmt.Errorf(`time: invalid duration "test"`), + }, + { + name: "check error in Fields", + args: args{jsnCfg: &ej4, sep: ""}, + exp: fmt.Errorf("Unclosed unspilit syntax"), + }, + { + name: "check error in cache dump fields", + args: args{jsnCfg: &ej5, sep: ""}, + exp: fmt.Errorf("Unclosed unspilit syntax"), + }, + } + + for _, tt := range tests { + rcv := er.loadFromJsonCfg(tt.args.jsnCfg, tt.args.sep) + + if rcv != nil { + if rcv.Error() != tt.exp.Error() { + t.Errorf("recived %v, expected %v", rcv, tt.exp) + } + } + } +} + +func TestEventReeadersCFGAsMapInterface(t *testing.T) { + + fct := FCTemplate{ + Tag: "test", + } + + er := EventReaderCfg{ + Tenant: RSRParsers{&RSRParser{ + Rules: "test", + }}, + Flags: utils.FlagsWithParams{"test": []string{"val1", "val2"}}, + CacheDumpFields: []*FCTemplate{ + &fct, + }, + RunDelay: 1 * time.Second, + PartialRecordCache: 1 * time.Millisecond, + ID: "test", + Type: "test", + RowLength: 1, + FieldSep: "test", + ConcurrentReqs: 1, + SourcePath: "test", + ProcessedPath: "test", + XmlRootPath: []string{}, + Timezone: "test", + Filters: []string{}, + FailedCallsPrefix: "!", + PartialCacheExpiryAction: "test", + } + + mp := map[string]any{ + utils.IDCfg: er.ID, + utils.TypeCfg: er.Type, + utils.RowLengthCfg: er.RowLength, + utils.FieldSepCfg: er.FieldSep, + utils.RunDelayCfg: "1s", + utils.ConcurrentReqsCfg: er.ConcurrentReqs, + utils.SourcePathCfg: er.SourcePath, + utils.ProcessedPathCfg: er.ProcessedPath, + utils.XmlRootPathCfg: []string{}, + utils.TenantCfg: "test", + utils.TimezoneCfg: er.Timezone, + utils.FiltersCfg: er.Filters, + utils.FlagsCfg: map[string][]any{"test": {"val1", "val2"}}, + utils.FailedCallsPrefixCfg: er.FailedCallsPrefix, + utils.PartialRecordCacheCfg: "1ms", + utils.PartialCacheExpiryActionCfg: er.PartialCacheExpiryAction, + utils.FieldsCfg: []map[string]any{}, + utils.CacheDumpFieldsCfg: []map[string]any{fct.AsMapInterface("")}, + } + + tests := []struct { + name string + arg string + exp map[string]any + }{ + { + name: "test ErsCFG as map interface", + arg: "", + exp: mp, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rcv := er.AsMapInterface(tt.arg) + + if !reflect.DeepEqual(rcv, tt.exp) { + t.Errorf("recived %v, expected %v", rcv, tt.exp) + } + }) + } } diff --git a/config/loaderscfg_test.go b/config/loaderscfg_test.go index 452539624..c5ddef7ed 100644 --- a/config/loaderscfg_test.go +++ b/config/loaderscfg_test.go @@ -18,6 +18,7 @@ along with this program. If not, see package config import ( + "fmt" "reflect" "testing" @@ -179,3 +180,94 @@ func TestLoaderCfgAsMapInterface(t *testing.T) { } } + +func TestLoadersCFGEnable(t *testing.T) { + + lt := LoaderSCfg{ + Enabled: true, + } + lf := LoaderSCfg{ + Enabled: false, + } + + lst := LoaderSCfgs{<} + lsf := LoaderSCfgs{&lf} + + tests := []struct{ + name string + loader LoaderSCfgs + exp bool + }{ + { + name: "return true", + loader: lst, + exp: true, + }, + { + name: "return false", + loader: lsf, + exp: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rcv := tt.loader.Enabled() + + if rcv != tt.exp { + t.Errorf("recived %v, expected %v", rcv, tt.exp) + } + }) + } +} + +func TestLoadersCFGLoadFromJsonCfg(t *testing.T) { + + ld := LoaderDataType{ + Type: "test", + Filename: "test", + Fields: []*FCTemplate{}, + } + + str := "`test" + + ljd := LoaderJsonDataType{ + Fields: &[]*FcTemplateJsonCfg{ + {Value: &str,}, + }, + } + + type args struct { + jsnCfg *LoaderJsonDataType + separator string + } + + tests := []struct{ + name string + args args + exp error + }{ + { + name: "nil return", + args: args{jsnCfg: nil, separator: ""}, + exp: nil, + }, + { + name: "error check", + args: args{&ljd, ""}, + exp: fmt.Errorf("Unclosed unspilit syntax"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rcv := ld.loadFromJsonCfg(tt.args.jsnCfg, tt.args.separator) + + if rcv != nil { + if rcv.Error() != tt.exp.Error() { + t.Errorf("recived %v, expected %v", rcv, tt.exp) + } + } + }) + } +}