Adding checkConfigSanity integrated in config type

This commit is contained in:
DanB
2014-03-08 17:37:02 +01:00
parent d6a0825142
commit b9681f2d1c
3 changed files with 59 additions and 15 deletions

View File

@@ -260,9 +260,42 @@ func (self *CGRConfig) setDefaults() error {
return nil
}
func (self *CGRConfig) checkConfigSanity() error {
// SessionManager should have same fields config length for session emulation
if len(self.SMReqTypeFields) != len(self.SMRunIds) ||
len(self.SMDirectionFields) != len(self.SMRunIds) ||
len(self.SMTenantFields) != len(self.SMRunIds) ||
len(self.SMTORFields) != len(self.SMRunIds) ||
len(self.SMAccountFields) != len(self.SMRunIds) ||
len(self.SMSubjectFields) != len(self.SMRunIds) ||
len(self.SMDestFields) != len(self.SMRunIds) ||
len(self.SMSetupTimeFields) != len(self.SMRunIds) ||
len(self.SMAnswerTimeFields) != len(self.SMRunIds) ||
len(self.SMDurationFields) != len(self.SMRunIds) {
return errors.New("<ConfigSanity> Inconsistent fields length for SessionManager session emulation")
}
// Mediator needs to have consistent extra fields definition
if len(self.MediatorReqTypeFields) != len(self.MediatorRunIds) ||
len(self.MediatorDirectionFields) != len(self.MediatorRunIds) ||
len(self.MediatorTenantFields) != len(self.MediatorRunIds) ||
len(self.MediatorTORFields) != len(self.MediatorRunIds) ||
len(self.MediatorAccountFields) != len(self.MediatorRunIds) ||
len(self.MediatorSubjectFields) != len(self.MediatorRunIds) ||
len(self.MediatorDestFields) != len(self.MediatorRunIds) ||
len(self.MediatorSetupTimeFields) != len(self.MediatorRunIds) ||
len(self.MediatorAnswerTimeFields) != len(self.MediatorRunIds) ||
len(self.MediatorDurationFields) != len(self.MediatorRunIds) {
return errors.New("<ConfigSanity> Inconsistent fields length for Mediator extra fields")
}
return nil
}
func NewDefaultCGRConfig() (*CGRConfig, error) {
cfg := &CGRConfig{}
cfg.setDefaults()
if err := cfg.checkConfigSanity(); err != nil {
return nil, err
}
return cfg, nil
}
@@ -272,7 +305,14 @@ func NewCGRConfig(cfgPath *string) (*CGRConfig, error) {
if err != nil {
return nil, errors.New(fmt.Sprintf("Could not open the configuration file: %s", err))
}
return loadConfig(c)
cfg, err := loadConfig(c)
if err != nil {
return nil, err
}
if err := cfg.checkConfigSanity(); err != nil {
return nil, err
}
return cfg, nil
}
func NewCGRConfigBytes(data []byte) (*CGRConfig, error) {
@@ -280,7 +320,14 @@ func NewCGRConfigBytes(data []byte) (*CGRConfig, error) {
if err != nil {
return nil, errors.New(fmt.Sprintf("Could not open the configuration file: %s", err))
}
return loadConfig(c)
cfg, err := loadConfig(c)
if err != nil {
return nil, err
}
if err := cfg.checkConfigSanity(); err != nil {
return nil, err
}
return cfg, nil
}
func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) {

View File

@@ -153,24 +153,20 @@ func TestDefaults(t *testing.T) {
}
}
// Make sure defaults did not change
/*func TestDefaultsSanity(t *testing.T) {
func TestSanityCheck(t *testing.T) {
cfg := &CGRConfig{}
errSet := cfg.setDefaults()
if errSet != nil {
t.Log(fmt.Sprintf("Coud not set defaults: %s!", errSet.Error()))
t.FailNow()
t.Error("Coud not set defaults: ", errSet.Error())
}
if (cfg.RaterListen != INTERNAL &&
(cfg.RaterListen == cfg.BalancerListen ||
cfg.RaterListen == cfg.CDRSListen ||
cfg.RaterListen == cfg.MediatorListen)) ||
(cfg.BalancerListen != INTERNAL && (cfg.BalancerListen == cfg.CDRSListen ||
cfg.BalancerListen == cfg.MediatorListen)) ||
(cfg.CDRSListen != INTERNAL && cfg.CDRSListen == cfg.MediatorListen) {
t.Error("Listen defaults on the same port!")
if err := cfg.checkConfigSanity(); err != nil {
t.Error("Invalid defaults: ", err)
}
}*/
cfg.SMSubjectFields = []string{"sample1", "sample2", "sample3"}
if err := cfg.checkConfigSanity(); err == nil {
t.Error("Failed to detect config insanity")
}
}
// Load config from file and make sure we have all set
func TestConfigFromFile(t *testing.T) {

View File

@@ -158,6 +158,7 @@ func (s *Session) SaveOperations() {
return
}
for _, sr := range s.sessionRuns {
engine.Logger.Debug(fmt.Sprintf("Saving operations for session %v, runId: %s", s, sr.runId))
go func() {
firstCC := sr.callCosts[0]
for _, cc := range sr.callCosts[1:] {