AMBARI-7481 - Admin : LDAP sync event API to sync existing users / groups
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/cb656120 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/cb656120 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/cb656120 Branch: refs/heads/branch-alerts-dev Commit: cb6561206244ca32ac3193bfb16fcc9f3a080100 Parents: 749bb28 Author: tbeerbower <[email protected]> Authored: Wed Sep 24 21:12:58 2014 -0700 Committer: tbeerbower <[email protected]> Committed: Thu Sep 25 13:14:56 2014 -0700 ---------------------------------------------------------------------- .../controller/AmbariManagementController.java | 10 +- .../AmbariManagementControllerImpl.java | 40 +++-- .../server/controller/LdapSyncRequest.java | 94 +++++++++++ .../internal/ControllerResourceProvider.java | 14 +- .../internal/DefaultProviderModule.java | 2 +- .../internal/LdapSyncEventResourceProvider.java | 124 +++++++++++---- .../ambari/server/orm/dao/PermissionDAO.java | 2 +- .../orm/entities/LdapSyncEventEntity.java | 127 ++++++++++----- .../server/orm/entities/LdapSyncSpecEntity.java | 24 +-- .../AmbariManagementControllerImplTest.java | 154 +++++++++++++++---- .../server/controller/LdapSyncRequestTest.java | 84 ++++++++++ .../LdapSyncEventResourceProviderTest.java | 28 +++- .../orm/entities/LdapSyncEventEntityTest.java | 47 ++---- .../orm/entities/LdapSyncSpecEntityTest.java | 40 ++--- 14 files changed, 603 insertions(+), 187 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java index b932cbb..c37ee79 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java @@ -702,11 +702,15 @@ public interface AmbariManagementController { /** * Synchronizes local users and groups with given data. * - * @param users users to be synchronized - * @param groups groups to be synchronized + * @param userRequest users to be synchronized + * @param groupRequest groups to be synchronized + * + * @return the results of the LDAP synchronization + * * @throws AmbariException if synchronization data was invalid */ - public LdapBatchDto synchronizeLdapUsersAndGroups(Set<String> users, Set<String> groups) throws AmbariException; + public LdapBatchDto synchronizeLdapUsersAndGroups( + LdapSyncRequest userRequest, LdapSyncRequest groupRequest) throws AmbariException; /** * Checks if LDAP sync process is running. http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 8c0dfeb..3142b66 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -3682,21 +3682,41 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle } @Override - public synchronized LdapBatchDto synchronizeLdapUsersAndGroups(Set<String> users, Set<String> groups) + public synchronized LdapBatchDto synchronizeLdapUsersAndGroups( + LdapSyncRequest userRequest, LdapSyncRequest groupRequest) throws AmbariException { ldapSyncInProgress = true; try { + final LdapBatchDto batchInfo = new LdapBatchDto(); - if (users != null) { - ldapDataPopulator.synchronizeLdapUsers(users, batchInfo); - } else { - ldapDataPopulator.synchronizeAllLdapUsers(batchInfo); - } - if (groups != null) { - ldapDataPopulator.synchronizeLdapGroups(groups, batchInfo); - } else { - ldapDataPopulator.synchronizeAllLdapGroups(batchInfo); + + if (userRequest != null) { + switch (userRequest.getType()) { + case ALL: + ldapDataPopulator.synchronizeAllLdapUsers(batchInfo); + break; + case EXISTING: + ldapDataPopulator.synchronizeExistingLdapUsers(batchInfo); + break; + case SPECIFIC: + ldapDataPopulator.synchronizeLdapUsers(userRequest.getPrincipalNames(), batchInfo); + break; + } + } + if (groupRequest != null) { + switch (groupRequest.getType()) { + case ALL: + ldapDataPopulator.synchronizeAllLdapGroups(batchInfo); + break; + case EXISTING: + ldapDataPopulator.synchronizeExistingLdapGroups(batchInfo); + break; + case SPECIFIC: + ldapDataPopulator.synchronizeLdapGroups(groupRequest.getPrincipalNames(), batchInfo); + break; + } } + this.users.processLdapSync(batchInfo); return batchInfo; } finally { http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/controller/LdapSyncRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/LdapSyncRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/LdapSyncRequest.java new file mode 100644 index 0000000..02cf3f0 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/LdapSyncRequest.java @@ -0,0 +1,94 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ambari.server.controller; + +import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; + +import java.util.HashSet; +import java.util.Set; + +/** + * Request for LDAP synchronization. + */ +public class LdapSyncRequest { + + /** + * The principal names for the request. + */ + private final Set<String> principalNames; + + /** + * The type of request. + */ + private final LdapSyncSpecEntity.SyncType type; + + + // ----- Constructors ------------------------------------------------------ + + /** + * Construct an LdapSyncRequest. + * + * @param type the request type + * @param principalNames the principal names + */ + public LdapSyncRequest(LdapSyncSpecEntity.SyncType type, Set<String> principalNames) { + this.type = type; + this.principalNames = principalNames == null ? new HashSet<String>() : principalNames; + } + + /** + * Construct an LdapSyncRequest. + * + * @param type the request type + */ + public LdapSyncRequest(LdapSyncSpecEntity.SyncType type) { + this.principalNames = new HashSet<String>(); + this.type = type; + } + + + // ----- LdapSyncRequest --------------------------------------------------- + + /** + * Add principal names to the request. + * + * @param principalNames the principal names to be added + */ + public void addPrincipalNames(Set<String> principalNames) { + this.principalNames.addAll(principalNames); + } + + /** + * Get the principal names. + * + * @return the principal names + */ + public Set<String> getPrincipalNames() { + return principalNames; + } + + /** + * Get the request type. + * + * @return the request type + */ + public LdapSyncSpecEntity.SyncType getType() { + return type; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ControllerResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ControllerResourceProvider.java index 129824f..afb9ae9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ControllerResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ControllerResourceProvider.java @@ -29,6 +29,7 @@ import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.ControllerRequest; import org.apache.ambari.server.controller.ControllerResponse; +import org.apache.ambari.server.controller.LdapSyncRequest; import org.apache.ambari.server.controller.spi.NoSuchParentResourceException; import org.apache.ambari.server.controller.spi.NoSuchResourceException; import org.apache.ambari.server.controller.spi.Predicate; @@ -39,6 +40,7 @@ import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException; import org.apache.ambari.server.controller.spi.SystemException; import org.apache.ambari.server.controller.spi.UnsupportedPropertyException; import org.apache.ambari.server.controller.utilities.PropertyHelper; +import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; import org.apache.ambari.server.security.ldap.LdapBatchDto; import org.apache.ambari.server.security.ldap.LdapGroupDto; import org.apache.ambari.server.security.ldap.LdapSyncDto; @@ -227,7 +229,14 @@ class ControllerResourceProvider extends AbstractControllerResourceProvider { } } if (!getManagementController().isLdapSyncInProgress()) { - LdapBatchDto syncInfo = getManagementController().synchronizeLdapUsersAndGroups(users, groups); + + LdapSyncRequest userRequest = users == null ? new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL) : + new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, users); + + LdapSyncRequest groupRequest = groups == null ? new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL) : + new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, groups); + + LdapBatchDto syncInfo = getManagementController().synchronizeLdapUsersAndGroups(userRequest, groupRequest); resource.setProperty("Sync/status", "successful"); resource.setProperty("Sync/summary/Users/created", syncInfo.getUsersToBeCreated().size()); resource.setProperty("Sync/summary/Users/updated", syncInfo.getUsersToBecomeLdap().size()); @@ -268,7 +277,6 @@ class ControllerResourceProvider extends AbstractControllerResourceProvider { if (properties == null) { return new ControllerRequest(null, properties); } - final ControllerRequest request = new ControllerRequest((String) properties.get(CONTROLLER_NAME_PROPERTY_ID), properties); - return request; + return new ControllerRequest((String) properties.get(CONTROLLER_NAME_PROPERTY_ID), properties); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java index 99ac0f1..ab89db2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java @@ -80,7 +80,7 @@ public class DefaultProviderModule extends AbstractProviderModule { case ClusterPrivilege: return new ClusterPrivilegeResourceProvider(); case LdapSyncEvent: - return new LdapSyncEventResourceProvider(); + return new LdapSyncEventResourceProvider(managementController); default: return AbstractControllerResourceProvider.getResourceProvider(type, propertyIds, keyPropertyIds, managementController); http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProvider.java index 188c071..f7499fa 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProvider.java @@ -19,6 +19,8 @@ package org.apache.ambari.server.controller.internal; import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.LdapSyncRequest; import org.apache.ambari.server.controller.spi.NoSuchParentResourceException; import org.apache.ambari.server.controller.spi.NoSuchResourceException; import org.apache.ambari.server.controller.spi.Predicate; @@ -31,6 +33,7 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException; import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.orm.entities.LdapSyncEventEntity; import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; +import org.apache.ambari.server.security.ldap.LdapBatchDto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +56,7 @@ import java.util.concurrent.atomic.AtomicLong; /** * Resource provider for ldap sync events. */ -public class LdapSyncEventResourceProvider extends AbstractResourceProvider { +public class LdapSyncEventResourceProvider extends AbstractControllerResourceProvider { /** * Thread pool @@ -71,19 +74,16 @@ public class LdapSyncEventResourceProvider extends AbstractResourceProvider { public static final String EVENT_ID_PROPERTY_ID = "Event/id"; public static final String EVENT_STATUS_PROPERTY_ID = "Event/status"; public static final String EVENT_STATUS_DETAIL_PROPERTY_ID = "Event/status_detail"; - public static final String EVENT_START_TIME_PROPERTY_ID = "Event/sync_start_time"; - public static final String EVENT_END_TIME_PROPERTY_ID = "Event/sync_end_time"; - public static final String USERS_FETCHED_PROPERTY_ID = "Event/results/users_fetched"; - public static final String USERS_CREATED_PROPERTY_ID = "Event/results/users_created"; - public static final String USERS_UPDATED_PROPERTY_ID = "Event/results/users_updated"; - public static final String USERS_REMOVED_PROPERTY_ID = "Event/results/users_removed"; - public static final String GROUPS_FETCHED_PROPERTY_ID = "Event/results/groups_fetched"; - public static final String GROUPS_CREATED_PROPERTY_ID = "Event/results/groups_created"; - public static final String GROUPS_UPDATED_PROPERTY_ID = "Event/results/groups_updated"; - public static final String GROUPS_REMOVED_PROPERTY_ID = "Event/results/groups_removed"; - public static final String MEMBERSHIPS_FETCHED_PROPERTY_ID = "Event/results/memberships_fetched"; - public static final String MEMBERSHIPS_CREATED_PROPERTY_ID = "Event/results/memberships_created"; - public static final String MEMBERSHIPS_UPDATED_PROPERTY_ID = "Event/results/memberships_updated"; + public static final String EVENT_START_TIME_PROPERTY_ID = "Event/sync_time/start"; + public static final String EVENT_END_TIME_PROPERTY_ID = "Event/sync_time/end"; + public static final String USERS_CREATED_PROPERTY_ID = "Event/summary/users/created"; + public static final String USERS_UPDATED_PROPERTY_ID = "Event/summary/users/updated"; + public static final String USERS_REMOVED_PROPERTY_ID = "Event/summary/users/removed"; + public static final String GROUPS_CREATED_PROPERTY_ID = "Event/summary/groups/created"; + public static final String GROUPS_UPDATED_PROPERTY_ID = "Event/summary/groups/updated"; + public static final String GROUPS_REMOVED_PROPERTY_ID = "Event/summary/groups/removed"; + public static final String MEMBERSHIPS_CREATED_PROPERTY_ID = "Event/summary/memberships/created"; + public static final String MEMBERSHIPS_REMOVED_PROPERTY_ID = "Event/summary/memberships/removed"; public static final String EVENT_SPECS_PROPERTY_ID = "Event/specs"; /** @@ -105,17 +105,14 @@ public class LdapSyncEventResourceProvider extends AbstractResourceProvider { propertyIds.add(EVENT_STATUS_DETAIL_PROPERTY_ID); propertyIds.add(EVENT_START_TIME_PROPERTY_ID); propertyIds.add(EVENT_END_TIME_PROPERTY_ID); - propertyIds.add(USERS_FETCHED_PROPERTY_ID); propertyIds.add(USERS_CREATED_PROPERTY_ID); propertyIds.add(USERS_UPDATED_PROPERTY_ID); propertyIds.add(USERS_REMOVED_PROPERTY_ID); - propertyIds.add(GROUPS_FETCHED_PROPERTY_ID); propertyIds.add(GROUPS_CREATED_PROPERTY_ID); propertyIds.add(GROUPS_UPDATED_PROPERTY_ID); propertyIds.add(GROUPS_REMOVED_PROPERTY_ID); - propertyIds.add(MEMBERSHIPS_FETCHED_PROPERTY_ID); propertyIds.add(MEMBERSHIPS_CREATED_PROPERTY_ID); - propertyIds.add(MEMBERSHIPS_UPDATED_PROPERTY_ID); + propertyIds.add(MEMBERSHIPS_REMOVED_PROPERTY_ID); propertyIds.add(EVENT_SPECS_PROPERTY_ID); } @@ -157,8 +154,8 @@ public class LdapSyncEventResourceProvider extends AbstractResourceProvider { /** * Construct a event resource provider. */ - public LdapSyncEventResourceProvider() { - super(propertyIds, keyPropertyIds); + public LdapSyncEventResourceProvider(AmbariManagementController managementController) { + super(propertyIds, keyPropertyIds, managementController); } @@ -260,17 +257,14 @@ public class LdapSyncEventResourceProvider extends AbstractResourceProvider { setResourceProperty(resource, EVENT_ID_PROPERTY_ID, eventEntity.getId(), requestedIds); setResourceProperty(resource, EVENT_STATUS_PROPERTY_ID, eventEntity.getStatus().toString().toUpperCase(), requestedIds); setResourceProperty(resource, EVENT_STATUS_DETAIL_PROPERTY_ID, eventEntity.getStatusDetail(), requestedIds); - setResourceProperty(resource, USERS_FETCHED_PROPERTY_ID, eventEntity.getUsersFetched(), requestedIds); setResourceProperty(resource, USERS_CREATED_PROPERTY_ID, eventEntity.getUsersCreated(), requestedIds); setResourceProperty(resource, USERS_UPDATED_PROPERTY_ID, eventEntity.getUsersUpdated(), requestedIds); setResourceProperty(resource, USERS_REMOVED_PROPERTY_ID, eventEntity.getUsersRemoved(), requestedIds); - setResourceProperty(resource, GROUPS_FETCHED_PROPERTY_ID, eventEntity.getGroupsFetched(), requestedIds); setResourceProperty(resource, GROUPS_CREATED_PROPERTY_ID, eventEntity.getGroupsCreated(), requestedIds); setResourceProperty(resource, GROUPS_UPDATED_PROPERTY_ID, eventEntity.getGroupsUpdated(), requestedIds); setResourceProperty(resource, GROUPS_REMOVED_PROPERTY_ID, eventEntity.getGroupsRemoved(), requestedIds); - setResourceProperty(resource, MEMBERSHIPS_FETCHED_PROPERTY_ID, eventEntity.getMembershipsFetched(), requestedIds); setResourceProperty(resource, MEMBERSHIPS_CREATED_PROPERTY_ID, eventEntity.getMembershipsCreated(), requestedIds); - setResourceProperty(resource, MEMBERSHIPS_UPDATED_PROPERTY_ID, eventEntity.getMembershipsUpdated(), requestedIds); + setResourceProperty(resource, MEMBERSHIPS_REMOVED_PROPERTY_ID, eventEntity.getMembershipsRemoved(), requestedIds); Set<Map<String, String>> specs = new HashSet<Map<String, String>>(); @@ -414,25 +408,93 @@ public class LdapSyncEventResourceProvider extends AbstractResourceProvider { } } - event.setStatus(LdapSyncEventEntity.Status.Running); + event.setStatus(LdapSyncEventEntity.Status.RUNNING); event.setStatusDetail("Running LDAP sync."); event.setStartTime(System.currentTimeMillis()); try { - // TODO : call back end code to perform LDAP sync + populateLdapSyncEvent(event, syncLdap(event)); - // TODO : update event resource with results of sync - - event.setEndTime(System.currentTimeMillis()); - event.setStatus(LdapSyncEventEntity.Status.Complete); + event.setStatus(LdapSyncEventEntity.Status.COMPLETE); event.setStatusDetail("Completed LDAP sync."); } catch (Exception e) { + event.setStatus(LdapSyncEventEntity.Status.ERROR); String msg = "Caught exception running LDAP sync. "; - event.setStatus(LdapSyncEventEntity.Status.Error); event.setStatusDetail(msg + e.getMessage()); LOG.error(msg, e); + } finally { + event.setEndTime(System.currentTimeMillis()); + } + } + } + + /** + * Sync the users and groups specified in the given sync event with ldap. + * + * @param event the sync event + * + * @return the results of the sync + * + * @throws AmbariException if the sync could not be completed + */ + private LdapBatchDto syncLdap(LdapSyncEventEntity event) throws AmbariException { + LdapSyncRequest userRequest = null; + LdapSyncRequest groupRequest = null; + + for (LdapSyncSpecEntity spec : event.getSpecs()) { + switch (spec.getPrincipalType()) { + case USERS: + userRequest = getLdapRequest(userRequest, spec); + break; + case GROUPS: + groupRequest = getLdapRequest(groupRequest, spec); + break; } } + return getManagementController().synchronizeLdapUsersAndGroups(userRequest, groupRequest); + } + + /** + * Update the given request with the given ldap event spec. + * + * @param request the sync request; may be null + * @param spec the specification of what to sync + * + * @return the updated sync request or a new sync request if the given request is null + */ + private LdapSyncRequest getLdapRequest(LdapSyncRequest request, LdapSyncSpecEntity spec) { + + switch (spec.getSyncType()) { + case ALL: + return new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL); + case EXISTING: + return new LdapSyncRequest(LdapSyncSpecEntity.SyncType.EXISTING); + case SPECIFIC: + Set<String> principalNames = new HashSet<String>(spec.getPrincipalNames()); + if (request == null ) { + request = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, principalNames); + } else { + request.addPrincipalNames(principalNames); + } + } + return request; + } + + /** + * Populate the given ldap sync event with the results of an ldap sync. + * + * @param event the sync event + * @param syncInfo the sync results + */ + private void populateLdapSyncEvent(LdapSyncEventEntity event, LdapBatchDto syncInfo) { + event.setUsersCreated(syncInfo.getUsersToBeCreated().size()); + event.setUsersUpdated(syncInfo.getUsersToBecomeLdap().size()); + event.setUsersRemoved(syncInfo.getUsersToBeRemoved().size()); + event.setGroupsCreated(syncInfo.getGroupsToBeCreated().size()); + event.setGroupsUpdated(syncInfo.getGroupsToBecomeLdap().size()); + event.setGroupsRemoved(syncInfo.getGroupsToBeRemoved().size()); + event.setMembershipsCreated(syncInfo.getMembershipToAdd().size()); + event.setMembershipsRemoved(syncInfo.getMembershipToRemove().size()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java index 97af522..939c32b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/PermissionDAO.java @@ -49,7 +49,7 @@ public class PermissionDAO { /** * Create permission. * - * @param PermissionEntity entity to store + * @param permissionEntity entity to store */ @Transactional public void create(PermissionEntity permissionEntity) { http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntity.java index 9ce3ee0..5b361c3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntity.java @@ -49,17 +49,14 @@ public class LdapSyncEventEntity { /** * Results of sync event. */ - private Integer usersFetched; private Integer usersCreated; private Integer usersUpdated; private Integer usersRemoved; - private Integer groupsFetched; private Integer groupsCreated; private Integer groupsUpdated; private Integer groupsRemoved; - private Integer membershipsFetched; private Integer membershipsCreated; - private Integer membershipsUpdated; + private Integer membershipsRemoved; /** * The specifications that define the sync event. @@ -76,7 +73,7 @@ public class LdapSyncEventEntity { */ public LdapSyncEventEntity(long id) { this.id = id; - this.status = Status.Pending; + this.status = Status.PENDING; } @@ -181,92 +178,148 @@ public class LdapSyncEventEntity { this.endTime = endTime; } - public Integer getUsersFetched() { - return usersFetched; - } - - public void setUsersFetched(Integer usersFetched) { - this.usersFetched = usersFetched; - } - + /** + * Get the number of users created during the sync event. + * + * @return the number of users created + */ public Integer getUsersCreated() { return usersCreated; } + /** + * Set the number of users created during the sync event. + * + * @param usersCreated the number of users created + */ public void setUsersCreated(Integer usersCreated) { this.usersCreated = usersCreated; } + /** + * Get the number of users updated during the sync event. + * + * @return the number of users updated + */ public Integer getUsersUpdated() { return usersUpdated; } + /** + * Set the number of users updated during the sync event. + * + * @param usersUpdated the number of users updated + */ public void setUsersUpdated(Integer usersUpdated) { this.usersUpdated = usersUpdated; } + /** + * Get the number of users removed during the sync event. + * + * @return the number of users removed + */ public Integer getUsersRemoved() { return usersRemoved; } + /** + * Set the number of users removed during the sync event. + * + * @param usersRemoved the number of users removed + */ public void setUsersRemoved(Integer usersRemoved) { this.usersRemoved = usersRemoved; } - public Integer getGroupsFetched() { - return groupsFetched; - } - - public void setGroupsFetched(Integer groupsFetched) { - this.groupsFetched = groupsFetched; - } - + /** + * Get the number of groups created during the sync event. + * + * @return the number of groups created + */ public Integer getGroupsCreated() { return groupsCreated; } + /** + * Set the number of groups created during the sync event. + * + * @param groupsCreated the number of groups created + */ public void setGroupsCreated(Integer groupsCreated) { this.groupsCreated = groupsCreated; } + /** + * Get the number of groups updated during the sync event. + * + * @return the number of groups updated + */ public Integer getGroupsUpdated() { return groupsUpdated; } + /** + * Set the number of groups updated during the sync event. + * + * @param groupsUpdated the number of groups updated + */ public void setGroupsUpdated(Integer groupsUpdated) { this.groupsUpdated = groupsUpdated; } + /** + * Get the number of groups removed during the sync event. + * + * @return the number of groups removed + */ public Integer getGroupsRemoved() { return groupsRemoved; } + /** + * Set the number of groups removed during the sync event. + * + * @param groupsRemoved the number of groups removed + */ public void setGroupsRemoved(Integer groupsRemoved) { this.groupsRemoved = groupsRemoved; } - public Integer getMembershipsFetched() { - return membershipsFetched; - } - - public void setMembershipsFetched(Integer membershipsFetched) { - this.membershipsFetched = membershipsFetched; - } - + /** + * Get the number of memberships created during the sync event. + * + * @return the number of memberships created + */ public Integer getMembershipsCreated() { return membershipsCreated; } + /** + * Set the number of memberships created during the sync event. + * + * @param membershipsCreated the number of memberships created + */ public void setMembershipsCreated(Integer membershipsCreated) { this.membershipsCreated = membershipsCreated; } - public Integer getMembershipsUpdated() { - return membershipsUpdated; + /** + * Get the number of memberships removed during the sync event. + * + * @return the number of memberships removed + */ + public Integer getMembershipsRemoved() { + return membershipsRemoved; } - public void setMembershipsUpdated(Integer membershipsUpdated) { - this.membershipsUpdated = membershipsUpdated; + /** + * Set the number of memberships removed during the sync event. + * + * @param membershipsRemoved the number of memberships removed + */ + public void setMembershipsRemoved(Integer membershipsRemoved) { + this.membershipsRemoved = membershipsRemoved; } @@ -276,9 +329,9 @@ public class LdapSyncEventEntity { * LDAP sync event status */ public enum Status { - Pending, - Running, - Error, - Complete + PENDING, // sync is queued for execution + RUNNING, // sync is running + ERROR, // error occurred during sync + COMPLETE // sync is complete } } http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntity.java index 027a4ce..d8e5b8b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntity.java @@ -48,14 +48,16 @@ public class LdapSyncSpecEntity { * * @param principalType the principal type * @param syncType the sync type - * @param principalNames the list of principal names. + * @param principalNames the list of principal names; may not be null */ public LdapSyncSpecEntity(PrincipalType principalType, SyncType syncType, List<String> principalNames) { - this.principalType = principalType; - this.syncType = syncType; + this.principalType = principalType; + this.syncType = syncType; this.principalNames = principalNames; - if (syncType == SyncType.Specific) { + assert principalNames != null; + + if (syncType == SyncType.SPECIFIC) { if (principalNames.isEmpty()) { throw new IllegalArgumentException("Missing principal names for " + syncType + " sync-type."); } @@ -103,8 +105,8 @@ public class LdapSyncSpecEntity { * LDAP sync principal type. */ public enum PrincipalType { - Users, - Groups; + USERS, + GROUPS; /** * Get the enum value for the given principal type name string, ignoring case. @@ -114,7 +116,7 @@ public class LdapSyncSpecEntity { * @return the enum value for the given type name */ public static PrincipalType valueOfIgnoreCase(String type) { - return valueOf(Character.toUpperCase(type.charAt(0)) + type.substring(1).toLowerCase()); + return valueOf(type.toUpperCase()); } } @@ -125,9 +127,9 @@ public class LdapSyncSpecEntity { * LDAP sync type. */ public enum SyncType { - All, - Existing, - Specific; + ALL, // sync all principals + EXISTING, // sync only principals that currently exist in Ambari + SPECIFIC; // sync only the named principals /** * Get the enum value for the given sync type name string, ignoring case. @@ -137,7 +139,7 @@ public class LdapSyncSpecEntity { * @return the enum value for the given type name */ public static SyncType valueOfIgnoreCase(String type) { - return valueOf(Character.toUpperCase(type.charAt(0)) + type.substring(1).toLowerCase()); + return valueOf(type.toUpperCase()); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java index ecc2c0d..affa4c9 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java @@ -18,32 +18,12 @@ package org.apache.ambari.server.controller; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.capture; -import static org.easymock.EasyMock.createMockBuilder; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.createStrictMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.easymock.EasyMock.expectLastCall; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.*; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.List; -import java.util.ArrayList; -import java.util.TreeMap; - +import com.google.gson.Gson; +import com.google.inject.Binder; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.util.Modules; import junit.framework.Assert; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ClusterNotFoundException; @@ -52,10 +32,15 @@ import org.apache.ambari.server.ParentObjectNotFoundException; import org.apache.ambari.server.ServiceComponentHostNotFoundException; import org.apache.ambari.server.ServiceComponentNotFoundException; import org.apache.ambari.server.ServiceNotFoundException; +import org.apache.ambari.server.actionmanager.ActionDBAccessorImpl; import org.apache.ambari.server.actionmanager.ActionManager; -import org.apache.ambari.server.agent.ExecutionCommand; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; +import org.apache.ambari.server.orm.InMemoryDefaultTestModule; +import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; +import org.apache.ambari.server.security.authorization.Users; +import org.apache.ambari.server.security.ldap.AmbariLdapDataPopulator; +import org.apache.ambari.server.security.ldap.LdapBatchDto; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Host; @@ -63,21 +48,61 @@ import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.ServiceComponentHost; -import org.apache.ambari.server.state.StackId; -import org.apache.ambari.server.state.ServiceOsSpecific; import org.apache.ambari.server.state.ServiceInfo; -import javax.persistence.RollbackException; +import org.apache.ambari.server.state.ServiceOsSpecific; +import org.apache.ambari.server.state.StackId; import org.easymock.Capture; +import org.junit.Before; import org.junit.Test; -import com.google.gson.Gson; -import com.google.inject.Injector; +import javax.persistence.RollbackException; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_DRIVER_FILENAME; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAME; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.createMockBuilder; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.createStrictMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; /** * AmbariManagementControllerImpl unit tests */ public class AmbariManagementControllerImplTest { + // Mocks + private static final AmbariLdapDataPopulator ldapDataPopulator = createMock(AmbariLdapDataPopulator.class); + private static final Clusters clusters = createNiceMock(Clusters.class); + private static final ActionDBAccessorImpl actionDBAccessor = createNiceMock(ActionDBAccessorImpl.class); + private static final AmbariMetaInfo ambariMetaInfo = createMock(AmbariMetaInfo.class); + private static final Users users = createMock(Users.class); + + @Before + public void before() throws Exception { + reset(ldapDataPopulator, clusters,actionDBAccessor, ambariMetaInfo, users); + } @Test public void testgetAmbariServerURI() throws Exception { @@ -1353,6 +1378,71 @@ public class AmbariManagementControllerImplTest { assertEquals(defaultHostParams.get(STACK_VERSION), SOME_STACK_VERSION); } + @Test + public void testSynchronizeLdapUsersAndGroups() throws Exception { + + Set<String> userSet = new HashSet<String>(); + userSet.add("user1"); + + Set<String> groupSet = new HashSet<String>(); + groupSet.add("group1"); + + Injector injector = Guice.createInjector(Modules.override(new InMemoryDefaultTestModule()).with(new MockModule())); + + // create mocks + + LdapBatchDto ldapBatchDto = createNiceMock(LdapBatchDto.class); + + + Capture<LdapBatchDto> ldapBatchDtoCapture = new Capture<LdapBatchDto>(); + + // set expectations + expect(ldapDataPopulator.synchronizeAllLdapUsers(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); + expect(ldapDataPopulator.synchronizeAllLdapGroups(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); + + expect(ldapDataPopulator.synchronizeExistingLdapUsers(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); + expect(ldapDataPopulator.synchronizeExistingLdapGroups(capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); + + expect(ldapDataPopulator.synchronizeLdapUsers(eq(userSet), capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); + expect(ldapDataPopulator.synchronizeLdapGroups(eq(groupSet), capture(ldapBatchDtoCapture))).andReturn(ldapBatchDto); + + users.processLdapSync(capture(ldapBatchDtoCapture)); + expectLastCall().anyTimes(); + + //replay + replay(ldapDataPopulator, clusters, actionDBAccessor, ambariMetaInfo, users, ldapBatchDto); + + AmbariManagementControllerImpl controller = injector.getInstance(AmbariManagementControllerImpl.class); + + LdapSyncRequest userRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL); + LdapSyncRequest groupRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL); + + controller.synchronizeLdapUsersAndGroups(userRequest, groupRequest); + + userRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.EXISTING); + groupRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.EXISTING); + + controller.synchronizeLdapUsersAndGroups(userRequest, groupRequest); + + userRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, userSet); + groupRequest = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, groupSet); + + controller.synchronizeLdapUsersAndGroups(userRequest, groupRequest); + + verify(ldapDataPopulator, clusters, users, ldapBatchDto); + } + + private class MockModule implements Module { + + @Override + public void configure(Binder binder) { + binder.bind(AmbariLdapDataPopulator.class).toInstance(ldapDataPopulator); + binder.bind(Clusters.class).toInstance(clusters); + binder.bind(ActionDBAccessorImpl.class).toInstance(actionDBAccessor); + binder.bind(AmbariMetaInfo.class).toInstance(ambariMetaInfo); + binder.bind(Users.class).toInstance(users); + } + } private class NestedTestClass extends AmbariManagementControllerImpl { http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/test/java/org/apache/ambari/server/controller/LdapSyncRequestTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/LdapSyncRequestTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/LdapSyncRequestTest.java new file mode 100644 index 0000000..a159671 --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/LdapSyncRequestTest.java @@ -0,0 +1,84 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ambari.server.controller; + +import org.apache.ambari.server.orm.entities.LdapSyncSpecEntity; +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; + +/** + * LdapSyncRequest tests. + */ +public class LdapSyncRequestTest { + @Test + public void testAddPrincipalNames() throws Exception { + Set<String> names = new HashSet<String>(); + names.add("name1"); + + LdapSyncRequest request = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC,names); + + names = new HashSet<String>(); + names.add("name2"); + names.add("name3"); + + request.addPrincipalNames(names); + + Set<String> principalNames = request.getPrincipalNames(); + Assert.assertEquals(3, principalNames.size()); + Assert.assertTrue(principalNames.contains("name1")); + Assert.assertTrue(principalNames.contains("name2")); + Assert.assertTrue(principalNames.contains("name3")); + } + + @Test + public void testGetPrincipalNames() throws Exception { + Set<String> names = new HashSet<String>(); + names.add("name1"); + names.add("name2"); + names.add("name3"); + + LdapSyncRequest request = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC,names); + + Set<String> principalNames = request.getPrincipalNames(); + Assert.assertEquals(3, principalNames.size()); + Assert.assertTrue(principalNames.contains("name1")); + Assert.assertTrue(principalNames.contains("name2")); + Assert.assertTrue(principalNames.contains("name3")); + } + + @Test + public void testGetType() throws Exception { + Set<String> names = new HashSet<String>(); + + LdapSyncRequest request = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.SPECIFIC, names); + + Assert.assertEquals(LdapSyncSpecEntity.SyncType.SPECIFIC, request.getType()); + + request = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.ALL); + + Assert.assertEquals(LdapSyncSpecEntity.SyncType.ALL, request.getType()); + + request = new LdapSyncRequest(LdapSyncSpecEntity.SyncType.EXISTING); + + Assert.assertEquals(LdapSyncSpecEntity.SyncType.EXISTING, request.getType()); + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProviderTest.java index 92bd7a4..523753d 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/LdapSyncEventResourceProviderTest.java @@ -18,6 +18,7 @@ package org.apache.ambari.server.controller.internal; +import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.controller.spi.Request; import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.controller.utilities.PropertyHelper; @@ -29,6 +30,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; /** @@ -37,7 +39,9 @@ import static org.easymock.EasyMock.createNiceMock; public class LdapSyncEventResourceProviderTest { @Test public void testCreateResources() throws Exception { - LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(); + AmbariManagementController amc = createMock(AmbariManagementController.class); + + LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(amc); Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>(); Map<String, Object> propertyMap = new HashMap<String, Object>(); @@ -48,11 +52,16 @@ public class LdapSyncEventResourceProviderTest { properties.add(propertyMap); provider.createResources(PropertyHelper.getCreateRequest(properties, null)); + + Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null); + Assert.assertEquals(1, resources.size()); } @Test public void testGetResources() throws Exception { - LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(); + AmbariManagementController amc = createMock(AmbariManagementController.class); + + LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(amc); Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>(); Map<String, Object> propertyMap = new HashMap<String, Object>(); @@ -70,7 +79,9 @@ public class LdapSyncEventResourceProviderTest { @Test public void testUpdateResources() throws Exception { - LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(); + AmbariManagementController amc = createMock(AmbariManagementController.class); + + LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(amc); Request request = createNiceMock(Request.class); @@ -84,7 +95,9 @@ public class LdapSyncEventResourceProviderTest { @Test public void testDeleteResources() throws Exception { - LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(); + AmbariManagementController amc = createMock(AmbariManagementController.class); + + LdapSyncEventResourceProvider provider = new TestLdapSyncEventResourceProvider(amc); Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>(); Map<String, Object> propertyMap = new HashMap<String, Object>(); @@ -107,6 +120,13 @@ public class LdapSyncEventResourceProviderTest { protected static class TestLdapSyncEventResourceProvider extends LdapSyncEventResourceProvider { + /** + * Construct a event resource provider. + */ + public TestLdapSyncEventResourceProvider(AmbariManagementController managementController) { + super(managementController); + } + @Override protected void ensureEventProcessor() { } http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntityTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntityTest.java index 66f9d6d..109988f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntityTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncEventEntityTest.java @@ -37,19 +37,19 @@ public class LdapSyncEventEntityTest { @Test public void testSetGetStatus() throws Exception { LdapSyncEventEntity event = new LdapSyncEventEntity(1L); - Assert.assertEquals(LdapSyncEventEntity.Status.Pending, event.getStatus()); + Assert.assertEquals(LdapSyncEventEntity.Status.PENDING, event.getStatus()); - event.setStatus(LdapSyncEventEntity.Status.Running); - Assert.assertEquals(LdapSyncEventEntity.Status.Running, event.getStatus()); + event.setStatus(LdapSyncEventEntity.Status.RUNNING); + Assert.assertEquals(LdapSyncEventEntity.Status.RUNNING, event.getStatus()); - event.setStatus(LdapSyncEventEntity.Status.Complete); - Assert.assertEquals(LdapSyncEventEntity.Status.Complete, event.getStatus()); + event.setStatus(LdapSyncEventEntity.Status.COMPLETE); + Assert.assertEquals(LdapSyncEventEntity.Status.COMPLETE, event.getStatus()); - event.setStatus(LdapSyncEventEntity.Status.Error); - Assert.assertEquals(LdapSyncEventEntity.Status.Error, event.getStatus()); + event.setStatus(LdapSyncEventEntity.Status.ERROR); + Assert.assertEquals(LdapSyncEventEntity.Status.ERROR, event.getStatus()); - event.setStatus(LdapSyncEventEntity.Status.Pending); - Assert.assertEquals(LdapSyncEventEntity.Status.Pending, event.getStatus()); + event.setStatus(LdapSyncEventEntity.Status.PENDING); + Assert.assertEquals(LdapSyncEventEntity.Status.PENDING, event.getStatus()); } @Test @@ -62,8 +62,8 @@ public class LdapSyncEventEntityTest { @Test public void testSetGetSpecs() throws Exception { LdapSyncEventEntity event = new LdapSyncEventEntity(1L); - LdapSyncSpecEntity spec = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Groups, - LdapSyncSpecEntity.SyncType.All, Collections.<String>emptyList()); + LdapSyncSpecEntity spec = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.GROUPS, + LdapSyncSpecEntity.SyncType.ALL, Collections.<String>emptyList()); event.setSpecs(Collections.singletonList(spec)); @@ -88,13 +88,6 @@ public class LdapSyncEventEntityTest { } @Test - public void testSetGetUsersFetched() throws Exception { - LdapSyncEventEntity event = new LdapSyncEventEntity(1L); - event.setUsersFetched(99); - Assert.assertEquals(Integer.valueOf(99), event.getUsersFetched()); - } - - @Test public void testSetGetUsersCreated() throws Exception { LdapSyncEventEntity event = new LdapSyncEventEntity(1L); event.setUsersCreated(98); @@ -116,13 +109,6 @@ public class LdapSyncEventEntityTest { } @Test - public void testSetGetGroupsFetched() throws Exception { - LdapSyncEventEntity event = new LdapSyncEventEntity(1L); - event.setGroupsFetched(95); - Assert.assertEquals(Integer.valueOf(95), event.getGroupsFetched()); - } - - @Test public void testSetGetGroupsCreated() throws Exception { LdapSyncEventEntity event = new LdapSyncEventEntity(1L); event.setGroupsCreated(94); @@ -144,13 +130,6 @@ public class LdapSyncEventEntityTest { } @Test - public void testSetGetMembershipsFetched() throws Exception { - LdapSyncEventEntity event = new LdapSyncEventEntity(1L); - event.setMembershipsFetched(91); - Assert.assertEquals(Integer.valueOf(91), event.getMembershipsFetched()); - } - - @Test public void testSetGetMembershipsCreated() throws Exception { LdapSyncEventEntity event = new LdapSyncEventEntity(1L); event.setMembershipsCreated(90); @@ -160,7 +139,7 @@ public class LdapSyncEventEntityTest { @Test public void testSetGetMembershipsUpdated() throws Exception { LdapSyncEventEntity event = new LdapSyncEventEntity(1L); - event.setMembershipsUpdated(99); - Assert.assertEquals(Integer.valueOf(99), event.getMembershipsUpdated()); + event.setMembershipsRemoved(99); + Assert.assertEquals(Integer.valueOf(99), event.getMembershipsRemoved()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/cb656120/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntityTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntityTest.java index 468281f..b9e000e 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntityTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/LdapSyncSpecEntityTest.java @@ -31,24 +31,24 @@ import java.util.List; public class LdapSyncSpecEntityTest { @Test public void testGetPrincipalType() throws Exception { - LdapSyncSpecEntity entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.All, Collections.<String>emptyList()); - Assert.assertEquals(LdapSyncSpecEntity.PrincipalType.Users, entity.getPrincipalType()); + LdapSyncSpecEntity entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.ALL, Collections.<String>emptyList()); + Assert.assertEquals(LdapSyncSpecEntity.PrincipalType.USERS, entity.getPrincipalType()); - entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Groups, - LdapSyncSpecEntity.SyncType.All, Collections.<String>emptyList()); - Assert.assertEquals(LdapSyncSpecEntity.PrincipalType.Groups, entity.getPrincipalType()); + entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.GROUPS, + LdapSyncSpecEntity.SyncType.ALL, Collections.<String>emptyList()); + Assert.assertEquals(LdapSyncSpecEntity.PrincipalType.GROUPS, entity.getPrincipalType()); } @Test public void testGetSyncType() throws Exception { - LdapSyncSpecEntity entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.All, Collections.<String>emptyList()); - Assert.assertEquals(LdapSyncSpecEntity.SyncType.All, entity.getSyncType()); + LdapSyncSpecEntity entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.ALL, Collections.<String>emptyList()); + Assert.assertEquals(LdapSyncSpecEntity.SyncType.ALL, entity.getSyncType()); - entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.Existing, Collections.<String>emptyList()); - Assert.assertEquals(LdapSyncSpecEntity.SyncType.Existing, entity.getSyncType()); + entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.EXISTING, Collections.<String>emptyList()); + Assert.assertEquals(LdapSyncSpecEntity.SyncType.EXISTING, entity.getSyncType()); } @Test @@ -57,16 +57,16 @@ public class LdapSyncSpecEntityTest { names.add("joe"); names.add("fred"); - LdapSyncSpecEntity entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.Specific, names); + LdapSyncSpecEntity entity = new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.SPECIFIC, names); Assert.assertEquals(names, entity.getPrincipalNames()); } @Test public void testIllegalConstruction() throws Exception { try { - new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.Specific, Collections.<String>emptyList()); + new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.SPECIFIC, Collections.<String>emptyList()); Assert.fail("expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected @@ -77,16 +77,16 @@ public class LdapSyncSpecEntityTest { names.add("fred"); try { - new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.All, names); + new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.ALL, names); Assert.fail("expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } try { - new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.Users, - LdapSyncSpecEntity.SyncType.Existing, names); + new LdapSyncSpecEntity(LdapSyncSpecEntity.PrincipalType.USERS, + LdapSyncSpecEntity.SyncType.EXISTING, names); Assert.fail("expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected
