diff --git a/config/config_test.go b/config/config_test.go index 3cb3b1852..593d7dc34 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -6249,15 +6249,11 @@ func TestLoadAccountSCfgError(t *testing.T) { func TestCGRConfigGetDP(t *testing.T) { cfg := NewDefaultCGRConfig() + cfg.LockSections(HttpAgentJson, LoaderJson, ChargerSCfgJson) + cfg.UnlockSections(HttpAgentJson, LoaderJson, ChargerSCfgJson) exp := utils.MapStorage(cfg.AsMapInterface(cfg.generalCfg.RSRSep)) dp := cfg.GetDataProvider() if !reflect.DeepEqual(dp, exp) { t.Errorf("Expected %+v, received %+v", exp, err) } } - -func TestLockUnlockSectionsID(t *testing.T) { - cfg := NewDefaultCGRConfig() - cfg.LockSections(HttpAgentJson, LoaderJson, ChargerSCfgJson) - cfg.UnlockSections(HttpAgentJson, LoaderJson, ChargerSCfgJson) -} diff --git a/ees/ee_test.go b/ees/ee_test.go new file mode 100644 index 000000000..a6c791657 --- /dev/null +++ b/ees/ee_test.go @@ -0,0 +1,253 @@ +/* +Real-time Online/Offline Charging System (OerS) 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 ees + +import ( + "fmt" + "reflect" + "strings" + "testing" + + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +func TestNewEventExporter(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaFileCSV + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + errExpect := "open /var/spool/cgrates/ees/*default_" + if strings.Contains(errExpect, err.Error()) { + t.Errorf("Expected %+v but got %+v", errExpect, err) + } + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + eeExpect, err := NewFileCSVee(cgrCfg, 0, filterS, dc) + if strings.Contains(errExpect, err.Error()) { + t.Errorf("Expected %+v but got %+v", errExpect, err) + } + err = eeExpect.init() + newEE := ee.(*FileCSVee) + newEE.dc[utils.TimeNow] = nil + newEE.dc[utils.ExportPath] = nil + eeExpect.csvWriter = nil + eeExpect.dc[utils.TimeNow] = nil + eeExpect.dc[utils.ExportPath] = nil + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", utils.ToJSON(eeExpect), utils.ToJSON(newEE)) + } +} + +func TestNewEventExporterCase2(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaFileFWV + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + errExpect := "open /var/spool/cgrates/ees/*default_" + if strings.Contains(errExpect, err.Error()) { + t.Errorf("Expected %+v but got %+v", errExpect, err) + } + + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + eeExpect, err := NewFileFWVee(cgrCfg, 0, filterS, dc) + if strings.Contains(errExpect, err.Error()) { + t.Errorf("Expected %+v but got %+v", errExpect, err) + } + err = eeExpect.init() + newEE := ee.(*FileFWVee) + newEE.dc[utils.TimeNow] = nil + newEE.dc[utils.ExportPath] = nil + eeExpect.dc[utils.TimeNow] = nil + eeExpect.dc[utils.ExportPath] = nil + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", utils.ToJSON(eeExpect), utils.ToJSON(newEE)) + } +} + +func TestNewEventExporterCase3(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaHTTPPost + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + if err != nil { + t.Error(err) + } + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + eeExpect, err := NewHTTPPostEe(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + newEE := ee.(*HTTPPost) + newEE.dc[utils.TimeNow] = nil + eeExpect.dc[utils.TimeNow] = nil + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", utils.ToJSON(eeExpect), utils.ToJSON(newEE)) + } +} + +func TestNewEventExporterCase4(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaHTTPjsonMap + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + if err != nil { + t.Error(err) + } + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + eeExpect, err := NewHTTPjsonMapEE(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + newEE := ee.(*HTTPjsonMapEE) + newEE.dc[utils.TimeNow] = nil + eeExpect.dc[utils.TimeNow] = nil + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", utils.ToJSON(eeExpect), utils.ToJSON(newEE)) + } +} + +func TestNewEventExporterCase5(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaAMQPjsonMap + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + if err != nil { + t.Error(err) + } + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + eeExpect, err := NewPosterJSONMapEE(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + newEE := ee.(*PosterJSONMapEE) + newEE.dc[utils.TimeNow] = nil + eeExpect.dc[utils.TimeNow] = nil + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", utils.ToJSON(eeExpect), utils.ToJSON(newEE)) + } +} + +func TestNewEventExporterCase6(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaVirt + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + if err != nil { + t.Error(err) + } + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + eeExpect, err := NewVirtualExporter(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + newEE := ee.(*VirtualEe) + newEE.dc[utils.TimeNow] = nil + eeExpect.dc[utils.TimeNow] = nil + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", utils.ToJSON(eeExpect), utils.ToJSON(newEE)) + } +} + +func TestNewEventExporterDefaultCase(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaNone + filterS := engine.NewFilterS(cgrCfg, nil, nil) + _, err := NewEventExporter(cgrCfg, 0, filterS) + errExpect := fmt.Sprintf("unsupported exporter type: <%s>", utils.MetaNone) + if err.Error() != errExpect { + t.Errorf("Expected %+v \n but got %+v", errExpect, err) + } +} + +//Test for Case 7 +func TestNewEventExporterCase7(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaElastic + cgrCfg.EEsCfg().Exporters[0].ExportPath = "/invalid/path" + filterS := engine.NewFilterS(cgrCfg, nil, nil) + ee, err := NewEventExporter(cgrCfg, 0, filterS) + if err != nil { + t.Error(err) + } + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + eeExpect, err := NewElasticExporter(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + newEE := ee.(*ElasticEe) + newEE.dc[utils.TimeNow] = nil + eeExpect.dc[utils.TimeNow] = nil + eeExpect.eClnt = newEE.eClnt + if !reflect.DeepEqual(eeExpect, newEE) { + t.Errorf("Expected %+v \n but got %+v", eeExpect, newEE) + } +} + +//Test for Case 8 +func TestNewEventExporterCase8(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Type = utils.MetaSQL + filterS := engine.NewFilterS(cgrCfg, nil, nil) + _, err := NewEventExporter(cgrCfg, 0, filterS) + errExpect := "MANDATORY_IE_MISSING: [tableName]" + if err == nil || err.Error() != errExpect { + t.Errorf("Expected %+v \n but got %+v", errExpect, err) + } +} + +//Test for invalid "dc" +func TestNewEventExporterDcCase(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.GeneralCfg().DefaultTimezone = "invalid_timezone" + _, err := NewEventExporter(cgrCfg, 0, nil) + errExpect := "unknown time zone invalid_timezone" + if err == nil || err.Error() != errExpect { + t.Errorf("Expected %+v \n but got %+v", errExpect, err) + } +}