You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2015/08/01 01:24:39 UTC
ambari git commit: AMBARI-12613. Allow for granular authorization
inorder to update User resource properties via Ambari's REST API (rlevas)
Repository: ambari
Updated Branches:
refs/heads/branch-2.1 408d768c9 -> abce3cd5a
AMBARI-12613. Allow for granular authorization inorder to update User resource properties via Ambari's REST API (rlevas)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/abce3cd5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/abce3cd5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/abce3cd5
Branch: refs/heads/branch-2.1
Commit: abce3cd5ac6a6a1caa7311fd8b93c5878889ed26
Parents: 408d768
Author: Robert Levas <rl...@hortonworks.com>
Authored: Fri Jul 31 19:24:18 2015 -0400
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Fri Jul 31 19:24:25 2015 -0400
----------------------------------------------------------------------
.../AmbariManagementControllerImpl.java | 51 +++
.../internal/UserResourceProviderTest.java | 369 ++++++++++++++++++-
2 files changed, 411 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/abce3cd5/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 1f4e7cd..b1149a4 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
@@ -100,12 +100,16 @@ import org.apache.ambari.server.orm.dao.WidgetLayoutDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
+import org.apache.ambari.server.orm.entities.PermissionEntity;
+import org.apache.ambari.server.orm.entities.PrivilegeEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.WidgetEntity;
import org.apache.ambari.server.orm.entities.WidgetLayoutEntity;
import org.apache.ambari.server.orm.entities.WidgetLayoutUserWidgetEntity;
import org.apache.ambari.server.scheduler.ExecutionScheduleManager;
+import org.apache.ambari.server.security.SecurityHelper;
+import org.apache.ambari.server.security.authorization.AmbariGrantedAuthority;
import org.apache.ambari.server.security.authorization.AuthorizationHelper;
import org.apache.ambari.server.security.authorization.Group;
import org.apache.ambari.server.security.authorization.User;
@@ -172,6 +176,7 @@ import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.google.inject.persist.Transactional;
+import org.springframework.security.core.GrantedAuthority;
@Singleton
public class AmbariManagementControllerImpl implements AmbariManagementController {
@@ -250,6 +255,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
*/
private KerberosHelper kerberosHelper;
+ @Inject
+ private SecurityHelper securityHelper;
+
final private String masterHostname;
final private Integer masterPort;
final private String masterProtocol;
@@ -2647,6 +2655,15 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
return serviceName;
}
+ /**
+ * Updates the users specified.
+ *
+ * @param requests the users to modify
+ *
+ * @throws AmbariException if the resources cannot be updated
+ * @throws IllegalArgumentException if the authenticated user is not authorized to update all of
+ * the requested properties
+ */
@Override
public synchronized void updateUsers(Set<UserRequest> requests) throws AmbariException {
for (UserRequest request : requests) {
@@ -2661,10 +2678,17 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
if (null != request.isActive()) {
+ // If this value is being set, make sure the authenticated user is an administrator before
+ // allowing to change it. Only administrators should be able to change a user's active state
+ verifyAuthorization();
users.setUserActive(u.getUserName(), request.isActive());
}
if (null != request.isAdmin()) {
+ // If this value is being set, make sure the authenticated user is an administrator before
+ // allowing to change it. Only administrators should be able to change a user's administrative
+ // privileges
+ verifyAuthorization();
if (request.isAdmin()) {
users.grantAdminPrivilege(u.getUserId());
} else {
@@ -4259,4 +4283,31 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
}
}
+
+ /**
+ * Determine whether or not the authenticated user has administrator privileges
+ *
+ * @throws IllegalArgumentException if the authenticated user does not have administrator privileges.
+ */
+ protected void verifyAuthorization() throws AmbariException {
+ boolean isAuthorized = false;
+
+ for (GrantedAuthority grantedAuthority : securityHelper.getCurrentAuthorities()) {
+ if (grantedAuthority instanceof AmbariGrantedAuthority) {
+ AmbariGrantedAuthority authority = (AmbariGrantedAuthority) grantedAuthority;
+ PrivilegeEntity privilegeEntity = authority.getPrivilegeEntity();
+ Integer permissionId = privilegeEntity.getPermission().getId();
+
+ if (permissionId.equals(PermissionEntity.AMBARI_ADMIN_PERMISSION)) {
+ isAuthorized = true;
+ break;
+ }
+ }
+ }
+
+ if (!isAuthorized) {
+ throw new IllegalArgumentException("You do not have authorization to update the requested resource property.");
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/abce3cd5/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderTest.java
index 98657bf..b0e1018 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UserResourceProviderTest.java
@@ -18,9 +18,19 @@
package org.apache.ambari.server.controller.internal;
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import org.apache.ambari.server.actionmanager.ActionDBAccessor;
+import org.apache.ambari.server.actionmanager.ActionManager;
+import org.apache.ambari.server.actionmanager.RequestFactory;
+import org.apache.ambari.server.actionmanager.StageFactory;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.controller.AbstractRootServiceResponseFactory;
import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.AmbariManagementControllerImpl;
+import org.apache.ambari.server.controller.KerberosHelper;
import org.apache.ambari.server.controller.RequestStatusResponse;
-import org.apache.ambari.server.controller.UserRequest;
import org.apache.ambari.server.controller.UserResponse;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Request;
@@ -28,10 +38,33 @@ import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.easymock.EasyMock;
+import org.apache.ambari.server.orm.DBAccessor;
+import org.apache.ambari.server.orm.entities.PermissionEntity;
+import org.apache.ambari.server.orm.entities.PrivilegeEntity;
+import org.apache.ambari.server.scheduler.ExecutionScheduler;
+import org.apache.ambari.server.security.SecurityHelper;
+import org.apache.ambari.server.security.authorization.AmbariGrantedAuthority;
+import org.apache.ambari.server.security.authorization.User;
+import org.apache.ambari.server.security.authorization.Users;
+import org.apache.ambari.server.stack.StackManagerFactory;
+import org.apache.ambari.server.stageplanner.RoleGraphFactory;
+import org.apache.ambari.server.stageplanner.RoleGraphFactoryImpl;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.ConfigFactory;
+import org.apache.ambari.server.state.ServiceComponentFactory;
+import org.apache.ambari.server.state.ServiceComponentHostFactory;
+import org.apache.ambari.server.state.ServiceFactory;
+import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
+import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
+import org.apache.ambari.server.state.stack.OsFamily;
import org.junit.Assert;
import org.junit.Test;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import javax.persistence.EntityManager;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -41,6 +74,7 @@ import java.util.Set;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -128,17 +162,246 @@ public class UserResourceProviderTest {
}
@Test
- public void testUpdateResources() throws Exception {
+ public void testUpdateResources_SetAdmin_AsAdminUser() throws Exception {
Resource.Type type = Resource.Type.User;
+ Injector injector = createInjector();
+
+ SecurityHelper securityHelper = injector.getInstance(SecurityHelper.class);
+ Users users = injector.getInstance(Users.class);
+ User user = createMock(User.class);
+ PrivilegeEntity privilegeEntity = createMock(PrivilegeEntity.class);
+ PermissionEntity permissionEntity = createMock(PermissionEntity.class);
+
+ AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
- AmbariManagementController managementController = createMock(AmbariManagementController.class);
RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
+ Collection<? extends GrantedAuthority> currentAuthorities = Collections.singleton(new AmbariGrantedAuthority(privilegeEntity));
+
// set expectations
- managementController.updateUsers(EasyMock.<Set<UserRequest>>anyObject());
+ expect(users.getAnyUser("User100")).andReturn(user).once();
+
+ users.grantAdminPrivilege(1000);
+ expectLastCall().once();
+
+ expect(user.getUserId()).andReturn(1000).once();
+
+ expect(privilegeEntity.getPermission()).andReturn(permissionEntity).once();
+ expect(permissionEntity.getId()).andReturn(PermissionEntity.AMBARI_ADMIN_PERMISSION).once();
+
+ securityHelper.getCurrentAuthorities();
+ expectLastCall().andReturn(currentAuthorities).once();
// replay
- replay(managementController, response);
+ replay(securityHelper, user, users, privilegeEntity, permissionEntity, response);
+
+ ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+ type,
+ PropertyHelper.getPropertyIds(type),
+ PropertyHelper.getKeyPropertyIds(type),
+ managementController);
+
+ // add the property map to a set for the request.
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
+
+ properties.put(UserResourceProvider.USER_ADMIN_PROPERTY_ID, "true");
+
+ // create the request
+ Request request = PropertyHelper.getUpdateRequest(properties, null);
+
+ Predicate predicate = new PredicateBuilder()
+ .property(UserResourceProvider.USER_USERNAME_PROPERTY_ID)
+ .equals("User100")
+ .toPredicate();
+ provider.updateResources(request, predicate);
+
+ // verify
+ verify(securityHelper, user, users, privilegeEntity, permissionEntity, response);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testUpdateResources_SetAdmin_AsNonAdminUser() throws Exception {
+ Resource.Type type = Resource.Type.User;
+ Injector injector = createInjector();
+
+ SecurityHelper securityHelper = injector.getInstance(SecurityHelper.class);
+ Users users = injector.getInstance(Users.class);
+ User user = createMock(User.class);
+
+ AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
+
+ RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
+
+ // set expectations
+ expect(users.getAnyUser("User100")).andReturn(user).once();
+
+ securityHelper.getCurrentAuthorities();
+ expectLastCall().andReturn(Collections.emptyList()).once();
+
+ // replay
+ replay(securityHelper, user, users, response);
+
+ ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+ type,
+ PropertyHelper.getPropertyIds(type),
+ PropertyHelper.getKeyPropertyIds(type),
+ managementController);
+
+ // add the property map to a set for the request.
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
+
+ properties.put(UserResourceProvider.USER_ADMIN_PROPERTY_ID, "true");
+
+ // create the request
+ Request request = PropertyHelper.getUpdateRequest(properties, null);
+
+ Predicate predicate = new PredicateBuilder()
+ .property(UserResourceProvider.USER_USERNAME_PROPERTY_ID)
+ .equals("User100")
+ .toPredicate();
+ provider.updateResources(request, predicate);
+
+ // verify
+ verify(securityHelper, user, users, response);
+ }
+
+ @Test
+ public void testUpdateResources_SetActive_AsAdminUser() throws Exception {
+ Resource.Type type = Resource.Type.User;
+ Injector injector = createInjector();
+
+ SecurityHelper securityHelper = injector.getInstance(SecurityHelper.class);
+ Users users = injector.getInstance(Users.class);
+ User user = createMock(User.class);
+ PrivilegeEntity privilegeEntity = createMock(PrivilegeEntity.class);
+ PermissionEntity permissionEntity = createMock(PermissionEntity.class);
+
+ AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
+
+ RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
+
+ Collection<? extends GrantedAuthority> currentAuthorities = Collections.singleton(new AmbariGrantedAuthority(privilegeEntity));
+
+ // set expectations
+ expect(users.getAnyUser("User100")).andReturn(user).once();
+
+ users.setUserActive("User100", false);
+ expectLastCall().once();
+
+ expect(user.getUserName()).andReturn("User100").once();
+
+ expect(privilegeEntity.getPermission()).andReturn(permissionEntity).once();
+ expect(permissionEntity.getId()).andReturn(PermissionEntity.AMBARI_ADMIN_PERMISSION).once();
+
+ securityHelper.getCurrentAuthorities();
+ expectLastCall().andReturn(currentAuthorities).once();
+
+ // replay
+ replay(securityHelper, user, users, privilegeEntity, permissionEntity, response);
+
+ ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+ type,
+ PropertyHelper.getPropertyIds(type),
+ PropertyHelper.getKeyPropertyIds(type),
+ managementController);
+
+ // add the property map to a set for the request.
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
+
+ properties.put(UserResourceProvider.USER_ACTIVE_PROPERTY_ID, "false");
+
+ // create the request
+ Request request = PropertyHelper.getUpdateRequest(properties, null);
+
+ Predicate predicate = new PredicateBuilder()
+ .property(UserResourceProvider.USER_USERNAME_PROPERTY_ID)
+ .equals("User100")
+ .toPredicate();
+ provider.updateResources(request, predicate);
+
+ // verify
+ verify(securityHelper, user, users, privilegeEntity, permissionEntity, response);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testUpdateResources_SetActive_AsNonActiveUser() throws Exception {
+ Resource.Type type = Resource.Type.User;
+ Injector injector = createInjector();
+
+ SecurityHelper securityHelper = injector.getInstance(SecurityHelper.class);
+ Users users = injector.getInstance(Users.class);
+ User user = createMock(User.class);
+
+ AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
+
+ RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
+
+ // set expectations
+ expect(users.getAnyUser("User100")).andReturn(user).once();
+
+ securityHelper.getCurrentAuthorities();
+ expectLastCall().andReturn(Collections.emptyList()).once();
+
+ // replay
+ replay(securityHelper, user, users, response);
+
+ ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+ type,
+ PropertyHelper.getPropertyIds(type),
+ PropertyHelper.getKeyPropertyIds(type),
+ managementController);
+
+ // add the property map to a set for the request.
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
+
+ properties.put(UserResourceProvider.USER_ACTIVE_PROPERTY_ID, "false");
+
+ // create the request
+ Request request = PropertyHelper.getUpdateRequest(properties, null);
+
+ Predicate predicate = new PredicateBuilder()
+ .property(UserResourceProvider.USER_USERNAME_PROPERTY_ID)
+ .equals("User100")
+ .toPredicate();
+ provider.updateResources(request, predicate);
+
+ // verify
+ verify(securityHelper, user, users, response);
+ }
+
+ @Test
+ public void testUpdateResources_SetPassword_AsAdminUser() throws Exception {
+ Resource.Type type = Resource.Type.User;
+ Injector injector = createInjector();
+
+ SecurityHelper securityHelper = injector.getInstance(SecurityHelper.class);
+ Users users = injector.getInstance(Users.class);
+ User user = createMock(User.class);
+ PrivilegeEntity privilegeEntity = createMock(PrivilegeEntity.class);
+ PermissionEntity permissionEntity = createMock(PermissionEntity.class);
+
+ AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
+
+ RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
+
+ Collection<? extends GrantedAuthority> currentAuthorities = Collections.singleton(new AmbariGrantedAuthority(privilegeEntity));
+
+ // set expectations
+ expect(users.getAnyUser("User100")).andReturn(user).once();
+
+ users.modifyPassword("User100", "old_password", "password");
+ expectLastCall().once();
+
+ expect(user.getUserName()).andReturn("User100").once();
+
+ expect(privilegeEntity.getPermission()).andReturn(permissionEntity).anyTimes();
+ expect(permissionEntity.getId()).andReturn(PermissionEntity.AMBARI_ADMIN_PERMISSION).anyTimes();
+
+ securityHelper.getCurrentAuthorities();
+ expectLastCall().andReturn(currentAuthorities).anyTimes();
+
+ // replay
+ replay(securityHelper, user, users, privilegeEntity, permissionEntity, response);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
@@ -150,16 +413,71 @@ public class UserResourceProviderTest {
Map<String, Object> properties = new LinkedHashMap<String, Object>();
properties.put(UserResourceProvider.USER_PASSWORD_PROPERTY_ID, "password");
+ properties.put(UserResourceProvider.USER_OLD_PASSWORD_PROPERTY_ID, "old_password");
// create the request
Request request = PropertyHelper.getUpdateRequest(properties, null);
- Predicate predicate = new PredicateBuilder().property(UserResourceProvider.USER_USERNAME_PROPERTY_ID).
- equals("User100").toPredicate();
+ Predicate predicate = new PredicateBuilder()
+ .property(UserResourceProvider.USER_USERNAME_PROPERTY_ID)
+ .equals("User100")
+ .toPredicate();
provider.updateResources(request, predicate);
// verify
- verify(managementController, response);
+ verify(securityHelper, user, users, privilegeEntity, permissionEntity, response);
+ }
+
+ @Test
+ public void testUpdateResources_SetPassword_AsNonActiveUser() throws Exception {
+ Resource.Type type = Resource.Type.User;
+ Injector injector = createInjector();
+
+ SecurityHelper securityHelper = injector.getInstance(SecurityHelper.class);
+ Users users = injector.getInstance(Users.class);
+ User user = createMock(User.class);
+
+ AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
+
+ RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
+
+ // set expectations
+ expect(users.getAnyUser("User100")).andReturn(user).once();
+
+ users.modifyPassword("User100", "old_password", "password");
+ expectLastCall().once();
+
+ expect(user.getUserName()).andReturn("User100").once();
+
+ securityHelper.getCurrentAuthorities();
+ expectLastCall().andReturn(Collections.emptyList()).anyTimes();
+
+ // replay
+ replay(securityHelper, user, users, response);
+
+ ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+ type,
+ PropertyHelper.getPropertyIds(type),
+ PropertyHelper.getKeyPropertyIds(type),
+ managementController);
+
+ // add the property map to a set for the request.
+ Map<String, Object> properties = new LinkedHashMap<String, Object>();
+
+ properties.put(UserResourceProvider.USER_PASSWORD_PROPERTY_ID, "password");
+ properties.put(UserResourceProvider.USER_OLD_PASSWORD_PROPERTY_ID, "old_password");
+
+ // create the request
+ Request request = PropertyHelper.getUpdateRequest(properties, null);
+
+ Predicate predicate = new PredicateBuilder()
+ .property(UserResourceProvider.USER_USERNAME_PROPERTY_ID)
+ .equals("User100")
+ .toPredicate();
+ provider.updateResources(request, predicate);
+
+ // verify
+ verify(securityHelper, user, users, response);
}
@Test
@@ -188,4 +506,37 @@ public class UserResourceProviderTest {
// verify
verify(managementController, response);
}
+
+ private Injector createInjector() {
+ return Guice.createInjector(new AbstractModule() {
+ @Override
+ protected void configure() {
+ bind(EntityManager.class).toInstance(createNiceMock(EntityManager.class));
+ bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
+ bind(ActionDBAccessor.class).toInstance(createNiceMock(ActionDBAccessor.class));
+ bind(ExecutionScheduler.class).toInstance(createNiceMock(ExecutionScheduler.class));
+ bind(SecurityHelper.class).toInstance(createMock(SecurityHelper.class));
+ bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
+ bind(AmbariMetaInfo.class).toInstance(createMock(AmbariMetaInfo.class));
+ bind(ActionManager.class).toInstance(createNiceMock(ActionManager.class));
+ bind(RequestFactory.class).toInstance(createNiceMock(RequestFactory.class));
+ bind(RequestExecutionFactory.class).toInstance(createNiceMock(RequestExecutionFactory.class));
+ bind(StageFactory.class).toInstance(createNiceMock(StageFactory.class));
+ bind(RoleGraphFactory.class).to(RoleGraphFactoryImpl.class);
+ bind(Clusters.class).toInstance(createNiceMock(Clusters.class));
+ bind(AbstractRootServiceResponseFactory.class).toInstance(createNiceMock(AbstractRootServiceResponseFactory.class));
+ bind(StackManagerFactory.class).toInstance(createNiceMock(StackManagerFactory.class));
+ bind(ConfigFactory.class).toInstance(createNiceMock(ConfigFactory.class));
+ bind(ConfigGroupFactory.class).toInstance(createNiceMock(ConfigGroupFactory.class));
+ bind(ServiceFactory.class).toInstance(createNiceMock(ServiceFactory.class));
+ bind(ServiceComponentFactory.class).toInstance(createNiceMock(ServiceComponentFactory.class));
+ bind(ServiceComponentHostFactory.class).toInstance(createNiceMock(ServiceComponentHostFactory.class));
+ bind(PasswordEncoder.class).toInstance(createNiceMock(PasswordEncoder.class));
+ bind(KerberosHelper.class).toInstance(createNiceMock(KerberosHelper.class));
+ bind(Users.class).toInstance(createMock(Users.class));
+
+ bind(AmbariManagementController.class).to(AmbariManagementControllerImpl.class);
+ }
+ });
+ }
}