From 370fc31db824b9a85151ae6c72d85c8ab495bdf3 Mon Sep 17 00:00:00 2001 From: DanB Date: Fri, 9 May 2014 19:24:38 +0200 Subject: [PATCH] Adding TOR support inside CDRs --- cdrs/fscdr.go | 1 + cdrs/fscdr_test.go | 2 +- engine/account.go | 8 +-- engine/storage_sql.go | 3 +- engine/storage_sql_local_test.go | 12 ++--- utils/cgrcdr.go | 89 +++++++------------------------- utils/cgrcdr_test.go | 61 +--------------------- utils/consts.go | 7 ++- utils/storedcdr.go | 2 + utils/storedcdr_test.go | 16 +++--- 10 files changed, 51 insertions(+), 150 deletions(-) diff --git a/cdrs/fscdr.go b/cdrs/fscdr.go index 56ddde00f..35ae85527 100644 --- a/cdrs/fscdr.go +++ b/cdrs/fscdr.go @@ -124,6 +124,7 @@ func (fsCdr FSCdr) searchExtraField(field string, body map[string]interface{}) ( func (fsCdr FSCdr) AsStoredCdr() *utils.StoredCdr { storCdr := new(utils.StoredCdr) storCdr.CgrId = fsCdr.getCgrId() + storCdr.TOR = utils.VOICE storCdr.AccId = fsCdr.vars[FS_UUID] storCdr.CdrHost = fsCdr.vars[FS_IP] storCdr.CdrSource = FS_CDR_SOURCE diff --git a/cdrs/fscdr_test.go b/cdrs/fscdr_test.go index 0e94e4546..303a3ec55 100644 --- a/cdrs/fscdr_test.go +++ b/cdrs/fscdr_test.go @@ -54,7 +54,7 @@ func TestCDRFields(t *testing.T) { } setupTime, _ := utils.ParseTimeDetectLayout(fsCdr.vars[FS_SETUP_TIME]) answerTime, _ := utils.ParseTimeDetectLayout(fsCdr.vars[FS_ANSWER_TIME]) - expctStoredCdr := &utils.StoredCdr{CgrId: utils.Sha1("01df56f4-d99a-4ef6-b7fe-b924b2415b7f", setupTime.String()), AccId: "01df56f4-d99a-4ef6-b7fe-b924b2415b7f", + expctStoredCdr := &utils.StoredCdr{CgrId: utils.Sha1("01df56f4-d99a-4ef6-b7fe-b924b2415b7f", setupTime.String()), TOR: utils.VOICE, AccId: "01df56f4-d99a-4ef6-b7fe-b924b2415b7f", CdrHost: "127.0.0.1", CdrSource: "freeswitch_json", Direction: "*out", Category: "call", ReqType: utils.RATED, Tenant: "ipbx.itsyscom.com", Account: "dan", Subject: "dan", Destination: "+4986517174963", SetupTime: setupTime, AnswerTime: answerTime, Duration: time.Duration(4) * time.Second, ExtraFields: map[string]string{"sip_user_agent": "Jitsi2.2.4603.9615Linux"}, Cost: -1} diff --git a/engine/account.go b/engine/account.go index 1e289359d..03d6c5700 100644 --- a/engine/account.go +++ b/engine/account.go @@ -34,10 +34,10 @@ const ( INBOUND = "*in" OUTBOUND = "*out" // Balance types - CREDIT = "*monetary" - SMS = "*sms" - DATA = "*data" - MINUTES = "*voice" + CREDIT = utils.MONETARY + SMS = utils.SMS + DATA = utils.DATA + MINUTES = utils.VOICE // action trigger threshold types TRIGGER_MIN_COUNTER = "*min_counter" TRIGGER_MAX_COUNTER = "*max_counter" diff --git a/engine/storage_sql.go b/engine/storage_sql.go index dfb0b9673..a55c4032e 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -543,9 +543,10 @@ func (self *SQLStorage) LogActionTiming(source string, at *ActionTiming, as Acti func (self *SQLStorage) LogError(uuid, source, runid, errstr string) (err error) { return } func (self *SQLStorage) SetCdr(cdr *utils.StoredCdr) (err error) { - _, err = self.Db.Exec(fmt.Sprintf("INSERT INTO %s (cgrid,accid,cdrhost,cdrsource,reqtype,direction,tenant,category,account,subject,destination,setup_time,answer_time,`usage`) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s', %d)", + _, err = self.Db.Exec(fmt.Sprintf("INSERT INTO %s (cgrid,tor,accid,cdrhost,cdrsource,reqtype,direction,tenant,category,account,subject,destination,setup_time,answer_time,`usage`) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s', %d)", utils.TBL_CDRS_PRIMARY, cdr.CgrId, + cdr.TOR, cdr.AccId, cdr.CdrHost, cdr.CdrSource, diff --git a/engine/storage_sql_local_test.go b/engine/storage_sql_local_test.go index f1088120a..8f3c99360 100644 --- a/engine/storage_sql_local_test.go +++ b/engine/storage_sql_local_test.go @@ -161,19 +161,19 @@ func TestSetCdr(t *testing.T) { t.Error(err.Error()) } } - strCdr1 := &utils.StoredCdr{AccId: "bbb1", CdrHost: "192.168.1.1", CdrSource: "UNKNOWN", ReqType: "rated", + strCdr1 := &utils.StoredCdr{TOR: utils.VOICE, AccId: "bbb1", CdrHost: "192.168.1.1", CdrSource: "UNKNOWN", ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, MediationRunId: utils.DEFAULT_RUNID, Cost: 1.201} strCdr1.CgrId = utils.Sha1(strCdr1.AccId, strCdr1.SetupTime.String()) - strCdr2 := &utils.StoredCdr{AccId: "bbb2", CdrHost: "192.168.1.2", CdrSource: "UNKNOWN2", ReqType: "prepaid", + strCdr2 := &utils.StoredCdr{TOR: utils.VOICE, AccId: "bbb2", CdrHost: "192.168.1.2", CdrSource: "UNKNOWN2", ReqType: "prepaid", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(12) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, MediationRunId: utils.DEFAULT_RUNID, Cost: 0.201} strCdr2.CgrId = utils.Sha1(strCdr2.AccId, strCdr2.SetupTime.String()) - strCdr3 := &utils.StoredCdr{AccId: "bbb3", CdrHost: "192.168.1.1", CdrSource: TEST_SQL, ReqType: "rated", + strCdr3 := &utils.StoredCdr{TOR: utils.VOICE, AccId: "bbb3", CdrHost: "192.168.1.1", CdrSource: TEST_SQL, ReqType: "rated", Direction: "*out", Tenant: "itsyscom.com", Category: "call", Account: "1002", Subject: "1000", Destination: "+4986517174963", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, @@ -191,19 +191,19 @@ func TestSetRatedCdr(t *testing.T) { if !*testLocal { return } - strCdr1 := &utils.StoredCdr{AccId: "bbb1", CdrHost: "192.168.1.1", CdrSource: "UNKNOWN", ReqType: "rated", + strCdr1 := &utils.StoredCdr{TOR: utils.VOICE, AccId: "bbb1", CdrHost: "192.168.1.1", CdrSource: "UNKNOWN", ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, MediationRunId: utils.DEFAULT_RUNID, Cost: 1.201} strCdr1.CgrId = utils.Sha1(strCdr1.AccId, strCdr1.SetupTime.String()) - strCdr2 := &utils.StoredCdr{AccId: "bbb2", CdrHost: "192.168.1.2", CdrSource: "UNKNOWN", ReqType: "prepaid", + strCdr2 := &utils.StoredCdr{TOR: utils.VOICE, AccId: "bbb2", CdrHost: "192.168.1.2", CdrSource: "UNKNOWN", ReqType: "prepaid", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(12) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, MediationRunId: utils.DEFAULT_RUNID, Cost: 0.201} strCdr2.CgrId = utils.Sha1(strCdr2.AccId, strCdr2.SetupTime.String()) - strCdr3 := &utils.StoredCdr{AccId: "bbb3", CdrHost: "192.168.1.1", CdrSource: TEST_SQL, ReqType: "rated", + strCdr3 := &utils.StoredCdr{TOR: utils.VOICE, AccId: "bbb3", CdrHost: "192.168.1.1", CdrSource: TEST_SQL, ReqType: "rated", Direction: "*out", Tenant: "itsyscom.com", Category: "call", Account: "1002", Subject: "1002", Destination: "+4986517174964", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, diff --git a/utils/cgrcdr.go b/utils/cgrcdr.go index 598daf637..64a65cbf3 100644 --- a/utils/cgrcdr.go +++ b/utils/cgrcdr.go @@ -20,7 +20,6 @@ package utils import ( "net/http" - "time" ) func NewCgrCdrFromHttpReq(req *http.Request) (CgrCdr, error) { @@ -39,52 +38,12 @@ func NewCgrCdrFromHttpReq(req *http.Request) (CgrCdr, error) { type CgrCdr map[string]string -func (cgrCdr CgrCdr) GetCgrId() string { - setupTime, _ := cgrCdr.GetSetupTime() +func (cgrCdr CgrCdr) getCgrId() string { + setupTime, _ := ParseTimeDetectLayout(cgrCdr[SETUP_TIME]) return Sha1(cgrCdr[ACCID], setupTime.String()) } -func (cgrCdr CgrCdr) GetAccId() string { - return cgrCdr[ACCID] -} - -func (cgrCdr CgrCdr) GetCdrHost() string { - return cgrCdr[CDRHOST] -} - -func (cgrCdr CgrCdr) GetCdrSource() string { - return cgrCdr[CDRSOURCE] -} -func (cgrCdr CgrCdr) GetDirection() string { - //TODO: implement direction - return "*out" -} -func (cgrCdr CgrCdr) GetOrigId() string { - return cgrCdr[CDRHOST] -} -func (cgrCdr CgrCdr) GetSubject() string { - return cgrCdr[SUBJECT] -} -func (cgrCdr CgrCdr) GetAccount() string { - return cgrCdr[ACCOUNT] -} - -// Charging destination number -func (cgrCdr CgrCdr) GetDestination() string { - return cgrCdr[DESTINATION] -} - -func (cgrCdr CgrCdr) GetCategory() string { - return cgrCdr[CATEGORY] -} - -func (cgrCdr CgrCdr) GetTenant() string { - return cgrCdr[TENANT] -} -func (cgrCdr CgrCdr) GetReqType() string { - return cgrCdr[REQTYPE] -} -func (cgrCdr CgrCdr) GetExtraFields() map[string]string { +func (cgrCdr CgrCdr) getExtraFields() map[string]string { extraFields := make(map[string]string) for k, v := range cgrCdr { if !IsSliceMember(PrimaryCdrFields, k) { @@ -93,35 +52,25 @@ func (cgrCdr CgrCdr) GetExtraFields() map[string]string { } return extraFields } -func (cgrCdr CgrCdr) GetSetupTime() (t time.Time, err error) { - return ParseTimeDetectLayout(cgrCdr[SETUP_TIME]) -} -func (cgrCdr CgrCdr) GetAnswerTime() (t time.Time, err error) { - return ParseTimeDetectLayout(cgrCdr[ANSWER_TIME]) -} - -// Extracts duration as considered by the telecom switch -func (cgrCdr CgrCdr) GetDuration() (time.Duration, error) { - return ParseDurationWithSecs(cgrCdr[DURATION]) -} func (cgrCdr CgrCdr) AsStoredCdr() *StoredCdr { storCdr := new(StoredCdr) - storCdr.CgrId = cgrCdr.GetCgrId() - storCdr.AccId = cgrCdr.GetAccId() - storCdr.CdrHost = cgrCdr.GetCdrHost() - storCdr.CdrSource = cgrCdr.GetCdrSource() - storCdr.ReqType = cgrCdr.GetReqType() - storCdr.Direction = cgrCdr.GetDirection() - storCdr.Tenant = cgrCdr.GetTenant() - storCdr.Category = cgrCdr.GetCategory() - storCdr.Account = cgrCdr.GetAccount() - storCdr.Subject = cgrCdr.GetSubject() - storCdr.Destination = cgrCdr.GetDestination() - storCdr.SetupTime, _ = cgrCdr.GetSetupTime() // Not interested to process errors, should do them if necessary in a previous step - storCdr.AnswerTime, _ = cgrCdr.GetAnswerTime() - storCdr.Duration, _ = cgrCdr.GetDuration() - storCdr.ExtraFields = cgrCdr.GetExtraFields() + storCdr.CgrId = cgrCdr.getCgrId() + storCdr.TOR = cgrCdr[TOR] + storCdr.AccId = cgrCdr[ACCID] + storCdr.CdrHost = cgrCdr[CDRHOST] + storCdr.CdrSource = cgrCdr[CDRSOURCE] + storCdr.ReqType = cgrCdr[REQTYPE] + storCdr.Direction = "*out" + storCdr.Tenant = cgrCdr[TENANT] + storCdr.Category = cgrCdr[CATEGORY] + storCdr.Account = cgrCdr[ACCOUNT] + storCdr.Subject = cgrCdr[SUBJECT] + storCdr.Destination = cgrCdr[DESTINATION] + storCdr.SetupTime, _ = ParseTimeDetectLayout(cgrCdr[SETUP_TIME]) // Not interested to process errors, should do them if necessary in a previous step + storCdr.AnswerTime, _ = ParseTimeDetectLayout(cgrCdr[ANSWER_TIME]) + storCdr.Duration, _ = ParseDurationWithSecs(cgrCdr[DURATION]) + storCdr.ExtraFields = cgrCdr.getExtraFields() storCdr.Cost = -1 return storCdr } diff --git a/utils/cgrcdr_test.go b/utils/cgrcdr_test.go index d59105b13..485cda87b 100644 --- a/utils/cgrcdr_test.go +++ b/utils/cgrcdr_test.go @@ -32,69 +32,12 @@ func TestCgrCdrInterfaces(t *testing.T) { var _ RawCdr = make(CgrCdr) } -func TestCgrCdrFields(t *testing.T) { - cgrCdr := CgrCdr{ACCID: "dsafdsaf", CDRHOST: "192.168.1.1", REQTYPE: "rated", DIRECTION: "*out", TENANT: "cgrates.org", CATEGORY: "call", - ACCOUNT: "1001", SUBJECT: "1001", DESTINATION: "1002", SETUP_TIME: "2013-11-07T08:42:20Z", ANSWER_TIME: "2013-11-07T08:42:26Z", DURATION: "10", - "field_extr1": "val_extr1", "fieldextr2": "valextr2"} - setupTime, _ := ParseTimeDetectLayout("2013-11-07T08:42:20Z") - if cgrCdr.GetCgrId() != Sha1("dsafdsaf", setupTime.String()) { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetAccId() != "dsafdsaf" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetCdrHost() != "192.168.1.1" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetDirection() != "*out" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetSubject() != "1001" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetAccount() != "1001" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetDestination() != "1002" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetCategory() != "call" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetTenant() != "cgrates.org" { - t.Error("Error parsing cdr: ", cgrCdr) - } - if cgrCdr.GetReqType() != RATED { - t.Error("Error parsing cdr: ", cgrCdr) - } - expectedSTime, _ := time.Parse(time.RFC3339, "2013-11-07T08:42:20Z") - if setupTime.UTC() != expectedSTime { - t.Error("Error parsing cdr: ", cgrCdr) - } - answerTime, _ := cgrCdr.GetAnswerTime() - expectedATime, _ := time.Parse(time.RFC3339, "2013-11-07T08:42:26Z") - if answerTime.UTC() != expectedATime { - t.Error("Error parsing cdr: ", cgrCdr) - } - dur, _ := cgrCdr.GetDuration() - if dur != time.Duration(10)*time.Second { - t.Error("Error parsing cdr: ", cgrCdr) - } - extraFields := cgrCdr.GetExtraFields() - if len(extraFields) != 2 { - t.Error("Error parsing extra fields: ", extraFields) - } - if extraFields["field_extr1"] != "val_extr1" { - t.Error("Error parsing extra fields: ", extraFields) - } -} - func TestCgrCdrAsStoredCdr(t *testing.T) { - cgrCdr := CgrCdr{ACCID: "dsafdsaf", CDRHOST: "192.168.1.1", CDRSOURCE: "internal_test", REQTYPE: "rated", DIRECTION: "*out", TENANT: "cgrates.org", CATEGORY: "call", + cgrCdr := CgrCdr{TOR: VOICE, ACCID: "dsafdsaf", CDRHOST: "192.168.1.1", CDRSOURCE: "internal_test", REQTYPE: "rated", DIRECTION: "*out", TENANT: "cgrates.org", CATEGORY: "call", ACCOUNT: "1001", SUBJECT: "1001", DESTINATION: "1002", SETUP_TIME: "2013-11-07T08:42:20Z", ANSWER_TIME: "2013-11-07T08:42:26Z", DURATION: "10", "field_extr1": "val_extr1", "fieldextr2": "valextr2"} setupTime, _ := ParseTimeDetectLayout(cgrCdr["setup_time"]) - expctRtCdr := &StoredCdr{CgrId: Sha1(cgrCdr["accid"], setupTime.String()), AccId: cgrCdr["accid"], CdrHost: cgrCdr["cdrhost"], CdrSource: cgrCdr["cdrsource"], ReqType: cgrCdr["reqtype"], + expctRtCdr := &StoredCdr{CgrId: Sha1(cgrCdr["accid"], setupTime.String()), TOR: VOICE, AccId: cgrCdr["accid"], CdrHost: cgrCdr["cdrhost"], CdrSource: cgrCdr["cdrsource"], ReqType: cgrCdr["reqtype"], Direction: cgrCdr[DIRECTION], Tenant: cgrCdr["tenant"], Category: cgrCdr[CATEGORY], Account: cgrCdr["account"], Subject: cgrCdr["subject"], Destination: cgrCdr["destination"], SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: -1} diff --git a/utils/consts.go b/utils/consts.go index 1ecc0d5cc..8aeed220b 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -106,9 +106,14 @@ const ( FORKED_CDR = "forked_cdr" UNIT_TEST = "UNIT_TEST" HDR_VAL_SEP = "/" + MONETARY = "*monetary" + SMS = "*sms" + DATA = "*data" + VOICE = "*voice" + TOR = "tor" ) var ( CdreCdrFormats = []string{CSV, CDRE_DRYRUN, CDRE_FIXED_WIDTH} - PrimaryCdrFields = []string{ACCID, CDRHOST, CDRSOURCE, REQTYPE, DIRECTION, TENANT, CATEGORY, ACCOUNT, SUBJECT, DESTINATION, SETUP_TIME, ANSWER_TIME, DURATION} + PrimaryCdrFields = []string{TOR, ACCID, CDRHOST, CDRSOURCE, REQTYPE, DIRECTION, TENANT, CATEGORY, ACCOUNT, SUBJECT, DESTINATION, SETUP_TIME, ANSWER_TIME, DURATION} ) diff --git a/utils/storedcdr.go b/utils/storedcdr.go index f517b4123..68950358a 100644 --- a/utils/storedcdr.go +++ b/utils/storedcdr.go @@ -31,6 +31,7 @@ import ( type StoredCdr struct { CgrId string OrderId int64 // Stor order id used as export order id + TOR string AccId string CdrHost string CdrSource string @@ -163,6 +164,7 @@ func (storedCdr *StoredCdr) ForkCdr(runId string, reqTypeFld, directionFld, tena var err error frkStorCdr := new(StoredCdr) frkStorCdr.CgrId = storedCdr.CgrId + frkStorCdr.TOR = storedCdr.TOR frkStorCdr.MediationRunId = runId frkStorCdr.Cost = -1.0 // Default for non-rated CDR frkStorCdr.AccId = storedCdr.AccId diff --git a/utils/storedcdr_test.go b/utils/storedcdr_test.go index 59b68796a..cddd0a5ae 100644 --- a/utils/storedcdr_test.go +++ b/utils/storedcdr_test.go @@ -30,7 +30,7 @@ func TestStoredCdrInterfaces(t *testing.T) { } func TestFieldAsString(t *testing.T) { - cdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderId: 123, AccId: "dsafdsaf", CdrHost: "192.168.1.1", CdrSource: "test", ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", + cdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderId: 123, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1", CdrSource: "test", ReqType: "rated", Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002", SetupTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), MediationRunId: DEFAULT_RUNID, Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, } @@ -97,7 +97,7 @@ func TestFormatCost(t *testing.T) { } func TestStoredCdrAsHttpForm(t *testing.T) { - storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderId: 123, AccId: "dsafdsaf", CdrHost: "192.168.1.1", + storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 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, Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, @@ -151,7 +151,7 @@ func TestStoredCdrAsHttpForm(t *testing.T) { } func TestStoredCdrForkCdr(t *testing.T) { - storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderId: 123, AccId: "dsafdsaf", CdrHost: "192.168.1.1", + storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 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, Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "field_extr2": "valextr2"}, Cost: 1.01, @@ -162,7 +162,7 @@ func TestStoredCdrForkCdr(t *testing.T) { if err != nil { t.Error("Unexpected error received", err) } - expctSplRatedCdr := &StoredCdr{CgrId: storCdr.CgrId, AccId: "dsafdsaf", CdrHost: "192.168.1.1", CdrSource: UNIT_TEST, ReqType: "rated", + expctSplRatedCdr := &StoredCdr{CgrId: storCdr.CgrId, 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), Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "field_extr2": "valextr2"}, MediationRunId: "sample_run1", Cost: -1} @@ -172,7 +172,7 @@ func TestStoredCdrForkCdr(t *testing.T) { } func TestStoredCdrForkCdrStaticVals(t *testing.T) { - storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, AccId: "dsafdsaf", CdrHost: "192.168.1.1", + 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, Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, @@ -192,7 +192,7 @@ func TestStoredCdrForkCdrStaticVals(t *testing.T) { if err != nil { t.Error("Unexpected error received", err) } - expctRatedCdr2 := &StoredCdr{CgrId: storCdr.CgrId, AccId: "dsafdsaf", CdrHost: "192.168.1.1", CdrSource: UNIT_TEST, ReqType: "postpaid", + expctRatedCdr2 := &StoredCdr{CgrId: storCdr.CgrId, TOR: VOICE, AccId: "dsafdsaf", CdrHost: "192.168.1.1", CdrSource: UNIT_TEST, ReqType: "postpaid", Direction: "*in", Tenant: "cgrates.com", Category: "premium_call", Account: "first_account", Subject: "first_subject", Destination: "1002", SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC), Duration: time.Duration(12) * time.Second, @@ -209,12 +209,12 @@ func TestStoredCdrForkCdrStaticVals(t *testing.T) { } func TestStoredCdrForkCdrFromMetaDefaults(t *testing.T) { - storCdr := StoredCdr{CgrId: Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC).String()), OrderId: 123, AccId: "dsafdsaf", CdrHost: "192.168.1.1", + 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, Duration: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, Cost: 1.01, } - expctCdr := &StoredCdr{CgrId: storCdr.CgrId, AccId: "dsafdsaf", CdrHost: "192.168.1.1", CdrSource: UNIT_TEST, ReqType: "rated", + expctCdr := &StoredCdr{CgrId: storCdr.CgrId, 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), Duration: time.Duration(10) * time.Second,