From 18629002a6baf7794b43521a8d90017f26b833ea Mon Sep 17 00:00:00 2001 From: DanB Date: Wed, 28 May 2014 12:54:03 +0200 Subject: [PATCH] StoredCdr.AsCgrCdrOut() with tests --- apier/apier_local_test.go | 2 ++ apier/cdrs.go | 5 ++--- utils/storedcdr.go | 45 +++++++++++++++++++++++++++++++++++++++ utils/storedcdr_test.go | 16 ++++++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/apier/apier_local_test.go b/apier/apier_local_test.go index 5e37be02c..c2f1202f8 100644 --- a/apier/apier_local_test.go +++ b/apier/apier_local_test.go @@ -1434,6 +1434,8 @@ func TestLocalGetCdrs(t *testing.T) { req := utils.AttrGetCdrs{} if err := rater.Call("ApierV1.GetCdrs", req, &reply); err != nil { t.Error("Unexpected error: ", err.Error()) + } else if len(reply) != 2 { + t.Error("Unexpected number of CDRs returned: ", len(reply)) } } diff --git a/apier/cdrs.go b/apier/cdrs.go index 3f9f0acfa..12672d5f1 100644 --- a/apier/cdrs.go +++ b/apier/cdrs.go @@ -46,7 +46,7 @@ func (apier *ApierV1) GetCallCostLog(attrs AttrGetCallCost, reply *engine.CallCo } // Retrieves CDRs based on the filters -func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*utils.StoredCdr) error { +func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*utils.CgrCdrOut) error { var tStart, tEnd time.Time var err error if len(attrs.TimeStart) != 0 { @@ -65,9 +65,8 @@ func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*utils.StoredCdr return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else { for _, cdr := range cdrs { - cdr.MangleDataUsage(utils.CDR_EXPORT) // Convert data usage to the right format + *reply = append(*reply, cdr.AsCgrCdrOut()) } - *reply = cdrs } return nil } diff --git a/utils/storedcdr.go b/utils/storedcdr.go index 41d89b60c..08fe024e8 100644 --- a/utils/storedcdr.go +++ b/utils/storedcdr.go @@ -257,3 +257,48 @@ func (storedCdr *StoredCdr) ForkCdr(runId string, reqTypeFld, directionFld, tena } return frkStorCdr, nil } + +func (storedCdr *StoredCdr) AsCgrCdrOut() *CgrCdrOut { + return &CgrCdrOut{CgrId: storedCdr.CgrId, + OrderId: storedCdr.OrderId, + TOR: storedCdr.TOR, + AccId: storedCdr.AccId, + CdrHost: storedCdr.CdrHost, + CdrSource: storedCdr.CdrSource, + ReqType: storedCdr.ReqType, + Direction: storedCdr.Direction, + Tenant: storedCdr.Tenant, + Category: storedCdr.Category, + Account: storedCdr.Account, + Subject: storedCdr.Subject, + Destination: storedCdr.Destination, + SetupTime: storedCdr.SetupTime, + AnswerTime: storedCdr.AnswerTime, + Usage: storedCdr.Usage.Seconds(), + ExtraFields: storedCdr.ExtraFields, + MediationRunId: storedCdr.MediationRunId, + Cost: storedCdr.Cost, + } +} + +type CgrCdrOut struct { + CgrId string + OrderId int64 + TOR string + AccId string + CdrHost string + CdrSource string + ReqType string + Direction string + Tenant string + Category string + Account string + Subject string + Destination string + SetupTime time.Time + AnswerTime time.Time + Usage float64 + ExtraFields map[string]string + MediationRunId string + Cost float64 +} diff --git a/utils/storedcdr_test.go b/utils/storedcdr_test.go index 42445d9b8..1941e188b 100644 --- a/utils/storedcdr_test.go +++ b/utils/storedcdr_test.go @@ -272,3 +272,19 @@ func TestStoredCdrForkCdrFromMetaDefaults(t *testing.T) { t.Errorf("Expected: %v, received: %v", expctCdr, cdrOut) } } + +func TestStoredCdrAsCgrCdrOut(t *testing.T) { + storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1", + CdrSource: UNIT_TEST, ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", + SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID, + Usage: time.Duration(10), ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, + } + expectOutCdr := &CgrCdrOut{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1", + CdrSource: UNIT_TEST, ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", + SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID, + Usage: 0.00000001, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, + } + if cdrOut := storCdr.AsCgrCdrOut(); !reflect.DeepEqual(expectOutCdr, cdrOut) { + t.Errorf("Expected: %+v, received: %+v", expectOutCdr, cdrOut) + } +}