Add support for sending *dmr template via APIOpts

This commit is contained in:
ionutboangiu
2024-03-06 13:57:49 -05:00
committed by Dan Christian Bogos
parent ee98dbe0ca
commit c9b6c1fbb7
7 changed files with 28 additions and 19 deletions

View File

@@ -165,7 +165,6 @@ func (ra *RadiusAgent) handleAuth(reqPacket *radigo.Packet) (*radigo.Packet, err
utils.Logger.Warning(fmt.Sprintf(
"<%s> setting default *vars.*sessionID (used to track packets of active sessions) failed: %v",
utils.RadiusAgent, err))
}
var processed bool
@@ -500,14 +499,16 @@ func (ra *RadiusAgent) V1DisconnectSession(_ *context.Context, cgrEv utils.CGREv
}
originID := utils.IfaceAsString(ifaceOriginID)
reqVars := &utils.DataNode{
Type: utils.NMMapType,
Map: map[string]*utils.DataNode{
utils.DisconnectCause: utils.NewLeafNode(cgrEv.Event[utils.DisconnectCause]),
},
dmrTpl := ra.cgrCfg.RadiusAgentCfg().DMRTemplate
if optTpl, err := cgrEv.OptAsString(utils.MetaRadDMRTemplate); err == nil {
dmrTpl = optTpl
}
if _, found := ra.cgrCfg.TemplatesCfg()[dmrTpl]; !found {
return fmt.Errorf("%w: DMR Template %s", utils.ErrNotFound, dmrTpl)
}
replyCode, err := ra.sendRadDaReq(radigo.DisconnectRequest, ra.cgrCfg.RadiusAgentCfg().DMRTemplate, originID, nil, reqVars)
replyCode, err := ra.sendRadDaReq(radigo.DisconnectRequest, dmrTpl,
originID, utils.MapStorage(cgrEv.Event), nil)
if err != nil {
return err
}

View File

@@ -116,9 +116,12 @@ func TestRadiusCoADisconnect(t *testing.T) {
tPrfl := &engine.ThresholdProfileWithAPIOpts{
ThresholdProfile: &engine.ThresholdProfile{
Tenant: "cgrates.org",
ID: "THD_ACNT_1001",
FilterIDs: []string{"*string:~*opts.*eventType:AccountUpdate", "*string:~*req.ID:1001"},
Tenant: "cgrates.org",
ID: "THD_ACNT_1001",
FilterIDs: []string{
"*string:~*opts.*eventType:AccountUpdate",
"*string:~*req.AccountSummary.ID:1001",
},
//MinHits: 1,
MaxHits: 1,
ActionIDs: []string{"LOG_WARNING", "ACT_RAD_COA_ACNT_1001"},
@@ -151,7 +154,7 @@ func TestRadiusCoADisconnect(t *testing.T) {
if string(request.AVPs[0].RawValue) != "1001" ||
!bytes.Equal(request.AVPs[1].RawValue, decodedNasIPAddr) ||
string(request.AVPs[2].RawValue) != "e4921177ab0e3586c37f6a185864b71a@0:0:0:0:0:0:0:0" ||
string(request.AVPs[3].RawValue) != "FORCED_DISCONNECT" {
string(request.AVPs[3].RawValue) != "NORMAL_DISCONNECT" {
t.Errorf("unexpected request received: %v", utils.ToJSON(request))
reply.Code = radigo.DisconnectNAK
} else {
@@ -272,7 +275,11 @@ func TestRadiusCoADisconnect(t *testing.T) {
time.Sleep(1 * time.Second) // Give time for the ThresholdS to execute the *alter_sessions API
if err = raDiscRPC.Call(context.Background(), utils.SessionSv1ForceDisconnect,
nil, &reply); err != nil {
utils.SessionFilterWithEvent{
Event: map[string]any{
utils.DisconnectCause: "NORMAL_DISCONNECT",
},
}, &reply); err != nil {
t.Error(err)
}