mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-12 02:26:26 +05:00
CastFieldToString returning for nil interface
This commit is contained in:
@@ -486,7 +486,7 @@ func TestDmtAgentSendCCRSMS(t *testing.T) {
|
||||
} else if len(cdrs) != 1 {
|
||||
t.Error("Unexpected number of CDRs returned: ", len(cdrs))
|
||||
} else {
|
||||
if cdrs[0].Usage != "1" {
|
||||
if cdrs[0].Usage != "60000000000" { // should be 1 but maxUsage returns rounded version
|
||||
t.Errorf("Unexpected CDR Usage received, cdr: %+v ", cdrs[0])
|
||||
}
|
||||
if cdrs[0].Cost != 0.6 {
|
||||
|
||||
@@ -717,13 +717,15 @@ func (smg *SMGeneric) GetMaxUsage(gev SMGenericEvent) (maxUsage time.Duration, e
|
||||
}
|
||||
|
||||
// Called on session start
|
||||
func (smg *SMGeneric) InitiateSession(gev SMGenericEvent, clnt rpcclient.RpcClientConnection) (maxUsage time.Duration, err error) {
|
||||
func (smg *SMGeneric) InitiateSession(gev SMGenericEvent,
|
||||
clnt rpcclient.RpcClientConnection) (maxUsage time.Duration, err error) {
|
||||
cgrID := gev.GetCGRID(utils.META_DEFAULT)
|
||||
cacheKey := "InitiateSession" + cgrID
|
||||
if item, err := smg.responseCache.Get(cacheKey); err == nil && item != nil {
|
||||
return item.Value.(time.Duration), item.Err
|
||||
}
|
||||
defer smg.responseCache.Cache(cacheKey, &utils.ResponseCacheItem{Value: maxUsage, Err: err}) // schedule response caching
|
||||
defer smg.responseCache.Cache(cacheKey,
|
||||
&utils.ResponseCacheItem{Value: maxUsage, Err: err}) // schedule response caching
|
||||
smg.deletePassiveSessions(cgrID)
|
||||
if err = smg.sessionStart(gev, clnt); err != nil {
|
||||
smg.sessionEnd(cgrID, 0)
|
||||
@@ -741,20 +743,23 @@ func (smg *SMGeneric) InitiateSession(gev SMGenericEvent, clnt rpcclient.RpcClie
|
||||
}
|
||||
|
||||
// Execute debits for usage/maxUsage
|
||||
func (smg *SMGeneric) UpdateSession(gev SMGenericEvent, clnt rpcclient.RpcClientConnection) (maxUsage time.Duration, err error) {
|
||||
func (smg *SMGeneric) UpdateSession(gev SMGenericEvent,
|
||||
clnt rpcclient.RpcClientConnection) (maxUsage time.Duration, err error) {
|
||||
cgrID := gev.GetCGRID(utils.META_DEFAULT)
|
||||
cacheKey := "UpdateSession" + cgrID
|
||||
if item, err := smg.responseCache.Get(cacheKey); err == nil && item != nil {
|
||||
return item.Value.(time.Duration), item.Err
|
||||
}
|
||||
defer smg.responseCache.Cache(cacheKey, &utils.ResponseCacheItem{Value: maxUsage, Err: err})
|
||||
defer smg.responseCache.Cache(cacheKey,
|
||||
&utils.ResponseCacheItem{Value: maxUsage, Err: err})
|
||||
if smg.cgrCfg.SessionSCfg().DebitInterval != 0 { // Not possible to update a session with debit loop active
|
||||
err = errors.New("ACTIVE_DEBIT_LOOP")
|
||||
return
|
||||
}
|
||||
if gev.HasField(utils.InitialOriginID) {
|
||||
initialCGRID := gev.GetCGRID(utils.InitialOriginID)
|
||||
err = smg.sessionRelocate(initialCGRID, cgrID, gev.GetOriginID(utils.META_DEFAULT))
|
||||
err = smg.sessionRelocate(initialCGRID,
|
||||
cgrID, gev.GetOriginID(utils.META_DEFAULT))
|
||||
if err == utils.ErrNotFound { // Session was already relocated, create a new session with this update
|
||||
err = smg.sessionStart(gev, clnt)
|
||||
}
|
||||
@@ -785,12 +790,15 @@ func (smg *SMGeneric) UpdateSession(gev SMGenericEvent, clnt rpcclient.RpcClient
|
||||
aSessions := smg.getSessions(cgrID, false)
|
||||
if len(aSessions) == 0 {
|
||||
if aSessions = smg.passiveToActive(cgrID); len(aSessions) == 0 {
|
||||
utils.Logger.Err(fmt.Sprintf("<%s> SessionUpdate with no active sessions for event: <%s>", utils.SessionS, cgrID))
|
||||
utils.Logger.Err(
|
||||
fmt.Sprintf("<%s> SessionUpdate with no active sessions for event: <%s>",
|
||||
utils.SessionS, cgrID))
|
||||
err = rpcclient.ErrSessionNotFound
|
||||
return
|
||||
}
|
||||
}
|
||||
defer smg.replicateSessionsWithID(gev.GetCGRID(utils.META_DEFAULT), false, smg.smgReplConns)
|
||||
defer smg.replicateSessionsWithID(gev.GetCGRID(utils.META_DEFAULT),
|
||||
false, smg.smgReplConns)
|
||||
for _, s := range aSessions[cgrID] {
|
||||
if s.RunID == utils.META_NONE {
|
||||
maxUsage = time.Duration(-1)
|
||||
@@ -807,7 +815,8 @@ func (smg *SMGeneric) UpdateSession(gev SMGenericEvent, clnt rpcclient.RpcClient
|
||||
}
|
||||
|
||||
// Called on session end, should stop debit loop
|
||||
func (smg *SMGeneric) TerminateSession(gev SMGenericEvent, clnt rpcclient.RpcClientConnection) (err error) {
|
||||
func (smg *SMGeneric) TerminateSession(gev SMGenericEvent,
|
||||
clnt rpcclient.RpcClientConnection) (err error) {
|
||||
cgrID := gev.GetCGRID(utils.META_DEFAULT)
|
||||
cacheKey := "TerminateSession" + cgrID
|
||||
if item, err := smg.responseCache.Get(cacheKey); err == nil && item != nil {
|
||||
@@ -816,7 +825,8 @@ func (smg *SMGeneric) TerminateSession(gev SMGenericEvent, clnt rpcclient.RpcCli
|
||||
defer smg.responseCache.Cache(cacheKey, &utils.ResponseCacheItem{Err: err})
|
||||
if gev.HasField(utils.InitialOriginID) {
|
||||
initialCGRID := gev.GetCGRID(utils.InitialOriginID)
|
||||
err = smg.sessionRelocate(initialCGRID, cgrID, gev.GetOriginID(utils.META_DEFAULT))
|
||||
err = smg.sessionRelocate(initialCGRID, cgrID,
|
||||
gev.GetOriginID(utils.META_DEFAULT))
|
||||
if err == utils.ErrNotFound { // Session was already relocated, create a new session with this update
|
||||
err = smg.sessionStart(gev, clnt)
|
||||
}
|
||||
|
||||
@@ -418,15 +418,20 @@ func (self SMGenericEvent) PassesFieldFilter(*utils.RSRField) (bool, string) {
|
||||
func (self SMGenericEvent) AsCDR(cfg *config.CGRConfig, timezone string) *engine.CDR {
|
||||
storCdr := engine.NewCDRWithDefaults(cfg)
|
||||
storCdr.CGRID = self.GetCGRID(utils.META_DEFAULT)
|
||||
storCdr.ToR = utils.FirstNonEmpty(self.GetTOR(utils.META_DEFAULT), storCdr.ToR) // Keep default if none in the event
|
||||
storCdr.ToR = utils.FirstNonEmpty(self.GetTOR(utils.META_DEFAULT),
|
||||
storCdr.ToR) // Keep default if none in the event
|
||||
storCdr.OriginID = self.GetOriginID(utils.META_DEFAULT)
|
||||
storCdr.OriginHost = self.GetOriginatorIP(utils.META_DEFAULT)
|
||||
storCdr.Source = self.GetCdrSource()
|
||||
storCdr.RequestType = utils.FirstNonEmpty(self.GetReqType(utils.META_DEFAULT), storCdr.RequestType)
|
||||
storCdr.Tenant = utils.FirstNonEmpty(self.GetTenant(utils.META_DEFAULT), storCdr.Tenant)
|
||||
storCdr.Category = utils.FirstNonEmpty(self.GetCategory(utils.META_DEFAULT), storCdr.Category)
|
||||
storCdr.RequestType = utils.FirstNonEmpty(self.GetReqType(utils.META_DEFAULT),
|
||||
storCdr.RequestType)
|
||||
storCdr.Tenant = utils.FirstNonEmpty(self.GetTenant(utils.META_DEFAULT),
|
||||
storCdr.Tenant)
|
||||
storCdr.Category = utils.FirstNonEmpty(self.GetCategory(utils.META_DEFAULT),
|
||||
storCdr.Category)
|
||||
storCdr.Account = self.GetAccount(utils.META_DEFAULT)
|
||||
storCdr.Subject = self.GetSubject(utils.META_DEFAULT)
|
||||
storCdr.Subject = utils.FirstNonEmpty(self.GetSubject(utils.META_DEFAULT),
|
||||
self.GetAccount(utils.META_DEFAULT))
|
||||
storCdr.Destination = self.GetDestination(utils.META_DEFAULT)
|
||||
storCdr.SetupTime, _ = self.GetSetupTime(utils.META_DEFAULT, timezone)
|
||||
storCdr.AnswerTime, _ = self.GetAnswerTime(utils.META_DEFAULT, timezone)
|
||||
|
||||
@@ -27,6 +27,9 @@ import (
|
||||
)
|
||||
|
||||
func CastFieldIfToString(fld interface{}) (string, bool) {
|
||||
if fld == nil {
|
||||
return "", true
|
||||
}
|
||||
var strVal string
|
||||
var converted bool
|
||||
switch fld.(type) {
|
||||
|
||||
@@ -245,6 +245,9 @@ func TestCastFieldIfToString(t *testing.T) {
|
||||
} else if strVal != "1s" {
|
||||
t.Errorf("received: %s", strVal)
|
||||
}
|
||||
if resVal, converted := CastIfToString(nil); converted || resVal != "" {
|
||||
t.Errorf("received: %s", resVal)
|
||||
}
|
||||
}
|
||||
|
||||
func TestIfaceAsTime(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user