Skip to content

Commit

Permalink
Better error returning in case of missing charger for a session
Browse files Browse the repository at this point in the history
  • Loading branch information
TeoV authored and danbogos committed Apr 7, 2020
1 parent 164c444 commit 87f539f
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 16 deletions.
57 changes: 57 additions & 0 deletions apier/v1/sessionsv1_it_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ var (
testSSv1ItForceUpdateSession,
testSSv1ItDynamicDebit,
testSSv1ItDeactivateSessions,
testSSv1ItAuthNotFoundCharger,
testSSv1ItInitiateSessionNotFoundCharger,

testSSv1ItInitiateSessionWithDigest, // no need for session terminate because is the last test

Expand Down Expand Up @@ -1041,6 +1043,61 @@ func testSSv1ItDeactivateSessions(t *testing.T) {
}
}

func testSSv1ItAuthNotFoundCharger(t *testing.T) {
authUsage := 5 * time.Minute
args := &sessions.V1AuthorizeArgs{
GetMaxUsage: true,
CGREvent: &utils.CGREvent{
Tenant: "Unexist",
ID: "testSSv1ItAuthNotFoundCharger",
Event: map[string]interface{}{
utils.Tenant: "Unexist",
utils.ToR: utils.VOICE,
utils.OriginID: "testSSv1ItAuthNotFoundCharger",
utils.RequestType: sSV1RequestType,
utils.Account: "1001",
utils.Subject: "ANY2CNT",
utils.Destination: "1002",
utils.SetupTime: time.Date(2018, time.January, 7, 16, 60, 0, 0, time.UTC),
utils.Usage: authUsage,
},
},
}
var rply sessions.V1AuthorizeReply
if err := sSv1BiRpc.Call(utils.SessionSv1AuthorizeEvent, args,
&rply); err == nil || err.Error() != utils.NewErrChargerS(utils.ErrNotFound).Error() {
t.Errorf("Expecting: %+v, received: %+v", utils.NewErrChargerS(utils.ErrNotFound), err)
}
}

func testSSv1ItInitiateSessionNotFoundCharger(t *testing.T) {
initUsage := 5 * time.Minute
args := &sessions.V1InitSessionArgs{
InitSession: true,
CGREvent: &utils.CGREvent{
Tenant: "Unexist",
ID: "testSSv1ItInitiateSessionNotFoundCharger",
Event: map[string]interface{}{
utils.Tenant: "Unexist",
utils.ToR: utils.VOICE,
utils.OriginID: "testSSv1ItInitiateSessionNotFoundCharger",
utils.RequestType: sSV1RequestType,
utils.Account: "1001",
utils.Subject: "ANY2CNT",
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.V1InitSessionReply
if err := sSv1BiRpc.Call(utils.SessionSv1InitiateSession,
args, &rply); err == nil || err.Error() != utils.NewErrChargerS(utils.ErrNotFound).Error() {
t.Errorf("Expecting: %+v, received: %+v", utils.NewErrChargerS(utils.ErrNotFound), err)
}
}

func testSSv1ItStopCgrEngine(t *testing.T) {
if err := sSv1BiRpc.Close(); err != nil { // Close the connection so we don't get EOF warnings from client
t.Error(err)
Expand Down
31 changes: 15 additions & 16 deletions sessions/sessions.go
Original file line number Diff line number Diff line change
Expand Up @@ -1028,10 +1028,7 @@ func (sS *SessionS) forkSession(s *Session) (err error) {
var chrgrs []*engine.ChrgSProcessEventReply
if err = sS.connMgr.Call(sS.cgrCfg.SessionSCfg().ChargerSConns, nil,
utils.ChargerSv1ProcessEvent, cgrEv, &chrgrs); err != nil {
if err.Error() == utils.ErrNotFound.Error() {
return utils.ErrNoActiveSession
}
return
return utils.NewErrChargerS(err)
}
s.SRuns = make([]*SRun, len(chrgrs))
for i, chrgr := range chrgrs {
Expand Down Expand Up @@ -1303,6 +1300,7 @@ func (sS *SessionS) authEvent(tnt string, evStart engine.MapEvent) (maxUsage tim
utils.ResponderGetMaxSessionTime,
&engine.CallDescriptorWithArgDispatcher{CallDescriptor: sr.CD,
ArgDispatcher: s.ArgDispatcher}, &rplyMaxUsage); err != nil {
err = utils.NewErrRALs(err)
return
}
if rplyMaxUsage > eventUsage {
Expand Down Expand Up @@ -1491,8 +1489,9 @@ func (sS *SessionS) chargeEvent(tnt string, ev engine.MapEvent,
utils.DurationPointer(time.Duration(0)), nil, nil, true); errEnd != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s> error when force-ending charged event: <%s>, err: <%s>",
utils.SessionS, cgrID, err.Error()))
utils.SessionS, cgrID, errEnd.Error()))
}
err = utils.NewErrRALs(err)
return
}
usage := maxUsage
Expand All @@ -1503,7 +1502,7 @@ func (sS *SessionS) chargeEvent(tnt string, ev engine.MapEvent,
if errEnd := sS.terminateSession(s, utils.DurationPointer(usage), nil, nil, true); errEnd != nil {
utils.Logger.Warning(
fmt.Sprintf("<%s> error when ending charged event: <%s>, err: <%s>",
utils.SessionS, cgrID, err.Error()))
utils.SessionS, cgrID, errEnd.Error()))
}
return // returns here the maxUsage from update
}
Expand Down Expand Up @@ -1832,7 +1831,7 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.ClientConnector,
if args.GetMaxUsage {
if authReply.MaxUsage, err = sS.authEvent(args.CGREvent.Tenant,
args.CGREvent.Event); err != nil {
return utils.NewErrRALs(err)
return err
}
}
if args.AuthorizeResources {
Expand Down Expand Up @@ -2131,7 +2130,7 @@ func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.ClientConnector,
s, err := sS.initSession(args.CGREvent.Tenant, ev,
sS.biJClntID(clnt), originID, dbtItvl, args.ArgDispatcher, false)
if err != nil {
return utils.NewErrRALs(err)
return err
}
if s.debitStop != nil { //active debit
rply.MaxUsage = sS.cgrCfg.SessionSCfg().MaxCallDuration
Expand Down Expand Up @@ -2339,7 +2338,7 @@ func (sS *SessionS) BiRPCv1UpdateSession(clnt rpcclient.ClientConnector,
ev, sS.biJClntID(clnt),
ev.GetStringIgnoreErrors(utils.OriginID),
dbtItvl, args.ArgDispatcher, false); err != nil {
return utils.NewErrRALs(err)
return err
}
}
if rply.MaxUsage, err = sS.updateSession(s, ev.Clone(), false); err != nil {
Expand Down Expand Up @@ -2472,7 +2471,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.ClientConnector,
ev, sS.biJClntID(clnt),
ev.GetStringIgnoreErrors(utils.OriginID), dbtItvl,
args.ArgDispatcher, false); err != nil {
return utils.NewErrRALs(err)
return err
}

}
Expand Down Expand Up @@ -2835,7 +2834,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(clnt rpcclient.ClientConnector,
var maxUsage time.Duration
if maxUsage, err = sS.chargeEvent(args.CGREvent.Tenant,
engine.MapEvent(args.CGREvent.Event), args.ArgDispatcher); err != nil {
return utils.NewErrRALs(err)
return err
}
rply.MaxUsage = maxUsage
}
Expand Down Expand Up @@ -3041,20 +3040,20 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
maxUsage, err := sS.authEvent(args.CGREvent.Tenant,
engine.MapEvent(args.CGREvent.Event))
if err != nil {
return utils.NewErrRALs(err)
return err
}
rply.MaxUsage = maxUsage
// check for init session
case ralsFlagsWithParams.HasKey(utils.MetaInitiate):
if ev.HasField(utils.CGRDebitInterval) { // dynamic DebitInterval via CGRDebitInterval
if dbtItvl, err = ev.GetDuration(utils.CGRDebitInterval); err != nil {
return utils.NewErrRALs(err)
return err
}
}
s, err := sS.initSession(args.CGREvent.Tenant, ev,
sS.biJClntID(clnt), originID, dbtItvl, args.ArgDispatcher, false)
if err != nil {
return utils.NewErrRALs(err)
return err
}
if s.debitStop != nil { //active debit
rply.MaxUsage = sS.cgrCfg.SessionSCfg().MaxCallDuration
Expand Down Expand Up @@ -3082,7 +3081,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
if s, err = sS.initSession(args.CGREvent.Tenant,
ev, sS.biJClntID(clnt),
ev.GetStringIgnoreErrors(utils.OriginID), dbtItvl, args.ArgDispatcher, false); err != nil {
return utils.NewErrRALs(err)
return err
}
}
var maxUsage time.Duration
Expand All @@ -3107,7 +3106,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector,
ev, sS.biJClntID(clnt),
ev.GetStringIgnoreErrors(utils.OriginID), dbtItvl,
args.ArgDispatcher, false); err != nil {
return utils.NewErrRALs(err)
return err
}
}
if err = sS.terminateSession(s,
Expand Down
4 changes: 4 additions & 0 deletions utils/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ func NewErrAttributeS(err error) error {
return fmt.Errorf("ATTRIBUTES_ERROR:%s", err)
}

func NewErrChargerS(err error) error {
return fmt.Errorf("CHARGERS_ERROR:%s", err)
}

func NewErrDispatcherS(err error) error {
return fmt.Errorf("%s:%s", DispatcherErrorPrefix, err.Error())
}
Expand Down

0 comments on commit 87f539f

Please sign in to comment.