AssetREST { @POST @Path("/resources/grant") @Produces({ "application/xml", "application/json" }) public VXPolicy grantPermission(@Context HttpServletRequest request,VXPolicy vXPolicy) { RESTResponse ret = null; if(logger.isDebugEnabled()) { logger.debug("==> AssetREST.grantPermission(" + vXPolicy + ")"); } if ( vXPolicy != null) { String serviceName = vXPolicy.getRepositoryName(); GrantRevokeRequest grantRevokeRequest = serviceUtil.toGrantRevokeRequest(vXPolicy); try { ret = serviceREST.grantAccess(serviceName, grantRevokeRequest, request); } catch(WebApplicationException excp) { throw excp; } catch (Throwable e) { logger.error( HttpServletResponse.SC_BAD_REQUEST + "Grant Access Failed for the request " + vXPolicy, e); throw restErrorUtil.createRESTException("Grant Access Failed for the request: " + vXPolicy + ". " + e.getMessage()); } } else { logger.error( HttpServletResponse.SC_BAD_REQUEST + "Bad Request parameter"); throw restErrorUtil.createRESTException("Bad Request parameter"); } if(logger.isDebugEnabled()) { logger.debug("<== AssetREST.grantPermission(" + ret + ")"); } return vXPolicy; }  @GET @Path("/assets/{id}") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_X_ASSET + "\")") VXAsset getXAsset(@PathParam("id") Long id); @POST @Path("/assets") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.CREATE_X_ASSET + "\")") VXAsset createXAsset(VXAsset vXAsset); @PUT @Path("/assets/{id}") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.UPDATE_X_ASSET + "\")") VXAsset updateXAsset(VXAsset vXAsset); @DELETE @Path("/assets/{id}") @RangerAnnotationClassName(class_name = VXAsset.class) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.DELETE_X_ASSET + "\")") void deleteXAsset(@PathParam("id") Long id,
			@Context HttpServletRequest request); @POST @Path("/assets/testConfig") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.TEST_CONFIG + "\")") VXResponse configTest(VXAsset vXAsset); @GET @Path("/assets") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.SEARCH_X_ASSETS + "\")") VXAssetList searchXAssets(@Context HttpServletRequest request); @GET @Path("/assets/count") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.COUNT_X_ASSETS + "\")") VXLong countXAssets(@Context HttpServletRequest request); @GET @Path("/resources/{id}") @Produces({ "application/xml", "application/json" }) VXResource getXResource(@PathParam("id") Long id); @POST @Path("/resources") @Produces({ "application/xml", "application/json" }) VXResource createXResource(VXResource vXResource); @PUT @Path("/resources/{id}") @Produces({ "application/xml", "application/json" }) VXResource updateXResource(VXResource vXResource); @DELETE @Path("/resources/{id}") @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") @RangerAnnotationClassName(class_name = VXResource.class) void deleteXResource(@PathParam("id") Long id,
			@Context HttpServletRequest request); @GET @Path("/resources") @Produces({ "application/xml", "application/json" }) VXResourceList searchXResources(@Context HttpServletRequest request); @GET @Path("/resources/count") @Produces({ "application/xml", "application/json" }) VXLong countXResources(@Context HttpServletRequest request); @GET @Path("/credstores/{id}") @Produces({ "application/xml", "application/json" }) VXCredentialStore getXCredentialStore(@PathParam("id") Long id); @POST @Path("/credstores") @Produces({ "application/xml", "application/json" }) VXCredentialStore createXCredentialStore(
			VXCredentialStore vXCredentialStore); @PUT @Path("/credstores") @Produces({ "application/xml", "application/json" }) VXCredentialStore updateXCredentialStore(
			VXCredentialStore vXCredentialStore); @DELETE @Path("/credstores/{id}") @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") @RangerAnnotationClassName(class_name = VXCredentialStore.class) void deleteXCredentialStore(@PathParam("id") Long id,
			@Context HttpServletRequest request); @GET @Path("/credstores") @Produces({ "application/xml", "application/json" }) VXCredentialStoreList searchXCredentialStores(
			@Context HttpServletRequest request); @GET @Path("/credstores/count") @Produces({ "application/xml", "application/json" }) VXLong countXCredentialStores(@Context HttpServletRequest request); @GET @Path("/resource/{id}") Response getXResourceFile(@Context HttpServletRequest request,
			@PathParam("id") Long id); @GET @Path("/policyList/{repository}") @Encoded String getResourceJSON(@Context HttpServletRequest request,
			@PathParam("repository") String repository); @GET @Path("/exportAudit") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.SEARCH_X_POLICY_EXPORT_AUDITS + "\")") VXPolicyExportAuditList searchXPolicyExportAudits(
			@Context HttpServletRequest request); @GET @Path("/report") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_REPORT_LOGS + "\")") VXTrxLogList getReportLogs(@Context HttpServletRequest request); @GET @Path("/report/{transactionId}") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_TRANSACTION_REPORT + "\")") VXTrxLogList getTransactionReport(@Context HttpServletRequest request,
			@PathParam("transactionId") String transactionId); @GET @Path("/accessAudit") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_ACCESS_LOGS + "\")") VXAccessAuditList getAccessLogs(@Context HttpServletRequest request); @POST @Path("/resources/grant") @Produces({ "application/xml", "application/json" }) VXPolicy grantPermission(@Context HttpServletRequest request,VXPolicy vXPolicy); @POST @Path("/resources/revoke") @Produces({ "application/xml", "application/json" }) VXPolicy revokePermission(@Context HttpServletRequest request,VXPolicy vXPolicy); @GET @Path("/ugsyncAudits") @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_UGSYNC_AUDITS + "\")") VXUgsyncAuditInfoList getUgsyncAudits(@Context HttpServletRequest request); @GET @Path("/ugsyncAudits/{syncSource}") @Encoded @Produces({ "application/xml", "application/json" }) @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_UGSYNC_AUDITS_BY_SYNCSOURCE + "\")") VXUgsyncAuditInfoList getUgsyncAuditsBySyncSource(@PathParam("syncSource") String syncSource);  }
@Test public void testGrantPermission() { RangerPolicy policy = rangerPolicy(Id); RangerService service = rangerService(Id); VXPolicy vXPolicy = vXPolicy(policy, service); GrantRevokeRequest grantRequestObj = new GrantRevokeRequest(); grantRequestObj.setAccessTypes(null); grantRequestObj.setDelegateAdmin(true); grantRequestObj.setEnableAudit(true); grantRequestObj.setGrantor("read"); grantRequestObj.setIsRecursive(true); RESTResponse response = Mockito.mock(RESTResponse.class); Mockito.when(serviceUtil.toGrantRevokeRequest(vXPolicy)).thenReturn(grantRequestObj); try { Mockito.when(serviceREST.grantAccess(vXPolicy.getRepositoryName(), grantRequestObj, request)) .thenReturn(response); } catch (Exception e) { fail("test failed due to: " + e.getMessage()); } VXPolicy expectedVXPolicy = assetREST.grantPermission(request, vXPolicy); Assert.assertEquals(vXPolicy, expectedVXPolicy); Mockito.verify(serviceUtil).toGrantRevokeRequest(vXPolicy); try { Mockito.verify(serviceREST).grantAccess(vXPolicy.getRepositoryName(), grantRequestObj, request); } catch (Exception e) { fail("test failed due to: " + e.getMessage()); } }
@Test public void testGrantPermissionWebApplicationException() { RangerPolicy policy = rangerPolicy(Id); RangerService service = rangerService(Id); VXPolicy vXPolicy = vXPolicy(policy, service); GrantRevokeRequest grantRequestObj = new GrantRevokeRequest(); grantRequestObj.setAccessTypes(null); grantRequestObj.setDelegateAdmin(true); grantRequestObj.setEnableAudit(true); grantRequestObj.setGrantor("read"); grantRequestObj.setIsRecursive(true); WebApplicationException webApplicationException = new WebApplicationException(); Mockito.when(serviceUtil.toGrantRevokeRequest(vXPolicy)).thenReturn(grantRequestObj); try { Mockito.when(serviceREST.grantAccess(vXPolicy.getRepositoryName(), grantRequestObj, request)) .thenThrow(webApplicationException); } catch (Exception e) { fail("test failed due to: " + e.getMessage()); } try { assetREST.grantPermission(request, vXPolicy); fail("Exception not thrown"); } catch (WebApplicationException e) { Assert.assertTrue(true); } Mockito.verify(serviceUtil).toGrantRevokeRequest(vXPolicy); try { Mockito.verify(serviceREST).grantAccess(vXPolicy.getRepositoryName(), grantRequestObj, request); } catch (Exception e) { fail("test failed due to: " + e.getMessage()); } }