mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Added new API SessionSv1.InitiateSessionWithDigest + test for it
This commit is contained in:
committed by
Dan Christian Bogos
parent
8b740ec440
commit
28e1d22de1
@@ -36,15 +36,16 @@ type SessionSv1 struct {
|
||||
// Publishes BiJSONRPC methods exported by SessionSv1
|
||||
func (ssv1 *SessionSv1) Handlers() map[string]interface{} {
|
||||
return map[string]interface{}{
|
||||
utils.SessionSv1AuthorizeEvent: ssv1.BiRpcAuthorizeEvent,
|
||||
utils.SessionSv1AuthorizeEventWithDigest: ssv1.BiRpcAuthorizeEventWithDigest,
|
||||
utils.SessionSv1InitiateSession: ssv1.BiRpcInitiateSession,
|
||||
utils.SessionSv1UpdateSession: ssv1.BiRpcUpdateSession,
|
||||
utils.SessionSv1TerminateSession: ssv1.BiRpcTerminateSession,
|
||||
utils.SessionSv1ProcessCDR: ssv1.BiRpcProcessCDR,
|
||||
utils.SessionSv1ProcessEvent: ssv1.BiRpcProcessEvent,
|
||||
utils.SessionSv1GetActiveSessions: ssv1.BiRPCV1GetActiveSessions,
|
||||
utils.SessionSv1GetPassiveSessions: ssv1.BiRPCV1GetPassiveSessions,
|
||||
utils.SessionSv1AuthorizeEvent: ssv1.BiRpcAuthorizeEvent,
|
||||
utils.SessionSv1AuthorizeEventWithDigest: ssv1.BiRpcAuthorizeEventWithDigest,
|
||||
utils.SessionSv1InitiateSession: ssv1.BiRpcInitiateSession,
|
||||
utils.SessionSv1InitiateSessionWithDigest: ssv1.BiRpcInitiateSessionWithDigest,
|
||||
utils.SessionSv1UpdateSession: ssv1.BiRpcUpdateSession,
|
||||
utils.SessionSv1TerminateSession: ssv1.BiRpcTerminateSession,
|
||||
utils.SessionSv1ProcessCDR: ssv1.BiRpcProcessCDR,
|
||||
utils.SessionSv1ProcessEvent: ssv1.BiRpcProcessEvent,
|
||||
utils.SessionSv1GetActiveSessions: ssv1.BiRPCV1GetActiveSessions,
|
||||
utils.SessionSv1GetPassiveSessions: ssv1.BiRPCV1GetPassiveSessions,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +64,11 @@ func (ssv1 *SessionSv1) InitiateSession(args *sessions.V1InitSessionArgs,
|
||||
return ssv1.SMG.BiRPCv1InitiateSession(nil, args, rply)
|
||||
}
|
||||
|
||||
func (ssv1 *SessionSv1) InitiateSessionWithDigest(args *sessions.V1InitSessionArgs,
|
||||
rply *sessions.V1InitReplyWithDigest) error {
|
||||
return ssv1.SMG.BiRPCv1InitiateSessionWithDigest(nil, args, rply)
|
||||
}
|
||||
|
||||
func (ssv1 *SessionSv1) UpdateSession(args *sessions.V1UpdateSessionArgs,
|
||||
rply *sessions.V1UpdateSessionReply) error {
|
||||
return ssv1.SMG.BiRPCv1UpdateSession(nil, args, rply)
|
||||
@@ -105,6 +111,11 @@ func (ssv1 *SessionSv1) BiRpcInitiateSession(clnt *rpc2.Client, args *sessions.V
|
||||
return ssv1.SMG.BiRPCv1InitiateSession(clnt, args, rply)
|
||||
}
|
||||
|
||||
func (ssv1 *SessionSv1) BiRpcInitiateSessionWithDigest(clnt *rpc2.Client, args *sessions.V1InitSessionArgs,
|
||||
rply *sessions.V1InitReplyWithDigest) error {
|
||||
return ssv1.SMG.BiRPCv1InitiateSessionWithDigest(clnt, args, rply)
|
||||
}
|
||||
|
||||
func (ssv1 *SessionSv1) BiRpcUpdateSession(clnt *rpc2.Client, args *sessions.V1UpdateSessionArgs,
|
||||
rply *sessions.V1UpdateSessionReply) error {
|
||||
return ssv1.SMG.BiRPCv1UpdateSession(clnt, args, rply)
|
||||
|
||||
@@ -282,6 +282,44 @@ func TestSSv1ItInitiateSession(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSSv1ItInitiateSessionWithDigest(t *testing.T) {
|
||||
initUsage := time.Duration(5 * time.Minute)
|
||||
args := &sessions.V1InitSessionArgs{
|
||||
InitSession: true,
|
||||
AllocateResources: true,
|
||||
GetAttributes: true,
|
||||
CGREvent: utils.CGREvent{
|
||||
Tenant: "cgrates.org",
|
||||
ID: "TestSSv1ItInitiateSession",
|
||||
Event: map[string]interface{}{
|
||||
utils.OriginID: "TestSSv1It1",
|
||||
utils.RequestType: utils.META_PREPAID,
|
||||
utils.Account: "1001",
|
||||
utils.Destination: "1002",
|
||||
utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC),
|
||||
utils.AnswerTime: time.Date(2018, time.January, 7, 16, 60, 10, 0, time.UTC),
|
||||
utils.Usage: initUsage,
|
||||
},
|
||||
},
|
||||
}
|
||||
var rply sessions.V1InitReplyWithDigest
|
||||
if err := sSv1BiRpc.Call(utils.SessionSv1InitiateSessionWithDigest,
|
||||
args, &rply); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if *rply.MaxUsage != initUsage.Seconds() {
|
||||
t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage)
|
||||
}
|
||||
if *rply.ResourceAllocation != "RES_ACNT_1001" {
|
||||
t.Errorf("Unexpected ResourceAllocation: %s", *rply.ResourceAllocation)
|
||||
}
|
||||
eAttrs := utils.StringPointer("OfficeGroup:Marketing")
|
||||
if !reflect.DeepEqual(eAttrs, rply.AttributesDigest) {
|
||||
t.Errorf("expecting: %+v, received: %+v",
|
||||
utils.ToJSON(eAttrs), utils.ToJSON(rply.AttributesDigest))
|
||||
}
|
||||
}
|
||||
|
||||
func TestSSv1ItUpdateSession(t *testing.T) {
|
||||
reqUsage := 5 * time.Minute
|
||||
args := &sessions.V1UpdateSessionArgs{
|
||||
|
||||
@@ -107,67 +107,67 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
ldrCfg := config.CgrConfig()
|
||||
mgrCfg := config.CgrConfig()
|
||||
|
||||
if *inDataDBType != dfltCfg.DataDbType {
|
||||
ldrCfg.DataDbType = *inDataDBType
|
||||
mgrCfg.DataDbType = *inDataDBType
|
||||
}
|
||||
|
||||
if *inDataDBHost != dfltCfg.DataDbHost {
|
||||
ldrCfg.DataDbHost = *inDataDBHost
|
||||
mgrCfg.DataDbHost = *inDataDBHost
|
||||
}
|
||||
|
||||
if *inDataDBPort != dfltCfg.DataDbPort {
|
||||
ldrCfg.DataDbPort = *inDataDBPort
|
||||
mgrCfg.DataDbPort = *inDataDBPort
|
||||
}
|
||||
|
||||
if *inDataDBName != dfltCfg.DataDbName {
|
||||
ldrCfg.DataDbName = *inDataDBName
|
||||
mgrCfg.DataDbName = *inDataDBName
|
||||
}
|
||||
|
||||
if *inDataDBUser != dfltCfg.DataDbUser {
|
||||
ldrCfg.DataDbUser = *inDataDBUser
|
||||
mgrCfg.DataDbUser = *inDataDBUser
|
||||
}
|
||||
|
||||
if *inDataDBPass != dfltCfg.DataDbPass {
|
||||
ldrCfg.DataDbPass = *inDataDBPass
|
||||
mgrCfg.DataDbPass = *inDataDBPass
|
||||
}
|
||||
|
||||
if *inStorDBType != dfltCfg.StorDBType {
|
||||
ldrCfg.StorDBType = *inStorDBType
|
||||
mgrCfg.StorDBType = *inStorDBType
|
||||
}
|
||||
|
||||
if *inStorDBHost != dfltCfg.StorDBHost {
|
||||
ldrCfg.StorDBHost = *inStorDBHost
|
||||
mgrCfg.StorDBHost = *inStorDBHost
|
||||
}
|
||||
|
||||
if *inStorDBPort != dfltCfg.StorDBPort {
|
||||
ldrCfg.StorDBPort = *inStorDBPort
|
||||
mgrCfg.StorDBPort = *inStorDBPort
|
||||
}
|
||||
|
||||
if *inStorDBName != dfltCfg.StorDBName {
|
||||
ldrCfg.StorDBName = *inStorDBName
|
||||
mgrCfg.StorDBName = *inStorDBName
|
||||
}
|
||||
|
||||
if *inStorDBUser != dfltCfg.StorDBUser {
|
||||
ldrCfg.StorDBUser = *inStorDBUser
|
||||
mgrCfg.StorDBUser = *inStorDBUser
|
||||
}
|
||||
|
||||
if *inStorDBPass != "" {
|
||||
ldrCfg.StorDBPass = *inStorDBPass
|
||||
mgrCfg.StorDBPass = *inStorDBPass
|
||||
}
|
||||
|
||||
if *inDBDataEncoding != "" {
|
||||
ldrCfg.DBDataEncoding = *inDBDataEncoding
|
||||
mgrCfg.DBDataEncoding = *inDBDataEncoding
|
||||
}
|
||||
|
||||
if *outDataDBType == utils.MetaDynamic {
|
||||
*outDataDBType = ldrCfg.DataDbType
|
||||
*outDataDBHost = ldrCfg.DataDbHost
|
||||
*outDataDBPort = ldrCfg.DataDbPort
|
||||
*outDataDBName = ldrCfg.DataDbName
|
||||
*outDataDBUser = ldrCfg.DataDbUser
|
||||
*outDataDBPass = ldrCfg.DataDbPass
|
||||
*outDataDBType = mgrCfg.DataDbType
|
||||
*outDataDBHost = mgrCfg.DataDbHost
|
||||
*outDataDBPort = mgrCfg.DataDbPort
|
||||
*outDataDBName = mgrCfg.DataDbName
|
||||
*outDataDBUser = mgrCfg.DataDbUser
|
||||
*outDataDBPass = mgrCfg.DataDbPass
|
||||
} else {
|
||||
*outDataDBType = strings.TrimPrefix(*outDataDBType, "*")
|
||||
*outDataDBHost = config.DBDefaults.DBHost(*outDataDBType, *outDataDBHost)
|
||||
@@ -186,25 +186,25 @@ func main() {
|
||||
*outStorDBPass = config.DBDefaults.DBPass(*outStorDBType, *outStorDBPass)
|
||||
}
|
||||
|
||||
if dmIN, err = engine.ConfigureDataStorage(ldrCfg.DataDbType, ldrCfg.DataDbHost, ldrCfg.DataDbPort,
|
||||
ldrCfg.DataDbName, ldrCfg.DataDbUser, ldrCfg.DataDbPass, ldrCfg.DBDataEncoding,
|
||||
if dmIN, err = engine.ConfigureDataStorage(mgrCfg.DataDbType, mgrCfg.DataDbHost, mgrCfg.DataDbPort,
|
||||
mgrCfg.DataDbName, mgrCfg.DataDbUser, mgrCfg.DataDbPass, mgrCfg.DBDataEncoding,
|
||||
config.CgrConfig().CacheCfg(), 0); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if instorDB, err = engine.ConfigureStorDB(ldrCfg.StorDBType, ldrCfg.StorDBHost, ldrCfg.StorDBPort,
|
||||
ldrCfg.StorDBName, ldrCfg.StorDBUser, ldrCfg.StorDBPass,
|
||||
if instorDB, err = engine.ConfigureStorDB(mgrCfg.StorDBType, mgrCfg.StorDBHost, mgrCfg.StorDBPort,
|
||||
mgrCfg.StorDBName, mgrCfg.StorDBUser, mgrCfg.StorDBPass,
|
||||
config.CgrConfig().StorDBMaxOpenConns,
|
||||
config.CgrConfig().StorDBMaxIdleConns, config.CgrConfig().StorDBConnMaxLifetime,
|
||||
config.CgrConfig().StorDBCDRSIndexes); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if dmOUT, err = engine.ConfigureDataStorage(*outDataDBType, *outDataDBHost, *outDataDBPort,
|
||||
*outDataDBName, *outDataDBUser, *outDataDBPass, ldrCfg.DBDataEncoding,
|
||||
*outDataDBName, *outDataDBUser, *outDataDBPass, mgrCfg.DBDataEncoding,
|
||||
config.CgrConfig().CacheCfg(), 0); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if outDataDB, err = migrator.ConfigureV1DataStorage(*outDataDBType, *outDataDBHost, *outDataDBPort,
|
||||
*outDataDBName, *outDataDBUser, *outDataDBPass, ldrCfg.DBDataEncoding); err != nil {
|
||||
*outDataDBName, *outDataDBUser, *outDataDBPass, mgrCfg.DBDataEncoding); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -217,14 +217,14 @@ func main() {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
if ldrCfg.DataDbName != *outDataDBName || ldrCfg.DataDbType != *outDataDBType || ldrCfg.DataDbHost != *outDataDBHost {
|
||||
if mgrCfg.DataDbName != *outDataDBName || mgrCfg.DataDbType != *outDataDBType || mgrCfg.DataDbHost != *outDataDBHost {
|
||||
sameDataDB = false
|
||||
}
|
||||
if ldrCfg.StorDBName != *outStorDBName || ldrCfg.StorDBType != *outStorDBName || ldrCfg.StorDBHost != *outStorDBHost {
|
||||
if mgrCfg.StorDBName != *outStorDBName || mgrCfg.StorDBType != *outStorDBName || mgrCfg.StorDBHost != *outStorDBHost {
|
||||
sameStorDB = false
|
||||
}
|
||||
m, err := migrator.NewMigrator(dmIN, dmOUT, ldrCfg.DataDbType, ldrCfg.DBDataEncoding, storDB, ldrCfg.StorDBType, outDataDB,
|
||||
*outDataDBType, ldrCfg.DBDataEncoding, instorDB, *outStorDBType, *dryRun, sameDataDB, sameStorDB, *datadb_versions, *stordb_versions)
|
||||
m, err := migrator.NewMigrator(dmIN, dmOUT, mgrCfg.DataDbType, mgrCfg.DBDataEncoding, storDB, mgrCfg.StorDBType, outDataDB,
|
||||
*outDataDBType, mgrCfg.DBDataEncoding, instorDB, *outStorDBType, *dryRun, sameDataDB, sameStorDB, *datadb_versions, *stordb_versions)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ import (
|
||||
func init() {
|
||||
c := &CmdSessionsInitiate{
|
||||
name: "session_initiate",
|
||||
rpcMethod: utils.SessionSv1InitiateSession,
|
||||
rpcMethod: utils.SessionSv1InitiateSessionWithDigest,
|
||||
rpcParams: &sessions.V1InitSessionArgs{},
|
||||
}
|
||||
commands[c.Name()] = c
|
||||
|
||||
@@ -1643,6 +1643,42 @@ func (smg *SMGeneric) BiRPCv1InitiateSession(clnt rpcclient.RpcClientConnection,
|
||||
return
|
||||
}
|
||||
|
||||
type V1InitReplyWithDigest struct {
|
||||
AttributesDigest *string
|
||||
ResourceAllocation *string
|
||||
MaxUsage *float64
|
||||
//ThresholdsHits *int
|
||||
}
|
||||
|
||||
func (smg *SMGeneric) BiRPCv1InitiateSessionWithDigest(clnt rpcclient.RpcClientConnection,
|
||||
args *V1InitSessionArgs, initReply *V1InitReplyWithDigest) (err error) {
|
||||
if !args.GetAttributes && !args.AllocateResources &&
|
||||
!args.InitSession {
|
||||
return utils.NewErrMandatoryIeMissing("subsystems")
|
||||
}
|
||||
var initSessionRply V1InitSessionReply
|
||||
if err = smg.BiRPCv1InitiateSession(clnt, args, &initSessionRply); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if args.GetAttributes && initSessionRply.Attributes != nil {
|
||||
initReply.AttributesDigest = utils.StringPointer(initSessionRply.Attributes.Digest())
|
||||
}
|
||||
|
||||
if args.AllocateResources {
|
||||
initReply.ResourceAllocation = initSessionRply.ResourceAllocation
|
||||
}
|
||||
|
||||
if args.InitSession {
|
||||
initReply.MaxUsage = utils.Float64Pointer(-1.0)
|
||||
if *initSessionRply.MaxUsage != time.Duration(-1) {
|
||||
initReply.MaxUsage = utils.Float64Pointer(initSessionRply.MaxUsage.Seconds())
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type V1UpdateSessionArgs struct {
|
||||
GetAttributes bool
|
||||
UpdateSession bool
|
||||
|
||||
@@ -667,20 +667,21 @@ const (
|
||||
|
||||
// SessionS APIs
|
||||
const (
|
||||
SessionSv1AuthorizeEvent = "SessionSv1.AuthorizeEvent"
|
||||
SessionSv1AuthorizeEventWithDigest = "SessionSv1.AuthorizeEventWithDigest"
|
||||
SessionSv1InitiateSession = "SessionSv1.InitiateSession"
|
||||
SessionSv1UpdateSession = "SessionSv1.UpdateSession"
|
||||
SessionSv1TerminateSession = "SessionSv1.TerminateSession"
|
||||
SessionSv1ProcessCDR = "SessionSv1.ProcessCDR"
|
||||
SessionSv1ProcessEvent = "SessionSv1.ProcessEvent"
|
||||
SessionSv1DisconnectSession = "SessionSv1.DisconnectSession"
|
||||
SessionSv1GetActiveSessions = "SessionSv1.GetActiveSessions"
|
||||
SessionSv1GetPassiveSessions = "SessionSv1.GetPassiveSessions"
|
||||
SMGenericV1InitiateSession = "SMGenericV1.InitiateSession"
|
||||
SMGenericV2InitiateSession = "SMGenericV2.InitiateSession"
|
||||
SMGenericV2UpdateSession = "SMGenericV2.UpdateSession"
|
||||
SessionSv1Ping = "SessionSv1.Ping"
|
||||
SessionSv1AuthorizeEvent = "SessionSv1.AuthorizeEvent"
|
||||
SessionSv1AuthorizeEventWithDigest = "SessionSv1.AuthorizeEventWithDigest"
|
||||
SessionSv1InitiateSession = "SessionSv1.InitiateSession"
|
||||
SessionSv1InitiateSessionWithDigest = "SessionSv1.InitiateSessionWithDigest"
|
||||
SessionSv1UpdateSession = "SessionSv1.UpdateSession"
|
||||
SessionSv1TerminateSession = "SessionSv1.TerminateSession"
|
||||
SessionSv1ProcessCDR = "SessionSv1.ProcessCDR"
|
||||
SessionSv1ProcessEvent = "SessionSv1.ProcessEvent"
|
||||
SessionSv1DisconnectSession = "SessionSv1.DisconnectSession"
|
||||
SessionSv1GetActiveSessions = "SessionSv1.GetActiveSessions"
|
||||
SessionSv1GetPassiveSessions = "SessionSv1.GetPassiveSessions"
|
||||
SMGenericV1InitiateSession = "SMGenericV1.InitiateSession"
|
||||
SMGenericV2InitiateSession = "SMGenericV2.InitiateSession"
|
||||
SMGenericV2UpdateSession = "SMGenericV2.UpdateSession"
|
||||
SessionSv1Ping = "SessionSv1.Ping"
|
||||
)
|
||||
|
||||
// DispatcherS APIs
|
||||
|
||||
Reference in New Issue
Block a user