diff --git a/agents/agentreq.go b/agents/agentreq.go index 543fa0dfb..f160dce7f 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -98,10 +98,12 @@ func (ar *AgentRequest) FieldAsInterface(fldPath []string) (val interface{}, err // FieldAsString implements engine.DataProvider func (ar *AgentRequest) FieldAsString(fldPath []string) (val string, err error) { var iface interface{} - if iface, err = ar.FieldAsInterface(fldPath); err != nil { return } + if nmItems, isNMItems := iface.([]*config.NMItem); isNMItems { // special handling of NMItems, take the last value out of it + iface = nmItems[len(nmItems)-1].Data // could be we need nil protection here + } return utils.IfaceAsString(iface) } @@ -130,7 +132,7 @@ func (ar *AgentRequest) AsNavigableMap(tplFlds []*config.FCTemplate) ( } else { valSet = nMFields.([]*config.NMItem) // start from previous stored fields if tplFld.Type == utils.META_COMPOSED { - prevNMItem := valSet[len(valSet)-1] + prevNMItem := valSet[len(valSet)-1] // could be we need nil protection here prevDataStr, err := utils.IfaceAsString(prevNMItem.Data) if err != nil { return nil, err diff --git a/agents/diam_it_test.go b/agents/diam_it_test.go index ed7966011..c1ac278e7 100644 --- a/agents/diam_it_test.go +++ b/agents/diam_it_test.go @@ -288,6 +288,16 @@ func testDiamItDryRun(t *testing.T) { t.Errorf("expecting: 100, received: <%s>", val) } } + eVal = "6" // sum of items + if avps, err := msg.FindAVPsWithPath([]interface{}{"Granted-Service-Unit", "CC-Time"}, dict.UndefinedVendorID); err != nil { + t.Error(err) + } else if len(avps) == 0 { + t.Error("Missing AVP") + } else if val, err := diamAVPAsString(avps[0]); err != nil { + t.Error(err) + } else if val != eVal { + t.Errorf("expecting: %s, received: <%s>", eVal, val) + } } } diff --git a/data/conf/samples/diamagent/dryrun.json b/data/conf/samples/diamagent/dryrun.json index 7b0aac433..72eda2cec 100644 --- a/data/conf/samples/diamagent/dryrun.json +++ b/data/conf/samples/diamagent/dryrun.json @@ -24,7 +24,7 @@ "type": "*constant", "value": "65000","new_branch": true}, {"tag": "RatingGroup", "field_id": "Multiple-Services-Credit-Control.Rating-Group", "type": "*constant", "value": "100","new_branch": true}, - {"tag": "LastUsed", "field_id": "LastUsed", "type": "*sum", + {"tag": "GrantedUsage", "field_id": "Granted-Service-Unit.CC-Time", "type": "*sum", "value": "~*cgreq.Val1;~*cgreq.Val2;~*cgreq.Val3"}, ], },