mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-25 09:08:45 +05:00
radagent: return ErrNotFound for missing radius attributes
This commit is contained in:
committed by
Dan Christian Bogos
parent
fb03793c6b
commit
9e49897666
@@ -640,15 +640,11 @@ func TestAgReqParseFieldRadius(t *testing.T) {
|
||||
for _, v := range tplFlds {
|
||||
v.ComputePath()
|
||||
}
|
||||
expected := ""
|
||||
if out, err := agReq.ParseField(tplFlds[0]); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(out, expected) {
|
||||
t.Errorf("expecting: <%+v>, received: <%+v>", expected, out)
|
||||
if _, err := agReq.ParseField(tplFlds[0]); err != utils.ErrNotFound {
|
||||
t.Errorf("expected ErrNotFound, got: %v", err)
|
||||
}
|
||||
if _, err := agReq.ParseField(tplFlds[1]); err == nil ||
|
||||
err.Error() != "Empty source value for fieldID: <MandatoryTrue>" {
|
||||
t.Error(err)
|
||||
if _, err := agReq.ParseField(tplFlds[1]); err != utils.ErrNotFound {
|
||||
t.Errorf("expected ErrNotFound, got: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,9 +52,8 @@ func radAppendAttributes(packet *radigo.Packet, nm *utils.OrderedNavigableMap) e
|
||||
}
|
||||
|
||||
// newRADataProvider constructs a DataProvider
|
||||
func newRADataProvider(req *radigo.Packet) (dP utils.DataProvider) {
|
||||
dP = &radiusDP{req: req, cache: utils.MapStorage{}}
|
||||
return
|
||||
func newRADataProvider(req *radigo.Packet) utils.DataProvider {
|
||||
return &radiusDP{req: req, cache: utils.MapStorage{}}
|
||||
}
|
||||
|
||||
// radiusDP implements utils.DataProvider, serving as radigo.Packet data decoder
|
||||
@@ -71,17 +70,16 @@ func (pk *radiusDP) String() string {
|
||||
}
|
||||
|
||||
// FieldAsInterface is part of utils.DataProvider interface
|
||||
func (pk *radiusDP) FieldAsInterface(fldPath []string) (data any, err error) {
|
||||
func (pk *radiusDP) FieldAsInterface(fldPath []string) (any, error) {
|
||||
if len(fldPath) == 0 || len(fldPath) > 2 {
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
if data, err = pk.cache.FieldAsInterface(fldPath); err != nil {
|
||||
if err != utils.ErrNotFound { // item found in cache
|
||||
return
|
||||
}
|
||||
err = nil // cancel previous err
|
||||
} else {
|
||||
return // data found in cache
|
||||
data, err := pk.cache.FieldAsInterface(fldPath)
|
||||
if err == nil {
|
||||
return data, nil
|
||||
}
|
||||
if err != utils.ErrNotFound {
|
||||
return nil, err
|
||||
}
|
||||
var attrName, vendorName string
|
||||
if len(fldPath) == 2 {
|
||||
@@ -89,19 +87,20 @@ func (pk *radiusDP) FieldAsInterface(fldPath []string) (data any, err error) {
|
||||
} else {
|
||||
attrName = fldPath[0]
|
||||
}
|
||||
if avps := pk.req.AttributesWithName(attrName, vendorName); len(avps) != 0 {
|
||||
data = avps[0].GetStringValue()
|
||||
avps := pk.req.AttributesWithName(attrName, vendorName)
|
||||
if len(avps) == 0 {
|
||||
return nil, utils.ErrNotFound
|
||||
}
|
||||
data = avps[0].GetStringValue()
|
||||
pk.cache.Set(fldPath, data)
|
||||
return
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// FieldAsString is part of utils.DataProvider interface
|
||||
func (pk *radiusDP) FieldAsString(fldPath []string) (data string, err error) {
|
||||
var valIface any
|
||||
valIface, err = pk.FieldAsInterface(fldPath)
|
||||
func (pk *radiusDP) FieldAsString(fldPath []string) (string, error) {
|
||||
valIface, err := pk.FieldAsInterface(fldPath)
|
||||
if err != nil {
|
||||
return
|
||||
return "", err
|
||||
}
|
||||
return utils.IfaceAsString(valIface), nil
|
||||
}
|
||||
|
||||
@@ -173,10 +173,8 @@ func TestRadiusDPFieldAsInterfaceCached(t *testing.T) {
|
||||
t.Errorf("Expecting: pass123, received: <%v>", data)
|
||||
}
|
||||
|
||||
if data, err := dp.FieldAsInterface([]string{"Non-Existent-Field"}); err != nil {
|
||||
t.Error(err)
|
||||
} else if data != nil {
|
||||
t.Errorf("Expecting: nil, received: <%v>", data)
|
||||
if _, err := dp.FieldAsInterface([]string{"Non-Existent-Field"}); err != utils.ErrNotFound {
|
||||
t.Errorf("expected ErrNotFound, got: %v", err)
|
||||
}
|
||||
|
||||
if _, err := dp.FieldAsInterface([]string{"vendor", "attribute", "extra"}); err != utils.ErrNotFound {
|
||||
@@ -197,6 +195,17 @@ func TestRadiusDPFieldAsInterfaceVSA(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRadiusDPFieldAsInterfaceNotFound(t *testing.T) {
|
||||
pkt := radigo.NewPacket(radigo.AccountingRequest, 1, dictRad, coder, "CGRateS.org")
|
||||
dp := newRADataProvider(pkt)
|
||||
if _, err := dp.FieldAsInterface([]string{"Nonexistent-Attr"}); err != utils.ErrNotFound {
|
||||
t.Errorf("expected ErrNotFound, got: %v", err)
|
||||
}
|
||||
if _, err := dp.FieldAsInterface([]string{"Cisco", "Nonexistent-Attr"}); err != utils.ErrNotFound {
|
||||
t.Errorf("expected ErrNotFound for VSA, got: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLibradFieldAsInterfaceWithInvalidPathLength(t *testing.T) {
|
||||
pk := &radiusDP{}
|
||||
fldPath := []string{"vendor", "attribute", "extra"}
|
||||
|
||||
Reference in New Issue
Block a user