From 4c5d5ebb2c86f0e6e496567bde65f51c5facf8e7 Mon Sep 17 00:00:00 2001 From: nickolasdaniel Date: Thu, 29 Jul 2021 17:04:44 +0300 Subject: [PATCH] Added and fixed some tests for ees exporters --- ees/filecsv_test.go | 66 ++++++++++++++++++++- ees/filefwv_test.go | 123 ---------------------------------------- ees/httpjsonmap_test.go | 4 +- ees/httppost_test.go | 123 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 190 insertions(+), 126 deletions(-) diff --git a/ees/filecsv_test.go b/ees/filecsv_test.go index d20f5ac10..4b3f13766 100644 --- a/ees/filecsv_test.go +++ b/ees/filecsv_test.go @@ -349,6 +349,7 @@ type mockCsv struct { func (mc *mockCsv) Close() error { return nil } func (mc *mockCsv) Write(s []byte) (n int, err error) { + // fmt.Println(string(s)) time.Sleep(3 * time.Second) mc.wg.Done() return 0, nil @@ -360,7 +361,7 @@ func TestFileCSVSync(t *testing.T) { var cfgIdx int cfgIdx = 0 - cgrCfg.EEsCfg().Exporters[cfgIdx].Type = "*file_csv" + cgrCfg.EEsCfg().Exporters[cfgIdx].Type = utils.MetaFileCSV dc, err := newEEMetrics(utils.FirstNonEmpty( cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, cgrCfg.GeneralCfg().DefaultTimezone)) @@ -415,3 +416,66 @@ func TestFileCSVSync(t *testing.T) { t.Error("Can't asynchronously export events") } } + +// func TestFileCSVSyncLimit(t *testing.T) { +// //Create new exporter +// cgrCfg := config.NewDefaultCGRConfig() +// var cfgIdx int +// cfgIdx = 0 + +// cgrCfg.EEsCfg().Exporters[cfgIdx].Type = "*file_csv" +// cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests = 1 +// dc, err := newEEMetrics(utils.FirstNonEmpty( +// cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, +// cgrCfg.GeneralCfg().DefaultTimezone)) +// if err != nil { +// t.Error(err) +// } + +// //Create an event +// cgrEvent := &utils.CGREvent{ +// Tenant: "cgrates.org", +// Event: map[string]interface{}{ +// "Account": "1001", +// "Destination": "1002", +// }, +// } + +// var wg1 = &sync.WaitGroup{} + +// wg1.Add(3) + +// test := make(chan struct{}) +// go func() { +// wg1.Wait() +// close(test) +// }() +// mckCsv := &mockCsv{ +// wg: wg1, +// } +// exp := &FileCSVee{ +// id: cgrCfg.EEsCfg().Exporters[cfgIdx].ID, +// cgrCfg: cgrCfg, +// cfgIdx: cfgIdx, +// filterS: new(engine.FilterS), +// file: mckCsv, +// csvWriter: csv.NewWriter(mckCsv), +// dc: dc, +// reqs: newConcReq(cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests), +// } + +// for i := 0; i < 3; i++ { +// go func() { +// exp.ExportEvent(cgrEvent) +// exp.csvWriter.Flush() +// }() +// } +// // exp.ExportEvent(cgrEvent) + +// select { +// case <-test: +// t.Error("Should not have been possible to asynchronously export events") +// case <-time.After(4 * time.Second): +// return +// } +// } diff --git a/ees/filefwv_test.go b/ees/filefwv_test.go index b22091278..321eb300d 100644 --- a/ees/filefwv_test.go +++ b/ees/filefwv_test.go @@ -23,9 +23,7 @@ import ( "encoding/csv" "io" "reflect" - "sync" "testing" - "time" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" @@ -457,124 +455,3 @@ func TestFileFwvOnEvictedClose(t *testing.T) { cgrCfg.EEsCfg().Exporters[fFwv.cfgIdx].ComputeFields() fFwv.OnEvicted("test", "test") } - -func TestFileFWVSync(t *testing.T) { - //Create new exporter - cgrCfg := config.NewDefaultCGRConfig() - var cfgIdx int - cfgIdx = 0 - - cgrCfg.EEsCfg().Exporters[cfgIdx].Type = "*file_fwv" - dc, err := newEEMetrics(utils.FirstNonEmpty( - cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, - cgrCfg.GeneralCfg().DefaultTimezone)) - if err != nil { - t.Error(err) - } - - //Create an event - cgrEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - Event: map[string]interface{}{ - "Account": "1001", - "Destination": "1002", - }, - } - - var wg1 = &sync.WaitGroup{} - - wg1.Add(3) - - test := make(chan struct{}) - go func() { - wg1.Wait() - close(test) - }() - mckCsv := &mockCsv{ - wg: wg1, - } - exp := &FileFWVee{ - id: cgrCfg.EEsCfg().Exporters[cfgIdx].ID, - cgrCfg: cgrCfg, - cfgIdx: cfgIdx, - filterS: new(engine.FilterS), - file: mckCsv, - dc: dc, - reqs: newConcReq(cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests), - } - - for i := 0; i < 3; i++ { - go func() { - exp.ExportEvent(cgrEvent) - }() - } - // exp.ExportEvent(cgrEvent) - - select { - case <-test: - return - case <-time.After(4 * time.Second): - t.Error("Can't asynchronously export events") - } -} - -func TestFileFWVSyncLimit(t *testing.T) { - //Create new exporter - cgrCfg := config.NewDefaultCGRConfig() - var cfgIdx int - cfgIdx = 0 - - cgrCfg.EEsCfg().Exporters[cfgIdx].Type = "*file_fwv" - cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests = 1 - dc, err := newEEMetrics(utils.FirstNonEmpty( - cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, - cgrCfg.GeneralCfg().DefaultTimezone)) - if err != nil { - t.Error(err) - } - - //Create an event - cgrEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - Event: map[string]interface{}{ - "Account": "1001", - "Destination": "1002", - }, - } - - var wg1 = &sync.WaitGroup{} - - wg1.Add(3) - - test := make(chan struct{}) - go func() { - wg1.Wait() - close(test) - }() - mckCsv := &mockCsv{ - wg: wg1, - } - exp := &FileFWVee{ - id: cgrCfg.EEsCfg().Exporters[cfgIdx].ID, - cgrCfg: cgrCfg, - cfgIdx: cfgIdx, - filterS: new(engine.FilterS), - file: mckCsv, - dc: dc, - reqs: newConcReq(cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests), - } - - for i := 0; i < 3; i++ { - go func() { - exp.ExportEvent(cgrEvent) - }() - } - // exp.ExportEvent(cgrEvent) - - select { - case <-test: - t.Error("Should not have been possible to asynchronously export events") - case <-time.After(4 * time.Second): - return - } -} diff --git a/ees/httpjsonmap_test.go b/ees/httpjsonmap_test.go index 4d4456a3e..96934e952 100644 --- a/ees/httpjsonmap_test.go +++ b/ees/httpjsonmap_test.go @@ -365,7 +365,7 @@ func TestHttpJsonMapSync(t *testing.T) { var cfgIdx int cfgIdx = 0 - cgrCfg.EEsCfg().Exporters[cfgIdx].Type = "*http_json_map" + cgrCfg.EEsCfg().Exporters[cfgIdx].Type = utils.MetaHTTPjsonMap dc, err := newEEMetrics(utils.FirstNonEmpty( cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, cgrCfg.GeneralCfg().DefaultTimezone)) @@ -425,7 +425,7 @@ func TestHttpJsonMapSyncLimit(t *testing.T) { var cfgIdx int cfgIdx = 0 - cgrCfg.EEsCfg().Exporters[cfgIdx].Type = "*http_json_map" + cgrCfg.EEsCfg().Exporters[cfgIdx].Type = utils.MetaHTTPjsonMap cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests = 1 dc, err := newEEMetrics(utils.FirstNonEmpty( cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, diff --git a/ees/httppost_test.go b/ees/httppost_test.go index e6618a5c4..376736412 100644 --- a/ees/httppost_test.go +++ b/ees/httppost_test.go @@ -23,7 +23,9 @@ import ( "net/http" "net/http/httptest" "reflect" + "sync" "testing" + "time" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" @@ -301,3 +303,124 @@ func TestHttpPostComposeHeader(t *testing.T) { t.Errorf("Expected %q but received %q", errExpect, err) } } + +func TestHttpPostSync(t *testing.T) { + //Create new exporter + cgrCfg := config.NewDefaultCGRConfig() + var cfgIdx int + cfgIdx = 0 + + cgrCfg.EEsCfg().Exporters[cfgIdx].Type = utils.MetaHTTPPost + dc, err := newEEMetrics(utils.FirstNonEmpty( + cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, + cgrCfg.GeneralCfg().DefaultTimezone)) + if err != nil { + t.Error(err) + } + + //Create an event + cgrEvent := &utils.CGREvent{ + Tenant: "cgrates.org", + Event: map[string]interface{}{ + "Account": "1001", + "Destination": "1002", + }, + } + var wg1 sync.WaitGroup + + wg1.Add(3) + + test := make(chan struct{}) + go func() { + wg1.Wait() + close(test) + }() + + ts := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + // fmt.Println("2") + time.Sleep(3 * time.Second) + wg1.Done() + })) + + defer ts.Close() + + cgrCfg.EEsCfg().Exporters[cfgIdx].ExportPath = ts.URL + + exp, err := NewHTTPPostEe(cgrCfg, cfgIdx, new(engine.FilterS), dc) + if err != nil { + t.Error(err) + } + + for i := 0; i < 3; i++ { + go exp.ExportEvent(cgrEvent) + } + // exp.ExportEvent(cgrEvent) + + select { + case <-test: + return + case <-time.After(4 * time.Second): + t.Error("Can't asynchronously export events") + } +} + +func TestHttpPostSyncLimit(t *testing.T) { + //Create new exporter + cgrCfg := config.NewDefaultCGRConfig() + var cfgIdx int + cfgIdx = 0 + + cgrCfg.EEsCfg().Exporters[cfgIdx].Type = utils.MetaHTTPPost + cgrCfg.EEsCfg().Exporters[cfgIdx].ConcurrentRequests = 1 + dc, err := newEEMetrics(utils.FirstNonEmpty( + cgrCfg.EEsCfg().Exporters[cfgIdx].Timezone, + cgrCfg.GeneralCfg().DefaultTimezone)) + if err != nil { + t.Error(err) + } + + //Create an event + cgrEvent := &utils.CGREvent{ + Tenant: "cgrates.org", + Event: map[string]interface{}{ + "Account": "1001", + "Destination": "1002", + }, + } + var wg1 sync.WaitGroup + + wg1.Add(3) + + test := make(chan struct{}) + go func() { + wg1.Wait() + close(test) + }() + + ts := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + // fmt.Println("2") + time.Sleep(3 * time.Second) + wg1.Done() + })) + + defer ts.Close() + + cgrCfg.EEsCfg().Exporters[cfgIdx].ExportPath = ts.URL + + exp, err := NewHTTPPostEe(cgrCfg, cfgIdx, new(engine.FilterS), dc) + if err != nil { + t.Error(err) + } + + for i := 0; i < 3; i++ { + go exp.ExportEvent(cgrEvent) + } + // exp.ExportEvent(cgrEvent) + + select { + case <-test: + t.Error("Should not have been possible to asynchronously export events") + case <-time.After(4 * time.Second): + return + } +}