mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Adding TOR support inside CDRs
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user