diff --git a/agents/agentreq.go b/agents/agentreq.go index 07b58d729..c1d96b1a7 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -432,11 +432,11 @@ func (ar *AgentRequest) ParseField( out = strconv.Itoa(int(t.Unix())) case utils.MetaSIPCID: isString = true - values := make([]string, 1, len(cfgFld.Value)) if len(cfgFld.Value) < 1 { return nil, fmt.Errorf("invalid number of arguments <%s> to %s", utils.ToJSON(cfgFld.Value), utils.MetaSIPCID) } + values := make([]string, 1, len(cfgFld.Value)) if values[0], err = cfgFld.Value[0].ParseDataProvider(ar, utils.NestingSep); err != nil { return } diff --git a/agents/agentreq_test.go b/agents/agentreq_test.go index 014dd7b17..4e5a75d0d 100644 --- a/agents/agentreq_test.go +++ b/agents/agentreq_test.go @@ -1776,3 +1776,72 @@ func TestAgReqSetFieldsSIPCID(t *testing.T) { t.Errorf("expecting: %+v,\n received: %+v", eMp, agReq.Vars) } } + +func TestAgReqParseFieldMetaSIPCIDNotFoundErr(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) + + tplFld := &config.FCTemplate{ + Tag: "OriginID", + Path: utils.MetaVars + utils.NestingSep + "OriginID", Type: utils.MetaSIPCID, + Value: config.NewRSRParsersMustCompile("~*cgreq.cid;~*cgreq.to;~*cgreq.from", true, utils.INFIELD_SEP), + } + tplFld.ComputePath() + + if _, err := agReq.ParseField(tplFld); err == nil || + err.Error() != utils.ErrNotFound.Error() { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrNotFound, err) + } +} + +func TestAgReqParseFieldMetaSIPCIDWrongPath(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(utils.MapStorage{ + "cid": "12345", + "123": struct{}{}, + }, nil, nil, nil, nil, "cgrates.org", "", filterS, nil, nil) + + tplFld := &config.FCTemplate{ + Tag: "OriginID", + Path: utils.MetaVars + utils.NestingSep + "OriginID", + Type: utils.MetaSIPCID, + Value: config.NewRSRParsersMustCompile("~*req.cid;~*req.123.a", true, utils.INFIELD_SEP), + } + tplFld.ComputePath() + + if _, err := agReq.ParseField(tplFld); err == nil || + err.Error() != utils.ErrWrongPath.Error() { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", utils.ErrWrongPath, err) + } +} + +func TestAgReqParseFieldMetaSIPCIDInvalidArgs(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(&utils.FullPath{Path: "cid", PathItems: utils.PathItems{{Field: "cid"}}}, utils.NewNMData("12345")) + agReq.CGRRequest.Set(&utils.FullPath{Path: "to", PathItems: utils.PathItems{{Field: "to"}}}, utils.NewNMData("1002")) + agReq.CGRRequest.Set(&utils.FullPath{Path: "from", PathItems: utils.PathItems{{Field: "from"}}}, utils.NewNMData("1001")) + + tplFld := &config.FCTemplate{ + Tag: "OriginID", + Path: utils.MetaVars + utils.NestingSep + "OriginID", Type: utils.MetaSIPCID, + Value: config.NewRSRParsersMustCompile("", true, utils.INFIELD_SEP), + } + tplFld.ComputePath() + + experr := `invalid number of arguments to *sipcid` + if _, err := agReq.ParseField(tplFld); err == nil || + err.Error() != experr { + t.Errorf("expected: <%+v>, \nreceived: <%+v>", experr, err) + } +}