You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2014/08/15 23:49:03 UTC

[1/2] git commit: AMBARI-6882. Views : Admin - Support Upgrade Scenario.

Repository: ambari
Updated Branches:
  refs/heads/trunk 0e565a56f -> bd9435daa


AMBARI-6882. Views : Admin - Support Upgrade Scenario.


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1ea989b2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1ea989b2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1ea989b2

Branch: refs/heads/trunk
Commit: 1ea989b2938b80b7ee26b479add16a307af85e26
Parents: 0e565a5
Author: Siddharth Wagle <sw...@hortonworks.com>
Authored: Fri Aug 15 14:47:58 2014 -0700
Committer: Siddharth Wagle <sw...@hortonworks.com>
Committed: Fri Aug 15 14:47:58 2014 -0700

----------------------------------------------------------------------
 .../AmbariManagementControllerImpl.java         |  25 ---
 .../ambari/server/controller/UserRequest.java   |  27 +--
 .../ambari/server/controller/UserResponse.java  |   9 -
 .../internal/UserResourceProvider.java          |  14 --
 .../ambari/server/orm/dao/PermissionDAO.java    |  18 ++
 .../server/upgrade/UpgradeCatalog170.java       | 181 ++++++++++++++++++-
 .../src/main/resources/properties.json          |   1 -
 .../AmbariManagementControllerTest.java         |   8 -
 .../controller/internal/RequestImplTest.java    |   1 -
 .../server/upgrade/UpgradeCatalog170Test.java   |  91 +++++++++-
 10 files changed, 276 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/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 c749a26..3b80515 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
@@ -718,17 +718,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
 
       users.createUser(request.getUsername(), request.getPassword(), request.isActive(), request.isAdmin());
 
-      if (0 != request.getRoles().size()) {
-        user = users.getAnyUser(request.getUsername());
-        if (null != user) {
-          for (String role : request.getRoles()) {
-            if (!user.getRoles().contains(role)) {
-              users.addRoleToUser(user, role);
-            }
-          }
-        }
-      }
-
       if (null != request.isActive() && null != user) {
         users.setUserActive(user, request.isActive());
       }
@@ -2420,18 +2409,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
             request.getPassword());
       }
 
-      Set<String> roolesToDelete = new HashSet<String>(u.getRoles());
-      Set<String> roolesToAdd = request.getRoles();
-      roolesToDelete.removeAll(request.getRoles());
-      for (String role : roolesToDelete) {
-        users.removeRoleFromUser(u, role);
-        u.getRoles().remove(role);
-      }
-      roolesToAdd.removeAll(u.getRoles());
-      for (String role : roolesToAdd) {
-        users.addRoleToUser(u, role);
-      }
-
       if (null != request.isActive()) {
         users.setUserActive(u, request.isActive());
       }
@@ -2786,7 +2763,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
       if (null == r.getUsername()) {
         for (User u : users.getAllUsers()) {
           UserResponse resp = new UserResponse(u.getUserName(), u.isLdapUser(), u.isActive(), u.isAdmin());
-          resp.setRoles(new HashSet<String>(u.getRoles()));
           resp.setGroups(new HashSet<String>(u.getGroups()));
           responses.add(resp);
         }
@@ -2802,7 +2778,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
           }
         } else {
           UserResponse resp = new UserResponse(u.getUserName(), u.isLdapUser(), u.isActive(), u.isAdmin());
-          resp.setRoles(new HashSet<String>(u.getRoles()));
           resp.setGroups(new HashSet<String>(u.getGroups()));
           responses.add(resp);
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
index 6e4c7fe..282131a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
@@ -17,9 +17,6 @@
  */
 package org.apache.ambari.server.controller;
 
-import java.util.HashSet;
-import java.util.Set;
-
 /**
  * Represents a user maintenance request.
  */
@@ -28,7 +25,6 @@ public class UserRequest {
   private String password;
   private String oldPassword;
   private Boolean active;
-  private Set<String> roles = new HashSet<String>();
   private Boolean admin;
 
   public UserRequest(String name) {
@@ -39,14 +35,6 @@ public class UserRequest {
     return userName;
   }
 
-  public Set<String> getRoles() {
-    return roles;
-  }
-
-  public void setRoles(Set<String> userRoles) {
-    roles = userRoles;
-  }
-
   public String getPassword() {
     return password;
   }
@@ -82,20 +70,7 @@ public class UserRequest {
   @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
-    sb.append("User"
-        + ", username=" + userName
-        + ", roles=[ ");
-    if (roles != null && !roles.isEmpty()) {
-      boolean first = true;
-      for (String role : roles) {
-        if (!first) {
-          sb.append(",");
-        }
-        first = false;
-        sb.append(role);
-      }
-    }
-    sb.append(" ]");
+    sb.append("User, username=" + userName);
     return sb.toString();
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
index b42b667..868635c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
@@ -25,7 +25,6 @@ import java.util.Set;
  */
 public class UserResponse {
 
-  private Set<String> roles = Collections.emptySet();
   private final String userName;
   private final boolean isLdapUser;
   private final boolean isActive;
@@ -43,14 +42,6 @@ public class UserResponse {
     return userName;
   }
 
-  public Set<String> getRoles() {
-    return roles;
-  }
-
-  public void setRoles(Set<String> userRoles) {
-    roles = userRoles;
-  }
-
   public Set<String> getGroups() {
     return groups;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
index 2e0a659..35f9db5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
@@ -25,7 +25,6 @@ import org.apache.ambari.server.controller.spi.*;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -39,7 +38,6 @@ class UserResourceProvider extends AbstractControllerResourceProvider {
 
   // Users
   protected static final String USER_USERNAME_PROPERTY_ID     = PropertyHelper.getPropertyId("Users", "user_name");
-  protected static final String USER_ROLES_PROPERTY_ID        = PropertyHelper.getPropertyId("Users", "roles");
   protected static final String USER_PASSWORD_PROPERTY_ID     = PropertyHelper.getPropertyId("Users", "password");
   protected static final String USER_OLD_PASSWORD_PROPERTY_ID = PropertyHelper.getPropertyId("Users", "old_password");
   protected static final String USER_LDAP_USER_PROPERTY_ID    = PropertyHelper.getPropertyId("Users", "ldap_user");
@@ -118,9 +116,6 @@ class UserResourceProvider extends AbstractControllerResourceProvider {
       setResourceProperty(resource, USER_USERNAME_PROPERTY_ID,
           userResponse.getUsername(), requestedIds);
 
-      setResourceProperty(resource, USER_ROLES_PROPERTY_ID,
-          userResponse.getRoles(), requestedIds);
-
       setResourceProperty(resource, USER_LDAP_USER_PROPERTY_ID,
           userResponse.isLdapUser(), requestedIds);
 
@@ -198,15 +193,6 @@ class UserResourceProvider extends AbstractControllerResourceProvider {
     request.setPassword((String) properties.get(USER_PASSWORD_PROPERTY_ID));
     request.setOldPassword((String) properties.get(USER_OLD_PASSWORD_PROPERTY_ID));
 
-    // TODO - support array/sets directly out of the request
-    if (null != properties.get(USER_ROLES_PROPERTY_ID)) {
-      HashSet<String> roles = new HashSet<String>();
-
-      Collections.addAll(roles, ((String) properties.get(USER_ROLES_PROPERTY_ID)).split(","));
-
-      request.setRoles(roles);
-    }
-
     if (null != properties.get(USER_ACTIVE_PROPERTY_ID)) {
       request.setActive(Boolean.valueOf(properties.get(USER_ACTIVE_PROPERTY_ID).toString()));
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/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 0c44006..faa6b8c 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
@@ -100,4 +100,22 @@ public class PermissionDAO {
   public PermissionEntity findViewUsePermission() {
     return findById(PermissionEntity.VIEW_USE_PERMISSION);
   }
+
+  /**
+   * Find CLUSTER.OPERATE permission.
+   *
+   * @return a matching permission entity or null
+   */
+  public PermissionEntity findClusterOperatePermission() {
+    return findById(PermissionEntity.CLUSTER_OPERATE_PERMISSION);
+  }
+
+  /**
+   * Find CLUSTER.READ permission.
+   *
+   * @return a matching permission entity or null
+   */
+  public PermissionEntity findClusterReadPermission() {
+    return findById(PermissionEntity.CLUSTER_READ_PERMISSION);
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
index d5781f6..10e760b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java
@@ -43,10 +43,31 @@ import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
 import org.apache.ambari.server.orm.dao.DaoUtils;
 import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
+import org.apache.ambari.server.orm.dao.PermissionDAO;
+import org.apache.ambari.server.orm.dao.PrincipalDAO;
+import org.apache.ambari.server.orm.dao.PrincipalTypeDAO;
+import org.apache.ambari.server.orm.dao.PrivilegeDAO;
+import org.apache.ambari.server.orm.dao.ResourceDAO;
+import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
+import org.apache.ambari.server.orm.dao.UserDAO;
+import org.apache.ambari.server.orm.dao.ViewDAO;
+import org.apache.ambari.server.orm.dao.ViewInstanceDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
 import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
 import org.apache.ambari.server.orm.entities.HostRoleCommandEntity_;
+import org.apache.ambari.server.orm.entities.PermissionEntity;
+import org.apache.ambari.server.orm.entities.PrincipalEntity;
+import org.apache.ambari.server.orm.entities.PrincipalTypeEntity;
+import org.apache.ambari.server.orm.entities.PrivilegeEntity;
+import org.apache.ambari.server.orm.entities.ResourceEntity;
+import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
+import org.apache.ambari.server.orm.entities.RoleEntity;
+import org.apache.ambari.server.orm.entities.UserEntity;
+import org.apache.ambari.server.orm.entities.ViewEntity;
+import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
@@ -108,6 +129,20 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
     List<DBColumnInfo> columns;
     String dbType = getDbType();
 
+    // add group and members tables
+    columns = new ArrayList<DBColumnInfo>();
+    columns.add(new DBColumnInfo("group_id", Integer.class, 1, null, false));
+    columns.add(new DBColumnInfo("principal_id", Integer.class, 1, null, false));
+    columns.add(new DBColumnInfo("group_name", String.class, 1, null, false));
+    columns.add(new DBColumnInfo("ldap_group", Integer.class, 1, 0, false));
+    dbAccessor.createTable("groups", columns, "group_id");
+
+    columns = new ArrayList<DBColumnInfo>();
+    columns.add(new DBColumnInfo("member_id", Integer.class, 1, null, false));
+    columns.add(new DBColumnInfo("group_id", Integer.class, 1, null, false));
+    columns.add(new DBColumnInfo("user_id", Integer.class, 1, null, false));
+    dbAccessor.createTable("members", columns, "member_id");
+
     // add admin tables and initial values prior to adding referencing columns on existing tables
     columns = new ArrayList<DBColumnInfo>();
     columns.add(new DBColumnInfo("principal_type_id", Integer.class, 1, null,
@@ -161,8 +196,8 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
 
     dbAccessor.insertRow("adminpermission", new String[]{"permission_id", "permission_name", "resource_type_id"}, new String[]{"1", "'AMBARI.ADMIN'", "1"}, true);
     dbAccessor.insertRow("adminpermission", new String[]{"permission_id", "permission_name", "resource_type_id"}, new String[]{"2", "'CLUSTER.READ'", "2"}, true);
-    dbAccessor.insertRow("adminpermission", new String[]{"permission_id", "permission_name", "resource_type_id"}, new String[]{"3", "'CLUSTER.OPERATE'", "3"}, true);
-    dbAccessor.insertRow("adminpermission", new String[]{"permission_id", "permission_name", "resource_type_id"}, new String[]{"4", "'VIEW.USE'", "4"}, true);
+    dbAccessor.insertRow("adminpermission", new String[]{"permission_id", "permission_name", "resource_type_id"}, new String[]{"3", "'CLUSTER.OPERATE'", "2"}, true);
+    dbAccessor.insertRow("adminpermission", new String[]{"permission_id", "permission_name", "resource_type_id"}, new String[]{"4", "'VIEW.USE'", "3"}, true);
 
     columns = new ArrayList<DBColumnInfo>();
     columns.add(new DBColumnInfo("privilege_id", Long.class, null, null, false));
@@ -334,6 +369,22 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
     dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
       + valueColumnName + ") " + "VALUES('config_id_seq', " + count + ")", false);
 
+    dbAccessor.addFKConstraint("users", "FK_users_principal_id", "principal_id", "adminprincipal", "principal_id", true);
+    dbAccessor.addFKConstraint("clusters", "FK_clusters_resource_id", "resource_id", "adminresource", "resource_id", true);
+    dbAccessor.addFKConstraint("viewinstance", "FK_viewinstance_resource_id", "resource_id", "adminresource", "resource_id", true);
+    dbAccessor.addFKConstraint("adminresource", "FK_resource_resource_type_id", "resource_type_id", "adminresourcetype", "resource_type_id", true);
+    dbAccessor.addFKConstraint("adminprincipal", "FK_principal_principal_type_id", "principal_type_id", "adminprincipaltype", "principal_type_id", true);
+    dbAccessor.addFKConstraint("adminpermission", "FK_permission_resource_type_id", "resource_type_id", "adminresourcetype", "resource_type_id", true);
+    dbAccessor.addFKConstraint("adminprivilege", "FK_privilege_permission_id", "permission_id", "adminpermission", "permission_id", true);
+    dbAccessor.addFKConstraint("adminprivilege", "FK_privilege_resource_id", "resource_id", "adminresource", "resource_id", true);
+
+    dbAccessor.addFKConstraint("groups", "FK_groups_principal_id", "principal_id", "adminprincipal", "principal_id", true);
+    dbAccessor.addFKConstraint("members", "FK_members_user_id", "user_id", "users", "user_id", true);
+    dbAccessor.addFKConstraint("members", "FK_members_group_id", "group_id", "groups", "group_id", true);
+
+    dbAccessor.executeQuery("ALTER TABLE groups ADD CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group)");
+    dbAccessor.executeQuery("ALTER TABLE members ADD CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id)");
+    dbAccessor.executeQuery("ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id)");
   }
 
   private void populateConfigVersions() throws SQLException {
@@ -404,9 +455,6 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
 
   @Override
   protected void executeDMLUpdates() throws AmbariException, SQLException {
-    // !!! TODO: create admin principals for existing users and groups.
-    // !!! TODO: create admin resources for existing clusters and view instances
-
     String dbType = getDbType();
 
     // add new sequences for view entity
@@ -435,6 +483,35 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
     dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
         + valueColumnName + ") " + "VALUES('alert_current_id_seq', 0)", false);
 
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('group_id_seq', 1)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('member_id_seq', 1)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('resource_type_id_seq', 4)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('resource_id_seq', 2)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('principal_type_id_seq', 3)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('principal_id_seq', 2)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('permission_id_seq', 5)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('privilege_id_seq', 1)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('service_config_id_seq', 1)", false);
+
+    dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, "
+        + valueColumnName + ") " + "VALUES('config_id_seq', 1)", false);
 
     // Update historic records with the log paths, but only enough so as to not prolong the upgrade process
     executeInTransaction(new Runnable() {
@@ -496,6 +573,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
     moveGlobalsToEnv();
     addEnvContentFields();
     addMissingConfigs();
+    upgradePermissionModel();
   }
 
   /**
@@ -790,4 +868,97 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
 
     return result;
   }
+
+  private void upgradePermissionModel() {
+    final UserDAO userDAO = injector.getInstance(UserDAO.class);
+    final PrincipalDAO principalDAO = injector.getInstance(PrincipalDAO.class);
+    final PrincipalTypeDAO principalTypeDAO = injector.getInstance(PrincipalTypeDAO.class);
+    final ClusterDAO clusterDAO = injector.getInstance(ClusterDAO.class);
+    final ResourceTypeDAO resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
+    final ResourceDAO resourceDAO = injector.getInstance(ResourceDAO.class);
+    final ViewDAO viewDAO = injector.getInstance(ViewDAO.class);
+    final ViewInstanceDAO viewInstanceDAO = injector.getInstance(ViewInstanceDAO.class);
+    final PermissionDAO permissionDAO = injector.getInstance(PermissionDAO.class);
+    final PrivilegeDAO privilegeDAO = injector.getInstance(PrivilegeDAO.class);
+
+    final PrincipalTypeEntity userPrincipalType = principalTypeDAO.findById(PrincipalTypeEntity.USER_PRINCIPAL_TYPE);
+    for (UserEntity user: userDAO.findAll()) {
+      final PrincipalEntity principalEntity = new PrincipalEntity();
+      principalEntity.setPrincipalType(userPrincipalType);
+      principalDAO.create(principalEntity);
+      user.setPrincipal(principalEntity);
+      userDAO.merge(user);
+    }
+
+    final ResourceTypeEntity clusterResourceType = resourceTypeDAO.findById(ResourceTypeEntity.CLUSTER_RESOURCE_TYPE);
+    for (ClusterEntity cluster: clusterDAO.findAll()) {
+      final ResourceEntity resourceEntity = new ResourceEntity();
+      resourceEntity.setResourceType(clusterResourceType);
+      resourceDAO.create(resourceEntity);
+      cluster.setResource(resourceEntity);
+      clusterDAO.merge(cluster);
+    }
+
+    for (ViewEntity view: viewDAO.findAll()) {
+      final ResourceTypeEntity resourceType = new ResourceTypeEntity();
+      resourceType.setName(ViewEntity.getViewName(view.getCommonName(), view.getVersion()));
+      resourceTypeDAO.create(resourceType);
+    }
+
+    for (ViewInstanceEntity viewInstance: viewInstanceDAO.findAll()) {
+      final ResourceEntity resourceEntity = new ResourceEntity();
+      viewInstance.getViewEntity();
+      resourceEntity.setResourceType(resourceTypeDAO.findByName(
+          ViewEntity.getViewName(
+              viewInstance.getViewEntity().getCommonName(),
+              viewInstance.getViewEntity().getVersion())));
+      viewInstance.setResource(resourceEntity);
+      resourceDAO.create(resourceEntity);
+      viewInstanceDAO.merge(viewInstance);
+    }
+
+    final PermissionEntity adminPermission = permissionDAO.findAmbariAdminPermission();
+    final PermissionEntity clusterOperatePermission = permissionDAO.findClusterOperatePermission();
+    final PermissionEntity clusterReadPermission = permissionDAO.findClusterReadPermission();
+    final ResourceEntity ambariResource = resourceDAO.findAmbariResource();
+    for (UserEntity user: userDAO.findAll()) {
+      boolean hasAdminRole = false;
+      boolean hasUserRole = false;
+      for (RoleEntity role: user.getRoleEntities()) {
+        if (role.getRoleName().equals("admin")) {
+          hasAdminRole = true;
+        }
+        if (role.getRoleName().equals("user")) {
+          hasUserRole = true;
+        }
+        if (hasAdminRole) {
+          final PrivilegeEntity privilege = new PrivilegeEntity();
+          privilege.setPermission(adminPermission);
+          privilege.setPrincipal(user.getPrincipal());
+          privilege.setResource(ambariResource);
+          user.getPrincipal().getPrivileges().add(privilege);
+          privilegeDAO.create(privilege);
+          for (ClusterEntity cluster: clusterDAO.findAll()) {
+            final PrivilegeEntity clusterPrivilege = new PrivilegeEntity();
+            clusterPrivilege.setPermission(clusterOperatePermission);
+            clusterPrivilege.setPrincipal(user.getPrincipal());
+            clusterPrivilege.setResource(cluster.getResource());
+            privilegeDAO.create(clusterPrivilege);
+            user.getPrincipal().getPrivileges().add(clusterPrivilege);
+          }
+          userDAO.merge(user);
+        } else if (hasUserRole) {
+          for (ClusterEntity cluster: clusterDAO.findAll()) {
+            final PrivilegeEntity privilege = new PrivilegeEntity();
+            privilege.setPermission(clusterReadPermission);
+            privilege.setPrincipal(user.getPrincipal());
+            privilege.setResource(cluster.getResource());
+            privilegeDAO.create(privilege);
+            user.getPrincipal().getPrivileges().add(privilege);
+          }
+          userDAO.merge(user);
+        }
+      }
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/main/resources/properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json
index 8db8662..55b451e 100644
--- a/ambari-server/src/main/resources/properties.json
+++ b/ambari-server/src/main/resources/properties.json
@@ -170,7 +170,6 @@
     ],
     "User":[
         "Users/user_name",
-        "Users/roles",
         "Users/password",
         "Users/old_password",
         "Users/ldap_user",

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 4e9a0f9..9ca5348 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -4596,10 +4596,6 @@ public class AmbariManagementControllerTest {
     users.createDefaultRoles();
 
     UserRequest request = new UserRequest("user1");
-    request.setRoles(new HashSet<String>(){{
-      add("user");
-      add("admin");
-    }});
 
     controller.updateUsers(Collections.singleton(request));
   }
@@ -4613,10 +4609,6 @@ public class AmbariManagementControllerTest {
     users.createDefaultRoles();
 
     UserRequest request = new UserRequest("user1");
-    request.setRoles(new HashSet<String>(){{
-      add("user");
-      add("admin");
-    }});
     controller.updateUsers(Collections.singleton(request));
 
     request = new UserRequest("user1");

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
index 01d76af..91adc9b 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestImplTest.java
@@ -189,7 +189,6 @@ public class RequestImplTest {
     //User resource properties
     Assert.assertFalse(validPropertyIds.contains("Users/unsupported_property_id"));
     Assert.assertTrue(validPropertyIds.contains("Users/user_name"));
-    Assert.assertTrue(validPropertyIds.contains("Users/roles"));
     Assert.assertTrue(validPropertyIds.contains("Users/password"));
     Assert.assertTrue(validPropertyIds.contains("Users/old_password"));
     Assert.assertTrue(validPropertyIds.contains("Users/ldap_user"));

http://git-wip-us.apache.org/repos/asf/ambari/blob/1ea989b2/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
index 19f37ad..ac1bd25 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
@@ -21,19 +21,60 @@ package org.apache.ambari.server.upgrade;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
-import static org.easymock.EasyMock.*;
+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.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.*;
+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 javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.metamodel.SingularAttribute;
 
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor;
-import org.apache.ambari.server.orm.dao.DaoUtils;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.PermissionDAO;
+import org.apache.ambari.server.orm.dao.PrincipalDAO;
+import org.apache.ambari.server.orm.dao.PrincipalTypeDAO;
+import org.apache.ambari.server.orm.dao.PrivilegeDAO;
+import org.apache.ambari.server.orm.dao.ResourceDAO;
+import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
+import org.apache.ambari.server.orm.dao.UserDAO;
+import org.apache.ambari.server.orm.dao.ViewDAO;
+import org.apache.ambari.server.orm.dao.ViewInstanceDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
 import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
+import org.apache.ambari.server.orm.entities.UserEntity;
+import org.apache.ambari.server.orm.entities.ViewEntity;
+import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
@@ -44,12 +85,11 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.inject.*;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.*;
-import javax.persistence.metamodel.SingularAttribute;
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.Provider;
 
 /**
  * UpgradeCatalog170 unit tests.
@@ -167,10 +207,21 @@ public class UpgradeCatalog170Test {
     Clusters clusters = createStrictMock(Clusters.class);
     Config config = createStrictMock(Config.class);
 
+    UserDAO userDAO = createNiceMock(UserDAO.class);
+    PrincipalDAO principalDAO = createNiceMock(PrincipalDAO.class);
+    PrincipalTypeDAO principalTypeDAO = createNiceMock(PrincipalTypeDAO.class);
+    ClusterDAO clusterDAO = createNiceMock(ClusterDAO.class);
+    ResourceTypeDAO resourceTypeDAO = createNiceMock(ResourceTypeDAO.class);
+    ResourceDAO resourceDAO = createNiceMock(ResourceDAO.class);
+    ViewDAO viewDAO = createNiceMock(ViewDAO.class);
+    ViewInstanceDAO viewInstanceDAO = createNiceMock(ViewInstanceDAO.class);
+    PermissionDAO permissionDAO = createNiceMock(PermissionDAO.class);
+    PrivilegeDAO privilegeDAO = createNiceMock(PrivilegeDAO.class);
+
     EntityTransaction trans = createNiceMock(EntityTransaction.class);
     CriteriaBuilder cb = createNiceMock(CriteriaBuilder.class);
     CriteriaQuery<HostRoleCommandEntity> cq = createNiceMock(CriteriaQuery.class);
-    Root<HostRoleCommandEntity> hrc = (Root<HostRoleCommandEntity>) createNiceMock(Root.class);
+    Root<HostRoleCommandEntity> hrc = createNiceMock(Root.class);
     Path<Long> taskId = null;
     Path<String> outputLog = null;
     Path<String> errorLog = null;
@@ -244,8 +295,28 @@ public class UpgradeCatalog170Test {
     expect(configHelper.findConfigTypesByPropertyName(new StackId("HDP", "2.1"), "content")).andReturn(envDicts).once();
     expect(configHelper.getPropertyValueFromStackDefenitions(cluster, "hadoop-env", "content")).andReturn("env file contents").once();
 
+    expect(injector.getInstance(UserDAO.class)).andReturn(userDAO).once();
+    expect(injector.getInstance(PrincipalDAO.class)).andReturn(principalDAO).once();
+    expect(injector.getInstance(PrincipalTypeDAO.class)).andReturn(principalTypeDAO).once();
+    expect(injector.getInstance(ClusterDAO.class)).andReturn(clusterDAO).once();
+    expect(injector.getInstance(ResourceTypeDAO.class)).andReturn(resourceTypeDAO).once();
+    expect(injector.getInstance(ResourceDAO.class)).andReturn(resourceDAO).once();
+    expect(injector.getInstance(ViewDAO.class)).andReturn(viewDAO).once();
+    expect(injector.getInstance(ViewInstanceDAO.class)).andReturn(viewInstanceDAO).once();
+    expect(injector.getInstance(PermissionDAO.class)).andReturn(permissionDAO).once();
+    expect(injector.getInstance(PrivilegeDAO.class)).andReturn(privilegeDAO).once();
+
+    expect(userDAO.findAll()).andReturn(Collections.<UserEntity> emptyList()).anyTimes();
+    expect(clusterDAO.findAll()).andReturn(Collections.<ClusterEntity> emptyList()).anyTimes();
+    expect(viewDAO.findAll()).andReturn(Collections.<ViewEntity> emptyList()).anyTimes();
+    expect(viewInstanceDAO.findAll()).andReturn(Collections.<ViewInstanceEntity> emptyList()).anyTimes();
+    expect(permissionDAO.findAmbariAdminPermission()).andReturn(null);
+    expect(permissionDAO.findClusterOperatePermission()).andReturn(null);
+    expect(permissionDAO.findClusterReadPermission()).andReturn(null);
+
     replay(entityManager, trans, upgradeCatalog, cb, cq, hrc, q);
     replay(dbAccessor, configuration, injector, cluster, clusters, amc, config, configHelper);
+    replay(userDAO, clusterDAO, viewDAO, viewInstanceDAO, permissionDAO);
 
     Class<?> c = AbstractUpgradeCatalog.class;
     Field f = c.getDeclaredField("configuration");


[2/2] git commit: AMBARI-6827. UpgradeCatalog170Test, Unit test fixed.

Posted by sw...@apache.org.
AMBARI-6827. UpgradeCatalog170Test, Unit test fixed.


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/bd9435da
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/bd9435da
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/bd9435da

Branch: refs/heads/trunk
Commit: bd9435daa95532016b34682231a90f8102bb4eac
Parents: 1ea989b
Author: Siddharth Wagle <sw...@hortonworks.com>
Authored: Fri Aug 15 14:48:15 2014 -0700
Committer: Siddharth Wagle <sw...@hortonworks.com>
Committed: Fri Aug 15 14:48:15 2014 -0700

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog170Test.java      | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bd9435da/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
index ac1bd25..5a91f56 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java
@@ -36,6 +36,8 @@ import static org.easymock.EasyMock.verify;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
@@ -110,9 +112,20 @@ public class UpgradeCatalog170Test {
   public void testExecuteDDLUpdates() throws Exception {
 
     final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
+    Connection connection = createNiceMock(Connection.class);
+    PreparedStatement stmt = createNiceMock(PreparedStatement.class);
     Configuration configuration = createNiceMock(Configuration.class);
     ResultSet resultSet = createNiceMock(ResultSet.class);
     expect(configuration.getDatabaseUrl()).andReturn(Configuration.JDBC_IN_MEMORY_URL).anyTimes();
+    expect(dbAccessor.getNewConnection()).andReturn(connection);
+    expect(connection.prepareStatement("SELECT config_id FROM clusterconfig " +
+      "WHERE type_name = ? ORDER BY create_timestamp")).andReturn(stmt);
+    expect(connection.prepareStatement("UPDATE clusterconfig SET version = ? " +
+      "WHERE config_id = ?")).andReturn(stmt);
+    stmt.close();
+    expectLastCall().times(2);
+    connection.close();
+    expectLastCall();
 
     Capture<DBAccessor.DBColumnInfo> clusterConfigAttributesColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
     Capture<DBAccessor.DBColumnInfo> maskColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
@@ -170,7 +183,7 @@ public class UpgradeCatalog170Test {
     resultSet.close();
     expectLastCall().anyTimes();
 
-    replay(dbAccessor, configuration, resultSet);
+    replay(dbAccessor, configuration, resultSet, connection, stmt);
     AbstractUpgradeCatalog upgradeCatalog = getUpgradeCatalog(dbAccessor);
     Class<?> c = AbstractUpgradeCatalog.class;
     Field f = c.getDeclaredField("configuration");
@@ -178,7 +191,7 @@ public class UpgradeCatalog170Test {
     f.set(upgradeCatalog, configuration);
 
     upgradeCatalog.executeDDLUpdates();
-    verify(dbAccessor, configuration, resultSet);
+    verify(dbAccessor, configuration, resultSet, connection, stmt);
 
     assertClusterConfigColumns(clusterConfigAttributesColumnCapture);
     assertViewColumns(maskColumnCapture);