diff --git a/config/config.go b/config/config.go index 87ab7440a..1e8596fb3 100755 --- a/config/config.go +++ b/config/config.go @@ -843,6 +843,9 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) { if err != nil { return err } + if err := self.asteriskAgentCfg.loadFromJsonCfg(jsnSMAstCfg); err != nil { + return err + } jsnDACfg, err := jsnCfg.DiameterAgentJsonCfg() if err != nil { @@ -1014,12 +1017,6 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) { } } - if jsnSMAstCfg != nil { - if err := self.asteriskAgentCfg.loadFromJsonCfg(jsnSMAstCfg); err != nil { - return err - } - } - if jsnDACfg != nil { if err := self.diameterAgentCfg.loadFromJsonCfg(jsnDACfg); err != nil { return err diff --git a/config/daconfig.go b/config/diametercfg.go similarity index 100% rename from config/daconfig.go rename to config/diametercfg.go diff --git a/config/diametercfg_test.go b/config/diametercfg_test.go new file mode 100644 index 000000000..d358adb90 --- /dev/null +++ b/config/diametercfg_test.go @@ -0,0 +1,110 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ +package config + +import ( + "reflect" + "strings" + "testing" + + "github.com/cgrates/cgrates/utils" +) + +func TestDiameterAgentCfgloadFromJsonCfg(t *testing.T) { + var dacfg, expected DiameterAgentCfg + if err := dacfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(dacfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, dacfg) + } + if err := dacfg.loadFromJsonCfg(new(DiameterAgentJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(dacfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, dacfg) + } + cfgJSONStr := `{ +"diameter_agent": { + "enabled": false, // enables the diameter agent: + "listen": "127.0.0.1:3868", // address where to listen for diameter requests + "dictionaries_path": "/usr/share/cgrates/diameter/dict/", // path towards directory holding additional dictionaries to load + "sessions_conns": [ + {"address": "*internal"} // connection towards SessionService + ], + "origin_host": "CGR-DA", // diameter Origin-Host AVP used in replies + "origin_realm": "cgrates.org", // diameter Origin-Realm AVP used in replies + "vendor_id": 0, // diameter Vendor-Id AVP used in replies + "product_name": "CGRateS", // diameter Product-Name AVP used in replies + "templates":{}, + "request_processors": [], +}, +}` + expected = DiameterAgentCfg{ + Listen: "127.0.0.1:3868", + DictionariesPath: "/usr/share/cgrates/diameter/dict/", + SessionSConns: []*HaPoolConfig{{Address: "*internal"}}, + OriginHost: "CGR-DA", + OriginRealm: "cgrates.org", + VendorId: 0, + ProductName: "CGRateS", + Templates: make(map[string][]*FCTemplate), + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDaCfg, err := jsnCfg.DiameterAgentJsonCfg(); err != nil { + t.Error(err) + } else if err = dacfg.loadFromJsonCfg(jsnDaCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, dacfg) { + t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(dacfg)) + } +} + +func TestDARequestProcessorloadFromJsonCfg(t *testing.T) { + var dareq, expected DARequestProcessor + if err := dareq.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(dareq, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, dareq) + } + if err := dareq.loadFromJsonCfg(new(DARequestProcessorJsnCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(dareq, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, dareq) + } + json := &DARequestProcessorJsnCfg{ + Id: utils.StringPointer("cgrates"), + Tenant: utils.StringPointer("tenant"), + Filters: &[]string{"filter1", "filter2"}, + Flags: &[]string{"flag1", "flag2"}, + Timezone: utils.StringPointer("Local"), + Continue_on_success: utils.BoolPointer(true), + } + expected = DARequestProcessor{ + ID: "cgrates", + Tenant: NewRSRParsersMustCompile("tenant", true), + Filters: []string{"filter1", "filter2"}, + Flags: utils.StringMap{"flag1": true, "flag2": true}, + Timezone: "Local", + ContinueOnSuccess: true, + } + if err = dareq.loadFromJsonCfg(json); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, dareq) { + t.Errorf("Expected: %+v , recived: %+v", utils.ToJSON(expected), utils.ToJSON(dareq)) + } +}