diff --git a/services/responders_it_test.go b/services/responders_it_test.go new file mode 100644 index 000000000..ea1c7a4b1 --- /dev/null +++ b/services/responders_it_test.go @@ -0,0 +1,88 @@ +// +build integration + +/* +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 services + +import ( + "sync" + "testing" + + "github.com/cgrates/rpcclient" + + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/cores" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" +) + +func TestResponderSReload(t *testing.T) { + // utils.Logger.SetLogLevel(7) + cfg := config.NewDefaultCGRConfig() + + utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) + utils.Logger.SetLogLevel(7) + cfg.ThresholdSCfg().Enabled = true + filterSChan := make(chan *engine.FilterS, 1) + filterSChan <- nil + shdChan := utils.NewSyncedChan() + server := cores.NewServer(nil) + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) + internalChan := make(chan rpcclient.ClientConnector, 1) + srv := NewResponderService(cfg, server, internalChan, + shdChan, anz, srvDep) + + srvName := srv.ServiceName() + if srvName != utils.ResponderS { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", utils.ResponderS, srvName) + } + + if srv.IsRunning() { + t.Errorf("Expected service to be down") + } + + err := srv.Start() + if err != nil { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) + } + + if !srv.IsRunning() { + t.Errorf("Expected service to be running") + } + + err = srv.Start() + if err != utils.ErrServiceAlreadyRunning { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", utils.ErrServiceAlreadyRunning, err) + } + + err = srv.Reload() + if err != nil { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) + } + + err = srv.Shutdown() + if err != nil { + t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) + } + + if srv.IsRunning() { + t.Errorf("Expected service to be down") + } + +} diff --git a/services/stordb_it_test.go b/services/stordb_it_test.go new file mode 100644 index 000000000..4990b396f --- /dev/null +++ b/services/stordb_it_test.go @@ -0,0 +1,186 @@ +// +build integration + +/* +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 services + +/* +func TestStorDBReload(t *testing.T) { + cfg := config.NewDefaultCGRConfig() + + utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) + utils.Logger.SetLogLevel(7) + + shdChan := utils.NewSyncedChan() + shdWg := new(sync.WaitGroup) + chS := engine.NewCacheS(cfg, nil, nil) + filterSChan := make(chan *engine.FilterS, 1) + filterSChan <- nil + server := cores.NewServer(nil) + srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} + srvMngr := servmanager.NewServiceManager(cfg, shdChan, shdWg) + cM := engine.NewConnManager(cfg, nil) + db := NewDataDBService(cfg, cM, srvDep) + storDB := NewStorDBService(cfg, srvDep) + anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) + srvMngr.AddServices(NewAttributeService(cfg, db, + chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), anz, srvDep), + NewLoaderService(cfg, db, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil, anz, srvDep), db) + if err := srvMngr.StartServices(); err != nil { + t.Error(err) + } + if db.IsRunning() { + t.Errorf("Expected service to be down") + } + var reply string + cfg.AttributeSCfg().Enabled = true + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ + Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), + Section: config.DATADB_JSN, + }, &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Errorf("Expecting OK ,received %s", reply) + } + time.Sleep(10 * time.Millisecond) //need to switch to gorutine + if !db.IsRunning() { + t.Errorf("Expected service to be running") + } + getDm := db.GetDM() + if !reflect.DeepEqual(getDm, db.dm) { + t.Errorf("\nExpecting <%+v>,\n Received <%+v>", db.dm, getDm) + } + oldcfg := &config.DataDbCfg{ + DataDbType: utils.Mongo, + DataDbHost: "127.0.0.1", + DataDbPort: "27017", + DataDbName: "10", + DataDbUser: "cgrates", + Opts: map[string]interface{}{ + utils.QueryTimeoutCfg: "10s", + utils.RedisClusterOnDownDelayCfg: "0", + utils.RedisClusterSyncCfg: "5s", + utils.RedisClusterCfg: false, + utils.RedisSentinelNameCfg: "", + utils.RedisTLS: false, + utils.RedisClientCertificate: "", + utils.RedisClientKey: "", + utils.RedisCACertificate: "", + }, + RmtConns: []string{}, + RplConns: []string{}, + Items: map[string]*config.ItemOpt{ + utils.MetaAccounts: { + Replicate: false, + Remote: false}, + utils.MetaReverseDestinations: { + Replicate: false, + Remote: false}, + utils.MetaDestinations: { + Replicate: false, + Remote: false}, + utils.MetaRatingPlans: { + Replicate: false, + Remote: false}, + utils.MetaRatingProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActions: { + Replicate: false, + Remote: false}, + utils.MetaActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaAccountActionPlans: { + Replicate: false, + Remote: false}, + utils.MetaActionTriggers: { + Replicate: false, + Remote: false}, + utils.MetaSharedGroups: { + Replicate: false, + Remote: false}, + utils.MetaTimings: { + Replicate: false, + Remote: false}, + utils.MetaResourceProfile: { + Replicate: false, + Remote: false}, + utils.MetaStatQueues: { + Replicate: false, + Remote: false}, + utils.MetaResources: { + Replicate: false, + Remote: false}, + utils.MetaStatQueueProfiles: { + Replicate: false, + Remote: false}, + utils.MetaThresholds: { + Replicate: false, + Remote: false}, + utils.MetaThresholdProfiles: { + Replicate: false, + Remote: false}, + utils.MetaFilters: { + Replicate: false, + Remote: false}, + utils.MetaRouteProfiles: { + Replicate: false, + Remote: false}, + utils.MetaAttributeProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherHosts: { + Replicate: false, + Remote: false}, + utils.MetaChargerProfiles: { + Replicate: false, + Remote: false}, + utils.MetaDispatcherProfiles: { + Replicate: false, + Remote: false}, + utils.MetaLoadIDs: { + Replicate: false, + Remote: false}, + utils.MetaIndexes: { + Replicate: false, + Remote: false}, + utils.MetaRateProfiles: { + Replicate: false, + Remote: false}, + utils.MetaActionProfiles: { + Replicate: false, + Remote: false}, + utils.MetaAccountProfiles: { + Replicate: false, + Remote: false}, + }, + } + if !reflect.DeepEqual(oldcfg, db.oldDBCfg) { + t.Errorf("Expected %s \n received:%s", utils.ToJSON(oldcfg), utils.ToJSON(db.oldDBCfg)) + } + cfg.AttributeSCfg().Enabled = false + cfg.GetReloadChan(config.STORDB_JSN) <- struct{}{} + time.Sleep(10 * time.Millisecond) + if db.IsRunning() { + t.Errorf("Expected service to be down") + } + shdChan.CloseOnce() + time.Sleep(10 * time.Millisecond) +} +*/