diff --git a/sessionmanager/smg_it_test.go b/sessionmanager/smg_it_test.go index d44b290c5..3150ac757 100644 --- a/sessionmanager/smg_it_test.go +++ b/sessionmanager/smg_it_test.go @@ -928,6 +928,8 @@ func TestSMGVoiceRelocateWithOriginIDPrefix(t *testing.T) { } +// ToDo: Add test for ChargeEvent with derived charging, one with debit possible and second not so we see refund and error.CreditInsufficient showing up. + func TestSMGVoiceSessionStopCgrEngine(t *testing.T) { if err := engine.KillEngine(100); err != nil { t.Error(err) diff --git a/sessionmanager/smgeneric.go b/sessionmanager/smgeneric.go index 7f53c4316..66d46d482 100644 --- a/sessionmanager/smgeneric.go +++ b/sessionmanager/smgeneric.go @@ -854,11 +854,11 @@ func (smg *SMGeneric) ChargeEvent(gev SMGenericEvent) (maxUsage time.Duration, e var maxDurInit bool // Avoid differences between default 0 and received 0 for _, sR := range sessionRuns { cc := new(engine.CallCost) + sR.CallCosts = append(sR.CallCosts, cc) // Save it so we can revert on issues if err = smg.rals.Call("Responder.MaxDebit", sR.CallDescriptor, cc); err != nil { utils.Logger.Err(fmt.Sprintf(" Could not Debit CD: %+v, RunID: %s, error: %s", sR.CallDescriptor, sR.DerivedCharger.RunID, err.Error())) break } - sR.CallCosts = append(sR.CallCosts, cc) // Save it so we can revert on issues if ccDur := cc.GetDuration(); ccDur == 0 { err = utils.ErrInsufficientCredit break @@ -891,9 +891,9 @@ func (smg *SMGeneric) ChargeEvent(gev SMGenericEvent) (maxUsage time.Duration, e cd.RunID = sR.CallDescriptor.RunID cd.Increments.Compress() var response float64 - err = smg.rals.Call("Responder.RefundIncrements", cd, &response) - if err != nil { - return + errRefund := smg.rals.Call("Responder.RefundIncrements", cd, &response) + if errRefund != nil { + return 0, errRefund } } }