You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2014/09/25 22:15:37 UTC
git commit: AMBARI-7481 - Admin : LDAP sync event API to sync
existing users / groups
Repository: ambari
Updated Branches:
refs/heads/trunk 749bb2843 -> cb6561206
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/trunk
Commit: cb6561206244ca32ac3193bfb16fcc9f3a080100
Parents: 749bb28
Author: tbeerbower <tb...@hortonworks.com>
Authored: Wed Sep 24 21:12:58 2014 -0700
Committer: tbeerbower <tb...@hortonworks.com>
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