From 1b85072a3edc767443b1f643119ef6c63cb53415 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 29 Nov 2019 14:39:04 +0200 Subject: [PATCH] Updated ProcessMessage reply --- agents/diamagent.go | 5 +++-- agents/diamagent_test.go | 2 +- agents/dnsagent.go | 5 +++-- agents/httpagent.go | 5 +++-- agents/kamevent.go | 6 +----- agents/kamevent_test.go | 2 +- agents/radagent.go | 5 +++-- apier/v1/sessionsv1_it_test.go | 4 ++-- dispatchers/sessions_it_test.go | 4 ++-- ers/ers.go | 4 ++-- general_tests/rpccaching_it_test.go | 2 +- general_tests/session3_it_test.go | 2 +- sessions/sessions.go | 17 +++++++++++++---- sessions/sessions_test.go | 5 +++-- 14 files changed, 39 insertions(+), 29 deletions(-) diff --git a/agents/diamagent.go b/agents/diamagent.go index 9434968fa..638a89ca8 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -369,9 +369,10 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, msgArgs, rply) if utils.ErrHasPrefix(err, utils.RalsErrorPrfx) { cgrEv.Event[utils.Usage] = 0 // avoid further debits - } else if rply.MaxUsage != nil { - cgrEv.Event[utils.Usage] = *rply.MaxUsage // make sure the CDR reflects the debit + } else if msgArgs.Debit { + cgrEv.Event[utils.Usage] = rply.MaxUsage // make sure the CDR reflects the debit } + rply.SetMaxUsageNeeded(msgArgs.Debit) if err = agReq.setCGRReply(rply, err); err != nil { return } diff --git a/agents/diamagent_test.go b/agents/diamagent_test.go index 920519daf..d3c40824e 100644 --- a/agents/diamagent_test.go +++ b/agents/diamagent_test.go @@ -492,7 +492,7 @@ func TestProcessRequest(t *testing.T) { }, }, }, - MaxUsage: utils.DurationPointer(10 * time.Second), + MaxUsage: 10 * time.Second, } return nil }, diff --git a/agents/dnsagent.go b/agents/dnsagent.go index 84afe5fbc..e3e68a62c 100644 --- a/agents/dnsagent.go +++ b/agents/dnsagent.go @@ -296,9 +296,10 @@ func (da *DNSAgent) processRequest(reqProcessor *config.RequestProcessor, evArgs, rply) if utils.ErrHasPrefix(err, utils.RalsErrorPrfx) { cgrEv.Event[utils.Usage] = 0 // avoid further debits - } else if rply.MaxUsage != nil { - cgrEv.Event[utils.Usage] = *rply.MaxUsage // make sure the CDR reflects the debit + } else if evArgs.Debit { + cgrEv.Event[utils.Usage] = rply.MaxUsage // make sure the CDR reflects the debit } + rply.SetMaxUsageNeeded(evArgs.Debit) if err = agReq.setCGRReply(rply, err); err != nil { return } diff --git a/agents/httpagent.go b/agents/httpagent.go index 5a9116a7d..f195ea548 100644 --- a/agents/httpagent.go +++ b/agents/httpagent.go @@ -219,9 +219,10 @@ func (ha *HTTPAgent) processRequest(reqProcessor *config.RequestProcessor, evArgs, rply) if utils.ErrHasPrefix(err, utils.RalsErrorPrfx) { cgrEv.Event[utils.Usage] = 0 // avoid further debits - } else if rply.MaxUsage != nil { - cgrEv.Event[utils.Usage] = *rply.MaxUsage // make sure the CDR reflects the debit + } else if evArgs.Debit { + cgrEv.Event[utils.Usage] = rply.MaxUsage // make sure the CDR reflects the debit } + rply.SetMaxUsageNeeded(evArgs.Debit) if err = agReq.setCGRReply(nil, err); err != nil { return } diff --git a/agents/kamevent.go b/agents/kamevent.go index 468245f57..cf4a018c6 100644 --- a/agents/kamevent.go +++ b/agents/kamevent.go @@ -328,11 +328,7 @@ func (kev KamEvent) AsKamProcessMessageReply(procEvArgs *sessions.V1ProcessMessa kar.ResourceAllocation = *procEvReply.ResourceAllocation } if procEvArgs.Debit { - if *procEvReply.MaxUsage == -1 { // For calls different than unlimited, set limits - kar.MaxUsage = -1 - } else { - kar.MaxUsage = int(utils.Round(procEvReply.MaxUsage.Seconds(), 0, utils.ROUNDING_MIDDLE)) - } + kar.MaxUsage = int(utils.Round(procEvReply.MaxUsage.Seconds(), 0, utils.ROUNDING_MIDDLE)) } if procEvArgs.GetSuppliers && procEvReply.Suppliers != nil { kar.Suppliers = procEvReply.Suppliers.Digest() diff --git a/agents/kamevent_test.go b/agents/kamevent_test.go index 9cad32168..d1065d069 100644 --- a/agents/kamevent_test.go +++ b/agents/kamevent_test.go @@ -403,7 +403,7 @@ func TestKamEvAsKamProcessEventReply(t *testing.T) { }, } procEvhRply := &sessions.V1ProcessMessageReply{ - MaxUsage: utils.DurationPointer(time.Duration(5 * time.Second)), + MaxUsage: 5 * time.Second, } expected := &KamReply{ Event: CGR_PROCESS_MESSAGE, diff --git a/agents/radagent.go b/agents/radagent.go index 963852b40..c779a1ff2 100644 --- a/agents/radagent.go +++ b/agents/radagent.go @@ -264,9 +264,10 @@ func (ra *RadiusAgent) processRequest(reqProcessor *config.RequestProcessor, err = ra.sessionS.Call(utils.SessionSv1ProcessMessage, evArgs, rply) if utils.ErrHasPrefix(err, utils.RalsErrorPrfx) { cgrEv.Event[utils.Usage] = 0 // avoid further debits - } else if rply.MaxUsage != nil { - cgrEv.Event[utils.Usage] = *rply.MaxUsage // make sure the CDR reflects the debit + } else if evArgs.Debit { + cgrEv.Event[utils.Usage] = rply.MaxUsage // make sure the CDR reflects the debit } + rply.SetMaxUsageNeeded(evArgs.Debit) if err = agReq.setCGRReply(rply, err); err != nil { return } diff --git a/apier/v1/sessionsv1_it_test.go b/apier/v1/sessionsv1_it_test.go index 9f460e8a3..092d961fd 100644 --- a/apier/v1/sessionsv1_it_test.go +++ b/apier/v1/sessionsv1_it_test.go @@ -588,8 +588,8 @@ func testSSv1ItProcessEvent(t *testing.T) { // in case of prepaid and pseudoprepade we expect a MaxUsage of 5min // and in case of postpaid and rated we expect the value of Usage field // if this was missing the MaxUsage should be equal to MaxCallDuration from config - if *rply.MaxUsage != initUsage { - t.Errorf("Unexpected MaxUsage: %v", *rply.MaxUsage) + if rply.MaxUsage != initUsage { + t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage) } if *rply.ResourceAllocation != "RES_ACNT_1001" { t.Errorf("Unexpected ResourceAllocation: %s", *rply.ResourceAllocation) diff --git a/dispatchers/sessions_it_test.go b/dispatchers/sessions_it_test.go index ffd0b0e0d..9b74c8d27 100755 --- a/dispatchers/sessions_it_test.go +++ b/dispatchers/sessions_it_test.go @@ -553,7 +553,7 @@ func testDspSessionProcessEvent(t *testing.T) { args, &rply); err != nil { t.Fatal(err) } - if *rply.MaxUsage != initUsage { + if rply.MaxUsage != initUsage { t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage) } if *rply.ResourceAllocation != "RES_ACNT_1001" { @@ -620,7 +620,7 @@ func testDspSessionProcessEvent2(t *testing.T) { args, &rply); err != nil { t.Fatal(err) } - if *rply.MaxUsage != initUsage { + if rply.MaxUsage != initUsage { t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage) } if *rply.ResourceAllocation != "RES_ACNT_1001" { diff --git a/ers/ers.go b/ers/ers.go index d23db3306..2b4063683 100644 --- a/ers/ers.go +++ b/ers/ers.go @@ -251,8 +251,8 @@ func (erS *ERService) processEvent(cgrEv *utils.CGREvent, rdrCfg *config.EventRe evArgs, rply) if utils.ErrHasPrefix(err, utils.RalsErrorPrfx) { cgrEv.Event[utils.Usage] = 0 // avoid further debits - } else if rply.MaxUsage != nil { - cgrEv.Event[utils.Usage] = *rply.MaxUsage // make sure the CDR reflects the debit + } else if evArgs.Debit { + cgrEv.Event[utils.Usage] = rply.MaxUsage // make sure the CDR reflects the debit } case utils.MetaEvent: evArgs := &sessions.V1ProcessEventArgs{ diff --git a/general_tests/rpccaching_it_test.go b/general_tests/rpccaching_it_test.go index ec4453641..3739d8fa4 100644 --- a/general_tests/rpccaching_it_test.go +++ b/general_tests/rpccaching_it_test.go @@ -605,7 +605,7 @@ func testRPCMethodsProcessEvent(t *testing.T) { if err := rpcRpc.Call(utils.SessionSv1ProcessMessage, args, &rplyFirst); err != nil { t.Error(err) - } else if *rplyFirst.MaxUsage != initUsage { + } else if rplyFirst.MaxUsage != initUsage { t.Errorf("Unexpected MaxUsage: %v", rplyFirst.MaxUsage) } diff --git a/general_tests/session3_it_test.go b/general_tests/session3_it_test.go index 5e0f2ea57..1935589b5 100644 --- a/general_tests/session3_it_test.go +++ b/general_tests/session3_it_test.go @@ -147,7 +147,7 @@ func testSes3ItProcessEvent(t *testing.T) { args, &rply); err != nil { t.Fatal(err) } - if *rply.MaxUsage != initUsage { + if rply.MaxUsage != initUsage { t.Errorf("Unexpected MaxUsage: %v", rply.MaxUsage) } if *rply.ResourceAllocation != "RES_ACNT_1001" { diff --git a/sessions/sessions.go b/sessions/sessions.go index 85c1473d5..dfab775f9 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -2760,12 +2760,21 @@ func (args *V1ProcessMessageArgs) ParseFlags(flags string) { // V1ProcessMessageReply is the reply for the ProcessMessage API type V1ProcessMessageReply struct { - MaxUsage *time.Duration + MaxUsage time.Duration ResourceAllocation *string Attributes *engine.AttrSProcessEventReply Suppliers *engine.SortedSuppliers ThresholdIDs *[]string StatQueueIDs *[]string + getMaxUsage bool +} + +// SetMaxUsageNeeded used by agent that use the reply as NavigableMapper +func (v1Rply *V1ProcessMessageReply) SetMaxUsageNeeded(getMaxUsage bool) { + if v1Rply == nil { + return + } + v1Rply.getMaxUsage = getMaxUsage } // AsNavigableMap is part of engine.NavigableMapper interface @@ -2773,8 +2782,8 @@ func (v1Rply *V1ProcessMessageReply) AsNavigableMap( ignr []*config.FCTemplate) (*config.NavigableMap, error) { cgrReply := make(map[string]interface{}) if v1Rply != nil { - if v1Rply.MaxUsage != nil { - cgrReply[utils.CapMaxUsage] = *v1Rply.MaxUsage + if v1Rply.getMaxUsage { + cgrReply[utils.CapMaxUsage] = v1Rply.MaxUsage } if v1Rply.ResourceAllocation != nil { cgrReply[utils.CapResourceAllocation] = *v1Rply.ResourceAllocation @@ -2886,7 +2895,7 @@ func (sS *SessionS) BiRPCv1ProcessMessage(clnt rpcclient.RpcClientConnection, engine.MapEvent(args.CGREvent.Event), args.ArgDispatcher); err != nil { return utils.NewErrRALs(err) } - rply.MaxUsage = &maxUsage + rply.MaxUsage = maxUsage } if args.ProcessThresholds { tIDs, err := sS.processThreshold(args.CGREvent, args.ArgDispatcher, diff --git a/sessions/sessions_test.go b/sessions/sessions_test.go index 098a45351..3304be332 100644 --- a/sessions/sessions_test.go +++ b/sessions/sessions_test.go @@ -1266,8 +1266,9 @@ func TestSessionSV1ProcessMessageReplyAsNavigableMap(t *testing.T) { t.Errorf("Expecting \n%+v\n, received: \n%+v", expected, rply) } - v1PrcEvRpl.MaxUsage = utils.DurationPointer(5 * time.Minute) + v1PrcEvRpl.MaxUsage = 5 * time.Minute expected.Set([]string{utils.CapMaxUsage}, 5*time.Minute, false, false) + v1PrcEvRpl.SetMaxUsageNeeded(true) if rply, _ := v1PrcEvRpl.AsNavigableMap(nil); !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting \n%+v\n, received: \n%+v", expected, rply) } @@ -1292,7 +1293,7 @@ func TestSessionSV1ProcessMessageReplyAsNavigableMap(t *testing.T) { expected.Set([]string{utils.CapSuppliers}, tmpSuppliers.AsNavigableMap(), false, false) expected.Set([]string{utils.CapThresholds}, tmpTresholdIDs, false, false) expected.Set([]string{utils.CapStatQueues}, tmpStatQueueIDs, false, false) - + v1PrcEvRpl.SetMaxUsageNeeded(true) if rply, _ := v1PrcEvRpl.AsNavigableMap(nil); !reflect.DeepEqual(expected, rply) { t.Errorf("Expecting \n%+v\n, received: \n%+v", expected, rply) }