Coverage tests for ees

This commit is contained in:
nickolasdaniel
2021-03-19 17:09:38 +02:00
committed by Dan Christian Bogos
parent 9047fab68c
commit 1b443b5abb
2 changed files with 123 additions and 10 deletions

View File

@@ -34,33 +34,30 @@ import (
"github.com/cgrates/cgrates/utils"
)
func NewSQLEe(cgrCfg *config.CGRConfig, cfgIdx int, filterS *engine.FilterS,
dc utils.MapStorage) (sqlEe *SQLEe, err error) {
sqlEe = &SQLEe{id: cgrCfg.EEsCfg().Exporters[cfgIdx].ID,
cgrCfg: cgrCfg, cfgIdx: cfgIdx, filterS: filterS, dc: dc}
func (sqlEe *SQLEe) NewSQLEeUrl(cgrCfg *config.CGRConfig) (dialect gorm.Dialector, err error) {
var u *url.URL
if u, err = url.Parse(strings.TrimPrefix(cgrCfg.EEsCfg().Exporters[cfgIdx].ExportPath, utils.Meta)); err != nil {
// var err error
if u, err = url.Parse(strings.TrimPrefix(cgrCfg.EEsCfg().Exporters[0].ExportPath, utils.Meta)); err != nil {
return
}
password, _ := u.User.Password()
dbname := utils.SQLDefaultDBName
if vals, has := cgrCfg.EEsCfg().Exporters[cfgIdx].Opts[utils.SQLDBName]; has {
if vals, has := cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName]; has {
dbname = utils.IfaceAsString(vals)
}
ssl := utils.SQLDefaultSSLMode
if vals, has := cgrCfg.EEsCfg().Exporters[cfgIdx].Opts[utils.SQLSSLMode]; has {
if vals, has := cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLSSLMode]; has {
ssl = utils.IfaceAsString(vals)
}
// tableName is mandatory in opts
if iface, has := cgrCfg.EEsCfg().Exporters[cfgIdx].Opts[utils.SQLTableName]; !has {
if iface, has := cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName]; !has {
return nil, utils.NewErrMandatoryIeMissing(utils.SQLTableName)
} else {
sqlEe.tableName = utils.IfaceAsString(iface)
}
var dialect gorm.Dialector
// var dialect gorm.Dialector
switch u.Scheme {
case utils.MySQL:
dialect = mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&loc=Local&parseTime=true&sql_mode='ALLOW_INVALID_DATES'",
@@ -70,6 +67,18 @@ func NewSQLEe(cgrCfg *config.CGRConfig, cfgIdx int, filterS *engine.FilterS,
default:
return nil, fmt.Errorf("db type <%s> not supported", u.Scheme)
}
return
}
func NewSQLEe(cgrCfg *config.CGRConfig, cfgIdx int, filterS *engine.FilterS,
dc utils.MapStorage) (sqlEe *SQLEe, err error) {
sqlEe = &SQLEe{id: cgrCfg.EEsCfg().Exporters[cfgIdx].ID,
cgrCfg: cgrCfg, cfgIdx: cfgIdx, filterS: filterS, dc: dc}
dialect, err := sqlEe.NewSQLEeUrl(cgrCfg)
if err != nil {
return
}
var db *gorm.DB
if db, err = gorm.Open(dialect, &gorm.Config{AllowGlobalUpdate: true}); err != nil {
return

View File

@@ -19,10 +19,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package ees
import (
"fmt"
"reflect"
"testing"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
)
func TestSqlID(t *testing.T) {
@@ -50,3 +55,102 @@ func TestSqlGetMetrics(t *testing.T) {
t.Errorf("Expected %+v but got %+v", utils.ToJSON(rcv), utils.ToJSON(sqlEe.dc))
}
}
func TestNewSQLeUrl(t *testing.T) {
cgrCfg := config.NewDefaultCGRConfig()
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable"
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "postgres"
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLSSLMode] = "test"
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 := &SQLEe{id: cgrCfg.EEsCfg().Exporters[0].ID,
cgrCfg: cgrCfg, cfgIdx: 0, filterS: filterS, dc: dc}
_, err = sqlEe.NewSQLEeUrl(cgrCfg)
errExpect := "db type <> not supported"
if err == nil || err.Error() != errExpect {
t.Errorf("Expected %v but received %v", errExpect, err)
}
}
func TestNewSQLeUrlSQL(t *testing.T) {
cgrCfg := config.NewDefaultCGRConfig()
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable"
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "mysql"
cgrCfg.EEsCfg().Exporters[0].ExportPath = `mysql://cgrates:CGRateS.org@127.0.0.1:3306`
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 := &SQLEe{id: cgrCfg.EEsCfg().Exporters[0].ID,
cgrCfg: cgrCfg, cfgIdx: 0, filterS: filterS, dc: dc}
dialectExpect := mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&loc=Local&parseTime=true&sql_mode='ALLOW_INVALID_DATES'",
"cgrates", "CGRateS.org", "127.0.0.1", "3306", "mysql"))
if dialect, err := sqlEe.NewSQLEeUrl(cgrCfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(dialect, dialectExpect) {
t.Errorf("Expected %v but received %v", utils.ToJSON(dialectExpect), utils.ToJSON(dialect))
}
}
func TestNewSQLeUrlPostgres(t *testing.T) {
cgrCfg := config.NewDefaultCGRConfig()
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable"
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "postgres"
cgrCfg.EEsCfg().Exporters[0].ExportPath = `postgres://cgrates:CGRateS.org@127.0.0.1:3306`
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 := &SQLEe{id: cgrCfg.EEsCfg().Exporters[0].ID,
cgrCfg: cgrCfg, cfgIdx: 0, filterS: filterS, dc: dc}
dialectExpect := postgres.Open(fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s sslmode=%s",
"127.0.0.1", "3306", "postgres", "cgrates", "CGRateS.org", utils.SQLDefaultSSLMode))
if dialect, err := sqlEe.NewSQLEeUrl(cgrCfg); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(dialect, dialectExpect) {
t.Errorf("Expected %v but received %v", utils.ToJSON(dialectExpect), utils.ToJSON(dialect))
}
}
func TestNewSQLeExportPathError(t *testing.T) {
cgrCfg := config.NewDefaultCGRConfig()
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLTableName] = "expTable"
cgrCfg.EEsCfg().Exporters[0].Opts[utils.SQLDBName] = "postgres"
cgrCfg.EEsCfg().Exporters[0].ExportPath = ":foo"
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 := &SQLEe{id: cgrCfg.EEsCfg().Exporters[0].ID,
cgrCfg: cgrCfg, cfgIdx: 0, filterS: filterS, dc: dc}
errExpect := `parse ":foo": missing protocol scheme`
if _, err := sqlEe.NewSQLEeUrl(cgrCfg); err == nil || err.Error() != errExpect {
t.Errorf("Expected %v but received %v", errExpect, err)
}
}