Added new API SessionSv1.InitiateSessionWithDigest + test for it

This commit is contained in:
Anevo
2018-05-04 05:17:57 -04:00
committed by Dan Christian Bogos
parent 8b740ec440
commit 28e1d22de1
6 changed files with 140 additions and 54 deletions

View File

@@ -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)

View File

@@ -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{

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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

View File

@@ -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