Added tests for DispatcherService SessionSv1

This commit is contained in:
Trial97
2019-02-13 15:33:14 +02:00
committed by Dan Christian Bogos
parent 02b370aef1
commit 0a9e5f7bdd
17 changed files with 471 additions and 368 deletions

View File

@@ -309,7 +309,7 @@ func testChargerSRemChargerProfile(t *testing.T) {
func testChargerSPing(t *testing.T) {
var resp string
if err := chargerRPC.Call(utils.ChargerSv1Ping, "", &resp); err != nil {
if err := chargerRPC.Call(utils.ChargerSv1Ping, &utils.CGREvent{}, &resp); err != nil {
t.Error(err)
} else if resp != utils.Pong {
t.Error("Unexpected reply returned", resp)

View File

@@ -21,6 +21,7 @@ package v1
import (
"github.com/cgrates/cgrates/dispatchers"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/sessions"
"github.com/cgrates/cgrates/utils"
)
@@ -205,57 +206,6 @@ func (dA *DispatcherAttributeSv1) ProcessEvent(args *dispatchers.ArgsAttrProcess
return dA.dA.AttributeSv1ProcessEvent(args, reply)
}
/*
func NewDispatcherSessionSv1(dps *dispatchers.DispatcherService) *DispatcherSessionSv1 {
return &DispatcherSessionSv1{dS: dps}
}
// Exports RPC from RLs
type DispatcherSessionSv1 struct {
dS *dispatchers.DispatcherService
}
// Ping implements SessionSv1Ping
func (dS *DispatcherSessionSv1) Ping(ign string, reply *string) error {
return dS.dS.SessionSv1Ping(ign, reply)
}
// AuthorizeEventWithDigest implements SessionSv1AuthorizeEventWithDigest
func (dS *DispatcherSessionSv1) AuthorizeEventWithDigest(args *dispatchers.AuthorizeArgsWithApiKey,
reply *sessions.V1AuthorizeReplyWithDigest) error {
return dS.dS.SessionSv1AuthorizeEventWithDigest(args, reply)
}
// InitiateSessionWithDigest implements SessionSv1InitiateSessionWithDigest
func (dS *DispatcherSessionSv1) InitiateSessionWithDigest(args *dispatchers.InitArgsWithApiKey,
reply *sessions.V1InitSessionReply) (err error) {
return dS.dS.SessionSv1InitiateSessionWithDigest(args, reply)
}
// ProcessCDR implements SessionSv1ProcessCDR
func (dS *DispatcherSessionSv1) ProcessCDR(args *dispatchers.CGREvWithApiKey,
reply *string) (err error) {
return dS.dS.SessionSv1ProcessCDR(args, reply)
}
// ProcessEvent implements SessionSv1ProcessEvent
func (dS *DispatcherSessionSv1) ProcessEvent(args *dispatchers.ProcessEventWithApiKey,
reply *sessions.V1ProcessEventReply) (err error) {
return dS.dS.SessionSv1ProcessEvent(args, reply)
}
// TerminateSession implements SessionSv1TerminateSession
func (dS *DispatcherSessionSv1) TerminateSession(args *dispatchers.TerminateSessionWithApiKey,
reply *string) (err error) {
return dS.dS.SessionSv1TerminateSession(args, reply)
}
// UpdateSession implements SessionSv1UpdateSession
func (dS *DispatcherSessionSv1) UpdateSession(args *dispatchers.UpdateSessionWithApiKey,
reply *sessions.V1UpdateSessionReply) (err error) {
return dS.dS.SessionSv1UpdateSession(args, reply)
}
*/
func NewDispatcherChargerSv1(dps *dispatchers.DispatcherService) *DispatcherChargerSv1 {
return &DispatcherChargerSv1{dC: dps}
}
@@ -281,3 +231,64 @@ func (dC *DispatcherChargerSv1) ProcessEvent(args *dispatchers.CGREvWithApiKey,
reply *[]*engine.AttrSProcessEventReply) (err error) {
return dC.dC.ChargerSv1ProcessEvent(args, reply)
}
func NewDispatcherSessionSv1(dps *dispatchers.DispatcherService) *DispatcherSessionSv1 {
return &DispatcherSessionSv1{dS: dps}
}
// Exports RPC from RLs
type DispatcherSessionSv1 struct {
dS *dispatchers.DispatcherService
}
// Ping implements SessionSv1Ping
func (dS *DispatcherSessionSv1) Ping(args *dispatchers.CGREvWithApiKey, reply *string) error {
return dS.dS.SessionSv1Ping(args, reply)
}
// AuthorizeEventWithDigest implements SessionSv1AuthorizeEventWithDigest
func (dS *DispatcherSessionSv1) AuthorizeEventWithDigest(args *dispatchers.AuthorizeArgsWithApiKey,
reply *sessions.V1AuthorizeReplyWithDigest) error {
return dS.dS.SessionSv1AuthorizeEventWithDigest(args, reply)
}
func (dS *DispatcherSessionSv1) AuthorizeEvent(args *dispatchers.AuthorizeArgsWithApiKey,
reply *sessions.V1AuthorizeReply) error {
return dS.dS.SessionSv1AuthorizeEvent(args, reply)
}
// InitiateSessionWithDigest implements SessionSv1InitiateSessionWithDigest
func (dS *DispatcherSessionSv1) InitiateSessionWithDigest(args *dispatchers.InitArgsWithApiKey,
reply *sessions.V1InitReplyWithDigest) (err error) {
return dS.dS.SessionSv1InitiateSessionWithDigest(args, reply)
}
// InitiateSessionWithDigest implements SessionSv1InitiateSessionWithDigest
func (dS *DispatcherSessionSv1) InitiateSession(args *dispatchers.InitArgsWithApiKey,
reply *sessions.V1InitSessionReply) (err error) {
return dS.dS.SessionSv1InitiateSession(args, reply)
}
// ProcessCDR implements SessionSv1ProcessCDR
func (dS *DispatcherSessionSv1) ProcessCDR(args *dispatchers.CGREvWithApiKey,
reply *string) (err error) {
return dS.dS.SessionSv1ProcessCDR(args, reply)
}
// ProcessEvent implements SessionSv1ProcessEvent
func (dS *DispatcherSessionSv1) ProcessEvent(args *dispatchers.ProcessEventWithApiKey,
reply *sessions.V1ProcessEventReply) (err error) {
return dS.dS.SessionSv1ProcessEvent(args, reply)
}
// TerminateSession implements SessionSv1TerminateSession
func (dS *DispatcherSessionSv1) TerminateSession(args *dispatchers.TerminateSessionWithApiKey,
reply *string) (err error) {
return dS.dS.SessionSv1TerminateSession(args, reply)
}
// UpdateSession implements SessionSv1UpdateSession
func (dS *DispatcherSessionSv1) UpdateSession(args *dispatchers.UpdateSessionWithApiKey,
reply *sessions.V1UpdateSessionReply) (err error) {
return dS.dS.SessionSv1UpdateSession(args, reply)
}

View File

@@ -173,11 +173,11 @@ func (ssv1 *SessionSv1) BiRPCv1RegisterInternalBiJSONConn(clnt *rpc2.Client, arg
return ssv1.SMG.BiRPCv1RegisterInternalBiJSONConn(clnt, args, rply)
}
func (ssv1 *SessionSv1) BiRPCPing(clnt *rpc2.Client, ign string, reply *string) error {
func (ssv1 *SessionSv1) BiRPCPing(clnt *rpc2.Client, ign *utils.CGREvent, reply *string) error {
return ssv1.Ping(ign, reply)
}
func (ssv1 *SessionSv1) Ping(ign string, reply *string) error {
func (ssv1 *SessionSv1) Ping(ign *utils.CGREvent, reply *string) error {
*reply = utils.Pong
return nil
}

View File

@@ -107,7 +107,7 @@ func TestSSv1ItRpcConn(t *testing.T) {
func TestSSv1ItPing(t *testing.T) {
var resp string
if err := sSv1BiRpc.Call(utils.SessionSv1Ping, "", &resp); err != nil {
if err := sSv1BiRpc.Call(utils.SessionSv1Ping, &utils.CGREvent{}, &resp); err != nil {
t.Error(err)
} else if resp != utils.Pong {
t.Error("Unexpected reply returned", resp)

View File

@@ -1038,12 +1038,10 @@ func startDispatcherService(internalDispatcherSChan chan *dispatchers.Dispatcher
server.RpcRegisterName(utils.AttributeSv1,
v1.NewDispatcherAttributeSv1(dspS))
/*
if !cfg.SessionSCfg().Enabled && len(cfg.DispatcherSCfg().SessionSConns) != 0 {
server.RpcRegisterName(utils.SessionSv1,
v1.NewDispatcherSessionSv1(dspS))
}
*/
server.RpcRegisterName(utils.SessionSv1,
v1.NewDispatcherSessionSv1(dspS))
server.RpcRegisterName(utils.ChargerSv1,
v1.NewDispatcherChargerSv1(dspS))

View File

@@ -22,7 +22,7 @@
},
"stor_db": {
"db_type":"*internal",
"db_password": "CGRateS.org",
},
"attributes": {
@@ -56,4 +56,28 @@
"enabled": true,
},
"cdrs": {
"enabled": true,
"chargers_conns":[
{"address": "*internal"},
],
},
"sessions": {
"enabled": true,
"listen_bijson": ":6014",
"suppliers_conns": [
{"address": "*internal"}
],
"resources_conns": [
{"address": "*internal"}
],
"attributes_conns": [
{"address": "*internal"}
],
"rals_conns": [
{"address": "*internal"}
],
},
}

View File

@@ -56,4 +56,28 @@
"enabled": true,
},
"cdrs": {
"enabled": true,
"chargers_conns":[
{"address": "*internal"},
],
},
"sessions": {
"enabled": true,
"listen_bijson": ":7014",
"suppliers_conns": [
{"address": "*internal"}
],
"resources_conns": [
{"address": "*internal"}
],
"attributes_conns": [
{"address": "*internal"}
],
"rals_conns": [
{"address": "*internal"}
],
},
}

View File

@@ -7,4 +7,5 @@ cgrates.org,ATTR_API_THR_AUTH,*auth,*string:APIKey:thr12345,,APIMethods,*any,Thr
cgrates.org,ATTR_API_SUP_AUTH,*auth,*string:APIKey:sup12345,,APIMethods,*any,SupplierSv1.Ping&SupplierSv1.GetSuppliers,true,false,20
cgrates.org,ATTR_API_STAT_AUTH,*auth,*string:APIKey:stat12345,,APIMethods,*any,StatSv1.Ping&StatSv1.GetStatQueuesForEvent&StatSv1.GetQueueStringMetrics&StatSv1.ProcessEvent,true,false,20
cgrates.org,ATTR_API_RES_AUTH,*auth,*string:APIKey:res12345,,APIMethods,*any,ResourceSv1.Ping&ResourceSv1.GetResourcesForEvent,true,false,20
cgrates.org,ATTR_API_SES_AUTH,*auth,*string:APIKey:ses12345,,APIMethods,*any,SessionSv1.Ping&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessEvent,true,false,20
1 #Tenant ID Contexts FilterIDs ActivationInterval FieldName Initial Substitute Append Blocker Weight
7 cgrates.org ATTR_API_SUP_AUTH *auth *string:APIKey:sup12345 APIMethods *any SupplierSv1.Ping&SupplierSv1.GetSuppliers true false 20
8 cgrates.org ATTR_API_STAT_AUTH *auth *string:APIKey:stat12345 APIMethods *any StatSv1.Ping&StatSv1.GetStatQueuesForEvent&StatSv1.GetQueueStringMetrics&StatSv1.ProcessEvent true false 20
9 cgrates.org ATTR_API_RES_AUTH *auth *string:APIKey:res12345 APIMethods *any ResourceSv1.Ping&ResourceSv1.GetResourcesForEvent true false 20
10 cgrates.org ATTR_API_SES_AUTH *auth *string:APIKey:ses12345 APIMethods *any SessionSv1.Ping&SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessEvent true false 20
11

View File

@@ -125,6 +125,7 @@ func (d *testDispatcher) loadData(t *testing.T, path string) {
//Test start here
func TestDspAttributeS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
@@ -140,6 +141,7 @@ func TestDspAttributeS(t *testing.T) {
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspAttrPingFailover(t *testing.T) {
@@ -156,38 +158,29 @@ func testDspAttrPingFailover(t *testing.T) {
t.Errorf("Received: %s", reply)
}
reply = ""
if err := dispEngine.RCP.Call(utils.AttributeSv1Ping, &CGREvWithApiKey{
ev := CGREvWithApiKey{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "attr12345",
}, &reply); err != nil {
DispatcherResource: DispatcherResource{
APIKey: "attr12345",
},
}
if err := dispEngine.RCP.Call(utils.AttributeSv1Ping, &ev, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
allEngine.stopEngine(t)
reply = ""
if err := dispEngine.RCP.Call(utils.AttributeSv1Ping, &CGREvWithApiKey{
CGREvent: utils.CGREvent{
ID: "PING",
Tenant: "cgrates.org",
},
APIKey: "attr12345",
}, &reply); err != nil {
if err := dispEngine.RCP.Call(utils.AttributeSv1Ping, &ev, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
allEngine2.stopEngine(t)
reply = ""
if err := dispEngine.RCP.Call(utils.AttributeSv1Ping, &CGREvWithApiKey{
CGREvent: utils.CGREvent{
ID: "PING",
Tenant: "cgrates.org",
},
APIKey: "attr12345",
}, &reply); err == nil {
if err := dispEngine.RCP.Call(utils.AttributeSv1Ping, &ev, &reply); err == nil {
t.Errorf("Expected error but recived %v and reply %v\n", err, reply)
}
allEngine.startEngine(t)
@@ -196,7 +189,9 @@ func testDspAttrPingFailover(t *testing.T) {
func testDspAttrGetAttrFailover(t *testing.T) {
args := &CGREvWithApiKey{
APIKey: "attr12345",
DispatcherResource: DispatcherResource{
APIKey: "attr12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "testAttributeSGetAttributeForEvent",
@@ -292,7 +287,9 @@ func testDspAttrPing(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "attr12345",
DispatcherResource: DispatcherResource{
APIKey: "attr12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
@@ -320,7 +317,9 @@ func testDspAttrTestMissingApiKey(t *testing.T) {
func testDspAttrTestUnknownApiKey(t *testing.T) {
args := &CGREvWithApiKey{
APIKey: "1234",
DispatcherResource: DispatcherResource{
APIKey: "1234",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "testAttributeSGetAttributeForEvent",
@@ -339,7 +338,9 @@ func testDspAttrTestUnknownApiKey(t *testing.T) {
func testDspAttrTestAuthKey(t *testing.T) {
args := &CGREvWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "testAttributeSGetAttributeForEvent",
@@ -358,7 +359,9 @@ func testDspAttrTestAuthKey(t *testing.T) {
func testDspAttrTestAuthKey2(t *testing.T) {
args := &CGREvWithApiKey{
APIKey: "attr12345",
DispatcherResource: DispatcherResource{
APIKey: "attr12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "testAttributeSGetAttributeForEvent",
@@ -422,7 +425,9 @@ func testDspAttrTestAuthKey2(t *testing.T) {
func testDspAttrTestAuthKey3(t *testing.T) {
args := &CGREvWithApiKey{
APIKey: "attr12345",
DispatcherResource: DispatcherResource{
APIKey: "attr12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "testAttributeSGetAttributeForEvent",

View File

@@ -41,6 +41,7 @@ var sTestsDspCpp = []func(t *testing.T){
//Test start here
func TestDspChargerS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
@@ -56,6 +57,7 @@ func TestDspChargerS(t *testing.T) {
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspCppPingFailover(t *testing.T) {
@@ -69,7 +71,9 @@ func testDspCppPingFailover(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "chrg12345",
DispatcherResource: DispatcherResource{
APIKey: "chrg12345",
},
}
if err := dispEngine.RCP.Call(utils.ChargerSv1Ping, &ev, &reply); err != nil {
t.Error(err)
@@ -92,7 +96,9 @@ func testDspCppPingFailover(t *testing.T) {
func testDspCppGetChtgFailover(t *testing.T) {
args := CGREvWithApiKey{
APIKey: "chrg12345",
DispatcherResource: DispatcherResource{
APIKey: "chrg12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "event1",
@@ -141,7 +147,9 @@ func testDspCppPing(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "chrg12345",
DispatcherResource: DispatcherResource{
APIKey: "chrg12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
@@ -151,7 +159,9 @@ func testDspCppPing(t *testing.T) {
func testDspCppTestAuthKey(t *testing.T) {
args := CGREvWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "event1",
@@ -169,7 +179,9 @@ func testDspCppTestAuthKey(t *testing.T) {
func testDspCppTestAuthKey2(t *testing.T) {
args := CGREvWithApiKey{
APIKey: "chrg12345",
DispatcherResource: DispatcherResource{
APIKey: "chrg12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "event1",

View File

@@ -40,6 +40,7 @@ var sTestsDspRes = []func(t *testing.T){
//Test start here
func TestDspResourceS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
@@ -55,6 +56,7 @@ func TestDspResourceS(t *testing.T) {
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspResPingFailover(t *testing.T) {
@@ -68,7 +70,9 @@ func testDspResPingFailover(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "res12345",
DispatcherResource: DispatcherResource{
APIKey: "res12345",
},
}
if err := dispEngine.RCP.Call(utils.ResourceSv1Ping, &ev, &reply); err != nil {
t.Error(err)
@@ -100,7 +104,9 @@ func testDspResPing(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "res12345",
DispatcherResource: DispatcherResource{
APIKey: "res12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
@@ -111,7 +117,9 @@ func testDspResPing(t *testing.T) {
func testDspResTestAuthKey(t *testing.T) {
var rs *engine.Resources
args := &ArgsV1ResUsageWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
ArgRSv1ResourceUsage: utils.ArgRSv1ResourceUsage{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -133,7 +141,9 @@ func testDspResTestAuthKey(t *testing.T) {
func testDspResTestAuthKey2(t *testing.T) {
var rs *engine.Resources
args := &ArgsV1ResUsageWithApiKey{
APIKey: "res12345",
DispatcherResource: DispatcherResource{
APIKey: "res12345",
},
ArgRSv1ResourceUsage: utils.ArgRSv1ResourceUsage{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",

View File

@@ -18,88 +18,138 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package dispatchers
/*
import (
"time"
"github.com/cgrates/cgrates/sessions"
"github.com/cgrates/cgrates/utils"
)
func (dS *DispatcherService) SessionSv1Ping(ign string, rpl *string) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
func (dS *DispatcherService) SessionSv1Ping(args *CGREvWithApiKey, reply *string) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1Ping,
args.CGREvent.Tenant,
args.APIKey, args.CGREvent.Time); err != nil {
return
}
}
return dS.sessionS.Call(utils.SessionSv1Ping, ign, rpl)
return dS.Dispatch(&args.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1Ping, args.CGREvent, reply)
}
func (dS *DispatcherService) SessionSv1AuthorizeEvent(args *AuthorizeArgsWithApiKey,
reply *sessions.V1AuthorizeReply) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1AuthorizeEvent,
args.V1AuthorizeArgs.CGREvent.Tenant,
args.APIKey, args.V1AuthorizeArgs.CGREvent.Time); err != nil {
return
}
}
return dS.Dispatch(&args.V1AuthorizeArgs.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1AuthorizeEvent, args.V1AuthorizeArgs, reply)
}
func (dS *DispatcherService) SessionSv1AuthorizeEventWithDigest(args *AuthorizeArgsWithApiKey,
reply *sessions.V1AuthorizeReplyWithDigest) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1AuthorizeEventWithDigest,
args.V1AuthorizeArgs.CGREvent.Tenant,
args.APIKey, args.V1AuthorizeArgs.CGREvent.Time); err != nil {
return
}
}
if err = dS.authorize(utils.SessionSv1AuthorizeEventWithDigest, args.V1AuthorizeArgs.CGREvent.Tenant,
args.APIKey, args.V1AuthorizeArgs.CGREvent.Time); err != nil {
return
return dS.Dispatch(&args.V1AuthorizeArgs.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1AuthorizeEventWithDigest, args.V1AuthorizeArgs, reply)
}
func (dS *DispatcherService) SessionSv1InitiateSession(args *InitArgsWithApiKey,
reply *sessions.V1InitSessionReply) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1InitiateSession,
args.V1InitSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1InitSessionArgs.CGREvent.Time); err != nil {
return
}
}
return dS.sessionS.Call(utils.SessionSv1AuthorizeEventWithDigest, args.V1AuthorizeArgs, reply)
return dS.Dispatch(&args.V1InitSessionArgs.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1InitiateSession, args.V1InitSessionArgs, reply)
}
func (dS *DispatcherService) SessionSv1InitiateSessionWithDigest(args *InitArgsWithApiKey,
reply *sessions.V1InitSessionReply) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
reply *sessions.V1InitReplyWithDigest) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1InitiateSessionWithDigest,
args.V1InitSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1InitSessionArgs.CGREvent.Time); err != nil {
return
}
}
if err = dS.authorize(utils.SessionSv1InitiateSessionWithDigest, args.V1InitSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1InitSessionArgs.CGREvent.Time); err != nil {
return
}
return dS.sessionS.Call(utils.SessionSv1InitiateSessionWithDigest, args.V1InitSessionArgs, reply)
}
func (dS *DispatcherService) SessionSv1ProcessCDR(args *CGREvWithApiKey,
reply *string) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
}
if err = dS.authorize(utils.SessionSv1ProcessCDR, args.CGREvent.Tenant,
args.APIKey, args.CGREvent.Time); err != nil {
return
}
return dS.sessionS.Call(utils.SessionSv1ProcessCDR, args.CGREvent, reply)
}
func (dS *DispatcherService) SessionSv1ProcessEvent(args *ProcessEventWithApiKey,
reply *sessions.V1ProcessEventReply) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
}
if err = dS.authorize(utils.SessionSv1ProcessEvent, args.V1ProcessEventArgs.CGREvent.Tenant,
args.APIKey, args.V1ProcessEventArgs.CGREvent.Time); err != nil {
return
}
return dS.sessionS.Call(utils.SessionSv1ProcessEvent, args.V1ProcessEventArgs, reply)
}
func (dS *DispatcherService) SessionSv1TerminateSession(args *TerminateSessionWithApiKey,
reply *string) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
}
if err = dS.authorize(utils.SessionSv1TerminateSession, args.V1TerminateSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1TerminateSessionArgs.CGREvent.Time); err != nil {
return
}
return dS.sessionS.Call(utils.SessionSv1TerminateSession, args.V1TerminateSessionArgs, reply)
return dS.Dispatch(&args.V1InitSessionArgs.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1InitiateSessionWithDigest, args.V1InitSessionArgs, reply)
}
func (dS *DispatcherService) SessionSv1UpdateSession(args *UpdateSessionWithApiKey,
reply *sessions.V1UpdateSessionReply) (err error) {
if dS.sessionS == nil {
return utils.NewErrNotConnected(utils.SessionS)
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1UpdateSession,
args.V1UpdateSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1UpdateSessionArgs.CGREvent.Time); err != nil {
return
}
}
if err = dS.authorize(utils.SessionSv1UpdateSession, args.V1UpdateSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1UpdateSessionArgs.CGREvent.Time); err != nil {
return
}
return dS.sessionS.Call(utils.SessionSv1UpdateSession, args.V1UpdateSessionArgs, reply)
return dS.Dispatch(&args.V1UpdateSessionArgs.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1UpdateSession, args.V1UpdateSessionArgs, reply)
}
func (dS *DispatcherService) SessionSv1SyncSessions(args *TntWithApiKey,
reply *sessions.V1UpdateSessionReply) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1SyncSessions,
args.TenantArg.Tenant,
args.APIKey, utils.TimePointer(time.Now())); err != nil {
return
}
}
return dS.Dispatch(&utils.CGREvent{Tenant: args.TenantArg.Tenant}, utils.MetaSessionS, args.RouteID,
utils.SessionSv1SyncSessions, &args.TenantArg.Tenant, reply)
}
func (dS *DispatcherService) SessionSv1TerminateSession(args *TerminateSessionWithApiKey,
reply *string) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1TerminateSession,
args.V1TerminateSessionArgs.CGREvent.Tenant,
args.APIKey, args.V1TerminateSessionArgs.CGREvent.Time); err != nil {
return
}
}
return dS.Dispatch(&args.V1TerminateSessionArgs.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1TerminateSession, args.V1TerminateSessionArgs, reply)
}
func (dS *DispatcherService) SessionSv1ProcessCDR(args *CGREvWithApiKey,
reply *string) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1ProcessCDR,
args.CGREvent.Tenant,
args.APIKey, args.CGREvent.Time); err != nil {
return
}
}
return dS.Dispatch(&args.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1ProcessCDR, args.CGREvent, reply)
}
func (dS *DispatcherService) SessionSv1ProcessEvent(args *ProcessEventWithApiKey,
reply *sessions.V1ProcessEventReply) (err error) {
if dS.attrS != nil {
if err = dS.authorize(utils.SessionSv1ProcessEvent,
args.V1ProcessEventArgs.CGREvent.Tenant,
args.APIKey, args.V1ProcessEventArgs.CGREvent.Time); err != nil {
return
}
}
return dS.Dispatch(&args.CGREvent, utils.MetaSessionS, args.RouteID,
utils.SessionSv1ProcessEvent, args.V1ProcessEventArgs, reply)
}
*/

View File

@@ -21,175 +21,113 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package dispatchers
import (
"net/rpc"
"net/rpc/jsonrpc"
"path"
"reflect"
"sort"
"strings"
"testing"
"time"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/sessions"
"github.com/cgrates/cgrates/utils"
)
var (
dspSessionCfgPath string
dspSessionCfg *config.CGRConfig
dspSessionRPC *rpc.Client
instSessionCfgPath string
instSessionCfg *config.CGRConfig
instSessionRPC *rpc.Client
)
var sTestsDspSession = []func(t *testing.T){
// testDspSessionInitCfg,
// testDspSessionInitDataDb,
// testDspSessionResetStorDb,
// testDspSessionStartEngine,
// testDspSessionRPCConn,
// testDspSessionPing,
// testDspSessionLoadData,
// testDspSessionAddAttributesWithPermision,
// testDspSessionTestAuthKey,
// testDspSessionAddAttributesWithPermision2,
// testDspSessionAuthorize,
// testDspSessionInit,
// testDspSessionUpdate,
// testDspSessionTerminate,
// testDspSessionProcessCDR,
// testDspSessionKillEngine,
testDspSessionPingFailover,
testDspSessionPing,
testDspSessionTestAuthKey,
testDspSessionAuthorize,
testDspSessionInit,
testDspSessionUpdate,
testDspSessionTerminate,
testDspSessionProcessCDR,
testDspSessionProcessEvent,
}
//Test start here
func TestDspSessionS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
dispEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "dispatchers"), true, true)
allEngine.loadData(t, path.Join(dspDataDir, "tariffplans", "testit"))
allEngine2.loadData(t, path.Join(dspDataDir, "tariffplans", "oldtutorial"))
attrEngine.loadData(t, path.Join(dspDataDir, "tariffplans", "dispatchers"))
time.Sleep(500 * time.Millisecond)
for _, stest := range sTestsDspSession {
t.Run("", stest)
}
}
func testDspSessionInitCfg(t *testing.T) {
var err error
dspSessionCfgPath = path.Join(dspDataDir, "conf", "samples", "dispatcher")
dspSessionCfg, err = config.NewCGRConfigFromFolder(dspSessionCfgPath)
if err != nil {
t.Error(err)
}
dspSessionCfg.DataFolderPath = dspDataDir // Share DataFolderPath through config towards StoreDb for Flush()
config.SetCgrConfig(dspSessionCfg)
instSessionCfgPath = path.Join(dspDataDir, "conf", "samples", "sessions")
instSessionCfg, err = config.NewCGRConfigFromFolder(instSessionCfgPath)
if err != nil {
t.Error(err)
}
instSessionCfg.DataFolderPath = dspDataDir // Share DataFolderPath through config towards StoreDb for Flush()
config.SetCgrConfig(instSessionCfg)
}
func testDspSessionInitDataDb(t *testing.T) {
if err := engine.InitDataDb(instSessionCfg); err != nil {
t.Fatal(err)
}
}
// Wipe out the cdr database
func testDspSessionResetStorDb(t *testing.T) {
if err := engine.InitStorDb(instSessionCfg); err != nil {
t.Fatal(err)
}
}
// Start CGR Engine
func testDspSessionStartEngine(t *testing.T) {
if _, err := engine.StartEngine(instSessionCfgPath, dspDelay); err != nil {
t.Fatal(err)
}
if _, err := engine.StartEngine(dspSessionCfgPath, dspDelay); err != nil {
t.Fatal(err)
}
}
// Connect rpc client to rater
func testDspSessionRPCConn(t *testing.T) {
var err error
instSessionRPC, err = jsonrpc.Dial("tcp", instSessionCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}
dspSessionRPC, err = jsonrpc.Dial("tcp", dspSessionCfg.ListenCfg().RPCJSONListen) // We connect over JSON so we can also troubleshoot if needed
if err != nil {
t.Fatal(err)
}
attrEngine.stopEngine(t)
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspSessionPing(t *testing.T) {
var reply string
if err := instSessionRPC.Call(utils.SessionSv1Ping, "", &reply); err != nil {
if err := allEngine.RCP.Call(utils.SessionSv1Ping, &utils.CGREvent{}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
if err := dspSessionRPC.Call(utils.SessionSv1Ping, "", &reply); err != nil {
if err := dispEngine.RCP.Call(utils.SessionSv1Ping, &CGREvWithApiKey{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
}
func testDspSessionLoadData(t *testing.T) {
func testDspSessionPingFailover(t *testing.T) {
var reply string
attrs := &utils.AttrLoadTpFromFolder{
FolderPath: path.Join(dspDataDir, "tariffplans", "testit")}
if err := instSessionRPC.Call("ApierV1.LoadTariffPlanFromFolder", attrs, &reply); err != nil {
if err := allEngine.RCP.Call(utils.SessionSv1Ping, &utils.CGREvent{}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
time.Sleep(500 * time.Millisecond)
}
func testDspSessionAddAttributesWithPermision(t *testing.T) {
alsPrf := &engine.AttributeProfile{
Tenant: "cgrates.org",
ID: "AuthKey",
Contexts: []string{utils.MetaAuth},
FilterIDs: []string{"*string:APIKey:12345"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC),
ev := CGREvWithApiKey{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
Attributes: []*engine.Attribute{
{
FieldName: utils.APIMethods,
Initial: utils.META_ANY,
Substitute: config.NewRSRParsersMustCompile("ThresholdSv1.GetThSessionholdsForEvent", true, utils.INFIELD_SEP),
Append: true,
},
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
Weight: 20,
}
var result string
if err := instSessionRPC.Call("ApierV1.SetAttributeProfile", alsPrf, &result); err != nil {
if err := dispEngine.RCP.Call(utils.SessionSv1Ping, &ev, &reply); err != nil {
t.Error(err)
} else if result != utils.OK {
t.Error("Unexpected reply returned", result)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
alsPrf.Compile()
var reply *engine.AttributeProfile
if err := instSessionRPC.Call("ApierV1.GetAttributeProfile",
&utils.TenantID{Tenant: "cgrates.org", ID: "AuthKey"}, &reply); err != nil {
allEngine.stopEngine(t)
if err := dispEngine.RCP.Call(utils.SessionSv1Ping, &ev, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
t.Errorf("Received: %s", reply)
}
reply.Compile()
if !reflect.DeepEqual(alsPrf, reply) {
t.Errorf("Expecting : %+v, received: %+v", alsPrf, reply)
allEngine2.stopEngine(t)
if err := dispEngine.RCP.Call(utils.SessionSv1Ping, &ev, &reply); err == nil {
t.Errorf("Expected error but recived %v and reply %v\n", err, reply)
}
allEngine.startEngine(t)
allEngine2.startEngine(t)
}
func testDspSessionTestAuthKey(t *testing.T) {
authUsage := 5 * time.Minute
args := AuthorizeArgsWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
V1AuthorizeArgs: sessions.V1AuthorizeArgs{
GetMaxUsage: true,
AuthorizeResources: true,
@@ -213,53 +151,18 @@ func testDspSessionTestAuthKey(t *testing.T) {
},
}
var rply sessions.V1AuthorizeReplyWithDigest
if err := dspSessionRPC.Call(utils.SessionSv1AuthorizeEventWithDigest,
if err := dispEngine.RCP.Call(utils.SessionSv1AuthorizeEventWithDigest,
args, &rply); err == nil || err.Error() != utils.ErrUnauthorizedApi.Error() {
t.Error(err)
}
}
func testDspSessionAddAttributesWithPermision2(t *testing.T) {
alsPrf := &engine.AttributeProfile{
Tenant: "cgrates.org",
ID: "AuthKey",
Contexts: []string{utils.MetaAuth},
FilterIDs: []string{"*string:APIKey:12345"},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 35, 0, 0, time.UTC),
},
Attributes: []*engine.Attribute{
{
FieldName: utils.APIMethods,
Initial: utils.META_ANY,
Substitute: config.NewRSRParsersMustCompile("SessionSv1.AuthorizeEventWithDigest&SessionSv1.InitiateSessionWithDigest&SessionSv1.UpdateSession&SessionSv1.TerminateSession&SessionSv1.ProcessCDR&SessionSv1.ProcessEvent", true, utils.INFIELD_SEP),
Append: true,
},
},
Weight: 20,
}
var result string
if err := instSessionRPC.Call("ApierV1.SetAttributeProfile", alsPrf, &result); err != nil {
t.Error(err)
} else if result != utils.OK {
t.Error("Unexpected reply returned", result)
}
alsPrf.Compile()
var reply *engine.AttributeProfile
if err := instSessionRPC.Call("ApierV1.GetAttributeProfile",
&utils.TenantID{Tenant: "cgrates.org", ID: "AuthKey"}, &reply); err != nil {
t.Error(err)
}
reply.Compile()
if !reflect.DeepEqual(alsPrf, reply) {
t.Errorf("Expecting : %+v, received: %+v", alsPrf, reply)
}
}
func testDspSessionAuthorize(t *testing.T) {
authUsage := 5 * time.Minute
argsAuth := &AuthorizeArgsWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
V1AuthorizeArgs: sessions.V1AuthorizeArgs{
GetMaxUsage: true,
AuthorizeResources: true,
@@ -283,30 +186,36 @@ func testDspSessionAuthorize(t *testing.T) {
},
}
var rply sessions.V1AuthorizeReplyWithDigest
if err := dspSessionRPC.Call(utils.SessionSv1AuthorizeEventWithDigest,
if err := dispEngine.RCP.Call(utils.SessionSv1AuthorizeEventWithDigest,
argsAuth, &rply); err != nil {
t.Error(err)
return
}
if *rply.MaxUsage != authUsage.Seconds() {
t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
t.Errorf("Unexpected MaxUsage: %v", *rply.MaxUsage)
}
if *rply.ResourceAllocation == "" {
t.Errorf("Unexpected ResourceAllocation: %s", *rply.ResourceAllocation)
}
eSplrs := utils.StringPointer("supplier1,supplier2")
if *eSplrs != *rply.SuppliersDigest {
t.Errorf("expecting: %v, received: %v", *eSplrs, *rply.SuppliersDigest)
eSplrs := "supplier1,supplier2"
tp := strings.Split(*rply.SuppliersDigest, ",")
sort.Strings(tp)
*rply.SuppliersDigest = strings.Join(tp, ",")
if eSplrs != *rply.SuppliersDigest {
t.Errorf("expecting: %v, received: %v", eSplrs, *rply.SuppliersDigest)
}
eAttrs := utils.StringPointer("OfficeGroup:Marketing")
if *eAttrs != *rply.AttributesDigest {
t.Errorf("expecting: %v, received: %v", *eAttrs, *rply.AttributesDigest)
eAttrs := "OfficeGroup:Marketing"
if eAttrs != *rply.AttributesDigest {
t.Errorf("expecting: %v, received: %v", eAttrs, *rply.AttributesDigest)
}
}
func testDspSessionInit(t *testing.T) {
initUsage := time.Duration(5 * time.Minute)
argsInit := &InitArgsWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
V1InitSessionArgs: sessions.V1InitSessionArgs{
InitSession: true,
AllocateResources: true,
@@ -330,12 +239,12 @@ func testDspSessionInit(t *testing.T) {
},
}
var rply sessions.V1InitReplyWithDigest
if err := dspSessionRPC.Call(utils.SessionSv1InitiateSessionWithDigest,
if err := dispEngine.RCP.Call(utils.SessionSv1InitiateSessionWithDigest,
argsInit, &rply); err != nil {
t.Error(err)
t.Fatal(err)
}
if *rply.MaxUsage != initUsage.Seconds() {
t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
t.Errorf("Unexpected MaxUsage: %v", *rply.MaxUsage)
}
if *rply.ResourceAllocation != "RES_ACNT_1001" {
t.Errorf("Unexpected ResourceAllocation: %s", *rply.ResourceAllocation)
@@ -345,7 +254,9 @@ func testDspSessionInit(t *testing.T) {
func testDspSessionUpdate(t *testing.T) {
reqUsage := 5 * time.Minute
argsUpdate := &UpdateSessionWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
V1UpdateSessionArgs: sessions.V1UpdateSessionArgs{
GetAttributes: true,
UpdateSession: true,
@@ -368,7 +279,7 @@ func testDspSessionUpdate(t *testing.T) {
},
}
var rply sessions.V1UpdateSessionReply
if err := dspSessionRPC.Call(utils.SessionSv1UpdateSession,
if err := dispEngine.RCP.Call(utils.SessionSv1UpdateSession,
argsUpdate, &rply); err != nil {
t.Error(err)
}
@@ -406,7 +317,9 @@ func testDspSessionUpdate(t *testing.T) {
func testDspSessionTerminate(t *testing.T) {
args := &TerminateSessionWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
V1TerminateSessionArgs: sessions.V1TerminateSessionArgs{
TerminateSession: true,
ReleaseResources: true,
@@ -429,7 +342,7 @@ func testDspSessionTerminate(t *testing.T) {
},
}
var rply string
if err := dspSessionRPC.Call(utils.SessionSv1TerminateSession,
if err := dispEngine.RCP.Call(utils.SessionSv1TerminateSession,
args, &rply); err != nil {
t.Error(err)
}
@@ -440,7 +353,9 @@ func testDspSessionTerminate(t *testing.T) {
func testDspSessionProcessCDR(t *testing.T) {
args := CGREvWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
ID: "TestSSv1ItProcessCDR",
@@ -460,9 +375,9 @@ func testDspSessionProcessCDR(t *testing.T) {
}
var rply string
if err := dspSessionRPC.Call(utils.SessionSv1ProcessCDR,
if err := dispEngine.RCP.Call(utils.SessionSv1ProcessCDR,
args, &rply); err != nil {
t.Error(err)
t.Fatal(err)
}
if rply != utils.OK {
t.Errorf("Unexpected reply: %s", rply)
@@ -471,8 +386,24 @@ func testDspSessionProcessCDR(t *testing.T) {
func testDspSessionProcessEvent(t *testing.T) {
initUsage := 5 * time.Minute
attrSetBalance := utils.AttrSetBalance{
Tenant: "cgrates.org",
Account: "1001",
BalanceType: utils.VOICE,
BalanceID: utils.StringPointer("TestDynamicDebitBalance"),
Value: utils.Float64Pointer(float64(initUsage)),
RatingSubject: utils.StringPointer("*zero5ms"),
}
var reply string
if err := allEngine.RCP.Call("ApierV2.SetBalance", attrSetBalance, &reply); err != nil {
t.Error(err)
} else if reply != utils.OK {
t.Errorf("Received: %s", reply)
}
args := ProcessEventWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "ses12345",
},
V1ProcessEventArgs: sessions.V1ProcessEventArgs{
AllocateResources: true,
Debit: true,
@@ -481,6 +412,7 @@ func testDspSessionProcessEvent(t *testing.T) {
Tenant: "cgrates.org",
ID: "TestSSv1ItProcessEvent",
Event: map[string]interface{}{
"CGRID": "c87609aa1cb6e9529ab1836cfeeeb0ab7aa7ebaf",
utils.Tenant: "cgrates.org",
utils.Category: "call",
utils.ToR: utils.VOICE,
@@ -496,9 +428,9 @@ func testDspSessionProcessEvent(t *testing.T) {
},
}
var rply sessions.V1ProcessEventReply
if err := dspSessionRPC.Call(utils.SessionSv1ProcessEvent,
if err := dispEngine.RCP.Call(utils.SessionSv1ProcessEvent,
args, &rply); err != nil {
t.Error(err)
t.Fatal(err)
}
if *rply.MaxUsage != initUsage {
t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
@@ -514,6 +446,7 @@ func testDspSessionProcessEvent(t *testing.T) {
ID: "TestSSv1ItProcessEvent",
Context: utils.StringPointer(utils.MetaSessionS),
Event: map[string]interface{}{
"CGRID": "c87609aa1cb6e9529ab1836cfeeeb0ab7aa7ebaf",
utils.Tenant: "cgrates.org",
utils.Category: "call",
utils.ToR: utils.VOICE,
@@ -533,12 +466,3 @@ func testDspSessionProcessEvent(t *testing.T) {
utils.ToJSON(eAttrs), utils.ToJSON(rply.Attributes))
}
}
func testDspSessionKillEngine(t *testing.T) {
if err := engine.KillEngine(dspDelay); err != nil {
t.Error(err)
}
if err := engine.KillEngine(dspDelay); err != nil {
t.Error(err)
}
}

View File

@@ -41,6 +41,7 @@ var sTestsDspSts = []func(t *testing.T){
//Test start here
func TestDspStatS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
@@ -56,6 +57,7 @@ func TestDspStatS(t *testing.T) {
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspStsPingFailover(t *testing.T) {
@@ -69,7 +71,9 @@ func testDspStsPingFailover(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
}
if err := dispEngine.RCP.Call(utils.StatSv1Ping, &ev, &reply); err != nil {
t.Error(err)
@@ -95,7 +99,9 @@ func testDspStsGetStatFailover(t *testing.T) {
var metrics map[string]string
expected := []string{"Stats1"}
args := ArgsStatProcessEventWithApiKey{
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
StatsArgsProcessEvent: engine.StatsArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -118,7 +124,9 @@ func testDspStsGetStatFailover(t *testing.T) {
}
args2 := TntIDWithApiKey{
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
TenantID: utils.TenantID{
Tenant: "cgrates.org",
ID: "Stats1",
@@ -151,7 +159,9 @@ func testDspStsPing(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
@@ -162,7 +172,9 @@ func testDspStsPing(t *testing.T) {
func testDspStsTestAuthKey(t *testing.T) {
var reply []string
args := ArgsStatProcessEventWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
StatsArgsProcessEvent: engine.StatsArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -180,7 +192,9 @@ func testDspStsTestAuthKey(t *testing.T) {
}
args2 := TntIDWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
TenantID: utils.TenantID{
Tenant: "cgrates.org",
ID: "Stats2",
@@ -199,7 +213,9 @@ func testDspStsTestAuthKey2(t *testing.T) {
var metrics map[string]string
expected := []string{"Stats2"}
args := ArgsStatProcessEventWithApiKey{
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
StatsArgsProcessEvent: engine.StatsArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -221,7 +237,9 @@ func testDspStsTestAuthKey2(t *testing.T) {
}
args2 := TntIDWithApiKey{
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
TenantID: utils.TenantID{
Tenant: "cgrates.org",
ID: "Stats2",
@@ -240,7 +258,9 @@ func testDspStsTestAuthKey2(t *testing.T) {
}
args = ArgsStatProcessEventWithApiKey{
APIKey: "stat12345",
DispatcherResource: DispatcherResource{
APIKey: "stat12345",
},
StatsArgsProcessEvent: engine.StatsArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",

View File

@@ -41,6 +41,7 @@ var sTestsDspSup = []func(t *testing.T){
//Test start here
func TestDspSupplierS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
@@ -56,6 +57,7 @@ func TestDspSupplierS(t *testing.T) {
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspSupPing(t *testing.T) {
@@ -69,7 +71,9 @@ func testDspSupPing(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "sup12345",
DispatcherResource: DispatcherResource{
APIKey: "sup12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
@@ -88,7 +92,9 @@ func testDspSupPingFailover(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "sup12345",
DispatcherResource: DispatcherResource{
APIKey: "sup12345",
},
}
if err := dispEngine.RCP.Call(utils.SupplierSv1Ping, &ev, &reply); err != nil {
t.Error(err)
@@ -149,7 +155,9 @@ func testDspSupGetSupFailover(t *testing.T) {
},
}
args := &ArgsGetSuppliersWithApiKey{
APIKey: "sup12345",
DispatcherResource: DispatcherResource{
APIKey: "sup12345",
},
ArgsGetSuppliers: engine.ArgsGetSuppliers{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -185,7 +193,9 @@ func testDspSupGetSupFailover(t *testing.T) {
func testDspSupTestAuthKey(t *testing.T) {
var rpl *engine.SortedSuppliers
args := &ArgsGetSuppliersWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
ArgsGetSuppliers: engine.ArgsGetSuppliers{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -234,7 +244,9 @@ func testDspSupTestAuthKey2(t *testing.T) {
},
}
args := &ArgsGetSuppliersWithApiKey{
APIKey: "sup12345",
DispatcherResource: DispatcherResource{
APIKey: "sup12345",
},
ArgsGetSuppliers: engine.ArgsGetSuppliers{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",

View File

@@ -41,6 +41,7 @@ var sTestsDspTh = []func(t *testing.T){
//Test start here
func TestDspThresholdS(t *testing.T) {
engine.KillEngine(0)
allEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all"), true, true)
allEngine2 = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "all2"), true, true)
attrEngine = newTestEngine(t, path.Join(dspDataDir, "conf", "samples", "dispatchers", "attributes"), true, true)
@@ -56,6 +57,7 @@ func TestDspThresholdS(t *testing.T) {
dispEngine.stopEngine(t)
allEngine.stopEngine(t)
allEngine2.stopEngine(t)
engine.KillEngine(0)
}
func testDspThPingFailover(t *testing.T) {
@@ -69,7 +71,9 @@ func testDspThPingFailover(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "thr12345",
DispatcherResource: DispatcherResource{
APIKey: "thr12345",
},
}
if err := dispEngine.RCP.Call(utils.ThresholdSv1Ping, &ev, &reply); err != nil {
t.Error(err)
@@ -95,7 +99,9 @@ func testDspThProcessEventFailover(t *testing.T) {
eIDs := []string{"THD_ACNT_1001"}
nowTime := time.Now()
args := &ArgsProcessEventWithApiKey{
APIKey: "thr12345",
DispatcherResource: DispatcherResource{
APIKey: "thr12345",
},
ArgsProcessEvent: engine.ArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -132,7 +138,9 @@ func testDspThPing(t *testing.T) {
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
},
APIKey: "thr12345",
DispatcherResource: DispatcherResource{
APIKey: "thr12345",
},
}, &reply); err != nil {
t.Error(err)
} else if reply != utils.Pong {
@@ -144,7 +152,9 @@ func testDspThTestAuthKey(t *testing.T) {
var ids []string
nowTime := time.Now()
args := &ArgsProcessEventWithApiKey{
APIKey: "12345",
DispatcherResource: DispatcherResource{
APIKey: "12345",
},
ArgsProcessEvent: engine.ArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",
@@ -172,7 +182,9 @@ func testDspThTestAuthKey2(t *testing.T) {
eIDs := []string{"THD_ACNT_1002"}
nowTime := time.Now()
args := &ArgsProcessEventWithApiKey{
APIKey: "thr12345",
DispatcherResource: DispatcherResource{
APIKey: "thr12345",
},
ArgsProcessEvent: engine.ArgsProcessEvent{
CGREvent: utils.CGREvent{
Tenant: "cgrates.org",

View File

@@ -143,7 +143,7 @@ func testTpDispITMove(t *testing.T) {
func testTpDispITCheckData(t *testing.T) {
result, err := tpDispMigrator.storDBOut.StorDB().GetTPDispatchers("TP1", "cgrates.org", "Dsp1")
if err != nil {
t.Error("Error when getting TpDispatchers ", err.Error())
t.Fatal("Error when getting TpDispatchers ", err.Error())
}
if !reflect.DeepEqual(tpDisps[0], result[0]) {
t.Errorf("Expecting: %+v, received: %+v",