diff --git a/config/cachecfg_test.go b/config/cachecfg_test.go index e789ca2d7..cb7bb3c10 100644 --- a/config/cachecfg_test.go +++ b/config/cachecfg_test.go @@ -49,7 +49,7 @@ func TestAsTransCacheConfig(t *testing.T) { } } -func TestCacheConfigloadFromJsonCfg(t *testing.T) { +func TestCacheCfgloadFromJsonCfg(t *testing.T) { var cachecfg, expected CacheCfg if err := cachecfg.loadFromJsonCfg(nil); err != nil { t.Error(err) @@ -84,3 +84,34 @@ func TestCacheConfigloadFromJsonCfg(t *testing.T) { t.Errorf("Expected: %+v , recived: %+v", expected, cachecfg) } } + +func TestCacheParamCfgloadFromJsonCfg(t *testing.T) { + var fscocfg, expected CacheParamCfg + if err := fscocfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(fscocfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, fscocfg) + } + if err := fscocfg.loadFromJsonCfg(new(CacheParamJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(fscocfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, fscocfg) + } + json := &CacheParamJsonCfg{ + Limit: utils.IntPointer(5), + Ttl: utils.StringPointer("1s"), + Static_ttl: utils.BoolPointer(true), + Precache: utils.BoolPointer(true), + } + expected = CacheParamCfg{ + Limit: 5, + TTL: time.Duration(time.Second), + StaticTTL: true, + Precache: true, + } + if err = fscocfg.loadFromJsonCfg(json); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, fscocfg) { + t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(fscocfg)) + } +} diff --git a/config/config.go b/config/config.go index 4d811739e..87ab7440a 100755 --- a/config/config.go +++ b/config/config.go @@ -148,9 +148,9 @@ func NewDefaultCGRConfig() (*CGRConfig, error) { cfg.sessionSCfg = new(SessionSCfg) cfg.fsAgentCfg = new(FsAgentCfg) cfg.kamAgentCfg = new(KamAgentCfg) + cfg.asteriskAgentCfg = new(AsteriskAgentCfg) cfg.SmOsipsConfig = new(SmOsipsConfig) - cfg.asteriskAgentCfg = new(AsteriskAgentCfg) cfg.diameterAgentCfg = new(DiameterAgentCfg) cfg.radiusAgentCfg = new(RadiusAgentCfg) cfg.dispatcherSCfg = new(DispatcherSCfg) @@ -261,7 +261,6 @@ type CGRConfig struct { loaderCfg []*LoaderSCfg // LoaderS configurations SmOsipsConfig *SmOsipsConfig // SMOpenSIPS Configuration - asteriskAgentCfg *AsteriskAgentCfg // SMAsterisk Configuration diameterAgentCfg *DiameterAgentCfg // DiameterAgent configuration radiusAgentCfg *RadiusAgentCfg // RadiusAgent configuration httpAgentCfg []*HttpAgentCfg // HttpAgent configuration @@ -290,21 +289,22 @@ type CGRConfig struct { dfltCdreProfile *CdreCfg // Default cdreConfig profile dfltCdrcProfile *CdrcCfg // Default cdrcConfig profile - generalCfg *GeneralCfg // General config - dataDbCfg *DataDbCfg // Database config - storDbCfg *StorDbCfg // StroreDb config - tlsCfg *TlsCfg // TLS config - cacheCfg CacheCfg // Cache config - listenCfg *ListenCfg // Listen config - httpCfg *HTTPCfg // HTTP config - filterSCfg *FilterSCfg // FilterS config - ralsCfg *RalsCfg // Rals config - schedulerCfg *SchedulerCfg // Scheduler config - cdrsCfg *CdrsCfg // Cdrs config - cdrStatsCfg *CdrStatsCfg // CdrStats config - deprecated - sessionSCfg *SessionSCfg // SessionS config - fsAgentCfg *FsAgentCfg // FreeSWITCHAgent config - kamAgentCfg *KamAgentCfg // KamailioAgent config + generalCfg *GeneralCfg // General config + dataDbCfg *DataDbCfg // Database config + storDbCfg *StorDbCfg // StroreDb config + tlsCfg *TlsCfg // TLS config + cacheCfg CacheCfg // Cache config + listenCfg *ListenCfg // Listen config + httpCfg *HTTPCfg // HTTP config + filterSCfg *FilterSCfg // FilterS config + ralsCfg *RalsCfg // Rals config + schedulerCfg *SchedulerCfg // Scheduler config + cdrsCfg *CdrsCfg // Cdrs config + cdrStatsCfg *CdrStatsCfg // CdrStats config - deprecated + sessionSCfg *SessionSCfg // SessionS config + fsAgentCfg *FsAgentCfg // FreeSWITCHAgent config + kamAgentCfg *KamAgentCfg // KamailioAgent config + asteriskAgentCfg *AsteriskAgentCfg // AsteriskAgent config analyzerSCfg *AnalyzerSCfg } diff --git a/config/smconfig.go b/config/smconfig.go index df6b6654d..aa249b0f3 100644 --- a/config/smconfig.go +++ b/config/smconfig.go @@ -414,6 +414,9 @@ type AsteriskConnCfg struct { } func (aConnCfg *AsteriskConnCfg) loadFromJsonCfg(jsnCfg *AstConnJsonCfg) error { + if jsnCfg == nil { + return nil + } if jsnCfg.Address != nil { aConnCfg.Address = *jsnCfg.Address } @@ -440,6 +443,9 @@ type AsteriskAgentCfg struct { } func (aCfg *AsteriskAgentCfg) loadFromJsonCfg(jsnCfg *AsteriskAgentJsonCfg) (err error) { + if jsnCfg == nil { + return nil + } if jsnCfg.Enabled != nil { aCfg.Enabled = *jsnCfg.Enabled } diff --git a/config/smconfig_test.go b/config/smconfig_test.go index 27594fcf5..a073fbde9 100644 --- a/config/smconfig_test.go +++ b/config/smconfig_test.go @@ -237,3 +237,82 @@ func TestHaPoolConfigloadFromJsonCfg(t *testing.T) { t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(hpoolcfg)) } } + +func TestAsteriskAgentCfgloadFromJsonCfg(t *testing.T) { + var asagcfg, expected AsteriskAgentCfg + if err := asagcfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(asagcfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, asagcfg) + } + if err := asagcfg.loadFromJsonCfg(new(AsteriskAgentJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(asagcfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, asagcfg) + } + cfgJSONStr := `{ +"asterisk_agent": { + "enabled": true, // starts the Asterisk agent: + "sessions_conns": [ + {"address": "*internal"} // connection towards session service: <*internal> + ], + "create_cdr": false, // create CDR out of events and sends it to CDRS component + "asterisk_conns":[ // instantiate connections to multiple Asterisk servers + {"address": "127.0.0.1:8088", "user": "cgrates", "password": "CGRateS.org", "connect_attempts": 3,"reconnects": 5} + ], +}, +}` + expected = AsteriskAgentCfg{ + Enabled: true, + SessionSConns: []*HaPoolConfig{{Address: "*internal"}}, + AsteriskConns: []*AsteriskConnCfg{{ + Address: "127.0.0.1:8088", + User: "cgrates", + Password: "CGRateS.org", + ConnectAttempts: 3, + Reconnects: 5, + }}, + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnAsAgCfg, err := jsnCfg.AsteriskAgentJsonCfg(); err != nil { + t.Error(err) + } else if err = asagcfg.loadFromJsonCfg(jsnAsAgCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, asagcfg) { + t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(asagcfg)) + } +} + +func TestAsteriskConnCfgloadFromJsonCfg(t *testing.T) { + var asconcfg, expected AsteriskConnCfg + if err := asconcfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(asconcfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, asconcfg) + } + if err := asconcfg.loadFromJsonCfg(new(AstConnJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(asconcfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, asconcfg) + } + json := &AstConnJsonCfg{ + Address: utils.StringPointer("127.0.0.1:8088"), + User: utils.StringPointer("cgrates"), + Password: utils.StringPointer("CGRateS.org"), + Connect_attempts: utils.IntPointer(3), + Reconnects: utils.IntPointer(5), + } + expected = AsteriskConnCfg{ + Address: "127.0.0.1:8088", + User: "cgrates", + Password: "CGRateS.org", + ConnectAttempts: 3, + Reconnects: 5, + } + if err = asconcfg.loadFromJsonCfg(json); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, asconcfg) { + t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(asconcfg)) + } +}