mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-20 06:38:45 +05:00
Add *tmp support field in AgentRequest
This commit is contained in:
committed by
Dan Christian Bogos
parent
9bc1bc0625
commit
c941540d01
@@ -84,6 +84,7 @@ type AgentRequest struct {
|
||||
Header config.DataProvider
|
||||
Trailer config.DataProvider
|
||||
diamreq *config.NavigableMap // used in case of building requests (ie. DisconnectSession)
|
||||
tmp *config.NavigableMap // used in case you want to store temporary items and access them later
|
||||
}
|
||||
|
||||
// String implements engine.DataProvider
|
||||
@@ -117,6 +118,8 @@ func (ar *AgentRequest) FieldAsInterface(fldPath []string) (val interface{}, err
|
||||
val, err = ar.Header.FieldAsInterface(fldPath[1:])
|
||||
case utils.MetaTrl:
|
||||
val, err = ar.Trailer.FieldAsInterface(fldPath[1:])
|
||||
case utils.MetaTmp:
|
||||
val, err = ar.tmp.FieldAsInterface(fldPath[1:])
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -141,6 +144,7 @@ func (ar *AgentRequest) AsNavigableMap(tplFlds []*config.FCTemplate) (
|
||||
|
||||
//SetFields will populate fields of AgentRequest out of templates
|
||||
func (ar *AgentRequest) SetFields(tplFlds []*config.FCTemplate) (err error) {
|
||||
ar.tmp = config.NewNavigableMap(nil)
|
||||
for _, tplFld := range tplFlds {
|
||||
if pass, err := ar.filterS.Pass(ar.Tenant,
|
||||
tplFld.Filters, ar); err != nil {
|
||||
@@ -195,6 +199,8 @@ func (ar *AgentRequest) SetFields(tplFlds []*config.FCTemplate) (err error) {
|
||||
ar.Reply.Set(fldPath[1:], valSet, false, true)
|
||||
case utils.MetaDiamreq:
|
||||
ar.diamreq.Set(fldPath[1:], valSet, false, true)
|
||||
case utils.MetaTmp:
|
||||
ar.tmp.Set(fldPath[1:], valSet, false, true)
|
||||
}
|
||||
}
|
||||
if tplFld.Blocker { // useful in case of processing errors first
|
||||
|
||||
@@ -1572,3 +1572,34 @@ func TestAgReqGroupType(t *testing.T) {
|
||||
t.Errorf("expecting: %+v, \n received: %+v ", "test", sls[0].Data)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAgReqSetFieldsInTmp(t *testing.T) {
|
||||
cfg, _ := config.NewDefaultCGRConfig()
|
||||
data := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
|
||||
dm := engine.NewDataManager(data, config.CgrConfig().CacheCfg(), nil)
|
||||
filterS := engine.NewFilterS(cfg, nil, dm)
|
||||
agReq := NewAgentRequest(nil, nil, nil, nil, nil, "cgrates.org", "", filterS, nil, nil)
|
||||
agReq.CGRRequest.Set([]string{utils.Account}, "1001", false, false)
|
||||
|
||||
tplFlds := []*config.FCTemplate{
|
||||
&config.FCTemplate{Tag: "Tenant",
|
||||
Path: utils.MetaTmp + utils.NestingSep + utils.Tenant, Type: utils.MetaVariable,
|
||||
Value: config.NewRSRParsersMustCompile("cgrates.org", true, utils.INFIELD_SEP)},
|
||||
&config.FCTemplate{Tag: "Account",
|
||||
Path: utils.MetaTmp + utils.NestingSep + utils.Account, Type: utils.MetaVariable,
|
||||
Value: config.NewRSRParsersMustCompile("~*cgreq.Account", true, utils.INFIELD_SEP)},
|
||||
}
|
||||
eMp := config.NewNavigableMap(nil)
|
||||
eMp.Set([]string{utils.Tenant}, []*config.NMItem{
|
||||
&config.NMItem{Data: "cgrates.org", Path: []string{utils.Tenant},
|
||||
Config: tplFlds[0]}}, false, true)
|
||||
eMp.Set([]string{utils.Account}, []*config.NMItem{
|
||||
&config.NMItem{Data: "1001", Path: []string{utils.Account},
|
||||
Config: tplFlds[1]}}, false, true)
|
||||
|
||||
if err := agReq.SetFields(tplFlds); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(agReq.tmp, eMp) {
|
||||
t.Errorf("expecting: %+v,\n received: %+v", eMp, agReq.tmp)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -552,6 +552,7 @@ const (
|
||||
MetaExp = "*exp"
|
||||
MetaHdr = "*hdr"
|
||||
MetaTrl = "*trl"
|
||||
MetaTmp = "*tmp"
|
||||
CGROriginHost = "cgr_originhost"
|
||||
MetaInitiate = "*initiate"
|
||||
MetaUpdate = "*update"
|
||||
|
||||
Reference in New Issue
Block a user