diff --git a/engine/eventcost.go b/engine/eventcost.go index ba220e8e0..ff5e8ffa0 100644 --- a/engine/eventcost.go +++ b/engine/eventcost.go @@ -607,8 +607,10 @@ func (ec *EventCost) Trim(atUsage time.Duration) (srplusEC *EventCost, err error return // no trim } if atUsage == 0 { - srplusEC = ec - ec = NewBareEventCost() + //clone the event because we need to overwrite ec + srplusEC = ec.Clone() + // modify the value of ec + *ec = *NewBareEventCost() ec.CGRID = srplusEC.CGRID ec.RunID = srplusEC.RunID ec.StartTime = srplusEC.StartTime diff --git a/engine/eventcost_test.go b/engine/eventcost_test.go index eb8480d1c..c888c9273 100644 --- a/engine/eventcost_test.go +++ b/engine/eventcost_test.go @@ -991,15 +991,22 @@ func TestECTrimZeroAndFull(t *testing.T) { } eFullSrpls := testEC.Clone() eFullSrpls.Usage = utils.DurationPointer(time.Duration(10 * time.Minute)) - eFullSrpls.Charges[0].usage = utils.DurationPointer(time.Duration(1 * time.Minute)) - eFullSrpls.Charges[1].usage = utils.DurationPointer(time.Duration(1 * time.Minute)) - eFullSrpls.Charges[2].usage = utils.DurationPointer(time.Duration(1 * time.Minute)) if srplsEC, err := ec.Trim(time.Duration(0)); err != nil { t.Error(err) } else if !reflect.DeepEqual(eFullSrpls, srplsEC) { t.Errorf("\tExpecting: %s,\n\treceived: %s", utils.ToJSON(eFullSrpls), utils.ToJSON(srplsEC)) } + //verify the event cost + newEc := NewBareEventCost() + newEc.CGRID = eFullSrpls.CGRID + newEc.RunID = eFullSrpls.RunID + newEc.StartTime = eFullSrpls.StartTime + newEc.AccountSummary = eFullSrpls.AccountSummary.Clone() + if !reflect.DeepEqual(newEc, ec) { + t.Errorf("\tExpecting: %s,\n\treceived: %s", + utils.ToJSON(newEc), utils.ToJSON(ec)) + } } func TestECTrimMiddle1(t *testing.T) { diff --git a/sessions/sessions.go b/sessions/sessions.go index 3dbbb49c0..dd3941393 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -1451,7 +1451,6 @@ func (sS *SessionS) endSession(s *Session, tUsage, lastUsage *time.Duration, aTi "<%s> failed refunding session: <%s>, srIdx: <%d>, error: <%s>", utils.SessionS, s.CGRID, sRunIdx, err.Error())) } - // FixMe: make sure refund is reflected inside EventCost } // set cost fields sr.Event[utils.Cost] = sr.EventCost.GetCost()