diff --git a/ees/sql_it_test.go b/ees/sql_it_test.go index b92c74ca5..247af3032 100644 --- a/ees/sql_it_test.go +++ b/ees/sql_it_test.go @@ -297,3 +297,177 @@ func TestOpenDB3Err(t *testing.T) { t.Errorf("Expected %v but received %v", errExpect, err) } } + +func TestSQLExportEvent1(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable" + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "cgrates" + cgrCfg.EEsCfg().Exporters[0].ExportPath = `mysql://cgrates:CGRateS.org@127.0.0.1:3306` + cgrEv := new(utils.CGREvent) + newIDb := engine.NewInternalDB(nil, nil, true) + newDM := engine.NewDataManager(newIDb, cgrCfg.CacheCfg(), nil) + filterS := engine.NewFilterS(cgrCfg, nil, newDM) + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + sqlEe, err := NewSQLEe(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + cgrEv.Event = map[string]interface{}{ + "test": "string", + } + cgrCfg.EEsCfg().Exporters[0].Fields = []*config.FCTemplate{ + { + Path: "*exp.1", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("*req.field1", utils.InfieldSep), + }, + { + Path: "*exp.2", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("*req.field2", utils.InfieldSep), + }, + } + for _, field := range cgrCfg.EEsCfg().Exporters[0].Fields { + field.ComputePath() + } + cgrCfg.EEsCfg().Exporters[0].ComputeFields() + if err := sqlEe.ExportEvent(cgrEv); err != nil { + t.Error(err) + } + sqlEe.OnEvicted("test", "test") +} + +func TestSQLExportEvent2(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable" + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "cgrates" + cgrCfg.EEsCfg().Exporters[0].ExportPath = `mysql://cgrates:CGRateS.org@127.0.0.1:3306` + cgrEv := new(utils.CGREvent) + newIDb := engine.NewInternalDB(nil, nil, true) + newDM := engine.NewDataManager(newIDb, cgrCfg.CacheCfg(), nil) + filterS := engine.NewFilterS(cgrCfg, nil, newDM) + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + sqlEe, err := NewSQLEe(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + cgrEv.Event = map[string]interface{}{ + "test": "string", + } + cgrCfg.EEsCfg().Exporters[0].Fields = []*config.FCTemplate{ + { + Path: "*exp.*row", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile(utils.MetaRow, utils.InfieldSep), + }, + { + Path: "*exp.2", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("*req.field2", utils.InfieldSep), + }, + } + for _, field := range cgrCfg.EEsCfg().Exporters[0].Fields { + field.ComputePath() + } + cgrCfg.EEsCfg().Exporters[0].ComputeFields() + if err := sqlEe.ExportEvent(cgrEv); err != nil { + t.Error(err) + } + sqlEe.OnEvicted("test", "test") +} + +func TestSQLExportEvent3(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable" + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "cgrates" + cgrCfg.EEsCfg().Exporters[0].ExportPath = `mysql://cgrates:CGRateS.org@127.0.0.1:3306` + cgrEv := new(utils.CGREvent) + newIDb := engine.NewInternalDB(nil, nil, true) + newDM := engine.NewDataManager(newIDb, cgrCfg.CacheCfg(), nil) + filterS := engine.NewFilterS(cgrCfg, nil, newDM) + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + sqlEe, err := NewSQLEe(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + cgrEv.Event = map[string]interface{}{ + "test": "string", + } + cgrCfg.EEsCfg().Exporters[0].Fields = []*config.FCTemplate{ + { + Path: "*exp.1", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("*req.field1", utils.InfieldSep), + }, + { + Path: "*exp.2", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("*req.field2", utils.InfieldSep), + }, + } + for _, field := range cgrCfg.EEsCfg().Exporters[0].Fields { + field.ComputePath() + } + cgrCfg.EEsCfg().Exporters[0].ComputeFields() + if err := sqlEe.ExportEvent(cgrEv); err != nil { + t.Error(err) + } + sqlEe.OnEvicted("test", "test") +} + +func TestSQLExportEvent4(t *testing.T) { + cgrCfg := config.NewDefaultCGRConfig() + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable" + cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "cgrates" + cgrCfg.EEsCfg().Exporters[0].ExportPath = `mysql://cgrates:CGRateS.org@127.0.0.1:3306` + cgrEv := new(utils.CGREvent) + newIDb := engine.NewInternalDB(nil, nil, true) + newDM := engine.NewDataManager(newIDb, cgrCfg.CacheCfg(), nil) + filterS := engine.NewFilterS(cgrCfg, nil, newDM) + dc, err := newEEMetrics(utils.FirstNonEmpty( + "Local", + utils.EmptyString, + )) + if err != nil { + t.Error(err) + } + sqlEe, err := NewSQLEe(cgrCfg, 0, filterS, dc) + if err != nil { + t.Error(err) + } + cgrEv.Event = map[string]interface{}{ + "test": "string", + } + cgrCfg.EEsCfg().Exporters[0].Fields = []*config.FCTemplate{ + { + Path: "*exp.1", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("~*req.field1", utils.InfieldSep), + Filters: []string{"*wrong-type"}, + }, + { + Path: "*exp.2", Type: utils.MetaVariable, + Value: config.NewRSRParsersMustCompile("~*req.field2", utils.InfieldSep), + Filters: []string{"*wrong-type"}, + }, + } + for _, field := range cgrCfg.EEsCfg().Exporters[0].Fields { + field.ComputePath() + } + cgrCfg.EEsCfg().Exporters[0].ComputeFields() + errExpect := "inline parse error for string: <*wrong-type>" + if err := sqlEe.ExportEvent(cgrEv); err == nil || err.Error() != errExpect { + t.Errorf("Expected %v but received %v", errExpect, err) + } +} diff --git a/ees/sql_test.go b/ees/sql_test.go index ce2ccfce9..2d1bd3e9e 100644 --- a/ees/sql_test.go +++ b/ees/sql_test.go @@ -157,26 +157,6 @@ func TestNewSQLeExportPathError(t *testing.T) { } } -// type mockConnPool struct { -// sqldb *sql.DB -// } - -// func (mcp mockConnPool) Ping() error { -// return nil -// } -// func (mockConnPool) PrepareContext(ctx context.Context, query string) (*sql.Stmt, error) { -// return nil, nil -// } -// func (mockConnPool) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { -// return nil, nil -// } -// func (mockConnPool) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) { -// return nil, nil -// } -// func (mockConnPool) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row { -// return nil -// } - type mockDialect2 struct { gorm.Dialector }