From 797b85ea795cf171cc0655db0bbca17d05ea7036 Mon Sep 17 00:00:00 2001 From: DanB Date: Tue, 4 Feb 2020 18:41:44 +0100 Subject: [PATCH] DiameterAgent with mysql integration tests passing for full path --- agents/agentreq.go | 2 +- agents/diam_it_test.go | 6 +--- agents/diamagent.go | 20 +++++------ agents/libdiam.go | 5 ++- config/config_defaults.go | 36 +++++++++---------- data/conf/samples/diamagent_mysql/dryrun.json | 6 ++-- data/conf/samples/diamagent_mysql/voice.json | 2 +- engine/libtest.go | 1 - 8 files changed, 36 insertions(+), 42 deletions(-) diff --git a/agents/agentreq.go b/agents/agentreq.go index 1aca6a7cd..17cd803d8 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -172,8 +172,8 @@ func (ar *AgentRequest) SetFields(tplFlds []*config.FCTemplate) (err error) { prevNMItem := valSet[len(valSet)-1] // could be we need nil protection here *nMItm = *prevNMItem // inherit the particularities, ie AttributeName nMItm.Data = utils.IfaceAsString(prevNMItem.Data) + utils.IfaceAsString(out) + valSet = valSet[:len(valSet)-1] // discard the last item since we have captured it in nmItem } - valSet = valSet[:len(valSet)-1] // discard the last item } valSet = append(valSet, nMItm) switch fldPath[0] { diff --git a/agents/diam_it_test.go b/agents/diam_it_test.go index 7d468ec0f..65ac26651 100644 --- a/agents/diam_it_test.go +++ b/agents/diam_it_test.go @@ -67,7 +67,6 @@ var ( // Test start here func TestDiamItTcp(t *testing.T) { - engine.KillEngine(0) switch *dbType { case utils.MetaInternal: diamConfigDIR = "diamagent_internal" @@ -98,12 +97,10 @@ func TestDiamItDispatcher(t *testing.T) { for _, stest := range sTestsDiam { t.Run(diamConfigDIR, stest) } - engine.KillEngine(100) isDispatcherActive = false } func TestDiamItSctp(t *testing.T) { - engine.KillEngine(0) switch *dbType { case utils.MetaInternal: diamConfigDIR = "diamsctpagent_internal" @@ -122,7 +119,6 @@ func TestDiamItSctp(t *testing.T) { } func TestDiamItMaxConn(t *testing.T) { - engine.KillEngine(0) switch *dbType { case utils.MetaInternal: diamConfigDIR = "diamagentmaxconn_internal" @@ -143,7 +139,6 @@ func TestDiamItMaxConn(t *testing.T) { } func TestDiamItSessionDisconnect(t *testing.T) { - engine.KillEngine(0) switch *dbType { case utils.MetaInternal: diamConfigDIR = "diamagent_internal" @@ -380,6 +375,7 @@ func testDiamItDryRun(t *testing.T) { } else if val != eVal { t.Errorf("expecting: %s, received: <%s>", eVal, val) } + eVal = "cgrates;1451911932;00082" if avps, err := msg.FindAVPsWithPath([]interface{}{"Session-Id"}, dict.UndefinedVendorID); err != nil { t.Error(err) diff --git a/agents/diamagent.go b/agents/diamagent.go index 12933867f..f8af2df29 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -153,7 +153,8 @@ func (da *DiameterAgent) handleMessage(c diam.Conn, m *diam.Message) { utils.RemoteHost: c.RemoteAddr().String(), } // build the negative error answer - diamErr, err := diamErr(m, diam.UnableToComply, reqVars, + diamErr, err := diamErr( + m, diam.UnableToComply, reqVars, da.cgrCfg.DiameterAgentCfg().Templates[utils.MetaErr], da.cgrCfg.GeneralCfg().DefaultTenant, da.cgrCfg.GeneralCfg().DefaultTimezone, @@ -248,7 +249,7 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, reqProcessor.Filters, agReq); err != nil || !pass { return pass, err } - if agReq.CGRRequest, err = agReq.AsNavigableMap(reqProcessor.RequestFields); err != nil { + if err = agReq.SetFields(reqProcessor.RequestFields); err != nil { return } cgrEv := agReq.CGRRequest.AsCGREvent(agReq.Tenant, utils.NestingSep) @@ -406,10 +407,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, agReq.CGRReply.Set([]string{utils.Error}, err.Error(), false, false) } } - if nM, err := agReq.AsNavigableMap(reqProcessor.ReplyFields); err != nil { - return false, err - } else { - agReq.Reply.Merge(nM) + if err = agReq.SetFields(reqProcessor.ReplyFields); err != nil { + return } if reqProcessor.Flags.HasKey(utils.MetaLog) { utils.Logger.Info( @@ -454,15 +453,16 @@ func (da *DiameterAgent) V1DisconnectSession(args utils.AttrDisconnectSession, r nil, da.cgrCfg.GeneralCfg().DefaultTenant, da.cgrCfg.GeneralCfg().DefaultTimezone, da.filterS, nil, nil) - nM, err := aReq.AsNavigableMap(da.cgrCfg.DiameterAgentCfg().Templates[da.cgrCfg.DiameterAgentCfg().ASRTemplate]) - if err != nil { + if err = aReq.SetFields(da.cgrCfg.DiameterAgentCfg().Templates[da.cgrCfg.DiameterAgentCfg().ASRTemplate]); err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> cannot disconnect session with OriginID: <%s>, err: %s", utils.DiameterAgent, ssID, err.Error())) return utils.ErrServerError } - m := diam.NewRequest(dmd.m.Header.CommandCode, dmd.m.Header.ApplicationID, dmd.m.Dictionary()) - if err = updateDiamMsgFromNavMap(m, nM, da.cgrCfg.GeneralCfg().DefaultTimezone); err != nil { + m := diam.NewRequest(dmd.m.Header.CommandCode, + dmd.m.Header.ApplicationID, dmd.m.Dictionary()) + if err = updateDiamMsgFromNavMap(m, aReq.diamreq, + da.cgrCfg.GeneralCfg().DefaultTimezone); err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> cannot disconnect session with OriginID: <%s>, err: %s", utils.DiameterAgent, ssID, err.Error())) diff --git a/agents/libdiam.go b/agents/libdiam.go index 93064c758..7c9157d59 100644 --- a/agents/libdiam.go +++ b/agents/libdiam.go @@ -482,11 +482,10 @@ func diamErr(m *diam.Message, resCode uint32, config.NewNavigableMap(nil), config.NewNavigableMap(nil), nil, tnt, tmz, filterS, nil, nil) - var rplyData *config.NavigableMap - if rplyData, err = aReq.AsNavigableMap(tpl); err != nil { + if err = aReq.SetFields(tpl); err != nil { return } - return diamAnswer(m, resCode, true, rplyData, tmz) + return diamAnswer(m, resCode, true, aReq.Reply, tmz) } func diamBareErr(m *diam.Message, resCode uint32) (a *diam.Message) { diff --git a/config/config_defaults.go b/config/config_defaults.go index eebcfb27f..0d9660417 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -417,45 +417,45 @@ const CGRATES_CFG_JSON = ` "asr_template": "", // enable AbortSession message being sent to client on DisconnectSession "templates":{ // default message templates "*err": [ - {"tag": "SessionId", "path": "Session-Id", "type": "*variable", + {"tag": "SessionId", "path": "*rep.Session-Id", "type": "*variable", "value": "~*req.Session-Id", "mandatory": true}, - {"tag": "OriginHost", "path": "Origin-Host", "type": "*variable", + {"tag": "OriginHost", "path": "*rep.Origin-Host", "type": "*variable", "value": "~*vars.OriginHost", "mandatory": true}, - {"tag": "OriginRealm", "path": "Origin-Realm", "type": "*variable", + {"tag": "OriginRealm", "path": "*rep.Origin-Realm", "type": "*variable", "value": "~*vars.OriginRealm", "mandatory": true}, ], "*cca": [ - {"tag": "SessionId", "path": "Session-Id", "type": "*variable", + {"tag": "SessionId", "path": "*rep.Session-Id", "type": "*variable", "value": "~*req.Session-Id", "mandatory": true}, - {"tag": "ResultCode", "path": "Result-Code", "type": "*constant", + {"tag": "ResultCode", "path": "*rep.Result-Code", "type": "*constant", "value": "2001"}, - {"tag": "OriginHost", "path": "Origin-Host", "type": "*variable", + {"tag": "OriginHost", "path": "*rep.Origin-Host", "type": "*variable", "value": "~*vars.OriginHost", "mandatory": true}, - {"tag": "OriginRealm", "path": "Origin-Realm", "type": "*variable", + {"tag": "OriginRealm", "path": "*rep.Origin-Realm", "type": "*variable", "value": "~*vars.OriginRealm", "mandatory": true}, - {"tag": "AuthApplicationId", "path": "Auth-Application-Id", "type": "*variable", + {"tag": "AuthApplicationId", "path": "*rep.Auth-Application-Id", "type": "*variable", "value": "~*vars.*appid", "mandatory": true}, - {"tag": "CCRequestType", "path": "CC-Request-Type", "type": "*variable", + {"tag": "CCRequestType", "path": "*rep.CC-Request-Type", "type": "*variable", "value": "~*req.CC-Request-Type", "mandatory": true}, - {"tag": "CCRequestNumber", "path": "CC-Request-Number", "type": "*variable", + {"tag": "CCRequestNumber", "path": "*rep.CC-Request-Number", "type": "*variable", "value": "~*req.CC-Request-Number", "mandatory": true}, ], "*asr": [ - {"tag": "SessionId", "path": "Session-Id", "type": "*variable", + {"tag": "SessionId", "path": "*diamreq.Session-Id", "type": "*variable", "value": "~*req.Session-Id", "mandatory": true}, - {"tag": "OriginHost", "path": "Origin-Host", "type": "*variable", + {"tag": "OriginHost", "path": "*diamreq.Origin-Host", "type": "*variable", "value": "~*req.Destination-Host", "mandatory": true}, - {"tag": "OriginRealm", "path": "Origin-Realm", "type": "*variable", + {"tag": "OriginRealm", "path": "*diamreq.Origin-Realm", "type": "*variable", "value": "~*req.Destination-Realm", "mandatory": true}, - {"tag": "DestinationRealm", "path": "Destination-Realm", "type": "*variable", + {"tag": "DestinationRealm", "path": "*diamreq.Destination-Realm", "type": "*variable", "value": "~*req.Origin-Realm", "mandatory": true}, - {"tag": "DestinationHost", "path": "Destination-Host", "type": "*variable", + {"tag": "DestinationHost", "path": "*diamreq.Destination-Host", "type": "*variable", "value": "~*req.Origin-Host", "mandatory": true}, - {"tag": "AuthApplicationId", "path": "Auth-Application-Id", "type": "*variable", + {"tag": "AuthApplicationId", "path": "*diamreq.Auth-Application-Id", "type": "*variable", "value": "~*vars.*appid", "mandatory": true}, - {"tag": "UserName", "path": "User-Name", "type": "*variable", + {"tag": "UserName", "path": "*diamreq.User-Name", "type": "*variable", "value": "~*req.User-Name", "mandatory": true}, - {"tag": "OriginStateID", "path": "Origin-State-Id", "type": "*constant", + {"tag": "OriginStateID", "path": "*diamreq.Origin-State-Id", "type": "*constant", "value": "1"}, ] }, diff --git a/data/conf/samples/diamagent_mysql/dryrun.json b/data/conf/samples/diamagent_mysql/dryrun.json index 2dbd4525b..e01b360e0 100644 --- a/data/conf/samples/diamagent_mysql/dryrun.json +++ b/data/conf/samples/diamagent_mysql/dryrun.json @@ -90,19 +90,19 @@ }, { "tag": "RatingGroup", - "path": "*cgreq.Multiple-Services-Credit-Control.Rating-Group", + "path": "*rep.Multiple-Services-Credit-Control.Rating-Group", "type": "*constant", "value": "1" }, { "tag": "CCTotalOctets1", - "path": "*cgreq.Multiple-Services-Credit-Control.Used-Service-Unit.CC-Total-Octets", + "path": "*rep.Multiple-Services-Credit-Control.Used-Service-Unit.CC-Total-Octets", "type": "*variable", "value": "~*cgreq.UsedUnits1" }, { "tag": "GrantedUsage", - "path": "*cgreq.Granted-Service-Unit.CC-Time", + "path": "*rep.Granted-Service-Unit.CC-Time", "type": "*sum", "value": "~*cgreq.Val1;~*cgreq.Val2;~*cgreq.Val3"}, ], diff --git a/data/conf/samples/diamagent_mysql/voice.json b/data/conf/samples/diamagent_mysql/voice.json index d06e3fcc1..337b751f2 100644 --- a/data/conf/samples/diamagent_mysql/voice.json +++ b/data/conf/samples/diamagent_mysql/voice.json @@ -270,7 +270,7 @@ }, { "tag": "LastUsed", - "path": "LastUsed", + "path": "*cgreq.LastUsed", "type": "*variable", "value": "~*req.Used-Service-Unit.CC-Time:s/(.*)/${1}s/", "mandatory": true diff --git a/engine/libtest.go b/engine/libtest.go index de35b29ee..5bbf6c388 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -296,7 +296,6 @@ func InitDataDb(cfg *config.CGRConfig) error { if err := dm.DataDB().Flush(""); err != nil { return err } - //dm.LoadDataDBCache(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) // Write version before starting if err := OverwriteDBVersions(dm.dataDB); err != nil { return err