diff --git a/engine/resources.go b/engine/resources.go index 2c0d0eaf7..388b76d33 100755 --- a/engine/resources.go +++ b/engine/resources.go @@ -533,7 +533,10 @@ func (rS *ResourceService) V1ResourcesForEvent(args utils.ArgRSv1ResourceUsage, // V1AuthorizeResources queries service to find if an Usage is allowed func (rS *ResourceService) V1AuthorizeResources(args utils.ArgRSv1ResourceUsage, reply *string) (err error) { var alcMessage string - if missing := utils.MissingStructFields(&args, []string{"CGREvent.Tenant", "UsageID"}); len(missing) != 0 { //Params missing + if missing := utils.MissingStructFields(&args.CGREvent, []string{"Tenant"}); len(missing) != 0 { //Params missing + return utils.NewErrMandatoryIeMissing(missing...) + } + if missing := utils.MissingStructFields(&args, []string{"UsageID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } mtcRLs := rS.cachedResourcesForEvent(args.TenantID()) @@ -560,7 +563,10 @@ func (rS *ResourceService) V1AuthorizeResources(args utils.ArgRSv1ResourceUsage, // V1AllocateResource is called when a resource requires allocation func (rS *ResourceService) V1AllocateResource(args utils.ArgRSv1ResourceUsage, reply *string) (err error) { - if missing := utils.MissingStructFields(&args, []string{"CGREvent.Tenant", "UsageID"}); len(missing) != 0 { //Params missing + if missing := utils.MissingStructFields(&args.CGREvent, []string{"Tenant"}); len(missing) != 0 { //Params missing + return utils.NewErrMandatoryIeMissing(missing...) + } + if missing := utils.MissingStructFields(&args, []string{"UsageID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } var wasCached bool @@ -613,7 +619,10 @@ func (rS *ResourceService) V1AllocateResource(args utils.ArgRSv1ResourceUsage, r // V1ReleaseResource is called when we need to clear an allocation func (rS *ResourceService) V1ReleaseResource(args utils.ArgRSv1ResourceUsage, reply *string) (err error) { - if missing := utils.MissingStructFields(&args, []string{"CGREvent.Tenant", "UsageID"}); len(missing) != 0 { //Params missing + if missing := utils.MissingStructFields(&args.CGREvent, []string{"Tenant"}); len(missing) != 0 { //Params missing + return utils.NewErrMandatoryIeMissing(missing...) + } + if missing := utils.MissingStructFields(&args, []string{"UsageID"}); len(missing) != 0 { //Params missing return utils.NewErrMandatoryIeMissing(missing...) } mtcRLs := rS.cachedResourcesForEvent(args.UsageID) diff --git a/engine/resources_test.go b/engine/resources_test.go index c5a73ed68..a52f19f9c 100644 --- a/engine/resources_test.go +++ b/engine/resources_test.go @@ -259,3 +259,37 @@ func TestRSCacheSetGet(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", r, x) } } + +func TestV1AuthorizeResourceMissingStruct(t *testing.T) { + data, _ := NewMapStorage() + dmresmiss := NewDataManager(data) + + rserv := &ResourceService{ + dm: dmresmiss, + filterS: &FilterS{dm: dmresmiss}, + indexedFields: []string{}, // speed up query on indexes + } + var reply *string + argsMissingTenant := utils.ArgRSv1ResourceUsage{ + CGREvent: utils.CGREvent{ + ID: "id1", + Event: map[string]interface{}{}, + }, + UsageID: "test1", // ResourceUsage Identifier + Units: 20, + } + argsMissingUsageID := utils.ArgRSv1ResourceUsage{ + CGREvent: utils.CGREvent{ + Tenant: "cgrates.org", + ID: "id1", + Event: map[string]interface{}{}, + }, + Units: 20, + } + if err := rserv.V1AuthorizeResources(argsMissingTenant, reply); err.Error() != "MANDATORY_IE_MISSING: [Tenant]" { + t.Error(err.Error()) + } + if err := rserv.V1AuthorizeResources(argsMissingUsageID, reply); err.Error() != "MANDATORY_IE_MISSING: [UsageID]" { + t.Error(err.Error()) + } +}