From 3b52f0df6dff3397d7a08b92b7828eca65c493c9 Mon Sep 17 00:00:00 2001 From: DanB Date: Sat, 3 Dec 2016 14:21:12 +0100 Subject: [PATCH] ApierV1.StartService, ApierV1.StopService, ApierV1.ServiceStatus implementation with tests --- apier/v1/apier.go | 14 +++++++++++- apier/v1/apier_it_test.go | 44 ++++++++++++++++++++++++++++++++++++++ servmanager/servmanager.go | 2 +- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 5cd6735dc..3e93c2177 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -45,10 +45,10 @@ type ApierV1 struct { CdrDb engine.CdrStorage Config *config.CGRConfig Responder *engine.Responder - ServManager *servmanager.ServiceManager CdrStatsSrv rpcclient.RpcClientConnection Users rpcclient.RpcClientConnection CDRs rpcclient.RpcClientConnection // FixMe: populate it from cgr-engine + ServManager *servmanager.ServiceManager // Need to have them capitalize so we can export in V2 } func (self *ApierV1) GetDestination(dstId string, reply *engine.Destination) error { @@ -1115,3 +1115,15 @@ func (self *ApierV1) RemoteUnlock(lockIDs []string, reply *string) error { *reply = utils.OK return nil } + +func (v1 *ApierV1) StartService(args servmanager.ArgStartService, reply *string) (err error) { + return v1.ServManager.V1StartService(args, reply) +} + +func (v1 *ApierV1) StopService(args servmanager.ArgStartService, reply *string) (err error) { + return v1.ServManager.V1StopService(args, reply) +} + +func (v1 *ApierV1) ServiceStatus(args servmanager.ArgStartService, reply *string) (err error) { + return v1.ServManager.V1ServiceStatus(args, reply) +} diff --git a/apier/v1/apier_it_test.go b/apier/v1/apier_it_test.go index 901bf9959..ab56c4e5a 100644 --- a/apier/v1/apier_it_test.go +++ b/apier/v1/apier_it_test.go @@ -37,6 +37,7 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" ) @@ -1606,6 +1607,49 @@ func TestApierLoadTariffPlanFromStorDb(t *testing.T) { } } +func TestApierStartStopServiceStatus(t *testing.T) { + var reply string + if err := rater.Call("ApierV1.ServiceStatus", servmanager.ArgStartService{ServiceID: utils.MetaScheduler}, + &reply); err != nil { + t.Error(err) + } else if reply != utils.RunningCaps { + t.Errorf("Received: <%s>", reply) + } + if err := rater.Call("ApierV1.StopService", servmanager.ArgStartService{ServiceID: "INVALID"}, + &reply); err == nil || err.Error() != utils.UnsupportedServiceIDCaps { + t.Error(err) + } + if err := rater.Call("ApierV1.StopService", servmanager.ArgStartService{ServiceID: utils.MetaScheduler}, + &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Errorf("Received: <%s>", reply) + } + if err := rater.Call("ApierV1.ServiceStatus", servmanager.ArgStartService{ServiceID: utils.MetaScheduler}, + &reply); err != nil { + t.Error(err) + } else if reply != utils.StoppedCaps { + t.Errorf("Received: <%s>", reply) + } + if err := rater.Call("ApierV1.StartService", servmanager.ArgStartService{ServiceID: utils.MetaScheduler}, + &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Errorf("Received: <%s>", reply) + } + if err := rater.Call("ApierV1.ServiceStatus", servmanager.ArgStartService{ServiceID: utils.MetaScheduler}, + &reply); err != nil { + t.Error(err) + } else if reply != utils.RunningCaps { + t.Errorf("Received: <%s>", reply) + } + if err := rater.Call("ApierV1.ReloadScheduler", reply, &reply); err != nil { + t.Error("Got error on ApierV1.ReloadScheduler: ", err.Error()) + } else if reply != utils.OK { + t.Error("Calling ApierV1.ReloadScheduler got reply: ", reply) + } +} + /* func TestApierGetCacheStats3(t *testing.T) { var rcvStats *utils.CacheStats diff --git a/servmanager/servmanager.go b/servmanager/servmanager.go index 4aa0cf5a5..068473870 100644 --- a/servmanager/servmanager.go +++ b/servmanager/servmanager.go @@ -126,7 +126,7 @@ func (srvMngr *ServiceManager) Call(serviceMethod string, args interface{}, repl return err } -// ArgShutdownService are passed to ShutdownService RPC method +// ArgShutdownService are passed to Start/StopService/Status RPC methods type ArgStartService struct { ServiceID string }