diff --git a/config/config.go b/config/config.go index f035acd99..fbb531f7b 100644 --- a/config/config.go +++ b/config/config.go @@ -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(" 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(" 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) { diff --git a/config/config_test.go b/config/config_test.go index 7107beee8..d9f3f539f 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -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) { diff --git a/sessionmanager/session.go b/sessionmanager/session.go index 706250dc7..c342cc4e6 100644 --- a/sessionmanager/session.go +++ b/sessionmanager/session.go @@ -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:] {