Repository: incubator-ranger Updated Branches: refs/heads/master fabc9e205 -> c1de019f4
RANGER-392 : Implement update/delete of ServiceDef Object Signed-off-by: Velmurugan Periasamy <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/c1de019f Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/c1de019f Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/c1de019f Branch: refs/heads/master Commit: c1de019f45437c632ee4aaf97b9d43cd822a4183 Parents: fabc9e2 Author: Gautam Borad <[email protected]> Authored: Mon Apr 13 14:52:10 2015 +0530 Committer: Velmurugan Periasamy <[email protected]> Committed: Mon Apr 13 09:55:34 2015 -0400 ---------------------------------------------------------------------- .../org/apache/ranger/biz/ServiceDBStore.java | 520 ++++++++++++++++++- .../ranger/db/XXAccessTypeDefGrantsDao.java | 24 + .../java/org/apache/ranger/db/XXPolicyDao.java | 12 + .../apache/ranger/db/XXPolicyItemAccessDao.java | 12 + .../ranger/db/XXPolicyItemConditionDao.java | 12 + .../apache/ranger/db/XXPolicyResourceDao.java | 12 + .../org/apache/ranger/db/XXResourceDefDao.java | 12 + .../java/org/apache/ranger/db/XXServiceDao.java | 15 + .../ranger/entity/XXAccessTypeDefGrants.java | 8 +- .../org/apache/ranger/rest/PublicAPIsv2.java | 8 +- .../org/apache/ranger/rest/ServiceREST.java | 11 +- .../resources/META-INF/jpa_named_queries.xml | 37 +- .../org/apache/ranger/rest/TestServiceREST.java | 9 +- .../rest/TestServiceRESTForValidation.java | 11 +- 14 files changed, 674 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java index 7da3d8b..239723a 100644 --- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java @@ -57,6 +57,7 @@ import org.apache.ranger.db.XXPolicyResourceMapDao; import org.apache.ranger.db.XXResourceDefDao; import org.apache.ranger.db.XXServiceConfigDefDao; import org.apache.ranger.db.XXServiceConfigMapDao; +import org.apache.ranger.db.XXServiceDao; import org.apache.ranger.entity.XXAccessTypeDef; import org.apache.ranger.entity.XXAccessTypeDefGrants; import org.apache.ranger.entity.XXContextEnricherDef; @@ -287,8 +288,8 @@ public class ServiceDBStore extends AbstractServiceStore { XXAccessTypeDefGrantsDao xxATDGrantDao = daoMgr.getXXAccessTypeDefGrants(); for(String impliedGrant : impliedGrants) { XXAccessTypeDefGrants xImpliedGrant = new XXAccessTypeDefGrants(); - xImpliedGrant.setAtdid(xAccessType.getId()); - xImpliedGrant.setImpliedgrant(impliedGrant); + xImpliedGrant.setAtdId(xAccessType.getId()); + xImpliedGrant.setImpliedGrant(impliedGrant); xImpliedGrant = xxATDGrantDao.create(xImpliedGrant); } } @@ -345,34 +346,529 @@ public class ServiceDBStore extends AbstractServiceStore { } @Override - public RangerServiceDef updateServiceDef(RangerServiceDef serviceDef) - throws Exception { + public RangerServiceDef updateServiceDef(RangerServiceDef serviceDef) throws Exception { if (LOG.isDebugEnabled()) { LOG.debug("==> ServiceDefDBStore.updateServiceDef(" + serviceDef + ")"); } - RangerServiceDef ret = null; + Long serviceDefId = serviceDef.getId(); + + XXServiceDef existing = daoMgr.getXXServiceDef().getById(serviceDefId); + if (existing == null) { + throw restErrorUtil.createRESTException("no service-def exists with ID=" + serviceDef.getId(), + MessageEnums.DATA_NOT_FOUND); + } + + String existingName = existing.getName(); + + boolean renamed = !StringUtils.equalsIgnoreCase(serviceDef.getName(), existingName); + + if (renamed) { + XXServiceDef renamedSVCDef = daoMgr.getXXServiceDef().findByName(serviceDef.getName()); + + if (renamedSVCDef != null) { + throw restErrorUtil.createRESTException( + "another service-def already exists with name '" + serviceDef.getName() + "'. ID=" + + renamedSVCDef.getId(), MessageEnums.DATA_NOT_UPDATABLE); + } + } + + List<RangerServiceConfigDef> configs = serviceDef.getConfigs() != null ? serviceDef.getConfigs() : new ArrayList<RangerServiceConfigDef>(); + List<RangerResourceDef> resources = serviceDef.getResources() != null ? serviceDef.getResources() : new ArrayList<RangerResourceDef>(); + List<RangerAccessTypeDef> accessTypes = serviceDef.getAccessTypes() != null ? serviceDef.getAccessTypes() : new ArrayList<RangerAccessTypeDef>(); + List<RangerPolicyConditionDef> policyConditions = serviceDef.getPolicyConditions() != null ? serviceDef.getPolicyConditions() : new ArrayList<RangerPolicyConditionDef>(); + List<RangerContextEnricherDef> contextEnrichers = serviceDef.getContextEnrichers() != null ? serviceDef.getContextEnrichers() : new ArrayList<RangerContextEnricherDef>(); + List<RangerEnumDef> enums = serviceDef.getEnums() != null ? serviceDef.getEnums() : new ArrayList<RangerEnumDef>(); + + Long version = serviceDef.getVersion(); + if (version == null) { + version = new Long(1); + LOG.info("Found Version Value: `null`, so setting value of version to 1. While updating object version should not be null."); + } else { + version = new Long(version.longValue() + 1); + } + serviceDef.setVersion(version); + serviceDef = serviceDefService.update(serviceDef); + XXServiceDef createdSvcDef = daoMgr.getXXServiceDef().getById(serviceDefId); + + updateChildObjectsOfServiceDef(createdSvcDef, configs, resources, accessTypes, policyConditions, contextEnrichers, enums); - // TODO: updateServiceDef() + RangerServiceDef updatedSvcDef = getServiceDef(serviceDefId); + dataHistService.createObjectDataHistory(updatedSvcDef, RangerDataHistService.ACTION_UPDATE); if (LOG.isDebugEnabled()) { - LOG.debug("<== ServiceDefDBStore.updateServiceDef(" + serviceDef + "): " + ret); + LOG.debug("<== ServiceDefDBStore.updateServiceDef(" + serviceDef + "): " + serviceDef); } - return ret; + return updatedSvcDef; } + public void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<RangerServiceConfigDef> configs, + List<RangerResourceDef> resources, List<RangerAccessTypeDef> accessTypes, + List<RangerPolicyConditionDef> policyConditions, List<RangerContextEnricherDef> contextEnrichers, + List<RangerEnumDef> enums) { + + Long serviceDefId = createdSvcDef.getId(); + + List<XXServiceConfigDef> xxConfigs = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId); + List<XXResourceDef> xxResources = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId); + List<XXAccessTypeDef> xxAccessTypes = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId); + List<XXPolicyConditionDef> xxPolicyConditions = daoMgr.getXXPolicyConditionDef().findByServiceDefId( + serviceDefId); + List<XXContextEnricherDef> xxContextEnrichers = daoMgr.getXXContextEnricherDef().findByServiceDefId( + serviceDefId); + List<XXEnumDef> xxEnums = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId); + + XXServiceConfigDefDao xxServiceConfigDao = daoMgr.getXXServiceConfigDef(); + for (RangerServiceConfigDef config : configs) { + boolean found = false; + for (XXServiceConfigDef xConfig : xxConfigs) { + if (config.getId() != null && config.getId().equals(xConfig.getId())) { + found = true; + xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xConfig = xxServiceConfigDao.update(xConfig); + config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig); + break; + } + } + if (!found) { + XXServiceConfigDef xConfig = new XXServiceConfigDef(); + xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xConfig = xxServiceConfigDao.create(xConfig); + config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig); + } + } + for (XXServiceConfigDef xConfig : xxConfigs) { + boolean found = false; + for (RangerServiceConfigDef config : configs) { + if (xConfig.getId() != null && xConfig.getId().equals(config.getId())) { + found = true; + break; + } + } + if (!found) { + xxServiceConfigDao.remove(xConfig); + } + } + + XXResourceDefDao xxResDefDao = daoMgr.getXXResourceDef(); + for (RangerResourceDef resource : resources) { + boolean found = false; + for (XXResourceDef xRes : xxResources) { + if (resource.getId() != null && resource.getId().equals(xRes.getId())) { + found = true; + xRes = serviceDefService.populateRangerResourceDefToXX(resource, xRes, createdSvcDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xxResDefDao.update(xRes); + resource = serviceDefService.populateXXToRangerResourceDef(xRes); + break; + } + } + if (!found) { + XXResourceDef parent = xxResDefDao.findByNameAndServiceDefId(resource.getParent(), serviceDefId); + Long parentId = (parent != null) ? parent.getId() : null; + + XXResourceDef xResource = new XXResourceDef(); + xResource = serviceDefService.populateRangerResourceDefToXX(resource, xResource, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xResource.setParent(parentId); + xResource = xxResDefDao.create(xResource); + } + } + for (XXResourceDef xRes : xxResources) { + boolean found = false; + for (RangerResourceDef resource : resources) { + if (xRes.getId() != null && xRes.getId().equals(resource.getId())) { + found = true; + break; + } + } + if (!found) { + List<XXPolicyResource> policyResList = daoMgr.getXXPolicyResource().findByResDefId(xRes.getId()); + if (!stringUtil.isEmpty(policyResList)) { + throw restErrorUtil.createRESTException("Policy/Policies are referring to this resource: " + + xRes.getName() + ". Please remove such references from policy before updating service-def.", + MessageEnums.DATA_NOT_UPDATABLE); + } + deleteXXResourceDef(xRes); + } + } + + XXAccessTypeDefDao xxATDDao = daoMgr.getXXAccessTypeDef(); + for (RangerAccessTypeDef access : accessTypes) { + boolean found = false; + for (XXAccessTypeDef xAccess : xxAccessTypes) { + if (access.getId() != null && access.getId().equals(xAccess.getId())) { + found = true; + xAccess = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccess, createdSvcDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xAccess = xxATDDao.update(xAccess); + + Collection<String> impliedGrants = access.getImpliedGrants(); + XXAccessTypeDefGrantsDao xxATDGrantDao = daoMgr.getXXAccessTypeDefGrants(); + List<String> xxImpliedGrants = xxATDGrantDao.findImpliedGrantsByATDId(xAccess.getId()); + for (String impliedGrant : impliedGrants) { + boolean foundGrant = false; + for (String xImpliedGrant : xxImpliedGrants) { + if (StringUtils.equalsIgnoreCase(impliedGrant, xImpliedGrant)) { + foundGrant = true; + break; + } + } + if (!foundGrant) { + XXAccessTypeDefGrants xImpliedGrant = new XXAccessTypeDefGrants(); + xImpliedGrant.setAtdId(xAccess.getId()); + xImpliedGrant.setImpliedGrant(impliedGrant); + xImpliedGrant = xxATDGrantDao.create(xImpliedGrant); + } + } + for (String xImpliedGrant : xxImpliedGrants) { + boolean foundGrant = false; + for (String impliedGrant : impliedGrants) { + if (StringUtils.equalsIgnoreCase(xImpliedGrant, impliedGrant)) { + foundGrant = true; + break; + } + } + if (!foundGrant) { + XXAccessTypeDefGrants xATDGrant = xxATDGrantDao.findByNameAndATDId(xAccess.getId(), + xImpliedGrant); + xxATDGrantDao.remove(xATDGrant); + + } + } + access = serviceDefService.populateXXToRangerAccessTypeDef(xAccess); + break; + } + } + if (!found) { + XXAccessTypeDef xAccessType = new XXAccessTypeDef(); + xAccessType = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccessType, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xAccessType = xxATDDao.create(xAccessType); + + Collection<String> impliedGrants = access.getImpliedGrants(); + XXAccessTypeDefGrantsDao xxATDGrantDao = daoMgr.getXXAccessTypeDefGrants(); + for (String impliedGrant : impliedGrants) { + XXAccessTypeDefGrants xImpliedGrant = new XXAccessTypeDefGrants(); + xImpliedGrant.setAtdId(xAccessType.getId()); + xImpliedGrant.setImpliedGrant(impliedGrant); + xImpliedGrant = xxATDGrantDao.create(xImpliedGrant); + } + access = serviceDefService.populateXXToRangerAccessTypeDef(xAccessType); + } + } + + for (XXAccessTypeDef xAccess : xxAccessTypes) { + boolean found = false; + for (RangerAccessTypeDef access : accessTypes) { + if (xAccess.getId() != null && xAccess.getId().equals(access.getId())) { + found = true; + break; + } + } + if (!found) { + List<XXPolicyItemAccess> polItemAccessList = daoMgr.getXXPolicyItemAccess().findByType(xAccess.getId()); + if(!stringUtil.isEmpty(polItemAccessList)) { + throw restErrorUtil.createRESTException("Policy/Policies are referring to this access-type: " + + xAccess.getName() + ". Please remove such references from policy before updating service-def.", + MessageEnums.DATA_NOT_UPDATABLE); + } + deleteXXAccessTypeDef(xAccess); + } + } + + XXPolicyConditionDefDao xxPolCondDao = daoMgr.getXXPolicyConditionDef(); + for (RangerPolicyConditionDef condition : policyConditions) { + boolean found = false; + for (XXPolicyConditionDef xCondition : xxPolicyConditions) { + if (condition.getId() != null && condition.getId().equals(xCondition.getId())) { + found = true; + xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition, + createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xCondition = xxPolCondDao.update(xCondition); + condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition); + break; + } + } + if (!found) { + XXPolicyConditionDef xCondition = new XXPolicyConditionDef(); + xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition, + createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xCondition = xxPolCondDao.create(xCondition); + condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition); + } + } + for(XXPolicyConditionDef xCondition : xxPolicyConditions) { + boolean found = false; + for(RangerPolicyConditionDef condition : policyConditions) { + if(xCondition.getId() != null && xCondition.getId().equals(condition.getId())) { + found = true; + break; + } + } + if(!found) { + List<XXPolicyItemCondition> policyItemCondList = daoMgr.getXXPolicyItemCondition() + .findByPolicyConditionDefId(xCondition.getId()); + if(!stringUtil.isEmpty(policyItemCondList)) { + throw restErrorUtil.createRESTException("Policy/Policies are referring to this policy-condition: " + + xCondition.getName() + ". Please remove such references from policy before updating service-def.", + MessageEnums.DATA_NOT_UPDATABLE); + } + for(XXPolicyItemCondition policyItemCond : policyItemCondList) { + daoMgr.getXXPolicyItemCondition().remove(policyItemCond); + } + xxPolCondDao.remove(xCondition); + } + } + + XXContextEnricherDefDao xxContextEnricherDao = daoMgr.getXXContextEnricherDef(); + for (RangerContextEnricherDef context : contextEnrichers) { + boolean found = false; + for (XXContextEnricherDef xContext : xxContextEnrichers) { + if (context.getId() != null && context.getId().equals(xContext.getId())) { + found = true; + xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xContext = xxContextEnricherDao.update(xContext); + context = serviceDefService.populateXXToRangerContextEnricherDef(xContext); + break; + } + } + if (!found) { + XXContextEnricherDef xContext = new XXContextEnricherDef(); + xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + context = serviceDefService.populateXXToRangerContextEnricherDef(xContext); + } + } + for (XXContextEnricherDef xContext : xxContextEnrichers) { + boolean found = false; + for (RangerContextEnricherDef context : contextEnrichers) { + if (xContext.getId() != null && xContext.getId().equals(context.getId())) { + found = true; + break; + } + } + if (!found) { + daoMgr.getXXContextEnricherDef().remove(xContext); + } + } + + XXEnumDefDao xxEnumDefDao = daoMgr.getXXEnumDef(); + for (RangerEnumDef enumDef : enums) { + boolean found = false; + for (XXEnumDef xEnumDef : xxEnums) { + if (enumDef.getId() != null && enumDef.getId().equals(xEnumDef.getId())) { + found = true; + xEnumDef = serviceDefService.populateRangerEnumDefToXX(enumDef, xEnumDef, createdSvcDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xEnumDef = xxEnumDefDao.update(xEnumDef); + + XXEnumElementDefDao xEnumEleDao = daoMgr.getXXEnumElementDef(); + List<XXEnumElementDef> xxEnumEleDefs = xEnumEleDao.findByEnumDefId(xEnumDef.getId()); + List<RangerEnumElementDef> enumEleDefs = enumDef.getElements(); + + for (RangerEnumElementDef eleDef : enumEleDefs) { + boolean foundEle = false; + for (XXEnumElementDef xEleDef : xxEnumEleDefs) { + if (eleDef.getId() != null && eleDef.getId().equals(xEleDef.getId())) { + foundEle = true; + xEleDef = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xEleDef, xEnumDef, + RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xEleDef = xEnumEleDao.update(xEleDef); + break; + } + } + if (!foundEle) { + XXEnumElementDef xElement = new XXEnumElementDef(); + xElement = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xElement, xEnumDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xElement = xEnumEleDao.create(xElement); + } + } + for (XXEnumElementDef xxEleDef : xxEnumEleDefs) { + boolean foundEle = false; + for (RangerEnumElementDef enumEle : enumEleDefs) { + if (xxEleDef.getId() != null && xxEleDef.getId().equals(enumEle.getId())) { + foundEle = true; + break; + } + } + if (!foundEle) { + xEnumEleDao.remove(xxEleDef); + } + } + enumDef = serviceDefService.populateXXToRangerEnumDef(xEnumDef); + break; + } + } + if (!found) { + XXEnumDef xEnum = new XXEnumDef(); + xEnum = serviceDefService.populateRangerEnumDefToXX(enumDef, xEnum, createdSvcDef, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xEnum = xxEnumDefDao.create(xEnum); + + List<RangerEnumElementDef> elements = enumDef.getElements(); + XXEnumElementDefDao xxEnumEleDefDao = daoMgr.getXXEnumElementDef(); + for (RangerEnumElementDef element : elements) { + XXEnumElementDef xElement = new XXEnumElementDef(); + xElement = serviceDefService.populateRangerEnumElementDefToXX(element, xElement, xEnum, + RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xElement = xxEnumEleDefDao.create(xElement); + } + enumDef = serviceDefService.populateXXToRangerEnumDef(xEnum); + } + } + for (XXEnumDef xEnumDef : xxEnums) { + boolean found = false; + for (RangerEnumDef enumDef : enums) { + if (xEnumDef.getId() != null && xEnumDef.getId().equals(enumDef.getId())) { + found = true; + break; + } + } + if (!found) { + List<XXEnumElementDef> enumEleDefList = daoMgr.getXXEnumElementDef().findByEnumDefId(xEnumDef.getId()); + for (XXEnumElementDef eleDef : enumEleDefList) { + daoMgr.getXXEnumElementDef().remove(eleDef); + } + xxEnumDefDao.remove(xEnumDef); + } + } + } + @Override - public void deleteServiceDef(Long servceId) throws Exception { + public void deleteServiceDef(Long serviceDefId) throws Exception { + deleteServiceDef(serviceDefId, false); + } + + public void deleteServiceDef(Long serviceDefId, boolean forceDelete) throws Exception { if (LOG.isDebugEnabled()) { - LOG.debug("==> ServiceDefDBStore.deleteServiceDef(" + servceId + ")"); + LOG.debug("==> ServiceDefDBStore.deleteServiceDef(" + serviceDefId + ")"); } - // TODO: deleteServiceDef() + RangerServiceDef serviceDef = getServiceDef(serviceDefId); + if(serviceDef == null) { + throw restErrorUtil.createRESTException("No Service Definiton found for Id: " + serviceDefId, + MessageEnums.DATA_NOT_FOUND); + } + + if (!forceDelete) { + List<XXService> svcDefServiceList = daoMgr.getXXService().findByServiceDefId(serviceDefId); + if (!stringUtil.isEmpty(svcDefServiceList)) { + throw restErrorUtil.createRESTException( + "Services exists under given service definition, can't delete Service-Def: " + + serviceDef.getName(), MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY); + } + } + + List<XXAccessTypeDef> accTypeDefs = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId); + for(XXAccessTypeDef accessType : accTypeDefs) { + deleteXXAccessTypeDef(accessType); + } + + XXContextEnricherDefDao xContextEnricherDao = daoMgr.getXXContextEnricherDef(); + List<XXContextEnricherDef> contextEnrichers = xContextEnricherDao.findByServiceDefId(serviceDefId); + for(XXContextEnricherDef context : contextEnrichers) { + xContextEnricherDao.remove(context); + } + + XXEnumDefDao enumDefDao = daoMgr.getXXEnumDef(); + List<XXEnumDef> enumDefList = enumDefDao.findByServiceDefId(serviceDefId); + for (XXEnumDef enumDef : enumDefList) { + List<XXEnumElementDef> enumEleDefList = daoMgr.getXXEnumElementDef().findByEnumDefId(enumDef.getId()); + for (XXEnumElementDef eleDef : enumEleDefList) { + daoMgr.getXXEnumElementDef().remove(eleDef); + } + enumDefDao.remove(enumDef); + } + + XXPolicyConditionDefDao policyCondDao = daoMgr.getXXPolicyConditionDef(); + List<XXPolicyConditionDef> policyCondList = policyCondDao.findByServiceDefId(serviceDefId); + + for (XXPolicyConditionDef policyCond : policyCondList) { + List<XXPolicyItemCondition> policyItemCondList = daoMgr.getXXPolicyItemCondition().findByPolicyConditionDefId(policyCond.getId()); + for (XXPolicyItemCondition policyItemCond : policyItemCondList) { + daoMgr.getXXPolicyItemCondition().remove(policyItemCond); + } + policyCondDao.remove(policyCond); + } + + List<XXResourceDef> resDefList = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId); + for(XXResourceDef resDef : resDefList) { + deleteXXResourceDef(resDef); + } + + XXServiceConfigDefDao configDefDao = daoMgr.getXXServiceConfigDef(); + List<XXServiceConfigDef> configDefList = configDefDao.findByServiceDefId(serviceDefId); + for(XXServiceConfigDef configDef : configDefList) { + configDefDao.remove(configDef); + } + + XXServiceDao serviceDao = daoMgr.getXXService(); + List<XXService> serviceList = serviceDao.findByServiceDefId(serviceDefId); + for(XXService service : serviceList) { + deleteService(service.getId()); + } + + Long version = serviceDef.getVersion(); + if(version == null) { + version = new Long(1); + LOG.info("Found Version Value: `null`, so setting value of version to 1, While updating object, version should not be null."); + } else { + version = new Long(version.longValue() + 1); + } + serviceDef.setVersion(version); + + serviceDefService.delete(serviceDef); + LOG.info("ServiceDefinition has been deleted successfully. Service-Def Name: " + serviceDef.getName()); + + dataHistService.createObjectDataHistory(serviceDef, RangerDataHistService.ACTION_DELETE); if (LOG.isDebugEnabled()) { - LOG.debug("<== ServiceDefDBStore.deleteServiceDef(" + servceId + ")"); + LOG.debug("<== ServiceDefDBStore.deleteServiceDef(" + serviceDefId + ")"); + } + } + + public void deleteXXAccessTypeDef(XXAccessTypeDef xAccess) { + List<XXAccessTypeDefGrants> atdGrantsList = daoMgr.getXXAccessTypeDefGrants().findByATDId(xAccess.getId()); + + for (XXAccessTypeDefGrants atdGrant : atdGrantsList) { + daoMgr.getXXAccessTypeDefGrants().remove(atdGrant); + } + + List<XXPolicyItemAccess> policyItemAccessList = daoMgr.getXXPolicyItemAccess().findByType(xAccess.getId()); + for (XXPolicyItemAccess policyItemAccess : policyItemAccessList) { + daoMgr.getXXPolicyItemAccess().remove(policyItemAccess); + } + daoMgr.getXXAccessTypeDef().remove(xAccess); + } + + public void deleteXXResourceDef(XXResourceDef xRes) { + + List<XXResourceDef> xChildObjs = daoMgr.getXXResourceDef().findByParentResId(xRes.getId()); + for(XXResourceDef childRes : xChildObjs) { + deleteXXResourceDef(childRes); + } + + List<XXPolicyResource> xxResources = daoMgr.getXXPolicyResource().findByResDefId(xRes.getId()); + for (XXPolicyResource xPolRes : xxResources) { + deleteXXPolicyResource(xPolRes); + } + + daoMgr.getXXResourceDef().remove(xRes); + } + + public void deleteXXPolicyResource(XXPolicyResource xPolRes) { + List<XXPolicyResourceMap> polResMapList = daoMgr.getXXPolicyResourceMap().findByPolicyResId(xPolRes.getId()); + XXPolicyResourceMapDao polResMapDao = daoMgr.getXXPolicyResourceMap(); + for (XXPolicyResourceMap xxPolResMap : polResMapList) { + polResMapDao.remove(xxPolResMap); } + daoMgr.getXXPolicyResource().remove(xPolRes); } @Override http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java index 2ee8e9b..14e723e 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java @@ -47,4 +47,28 @@ public class XXAccessTypeDefGrantsDao extends BaseDao<XXAccessTypeDefGrants> { } } + public XXAccessTypeDefGrants findByNameAndATDId(Long atdId, String name) { + if (atdId == null || name == null) { + return null; + } + try { + return getEntityManager().createNamedQuery("XXAccessTypeDefGrants.findByNameAndATDId", tClass) + .setParameter("atdId", atdId).setParameter("name", name).getSingleResult(); + } catch (NoResultException e) { + return null; + } + } + + public List<XXAccessTypeDefGrants> findByATDId(Long atdId) { + if (atdId == null) { + return new ArrayList<XXAccessTypeDefGrants>(); + } + try { + return getEntityManager().createNamedQuery("XXAccessTypeDefGrants.findByATDId", tClass) + .setParameter("atdId", atdId).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXAccessTypeDefGrants>(); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java index e2f5a41..eb7c2aa 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java @@ -84,4 +84,16 @@ public class XXPolicyDao extends BaseDao<XXPolicy> { } } + public List<XXPolicy> findByServiceDefId(Long serviceDefId) { + if(serviceDefId == null) { + return new ArrayList<XXPolicy>(); + } + try { + return getEntityManager().createNamedQuery("XXPolicy.findByServiceDefId", tClass) + .setParameter("serviceDefId", serviceDefId).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXPolicy>(); + } + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java index a5a180a..d9952e0 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java @@ -44,4 +44,16 @@ public class XXPolicyItemAccessDao extends BaseDao<XXPolicyItemAccess> { } } + public List<XXPolicyItemAccess> findByType(Long type) { + if (type == null) { + return new ArrayList<XXPolicyItemAccess>(); + } + try { + return getEntityManager().createNamedQuery("XXPolicyItemAccess.findByType", tClass) + .setParameter("type", type).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXPolicyItemAccess>(); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java index 4296816..4ed59f1 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java @@ -59,4 +59,16 @@ public class XXPolicyItemConditionDao extends BaseDao<XXPolicyItemCondition> { } } + public List<XXPolicyItemCondition> findByPolicyConditionDefId(Long polCondDefId) { + if (polCondDefId == null) { + return new ArrayList<XXPolicyItemCondition>(); + } + try { + return getEntityManager().createNamedQuery("XXPolicyItemCondition.findByPolicyConditionDefId", tClass) + .setParameter("polCondDefId", polCondDefId).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXPolicyItemCondition>(); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java index bb55bc2..0cdb75e 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java @@ -58,4 +58,16 @@ public class XXPolicyResourceDao extends BaseDao<XXPolicyResource> { } } + public List<XXPolicyResource> findByResDefId(Long resDefId) { + if (resDefId == null) { + return new ArrayList<XXPolicyResource>(); + } + try { + return getEntityManager().createNamedQuery("XXPolicyResource.findByResDefId", tClass) + .setParameter("resDefId", resDefId).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXPolicyResource>(); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java index a3e2244..aee56e8 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java @@ -86,4 +86,16 @@ public class XXResourceDefDao extends BaseDao<XXResourceDef> { } } + public List<XXResourceDef> findByParentResId(Long parentId) { + if(parentId == null) { + return new ArrayList<XXResourceDef>(); + } + try { + return getEntityManager().createNamedQuery("XXResourceDef.findByParentResId", tClass) + .setParameter("parentId", parentId).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXResourceDef>(); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java index a665bb7..4f35ad3 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java @@ -17,6 +17,9 @@ package org.apache.ranger.db; +import java.util.ArrayList; +import java.util.List; + import javax.persistence.NoResultException; import org.apache.ranger.common.db.BaseDao; @@ -54,4 +57,16 @@ public class XXServiceDao extends BaseDao<XXService> { } } + public List<XXService> findByServiceDefId(Long serviceDefId) { + if (serviceDefId == null) { + return new ArrayList<XXService>(); + } + try { + return getEntityManager().createNamedQuery("XXService.findByServiceDefId", tClass) + .setParameter("serviceDefId", serviceDefId).getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXService>(); + } + } + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java b/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java index 118d5d9..fa90d0b 100644 --- a/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java @@ -85,7 +85,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements * @param atdId * Value to set member attribute <b> atdId</b> */ - public void setAtdid(Long atdId) { + public void setAtdId(Long atdId) { this.atdId = atdId; } @@ -94,7 +94,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements * * @return Date - value of member attribute <b>atdId</b> . */ - public Long getAtdid() { + public Long getAtdId() { return this.atdId; } @@ -105,7 +105,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements * @param impliedGrant * Value to set member attribute <b> impliedGrant</b> */ - public void setImpliedgrant(String impliedGrant) { + public void setImpliedGrant(String impliedGrant) { this.impliedGrant = impliedGrant; } @@ -114,7 +114,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements * * @return Date - value of member attribute <b>impliedGrant</b> . */ - public String getImpliedgrant() { + public String getImpliedGrant() { return this.impliedGrant; } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java index 9527bcb..059f787 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java @@ -153,16 +153,16 @@ public class PublicAPIsv2 { @DELETE @Path("/api/servicedef/{id}") @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") - public void deleteServiceDef(@PathParam("id") Long id) { - serviceREST.deleteServiceDef(id); + public void deleteServiceDef(@PathParam("id") Long id, @Context HttpServletRequest request) { + serviceREST.deleteServiceDef(id, request); } @DELETE @Path("/api/servicedef/name/{name}") @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") - public void deleteServiceDefByName(@PathParam("name") String name) { + public void deleteServiceDefByName(@PathParam("name") String name, @Context HttpServletRequest request) { RangerServiceDef serviceDef = serviceREST.getServiceDefByName(name); - serviceREST.deleteServiceDef(serviceDef.getId()); + serviceREST.deleteServiceDef(serviceDef.getId(), request); } /* http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java index 38c011c..a9ade43 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java @@ -201,7 +201,7 @@ public class ServiceREST { @Path("/definitions/{id}") @Produces({ "application/json", "application/xml" }) @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") - public void deleteServiceDef(@PathParam("id") Long id) { + public void deleteServiceDef(@PathParam("id") Long id, @Context HttpServletRequest request) { if(LOG.isDebugEnabled()) { LOG.debug("==> ServiceREST.deleteServiceDef(" + id + ")"); } @@ -209,7 +209,14 @@ public class ServiceREST { try { RangerServiceDefValidator validator = validatorFactory.getServiceDefValidator(svcStore); validator.validate(id, Action.DELETE); - svcStore.deleteServiceDef(id); + + String forceDeleteStr = request.getParameter("forceDelete"); + boolean forceDelete = false; + if(!StringUtils.isEmpty(forceDeleteStr) && forceDeleteStr.equalsIgnoreCase("true")) { + forceDelete = true; + } + + svcStore.deleteServiceDef(id, forceDelete); } catch(Exception excp) { LOG.error("deleteServiceDef(" + id + ") failed", excp); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/resources/META-INF/jpa_named_queries.xml ---------------------------------------------------------------------- diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml index b16635f..737675d 100644 --- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml +++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml @@ -209,6 +209,11 @@ <named-query name="XXPolicy.findByResourceSignature"> <query>select obj from XXPolicy obj where obj.resourceSignature = :resSignature</query> </named-query> + + <named-query name="XXPolicy.findByServiceDefId"> + <query>select obj from XXPolicy obj, XXService svc where + obj.service = svc.id and svc.type = :serviceDefId</query> + </named-query> <!-- XXServiceDef --> <named-query name="XXServiceDef.findByName"> @@ -236,11 +241,25 @@ and xSvc.id = xPol.service and xPol.id = :policyId and obj.name = :name order by obj.level</query> </named-query> + <named-query name="XXResourceDef.findByParentResId"> + <query> + select obj from XXResourceDef obj where obj.parent = :parentId + </query> + </named-query> + <!-- XXAccessTypeDefGrants --> <named-query name="XXAccessTypeDefGrants.findImpliedGrantsByATDId"> <query>select obj.impliedGrant from XXAccessTypeDefGrants obj where obj.atdId = :atdId</query> </named-query> + <named-query name="XXAccessTypeDefGrants.findByNameAndATDId"> + <query>select obj from XXAccessTypeDefGrants obj where obj.impliedGrant = :name and obj.atdId = :atdId</query> + </named-query> + + <named-query name="XXAccessTypeDefGrants.findByATDId"> + <query>select obj from XXAccessTypeDefGrants obj where obj.atdId = :atdId</query> + </named-query> + <!-- XXEnumElementDef --> <named-query name="XXEnumElementDef.findByEnumDefId"> <query>select obj from XXEnumElementDef obj where obj.enumDefId = :enumDefId order by obj.order</query> @@ -321,6 +340,10 @@ <named-query name="XXService.getMaxIdOfXXService"> <query>select MAX(obj.id) from XXService obj</query> </named-query> + + <named-query name="XXService.findByServiceDefId"> + <query>select obj from XXService obj where obj.type = :serviceDefId</query> + </named-query> <!-- XXPolicyResource --> <named-query name="XXPolicyResource.findByResDefIdAndPolicyId"> @@ -332,6 +355,10 @@ <query>select obj from XXPolicyResource obj where obj.policyId = :policyId</query> </named-query> + <named-query name="XXPolicyResource.findByResDefId"> + <query>select obj from XXPolicyResource obj where obj.resDefId = :resDefId</query> + </named-query> + <!-- XXPolicyResourceMap --> <named-query name="XXPolicyResourceMap.findByPolicyResId"> <query>select obj from XXPolicyResourceMap obj where obj.resourceId = :polResId order by obj.order</query> @@ -341,7 +368,11 @@ <named-query name="XXPolicyItemAccess.findByPolicyItemId"> <query>select obj from XXPolicyItemAccess obj where obj.policyItemId = :polItemId order by obj.order</query> </named-query> - + + <named-query name="XXPolicyItemAccess.findByType"> + <query>select obj from XXPolicyItemAccess obj where obj.type = :type</query> + </named-query> + <!-- XXPolicyItemCondition --> <named-query name="XXPolicyItemCondition.findByPolicyItemId"> <query>select obj from XXPolicyItemCondition obj where obj.policyItemId = :polItemId order by obj.order</query> @@ -352,6 +383,10 @@ obj.policyItemId = :polItemId and obj.type = :polCondDefId order by obj.order</query> </named-query> + <named-query name="XXPolicyItemCondition.findByPolicyConditionDefId"> + <query>select obj from XXPolicyItemCondition obj where obj.type = :polCondDefId</query> + </named-query> + <!-- XXPolicyItemGroupPerm --> <named-query name="XXPolicyItemGroupPerm.findByPolicyItemId"> <query>select obj from XXPolicyItemGroupPerm obj where obj.policyItemId = :polItemId order by obj.order</query> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java index b523552..0676512 100644 --- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java +++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java @@ -352,7 +352,8 @@ public class TestServiceREST { Mockito.when(validatorFactory.getServiceDefValidator(svcStore)) .thenReturn(serviceDefValidator); - serviceREST.deleteServiceDef(rangerServiceDef.getId()); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + serviceREST.deleteServiceDef(rangerServiceDef.getId(), request); Mockito.verify(validatorFactory).getServiceDefValidator(svcStore); } @@ -487,7 +488,8 @@ public class TestServiceREST { Mockito.when(validatorFactory.getServiceDefValidator(svcStore)) .thenReturn(serviceDefValidator); - serviceREST.deleteServiceDef(rangerServiceDef.getId()); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + serviceREST.deleteServiceDef(rangerServiceDef.getId(), request); Mockito.verify(validatorFactory).getServiceDefValidator(svcStore); Mockito.when(svcStore.getService(rangerService.getId())).thenReturn( rangerService); @@ -522,7 +524,8 @@ public class TestServiceREST { Mockito.when(validatorFactory.getServiceDefValidator(svcStore)) .thenReturn(serviceDefValidator); - serviceREST.deleteServiceDef(rangerServiceDef.getId()); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + serviceREST.deleteServiceDef(rangerServiceDef.getId(), request); Mockito.verify(validatorFactory).getServiceDefValidator(svcStore); Mockito.verify(serviceMgr).validateConfig(rangerService, svcStore); } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java ---------------------------------------------------------------------- diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java index b33cd97..f4534a1 100644 --- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java +++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.WebApplicationException; import org.apache.commons.logging.Log; @@ -46,6 +47,7 @@ import org.apache.ranger.plugin.model.validation.RangerValidator.Action; import org.apache.ranger.rest.ServiceREST; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; public class TestServiceRESTForValidation { @@ -309,7 +311,8 @@ public class TestServiceRESTForValidation { _serviceRest.updateServiceDef(_serviceDef); verify(_serviceDefValidator).validate(_serviceDef, Action.UPDATE); - _serviceRest.deleteServiceDef(3L); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + _serviceRest.deleteServiceDef(3L, request); verify(_serviceDefValidator).validate(3L, Action.DELETE); } catch (Throwable t) { t.printStackTrace(); @@ -346,7 +349,8 @@ public class TestServiceRESTForValidation { doThrow(_exception).when(_serviceDefValidator).validate(4L, Action.DELETE); try { - _serviceRest.deleteServiceDef(4L); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + _serviceRest.deleteServiceDef(4L, request); fail("Should have thrown exception!"); } catch (WebApplicationException t) { verify(_serviceDefValidator).validate(4L, Action.DELETE); @@ -385,7 +389,8 @@ public class TestServiceRESTForValidation { doThrow(_exception).when(_store).deleteServiceDef(5L); try { - _serviceRest.deleteServiceDef(5L); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + _serviceRest.deleteServiceDef(5L, request); fail("Should have thrown exception!"); } catch (WebApplicationException e) { verify(_serviceDefValidator).validate(5L, Action.DELETE);
