diff --git a/config/configsanity.go b/config/configsanity.go index 449ffc0fe..82974db14 100644 --- a/config/configsanity.go +++ b/config/configsanity.go @@ -19,7 +19,6 @@ along with this program. If not, see package config import ( - "errors" "fmt" "os" @@ -189,7 +188,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if !cfg.cdrsCfg.Enabled { for _, smgCDRSConn := range cfg.sessionSCfg.CDRsConns { if smgCDRSConn.Address == utils.MetaInternal { - return fmt.Errorf("<%s> CDRS not enabled but referenced by SMGeneric component", utils.SessionS) + return fmt.Errorf("<%s> CDRS not enabled but referenced by SMGeneric component.", utils.SessionS) } } } @@ -208,7 +207,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { !cfg.sessionSCfg.Enabled { for _, connCfg := range cfg.fsAgentCfg.SessionSConns { if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but referenced by %s", + return fmt.Errorf("<%s> not enabled but referenced by <%s>", utils.SessionS, utils.FreeSWITCHAgent) } } @@ -224,7 +223,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { !cfg.sessionSCfg.Enabled { for _, connCfg := range cfg.kamAgentCfg.SessionSConns { if connCfg.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but referenced by %s", + return fmt.Errorf("<%s> not enabled but referenced by <%s>", utils.SessionS, utils.KamailioAgent) } } @@ -240,7 +239,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { !cfg.sessionSCfg.Enabled { for _, smAstSMGConn := range cfg.asteriskAgentCfg.SessionSConns { if smAstSMGConn.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but referenced by %s", + return fmt.Errorf("<%s> not enabled but referenced by <%s>", utils.SessionS, utils.AsteriskAgent) } } @@ -256,12 +255,13 @@ func (cfg *CGRConfig) checkConfigSanity() error { !cfg.sessionSCfg.Enabled { for _, daSMGConn := range cfg.diameterAgentCfg.SessionSConns { if daSMGConn.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but referenced by %s", + return fmt.Errorf("<%s> not enabled but referenced by <%s>", utils.SessionS, utils.DiameterAgent) } } } } + //Radius Agent if cfg.radiusAgentCfg.Enabled { if len(cfg.radiusAgentCfg.SessionSConns) == 0 { return fmt.Errorf("<%s> no %s connections defined", @@ -271,12 +271,13 @@ func (cfg *CGRConfig) checkConfigSanity() error { !cfg.sessionSCfg.Enabled { for _, raSMGConn := range cfg.radiusAgentCfg.SessionSConns { if raSMGConn.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but referenced by %s", + return fmt.Errorf("<%s> not enabled but referenced by <%s>", utils.SessionS, utils.RadiusAgent) } } } } + //DNS Agent if cfg.dnsAgentCfg.Enabled { if len(cfg.dnsAgentCfg.SessionSConns) == 0 { return fmt.Errorf("<%s> no %s connections defined", @@ -286,7 +287,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { !cfg.sessionSCfg.Enabled { for _, sSConn := range cfg.dnsAgentCfg.SessionSConns { if sSConn.Address == utils.MetaInternal { - return fmt.Errorf("%s not enabled but referenced by %s", utils.SessionS, utils.DNSAgent) + return fmt.Errorf("<%s> not enabled but referenced by <%s>", utils.SessionS, utils.DNSAgent) } } } @@ -298,17 +299,15 @@ func (cfg *CGRConfig) checkConfigSanity() error { cfg.sessionSCfg.Enabled { for _, sSConn := range httpAgentCfg.SessionSConns { if sSConn.Address == utils.MetaInternal { - return errors.New("SessionS not enabled but referenced by HttpAgent component") + return fmt.Errorf("<%s> not enabled but referenced by <%s> component", utils.SessionS, utils.HTTPAgent) } } } if !utils.SliceHasMember([]string{utils.MetaUrl, utils.MetaXml}, httpAgentCfg.RequestPayload) { - return fmt.Errorf("<%s> unsupported request payload %s", - utils.HTTPAgent, httpAgentCfg.RequestPayload) + return fmt.Errorf("<%s> unsupported request payload %s", utils.HTTPAgent, httpAgentCfg.RequestPayload) } if !utils.SliceHasMember([]string{utils.MetaTextPlain, utils.MetaXml}, httpAgentCfg.ReplyPayload) { - return fmt.Errorf("<%s> unsupported reply payload %s", - utils.HTTPAgent, httpAgentCfg.ReplyPayload) + return fmt.Errorf("<%s> unsupported reply payload %s", utils.HTTPAgent, httpAgentCfg.ReplyPayload) } } if cfg.attributeSCfg.Enabled { @@ -320,7 +319,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { (cfg.attributeSCfg == nil || !cfg.attributeSCfg.Enabled) { for _, connCfg := range cfg.chargerSCfg.AttributeSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("AttributeS not enabled but requested by ChargerS component.") + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.ChargerS) } } } @@ -328,7 +327,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.resourceSCfg.Enabled && !cfg.thresholdSCfg.Enabled && !cfg.dispatcherSCfg.Enabled { for _, connCfg := range cfg.resourceSCfg.ThresholdSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("ThresholdS not enabled but requested by ResourceS component.") + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.ResourceS) } } } @@ -336,7 +335,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if cfg.statsCfg.Enabled && !cfg.thresholdSCfg.Enabled && !cfg.dispatcherSCfg.Enabled { for _, connCfg := range cfg.statsCfg.ThresholdSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("ThresholdS not enabled but requested by StatS component.") + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ThresholdS, utils.StatService) } } } @@ -345,21 +344,21 @@ func (cfg *CGRConfig) checkConfigSanity() error { if !cfg.resourceSCfg.Enabled { for _, connCfg := range cfg.supplierSCfg.ResourceSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("ResourceS not enabled but requested by SupplierS component.") + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.ResourceS, utils.SupplierS) } } } if !cfg.statsCfg.Enabled { for _, connCfg := range cfg.supplierSCfg.StatSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("StatS not enabled but requested by SupplierS component.") + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.StatService, utils.SupplierS) } } } if !cfg.attributeSCfg.Enabled { for _, connCfg := range cfg.supplierSCfg.AttributeSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("AttributeS not enabled but requested by SupplierS component.") + return fmt.Errorf("<%s> not enabled but requested by <%s> component.", utils.AttributeS, utils.SupplierS) } } } @@ -368,7 +367,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if !cfg.cdrsCfg.Enabled && !cfg.dispatcherSCfg.Enabled { for _, connCfg := range cfg.schedulerCfg.CDRsConns { if connCfg.Address == utils.MetaInternal { - return errors.New("CDR Server not enabled but requested by Scheduler") + return fmt.Errorf("%s Server not enabled but requested by %s", utils.CDR, utils.SchedulerS) } } } @@ -377,7 +376,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { if !cfg.sessionSCfg.Enabled { for _, connCfg := range cfg.ersCfg.SessionSConns { if connCfg.Address == utils.MetaInternal { - return errors.New("SessionS not enabled but requested by EventReader component.") + return fmt.Errorf("<%s> not enabled but requested by EventReader component.", utils.SessionS) } } } diff --git a/config/configsanity_test.go b/config/configsanity_test.go index e6f34c882..02c03990e 100644 --- a/config/configsanity_test.go +++ b/config/configsanity_test.go @@ -165,3 +165,526 @@ func TestConfigSanityCDRC(t *testing.T) { t.Errorf("Expecting: %+q received: %+q", expected, err) } } + +func TestConfigSanityLoaders(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.loaderCfg = LoaderSCfgs{ + &LoaderSCfg{ + Enabled: true, + TpInDir: "/not/exist", + Data: []*LoaderDataType{ + &LoaderDataType{ + Type: "strsdfing", + }, + }, + }, + } + expected := " Nonexistent folder: /not/exist" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.loaderCfg = LoaderSCfgs{ + &LoaderSCfg{ + Enabled: true, + TpInDir: "/usr/share/cgrates", + TpOutDir: "/usr/share/cgrates", + Data: []*LoaderDataType{ + &LoaderDataType{ + Type: "wrongtype", + }, + }, + }, + } + expected = " unsupported data type wrongtype" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.loaderCfg = LoaderSCfgs{ + &LoaderSCfg{ + Enabled: true, + TpInDir: "/usr/share/cgrates", + TpOutDir: "/usr/share/cgrates", + Data: []*LoaderDataType{ + &LoaderDataType{ + Type: utils.MetaStats, + Fields: []*FCTemplate{ + &FCTemplate{ + Type: utils.MetaStats, + Tag: "test1", + }, + }, + }, + }, + }, + } + expected = " invalid field type *stats for *stats at test1" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanitySessionS(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.sessionSCfg = &SessionSCfg{ + Enabled: true, + TerminateAttempts: 0, + } + expected := " 'terminate_attempts' should be at least 1" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.sessionSCfg.TerminateAttempts = 1 + + cfg.sessionSCfg.ChargerSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " ChargerS not enabled" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.chargerSCfg.Enabled = true + + cfg.sessionSCfg.RALsConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " RALs not enabled but requested by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.ralsCfg.Enabled = true + + cfg.sessionSCfg.ResSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " ResourceS not enabled but requested by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.resourceSCfg.Enabled = true + + cfg.sessionSCfg.ThreshSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " ThresholdS not enabled but requested by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.thresholdSCfg.Enabled = true + + cfg.sessionSCfg.StatSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " Stats not enabled but requested by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.statsCfg.Enabled = true + + cfg.sessionSCfg.SupplSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " SupplierS not enabled but requested by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.supplierSCfg.Enabled = true + + cfg.sessionSCfg.AttrSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " AttributeS not enabled but requested by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.attributeSCfg.Enabled = true + + cfg.sessionSCfg.CDRsConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " CDRS not enabled but referenced by SMGeneric component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.cdrsCfg.Enabled = true + + cfg.cacheCfg[utils.CacheClosedSessions].Limit = 0 + expected = " *closed_sessions needs to be != 0, received: 0" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + +} + +func TestConfigSanityFreeSWITCHAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.fsAgentCfg = &FsAgentCfg{ + Enabled: true, + } + + expected := " no SessionS connections defined" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.fsAgentCfg = &FsAgentCfg{ + Enabled: true, + SessionSConns: []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + }, + } + expected = " not enabled but referenced by " + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityKamailioAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.kamAgentCfg = &KamAgentCfg{ + Enabled: true, + } + expected := " no SessionS connections defined" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.kamAgentCfg.SessionSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but referenced by " + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityAsteriskAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.asteriskAgentCfg = &AsteriskAgentCfg{ + Enabled: true, + } + expected := " no SessionS connections defined" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.asteriskAgentCfg.SessionSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but referenced by " + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityDAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.diameterAgentCfg = &DiameterAgentCfg{ + Enabled: true, + } + expected := " no SessionS connections defined" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.diameterAgentCfg.SessionSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but referenced by " + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityRadiusAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.radiusAgentCfg = &RadiusAgentCfg{ + Enabled: true, + } + expected := " no SessionS connections defined" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.radiusAgentCfg.SessionSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but referenced by " + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityDNSAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.dnsAgentCfg = &DNSAgentCfg{ + Enabled: true, + } + expected := " no SessionS connections defined" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.dnsAgentCfg.SessionSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but referenced by " + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityHTTPAgent(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.sessionSCfg.Enabled = true + cfg.httpAgentCfg = HttpAgentCfgs{ + &HttpAgentCfg{ + SessionSConns: []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + }, + }, + } + expected := " not enabled but referenced by component" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.sessionSCfg.Enabled = false + + cfg.httpAgentCfg = HttpAgentCfgs{ + &HttpAgentCfg{ + RequestPayload: "test", + }, + } + expected = " unsupported request payload test" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.httpAgentCfg = HttpAgentCfgs{ + &HttpAgentCfg{ + RequestPayload: utils.MetaUrl, + ReplyPayload: "test", + }, + } + expected = " unsupported reply payload test" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.httpAgentCfg[0].ReplyPayload = utils.MetaTextPlain + + cfg.attributeSCfg = &AttributeSCfg{ + Enabled: true, + ProcessRuns: 0, + } + expected = " process_runs needs to be bigger than 0" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.attributeSCfg = &AttributeSCfg{ + ProcessRuns: 1, + Enabled: false, + } + + cfg.chargerSCfg.Enabled = true + cfg.chargerSCfg.AttributeSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but requested by component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityResourceLimiter(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.resourceSCfg = &ResourceSConfig{ + Enabled: true, + ThresholdSConns: []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + }, + } + expected := " not enabled but requested by component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityStatS(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.statsCfg = &StatSCfg{ + Enabled: true, + ThresholdSConns: []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + }, + } + expected := " not enabled but requested by component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanitySupplierS(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.supplierSCfg.Enabled = true + + cfg.supplierSCfg.ResourceSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected := " not enabled but requested by component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.resourceSCfg.Enabled = true + + cfg.supplierSCfg.StatSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but requested by component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.statsCfg.Enabled = true + + cfg.supplierSCfg.AttributeSConns = []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + } + expected = " not enabled but requested by component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityScheduler(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.schedulerCfg = &SchedulerCfg{ + Enabled: true, + CDRsConns: []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + }, + } + expected := "CDR Server not enabled but requested by SchedulerS" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + +} + +func TestConfigSanityEventReader(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.ersCfg = &ERsCfg{ + Enabled: true, + SessionSConns: []*RemoteHost{ + &RemoteHost{ + Address: utils.MetaInternal, + }, + }, + } + expected := " not enabled but requested by EventReader component." + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.sessionSCfg.Enabled = true + + cfg.ersCfg.Readers = []*EventReaderCfg{ + &EventReaderCfg{ + ID: "test", + Type: "wrongtype", + }, + } + expected = " unsupported data type: wrongtype for reader with ID: test" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.ersCfg.Readers = []*EventReaderCfg{ + &EventReaderCfg{ + ID: "test2", + Type: utils.MetaFileCSV, + ProcessedPath: "not/a/path", + }, + } + expected = " Nonexistent folder: not/a/path for reader with ID: test2" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + + cfg.ersCfg.Readers = []*EventReaderCfg{ + &EventReaderCfg{ + ID: "test3", + Type: utils.MetaFileCSV, + ProcessedPath: "/usr/share/cgrates", + SourcePath: "/usr/share/cgrates", + FieldSep: "", + }, + } + expected = " empty FieldSep for reader with ID: test3" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } + cfg.ersCfg.Readers[0].FieldSep = utils.InInFieldSep + + cfg.ersCfg.Readers[0].ID = "test4" + cfg.ersCfg.Readers[0].Type = utils.MetaKafkajsonMap + cfg.ersCfg.Readers[0].RunDelay = 1 + expected = " RunDelay field can not be bigger than zero for reader with ID: test4" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +} + +func TestConfigSanityStorDB(t *testing.T) { + cfg, _ = NewDefaultCGRConfig() + cfg.storDbCfg = &StorDbCfg{ + Type: utils.POSTGRES, + SSLMode: "wrongSSLMode", + } + expected := " Unsuported sslmode for storDB" + if err := cfg.checkConfigSanity(); err == nil || err.Error() != expected { + t.Errorf("Expecting: %+q received: %+q", expected, err) + } +}