You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/05/03 23:51:50 UTC

[01/50] [abbrv] incubator-geode git commit: Merge remote-tracking branch 'remotes/origin/develop' into feature/GEODE-17-2

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-1255 0fc02aeee -> 2e3093512


Merge remote-tracking branch 'remotes/origin/develop' into feature/GEODE-17-2


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7b735951
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7b735951
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7b735951

Branch: refs/heads/feature/GEODE-1255
Commit: 7b73595144647cf32680c25893a44be7b7a5c96d
Parents: 4a32721 616676e
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon Apr 18 08:02:18 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Mon Apr 18 08:02:18 2016 -0700

----------------------------------------------------------------------
 .../gemfire/cache/execute/Function.java         |  2 +-
 .../gemfire/cache30/MultiVMRegionTestCase.java  | 31 +++++++++++---------
 2 files changed, 18 insertions(+), 15 deletions(-)
----------------------------------------------------------------------



[27/50] [abbrv] incubator-geode git commit: GEODE-17: enhance the GeodeSecurityUtil and review changes

Posted by kl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
new file mode 100644
index 0000000..cc6af0e
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import java.util.Properties;
+
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.security.CustomAuthRealm;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.realm.Realm;
+import org.junit.BeforeClass;
+import org.junit.experimental.categories.Category;
+
+/**
+ * this test and ShiroUtilWithIniFileJunitTest uses the same test body, but initialize the SecurityUtils differently.
+ * If you change shiro-ini.json, remmber to change the shiro.ini to match the changes as well.
+ */
+
+@Category(UnitTest.class)
+public class GeodeSecurityUtilCustomRealmJUnitTest extends GeodeSecurityUtilWithIniFileJUnitTest {
+  @BeforeClass
+  public static void beforeClass() throws Exception{
+    Properties properties = new Properties();
+    properties.put(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME, JSONAuthorization.class.getName() + ".create");
+    properties.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
+    JSONAuthorization.setUpWithJsonFile("shiro-ini.json");
+
+    Realm realm = new CustomAuthRealm(properties);
+    SecurityManager securityManager = new DefaultSecurityManager(realm);
+    SecurityUtils.setSecurityManager(securityManager);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
new file mode 100644
index 0000000..4ad390d
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
@@ -0,0 +1,147 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import static org.assertj.core.api.Assertions.*;
+
+import com.gemstone.gemfire.cache.operations.OperationContext;
+import com.gemstone.gemfire.security.GemFireSecurityException;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.config.IniSecurityManagerFactory;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.util.ThreadContext;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+/**
+ * this test and ShiroUtilCustomRealmJUunitTest uses the same test body, but initialize the SecurityUtils differently.
+ * If you change shiro.ini, remmber to change the shiro-ini.json to match the changes as well.
+ */
+@Category(UnitTest.class)
+public class GeodeSecurityUtilWithIniFileJUnitTest {
+  @BeforeClass
+  public static void beforeClass() throws Exception{
+    ThreadContext.remove();
+    IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
+    SecurityManager securityManager = factory.getInstance();
+    SecurityUtils.setSecurityManager(securityManager);
+  }
+
+  @AfterClass
+  public static void afterClass(){
+    ThreadContext.remove();
+  }
+
+  @Test
+  public void testRoot(){
+    GeodeSecurityUtil.login("root", "secret");
+    GeodeSecurityUtil.authorize(TestCommand.none);
+    GeodeSecurityUtil.authorize(TestCommand.everyOneAllowed);
+    GeodeSecurityUtil.authorize(TestCommand.dataRead);
+    GeodeSecurityUtil.authorize(TestCommand.dataWrite);
+    GeodeSecurityUtil.authorize(TestCommand.regionARead);
+    GeodeSecurityUtil.authorize(TestCommand.regionAWrite);
+    GeodeSecurityUtil.authorize(TestCommand.clusterWrite);
+    GeodeSecurityUtil.authorize(TestCommand.clusterRead);
+  }
+
+  @Test
+  public void testGuest(){
+    GeodeSecurityUtil.login("guest", "guest");
+    GeodeSecurityUtil.authorize(TestCommand.none);
+    GeodeSecurityUtil.authorize(TestCommand.everyOneAllowed);
+
+    assertNotAuthorized(TestCommand.dataRead);
+    assertNotAuthorized(TestCommand.dataWrite);
+    assertNotAuthorized(TestCommand.regionARead);
+    assertNotAuthorized(TestCommand.regionAWrite);
+    assertNotAuthorized(TestCommand.clusterRead);
+    assertNotAuthorized(TestCommand.clusterWrite);
+    GeodeSecurityUtil.logout();
+  }
+
+  @Test
+  public void testRegionAReader(){
+    GeodeSecurityUtil.login("regionAReader", "password");
+    GeodeSecurityUtil.authorize(TestCommand.none);
+    GeodeSecurityUtil.authorize(TestCommand.everyOneAllowed);
+    GeodeSecurityUtil.authorize(TestCommand.regionARead);
+
+    assertNotAuthorized(TestCommand.regionAWrite);
+    assertNotAuthorized(TestCommand.dataRead);
+    assertNotAuthorized(TestCommand.dataWrite);
+    assertNotAuthorized(TestCommand.clusterRead);
+    assertNotAuthorized(TestCommand.clusterWrite);
+    GeodeSecurityUtil.logout();
+  }
+
+  @Test
+  public void testRegionAUser(){
+    GeodeSecurityUtil.login("regionAUser", "password");
+    GeodeSecurityUtil.authorize(TestCommand.none);
+    GeodeSecurityUtil.authorize(TestCommand.everyOneAllowed);
+    GeodeSecurityUtil.authorize(TestCommand.regionAWrite);
+    GeodeSecurityUtil.authorize(TestCommand.regionARead);
+
+    assertNotAuthorized(TestCommand.dataRead);
+    assertNotAuthorized(TestCommand.dataWrite);
+    assertNotAuthorized(TestCommand.clusterRead);
+    assertNotAuthorized(TestCommand.clusterWrite);
+    GeodeSecurityUtil.logout();
+  }
+
+  @Test
+  public void testDataReader(){
+    GeodeSecurityUtil.login("dataReader", "12345");
+    GeodeSecurityUtil.authorize(TestCommand.none);
+    GeodeSecurityUtil.authorize(TestCommand.everyOneAllowed);
+    GeodeSecurityUtil.authorize(TestCommand.regionARead);
+    GeodeSecurityUtil.authorize(TestCommand.dataRead);
+
+    assertNotAuthorized(TestCommand.regionAWrite);
+    assertNotAuthorized(TestCommand.dataWrite);
+    assertNotAuthorized(TestCommand.clusterRead);
+    assertNotAuthorized(TestCommand.clusterWrite);
+    GeodeSecurityUtil.logout();
+  }
+
+  @Test
+  public void testReader(){
+    GeodeSecurityUtil.login("reader", "12345");
+    GeodeSecurityUtil.authorize(TestCommand.none);
+    GeodeSecurityUtil.authorize(TestCommand.everyOneAllowed);
+    GeodeSecurityUtil.authorize(TestCommand.regionARead);
+    GeodeSecurityUtil.authorize(TestCommand.dataRead);
+    GeodeSecurityUtil.authorize(TestCommand.clusterRead);
+
+    assertNotAuthorized(TestCommand.regionAWrite);
+    assertNotAuthorized(TestCommand.dataWrite);
+    assertNotAuthorized(TestCommand.clusterWrite);
+    GeodeSecurityUtil.logout();
+  }
+
+  private void assertNotAuthorized(OperationContext context){
+    assertThatThrownBy(()-> GeodeSecurityUtil.authorize(context)).isInstanceOf(GemFireSecurityException.class).hasMessageContaining(context.toString());
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
index 56d7030..b5ef0a6 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
@@ -31,6 +31,8 @@ import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
 import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
 import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
+import org.apache.shiro.authz.permission.WildcardPermission;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
@@ -122,7 +124,7 @@ public class GfshCommandsSecurityTest {
 
 
   private void runCommandsWithAndWithout(String permission) throws Exception{
-    List<TestCommand> permitted = TestCommand.getCommandsOfPermission(permission);
+    List<TestCommand> permitted = TestCommand.getPermittedCommands(new WildcardPermission(permission));
     for(TestCommand clusterRead:permitted) {
       LogService.getLogger().info("Processing authorized command: "+clusterRead.getCommand());gfsh.executeCommand(clusterRead.getCommand());
       CommandResult result = (CommandResult) gfsh.getResult();
@@ -155,7 +157,7 @@ public class GfshCommandsSecurityTest {
       }
 
       assertEquals(ResultBuilder.ERRORCODE_UNAUTHORIZED, ((ErrorResultData) result.getResultData()).getErrorCode());
-      assertTrue(result.getContent().toString().contains(other.getPermission()));
+      assertTrue(result.getContent().toString().contains(other.getPermission().toString()));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
index 48e0a39..83f4876 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
@@ -32,8 +32,6 @@ import javax.management.remote.JMXPrincipal;
 import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.operations.OperationContext;
-import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import com.gemstone.gemfire.cache.operations.OperationContext.Resource;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.security.AccessControl;
@@ -41,41 +39,16 @@ import com.gemstone.gemfire.security.AuthenticationFailedException;
 import com.gemstone.gemfire.security.Authenticator;
 import com.gemstone.gemfire.security.NotAuthorizedException;
 import com.gemstone.gemfire.util.test.TestUtil;
+
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
 public class JSONAuthorization implements AccessControl, Authenticator {
 
-  static class Permission {
-
-    private final Resource resource;
-    private final OperationCode operationCode;
-
-    Permission(Resource resource, OperationCode operationCode) {
-      this.resource = resource;
-      this.operationCode = operationCode;
-    }
-
-    public Resource getResource() {
-      return resource;
-    }
-
-    public OperationCode getOperationCode() {
-      return operationCode;
-    }
-
-    @Override
-    public String toString() {
-      String result = resource.toString() + ":" + operationCode.toString();
-      return result;
-    }
-  }
-
   public static class Role {
-    List<Permission> permissions = new ArrayList<>();
+    List<OperationContext> permissions = new ArrayList<>();
     String name;
-    List<String> regionNames = null; // when checking, if regionNames is null, that means all regions are allowed.
     String serverGroup;
   }
 
@@ -139,29 +112,18 @@ public class JSONAuthorization implements AccessControl, Authenticator {
       JSONObject obj = array.getJSONObject(i);
       Role role = new Role();
       role.name = obj.getString("name");
+      String regionNames = null;
+      if(obj.has("regions")) {
+        regionNames = obj.getString("regions");
+      }
       JSONArray ops = obj.getJSONArray("operationsAllowed");
       for (int j = 0; j < ops.length(); j++) {
         String[] parts = ops.getString(j).split(":");
-        Resource r = Resource.valueOf(parts[0]);
-        OperationCode op = parts.length > 1 ? OperationCode.valueOf(parts[1]) : OperationCode.READ;
-        role.permissions.add(new Permission(r, op));
-      }
-
-      if(obj.has("region")) {
-        if (role.regionNames == null) {
-          role.regionNames = new ArrayList<>();
-        }
-        role.regionNames.add(obj.getString("region"));
-      }
-
-      if(obj.has("regions")) {
-        JSONArray regions = obj.getJSONArray("regions");
-        if (role.regionNames == null) {
-          role.regionNames = new ArrayList<>();
-        }
-        for (int j = 0; j < regions.length(); j++) {
-          role.regionNames.add(regions.getString(j));
+        if(regionNames!=null) {
+          role.permissions.add(new ResourceOperationContext(parts[0], parts[1], regionNames));
         }
+        else
+          role.permissions.add(new ResourceOperationContext(parts[0], parts[1], "*"));
       }
 
       roleMap.put(role.name, role);
@@ -194,28 +156,15 @@ public class JSONAuthorization implements AccessControl, Authenticator {
     if(user == null)
       return false; // this user is not authorized to do anything
 
-    LogService.getLogger().info("Checking for permission " + context.getResource() + ":" + context.getOperationCode());
-
     // check if the user has this permission defined in the context
     for(Role role:acl.get(user.name).roles) {
-      for (Permission perm : role.permissions) {
-        if (context.getResource() == perm.getResource() && context.getOperationCode() == perm.getOperationCode()) {
-          LogService.getLogger().info("Found permission " + perm);
-
-          //no need to further check the rgionName
-          if(context.getRegionName()==null){
-            return true;
-          }
-
-          if(role.regionNames == null || role.regionNames.contains(context.getRegionName())){
-            // if regionName is null, i.e. all regions are allowed
-            return true;
-          }
+      for (OperationContext permitted : role.permissions) {
+        if (permitted.implies(context)) {
+          return true;
         }
       }
     }
 
-    LogService.getLogger().info("Did not find code " + context);
     return false;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
index b4b3f72..f07358b 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
@@ -81,10 +81,10 @@ public class LockServiceMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> lockServiceMBean.becomeLockGrantor()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> lockServiceMBean.fetchGrantorMember()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> lockServiceMBean.getMemberCount()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> lockServiceMBean.isDistributed()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> lockServiceMBean.listThreadsHoldingLock()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> lockServiceMBean.becomeLockGrantor()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> lockServiceMBean.fetchGrantorMember()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> lockServiceMBean.getMemberCount()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> lockServiceMBean.isDistributed()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> lockServiceMBean.listThreadsHoldingLock()).hasMessageContaining(TestCommand.clusterRead.toString());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
index 2548d21..425c467 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
@@ -71,8 +71,8 @@ public class ManagerMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testSomeAccess() throws Exception {
-    assertThatThrownBy(() -> managerMXBean.start()).hasMessageContaining("CLUSTER:MANAGE");
-    assertThatThrownBy(() -> managerMXBean.getPulseURL()).hasMessageContaining("CLUSTER:WRITE");
+    assertThatThrownBy(() -> managerMXBean.start()).hasMessageContaining(TestCommand.clusterManage.toString());
+    assertThatThrownBy(() -> managerMXBean.getPulseURL()).hasMessageContaining(TestCommand.clusterWrite.toString());
     managerMXBean.isRunning();
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
index c5ff369..8261d09 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
@@ -66,7 +66,7 @@ public class MemberMBeanSecurityJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "cluster-admin", password = "1234567")
   public void testClusterAdmin() throws Exception {
-    assertThatThrownBy(() -> bean.compactAllDiskStores()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.compactAllDiskStores()).hasMessageContaining(TestCommand.dataManage.toString());
     bean.shutDownMember();
     bean.createManager();
     bean.fetchJvmThreads();
@@ -84,8 +84,8 @@ public class MemberMBeanSecurityJUnitTest {
   @JMXConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testDataAdmin() throws Exception {
     bean.compactAllDiskStores();
-    assertThatThrownBy(() -> bean.shutDownMember()).hasMessageContaining("CLUSTER:MANAGE");
-    assertThatThrownBy(() -> bean.createManager()).hasMessageContaining("CLUSTER:MANAGE");
+    assertThatThrownBy(() -> bean.shutDownMember()).hasMessageContaining(TestCommand.clusterManage.toString());
+    assertThatThrownBy(() -> bean.createManager()).hasMessageContaining(TestCommand.clusterManage.toString());
     bean.showJVMMetrics();
     bean.status();
   }
@@ -93,18 +93,18 @@ public class MemberMBeanSecurityJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testDataUser() throws Exception {
-    assertThatThrownBy(() -> bean.shutDownMember()).hasMessageContaining("CLUSTER:MANAGE");
-    assertThatThrownBy(() -> bean.createManager()).hasMessageContaining("CLUSTER:MANAGE");
-    assertThatThrownBy(() -> bean.compactAllDiskStores()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.fetchJvmThreads()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getName()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getDiskStores()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.hasGatewayReceiver()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isCacheServer()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isServer()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.listConnectedGatewayReceivers()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.shutDownMember()).hasMessageContaining(TestCommand.clusterManage.toString());
+    assertThatThrownBy(() -> bean.createManager()).hasMessageContaining(TestCommand.clusterManage.toString());
+    assertThatThrownBy(() -> bean.compactAllDiskStores()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.fetchJvmThreads()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getName()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getDiskStores()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.hasGatewayReceiver()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.isCacheServer()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.isServer()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.listConnectedGatewayReceivers()).hasMessageContaining(TestCommand.clusterRead.toString());
     //assertThatThrownBy(() -> bean.processCommand("create region --name=Region_A")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.showJVMMetrics()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.status()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.showJVMMetrics()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.status()).hasMessageContaining(TestCommand.clusterRead.toString());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
new file mode 100644
index 0000000..318d327
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import static org.junit.Assert.*;
+
+import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+import com.gemstone.gemfire.cache.operations.OperationContext.Resource;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+import org.apache.shiro.authz.permission.WildcardPermission;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(UnitTest.class)
+public class ResourceOperationContextJUnitTest {
+
+  private ResourceOperationContext context;
+
+  @Test
+  public void testEmptyConstructor(){
+    context = new ResourceOperationContext();
+    assertEquals(Resource.NULL, context.getResource());
+    assertEquals(OperationCode.NULL, context.getOperationCode());
+    assertEquals("NULL", context.getRegionName());
+  }
+
+  @Test
+  public void testIsPermission(){
+    context = new ResourceOperationContext();
+    assertTrue(context instanceof WildcardPermission);
+  }
+
+  @Test
+  public void testConstructor(){
+    context = new ResourceOperationContext(null, null, null);
+    assertEquals(Resource.NULL, context.getResource());
+    assertEquals(OperationCode.NULL, context.getOperationCode());
+    assertEquals("NULL", context.getRegionName());
+
+    context = new ResourceOperationContext(null, null);
+    assertEquals(Resource.NULL, context.getResource());
+    assertEquals(OperationCode.NULL, context.getOperationCode());
+    assertEquals("NULL", context.getRegionName());
+
+    context = new ResourceOperationContext("DATA", null, null);
+    assertEquals(Resource.DATA, context.getResource());
+    assertEquals(OperationCode.NULL, context.getOperationCode());
+    assertEquals("NULL", context.getRegionName());
+
+    context = new ResourceOperationContext(null, "MANAGE", "REGIONA");
+    assertEquals(Resource.NULL, context.getResource());
+    assertEquals(OperationCode.MANAGE, context.getOperationCode());
+    assertEquals("REGIONA", context.getRegionName());
+
+    context = new ResourceOperationContext("DATA", "MANAGE", "REGIONA");
+    assertEquals(Resource.DATA, context.getResource());
+    assertEquals(OperationCode.MANAGE, context.getOperationCode());
+    assertEquals("REGIONA", context.getRegionName());
+  }
+
+  @Test
+  public void testToString(){
+    context = new ResourceOperationContext();
+    assertEquals("[null]:[null]:[null]", context.toString());
+
+    context = new ResourceOperationContext("DATA", "MANAGE");
+    assertEquals("[data]:[manage]:[null]", context.toString());
+
+    context = new ResourceOperationContext("DATA", "MANAGE", "REGIONA");
+    assertEquals("[data]:[manage]:[regiona]", context.toString());
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
index c25044d..56eeeec 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
@@ -20,8 +20,24 @@ package com.gemstone.gemfire.management.internal.security;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.gemstone.gemfire.cache.operations.OperationContext;
+
+import org.apache.shiro.authz.Permission;
+
 public class TestCommand {
-  
+  public static OperationContext none = null;
+  public static OperationContext everyOneAllowed = new ResourceOperationContext();
+  public static OperationContext dataRead = new ResourceOperationContext("DATA", "READ");
+  public static OperationContext dataWrite = new ResourceOperationContext("DATA", "WRITE");
+  public static OperationContext dataManage = new ResourceOperationContext("DATA", "MANAGE");
+
+  public static OperationContext regionARead = new ResourceOperationContext("DATA", "READ", "RegionA");
+  public static OperationContext regionAWrite = new ResourceOperationContext("DATA", "WRITE", "RegionA");
+
+  public static OperationContext clusterRead = new ResourceOperationContext("CLUSTER", "READ");
+  public static OperationContext clusterWrite = new ResourceOperationContext("CLUSTER", "WRITE");
+  public static OperationContext clusterManage = new ResourceOperationContext("CLUSTER", "MANAGE");
+
   private static List<TestCommand> testCommands = new ArrayList<>();
 
   static{
@@ -29,14 +45,14 @@ public class TestCommand {
   }
   
   private final String command;
-  private final String permission;
+  private final OperationContext permission;
   
-  public TestCommand(String command, String permission) {
+  public TestCommand(String command, OperationContext permission) {
     this.command = command;
     this.permission = permission;
   }
   
-  private static void createTestCommand(String command, String permission) {
+  private static void createTestCommand(String command, OperationContext permission) {
     TestCommand instance = new TestCommand(command, permission);
     testCommands.add(instance);
   }
@@ -45,7 +61,7 @@ public class TestCommand {
     return this.command;
   }
 
-  public String getPermission() {
+  public OperationContext getPermission() {
     return this.permission;
   }
 
@@ -53,11 +69,11 @@ public class TestCommand {
     return testCommands;
   }
 
-  public static List<TestCommand> getCommandsOfPermission(String permission){
+  public static List<TestCommand> getPermittedCommands(Permission permission){
     List<TestCommand> result = new ArrayList<>();
     for(TestCommand testCommand:testCommands){
-      String cPerm = testCommand.getPermission();
-      if(cPerm!=null && cPerm.startsWith(permission)){
+      OperationContext cPerm = testCommand.getPermission();
+      if(cPerm!=null && permission.implies(cPerm)){
         result.add(testCommand);
       }
     }
@@ -66,75 +82,75 @@ public class TestCommand {
 
   private static void init() {
     // ClientCommands
-    createTestCommand("list clients", "CLUSTER:READ");
-    createTestCommand("describe client --clientID=172.16.196.144", "CLUSTER:READ");
+    createTestCommand("list clients", clusterRead);
+    createTestCommand("describe client --clientID=172.16.196.144", clusterRead);
 
     // ConfigCommands
-    createTestCommand("alter runtime", "CLUSTER:MANAGE");
-    createTestCommand("describe config --member=Member1", "CLUSTER:READ");
-    createTestCommand("export config --member=member1", "CLUSTER:READ");
+    createTestCommand("alter runtime", clusterManage);
+    createTestCommand("describe config --member=Member1", clusterRead);
+    createTestCommand("export config --member=member1", clusterRead);
 
     //CreateAlterDestroyRegionCommands
-    createTestCommand("alter region --name=region1 --eviction-max=5000", "DATA:MANAGE");
-    createTestCommand("create region --name=region12 --type=REPLICATE", "DATA:MANAGE");
-    createTestCommand("destroy region --name=value", "DATA:MANAGE");
+    createTestCommand("alter region --name=region1 --eviction-max=5000", dataManage);
+    createTestCommand("create region --name=region12 --type=REPLICATE", dataManage);
+    createTestCommand("destroy region --name=value", dataManage);
 
     //Data Commands
-    createTestCommand("rebalance --include-region=region1", "DATA:MANAGE");
-    createTestCommand("export data --region=region1 --file=export.txt --member=exportMember", "DATA:READ");
-    createTestCommand("import data --region=region1 --file=import.txt --member=importMember", "DATA:WRITE");
-    createTestCommand("put --key=key1 --value=value1 --region=region1", "DATA:WRITE");
-    createTestCommand("get --key=key1 --region=region1", "DATA:READ");
-    createTestCommand("remove --region=region1", "DATA:MANAGE");
-    createTestCommand("query --query='SELECT * FROM /region1'", "DATA:READ");
-    createTestCommand("locate entry --key=k1 --region=secureRegion", "DATA:READ");
+    createTestCommand("rebalance --include-region=regionA", dataManage);
+    createTestCommand("export data --region=regionA --file=export.txt --member=exportMember", regionARead);
+    createTestCommand("import data --region=regionA --file=import.txt --member=importMember", regionAWrite);
+    createTestCommand("put --key=key1 --value=value1 --region=regionA", regionAWrite);
+    createTestCommand("get --key=key1 --region=regionA", regionARead);
+    createTestCommand("remove --region=regionA", dataManage);
+    createTestCommand("query --query='SELECT * FROM /region1'", dataRead);
+    createTestCommand("locate entry --key=k1 --region=regionA", regionARead);
 
     // Deploy commands
-    //createTestCommand("deploy --jar=group1_functions.jar --group=Group1", "DATA:MANAGE"); // TODO: this command will fail in GfshCommandsSecurityTest at interceptor for jar file checking
-    createTestCommand("undeploy --group=Group1", "DATA:MANAGE");
+    //createTestCommand("deploy --jar=group1_functions.jar --group=Group1", dataManage); // TODO: this command will fail in GfshCommandsSecurityTest at interceptor for jar file checking
+    createTestCommand("undeploy --group=Group1", dataManage);
 
     // Diskstore Commands
-    createTestCommand("backup disk-store --dir=foo", "DATA:READ");
-    createTestCommand("list disk-stores", "CLUSTER:READ");
-    createTestCommand("create disk-store --name=foo --dir=bar", "DATA:MANAGE");
-    createTestCommand("compact disk-store --name=foo", "DATA:MANAGE");
+    createTestCommand("backup disk-store --dir=foo", dataRead);
+    createTestCommand("list disk-stores", clusterRead);
+    createTestCommand("create disk-store --name=foo --dir=bar", dataManage);
+    createTestCommand("compact disk-store --name=foo", dataManage);
     createTestCommand("compact offline-disk-store --name=foo --disk-dirs=bar", null);
     createTestCommand("upgrade offline-disk-store --name=foo --disk-dirs=bar", null);
-    createTestCommand("describe disk-store --name=foo --member=baz", "CLUSTER:READ");
-    createTestCommand("revoke missing-disk-store --id=foo", "DATA:MANAGE");
-    createTestCommand("show missing-disk-stores", "CLUSTER:READ");
+    createTestCommand("describe disk-store --name=foo --member=baz", clusterRead);
+    createTestCommand("revoke missing-disk-store --id=foo", dataManage);
+    createTestCommand("show missing-disk-stores", clusterRead);
     createTestCommand("describe offline-disk-store --name=foo --disk-dirs=bar", null);
     createTestCommand("export offline-disk-store --name=foo --disk-dirs=bar --dir=baz", null);
     createTestCommand("validate offline-disk-store --name=foo --disk-dirs=bar", null);
     createTestCommand("alter disk-store --name=foo --region=xyz --disk-dirs=bar", null);
-    createTestCommand("destroy disk-store --name=foo", "DATA:MANAGE");
+    createTestCommand("destroy disk-store --name=foo", dataManage);
 
     // DurableClientCommands
-    createTestCommand("close durable-client --durable-client-id=client1", "DATA:MANAGE");
-    createTestCommand("close durable-cq --durable-client-id=client1 --durable-cq-name=cq1", "DATA:MANAGE");
-    createTestCommand("show subscription-queue-size --durable-client-id=client1", "CLUSTER:READ");
-    createTestCommand("list durable-cqs --durable-client-id=client1", "CLUSTER:READ");
+    createTestCommand("close durable-client --durable-client-id=client1", dataManage);
+    createTestCommand("close durable-cq --durable-client-id=client1 --durable-cq-name=cq1", dataManage);
+    createTestCommand("show subscription-queue-size --durable-client-id=client1", clusterRead);
+    createTestCommand("list durable-cqs --durable-client-id=client1", clusterRead);
 
     //ExportIMportSharedConfigurationCommands
-    createTestCommand("export cluster-configuration --zip-file-name=mySharedConfig.zip", "CLUSTER:READ");
-    createTestCommand("import cluster-configuration --zip-file-name=value.zip", "CLUSTER:MANAGE");
+    createTestCommand("export cluster-configuration --zip-file-name=mySharedConfig.zip", clusterRead);
+    createTestCommand("import cluster-configuration --zip-file-name=value.zip", clusterManage);
 
     //FunctionCommands
-    //createTestCommand("destroy function --id=InterestCalculations", "DATA:MANAGE");
-    createTestCommand("execute function --id=InterestCalculations --group=Group1", "DATA:WRITE");
-    createTestCommand("list functions", "CLUSTER:READ");
+    //createTestCommand("destroy function --id=InterestCalculations", dataManage);
+    createTestCommand("execute function --id=InterestCalculations --group=Group1", dataWrite);
+    createTestCommand("list functions", clusterRead);
 
     //GfshHelpCommands
     createTestCommand("hint", null);
     createTestCommand("help", null);
 
     //IndexCommands
-    createTestCommand("clear defined indexes", "DATA:MANAGE");
-    createTestCommand("create defined indexes", "DATA:MANAGE");
-    createTestCommand("create index --name=myKeyIndex --expression=region1.Id --region=region1 --type=key", "DATA:MANAGE");
-    createTestCommand("define index --name=myIndex1 --expression=exp1 --region=/exampleRegion", "DATA:MANAGE");
-    createTestCommand("destroy index --member=server2", "DATA:MANAGE");
-    createTestCommand("list indexes", "CLUSTER:READ");
+    createTestCommand("clear defined indexes", dataManage);
+    createTestCommand("create defined indexes", dataManage);
+    createTestCommand("create index --name=myKeyIndex --expression=region1.Id --region=region1 --type=key", dataManage);
+    createTestCommand("define index --name=myIndex1 --expression=exp1 --region=/exampleRegion", dataManage);
+    createTestCommand("destroy index --member=server2", dataManage);
+    createTestCommand("list indexes", clusterRead);
 
     //LauncherLifecycleCommands
     createTestCommand("start jconsole", null);
@@ -145,38 +161,38 @@ public class TestCommand {
     createTestCommand("start vsd", null);
     createTestCommand("status locator", null);
     createTestCommand("status server", null);
-    //createTestCommand("stop locator --name=locator1", "CLUSTER:MANAGE");
-    //createTestCommand("stop server --name=server1", "CLUSTER:MANAGE");
+    //createTestCommand("stop locator --name=locator1", clusterManage);
+    //createTestCommand("stop server --name=server1", clusterManage);
 
     //MemberCommands
-    createTestCommand("describe member --name=server1", "CLUSTER:READ");
-    createTestCommand("list members", "CLUSTER:READ");
+    createTestCommand("describe member --name=server1", clusterRead);
+    createTestCommand("list members", clusterRead);
 
     // Misc Commands
-    createTestCommand("change loglevel --loglevel=severe --member=server1", "CLUSTER:WRITE");
-    createTestCommand("export logs --dir=data/logs", "CLUSTER:READ");
-    createTestCommand("export stack-traces --file=stack.txt", "CLUSTER:READ");
-    createTestCommand("gc", "CLUSTER:MANAGE");
-    createTestCommand("netstat --member=server1", "CLUSTER:READ");
-    createTestCommand("show dead-locks --file=deadlocks.txt", "CLUSTER:READ");
-    createTestCommand("show log --member=locator1 --lines=5", "CLUSTER:READ");
-    createTestCommand("show metrics", "CLUSTER:READ");
+    createTestCommand("change loglevel --loglevel=severe --member=server1", clusterWrite);
+    createTestCommand("export logs --dir=data/logs", clusterRead);
+    createTestCommand("export stack-traces --file=stack.txt", clusterRead);
+    createTestCommand("gc", clusterManage);
+    createTestCommand("netstat --member=server1", clusterRead);
+    createTestCommand("show dead-locks --file=deadlocks.txt", clusterRead);
+    createTestCommand("show log --member=locator1 --lines=5", clusterRead);
+    createTestCommand("show metrics", clusterRead);
 
 
     // PDX Commands
-    createTestCommand("configure pdx --read-serialized=true", "DATA:MANAGE");
-    //createTestCommand("pdx rename --old=com.gemstone --new=com.pivotal --disk-store=ds1 --disk-dirs=/diskDir1", "DATA:MANAGE");
+    createTestCommand("configure pdx --read-serialized=true", dataManage);
+    //createTestCommand("pdx rename --old=com.gemstone --new=com.pivotal --disk-store=ds1 --disk-dirs=/diskDir1", dataManage);
 
     // Queue Commands
-    createTestCommand("create async-event-queue --id=myAEQ --listener=myApp.myListener", "DATA:MANAGE");
-    createTestCommand("list async-event-queues", "CLUSTER:READ");
+    createTestCommand("create async-event-queue --id=myAEQ --listener=myApp.myListener", dataManage);
+    createTestCommand("list async-event-queues", clusterRead);
 
     //RegionCommands
-    createTestCommand("describe region --name=value", "CLUSTER:READ");
-    createTestCommand("list regions", "CLUSTER:READ");
+    createTestCommand("describe region --name=value", clusterRead);
+    createTestCommand("list regions", clusterRead);
 
     // StatusCommands
-    createTestCommand("status cluster-config-service", "CLUSTER:READ");
+    createTestCommand("status cluster-config-service", clusterRead);
 
     // Shell Commands
     createTestCommand("connect", null);
@@ -190,22 +206,22 @@ public class TestCommand {
 
 
     // WAN Commands
-    createTestCommand("create gateway-sender --id=sender1 --remote-distributed-system-id=2", "DATA:MANAGE");
-    createTestCommand("start gateway-sender --id=sender1", "DATA:MANAGE");
-    createTestCommand("pause gateway-sender --id=sender1", "DATA:MANAGE");
-    createTestCommand("resume gateway-sender --id=sender1", "DATA:MANAGE");
-    createTestCommand("stop gateway-sender --id=sender1", "DATA:MANAGE");
-    createTestCommand("load-balance gateway-sender --id=sender1", "DATA:MANAGE");
-    createTestCommand("list gateways", "CLUSTER:READ");
-    createTestCommand("create gateway-receiver", "DATA:MANAGE");
-    createTestCommand("start gateway-receiver", "DATA:MANAGE");
-    createTestCommand("stop gateway-receiver", "DATA:MANAGE");
-    createTestCommand("status gateway-receiver", "CLUSTER:READ");
-    createTestCommand("status gateway-sender --id=sender1", "CLUSTER:READ");
+    createTestCommand("create gateway-sender --id=sender1 --remote-distributed-system-id=2", dataManage);
+    createTestCommand("start gateway-sender --id=sender1", dataManage);
+    createTestCommand("pause gateway-sender --id=sender1", dataManage);
+    createTestCommand("resume gateway-sender --id=sender1", dataManage);
+    createTestCommand("stop gateway-sender --id=sender1", dataManage);
+    createTestCommand("load-balance gateway-sender --id=sender1", dataManage);
+    createTestCommand("list gateways", clusterRead);
+    createTestCommand("create gateway-receiver", dataManage);
+    createTestCommand("start gateway-receiver", dataManage);
+    createTestCommand("stop gateway-receiver", dataManage);
+    createTestCommand("status gateway-receiver", clusterRead);
+    createTestCommand("status gateway-sender --id=sender1", clusterRead);
 
     //ShellCommand
     createTestCommand("disconnect", null);
     //Misc commands
-    //createTestCommand("shutdown", "CLUSTER:MANAGE");
+    //createTestCommand("shutdown", clusterManage);
   };
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/auth3.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/auth3.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/auth3.json
index cfd43f5..635cff5 100644
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/auth3.json
+++ b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/auth3.json
@@ -11,7 +11,7 @@
       "operationsAllowed": [
         "REGION:GET"
       ],
-      "region": "secureRegion"
+      "regions": "secureRegion"
     }
   ],
   "users": [

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
index 01c9fd6..638ae07 100644
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
+++ b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
@@ -76,16 +76,18 @@
     {
       "name": "region1-use",
       "operationsAllowed": [
-        "DATA"
+        "DATA:READ",
+        "DATA:WRITE"
       ],
-      "region": "region1"
+      "regions": "null,region1"
     },
     {
       "name": "secure-use",
       "operationsAllowed": [
-        "DATA"
+        "DATA:READ",
+        "DATA:WRITE"
       ],
-      "regions": ["region1", "secureRegion"]
+      "regions": "null,region1,secureRegion"
     }
   ],
   "users": [

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/shiro-ini.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/shiro-ini.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/shiro-ini.json
new file mode 100644
index 0000000..d586fa1
--- /dev/null
+++ b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/shiro-ini.json
@@ -0,0 +1,87 @@
+{
+  "roles": [
+    {
+      "name": "admin",
+      "operationsAllowed": [
+        "CLUSTER:MANAGE",
+        "CLUSTER:WRITE",
+        "CLUSTER:READ",
+        "DATA:MANAGE",
+        "DATA:WRITE",
+        "DATA:READ"
+      ]
+    },
+    {
+      "name": "readRegionA",
+      "operationsAllowed": [
+        "DATA:READ"
+      ],
+      "regions": "RegionA"
+    },
+    {
+      "name": "useRegionA",
+      "operationsAllowed": [
+        "DATA:MANAGE",
+        "DATA:WRITE",
+        "DATA:READ"
+      ],
+      "regions": "RegionA"
+    },
+    {
+      "name": "readData",
+      "operationsAllowed": [
+        "DATA:READ"
+      ]
+    },
+    {
+      "name": "readAll",
+      "operationsAllowed": [
+        "CLUSTER:READ",
+        "DATA:READ"
+      ]
+    }
+  ],
+  "users": [
+    {
+      "name": "root",
+      "password": "secret",
+      "roles": [
+        "admin"
+      ]
+    },
+    {
+      "name": "guest",
+      "password": "guest",
+      "roles": [
+      ]
+    },
+    {
+      "name": "regionAReader",
+      "password": "password",
+      "roles": [
+        "readRegionA"
+      ]
+    },
+    {
+      "name": "regionAUser",
+      "password": "password",
+      "roles": [
+        "useRegionA"
+      ]
+    },
+    {
+      "name": "dataReader",
+      "password": "12345",
+      "roles": [
+        "readData"
+      ]
+    },
+    {
+      "name": "reader",
+      "password": "12345",
+      "roles": [
+        "readAll"
+      ]
+    }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testInheritRole.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testInheritRole.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testInheritRole.json
deleted file mode 100644
index 3053a92..0000000
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testInheritRole.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-"roles" : [	
-			{
-				"name" : "jmxReader",
-				"operationsAllowed" : ["QUERY"]				
-			},
-			{
-				"name" : "jmxWriter",
-				"operationsAllowed" : ["CHANGE_LOG_LEVEL"]				
-			},
-			{
-				"name" : "admin",
-				"operationsAllowed" : ["CMD_SHUTDOWN"]	
-			},
-			{
-				"name" : "adminSG1",
-				"inherit" : [ "admin" ],
-				"serverGroup" : "SG1"
-			},
-			{
-				"name" : "adminSG2",
-				"inherit" : [ "admin" , "jmxWriter"],
-				"serverGroup" : "SG2"
-			}
-		],
-users : [
-	 		{
-	 			"name" : "tushark",
-	 			"roles" : ["jmxReader"]
-	 		},
-	 		{
-	 			"name" : "admin1",
-	 			"roles" : ["adminSG1"]
-	 		},
-	 		{
-	 			"name" : "admin2",
-	 			"roles" : ["adminSG2"]
-	 		}
-		]
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testSimpleUserAndRole.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testSimpleUserAndRole.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testSimpleUserAndRole.json
deleted file mode 100644
index 0542cf4..0000000
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testSimpleUserAndRole.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "roles": [
-    {
-      "name": "jmxReader",
-      "operationsAllowed": [
-        "QUERY:EXECUTE"
-      ]
-    }
-  ],
-  "users": [
-    {
-      "name": "tushark",
-      "roles": [
-        "jmxReader"
-      ]
-    }
-  ]
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserAndRoleRegionServerGroup.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserAndRoleRegionServerGroup.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserAndRoleRegionServerGroup.json
deleted file mode 100644
index 6bb28bf..0000000
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserAndRoleRegionServerGroup.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "roles": [
-    {
-      "name": "jmxReader",
-      "operationsAllowed": [
-        "QUERY:EXECUTE"
-      ],
-      "serverGroup": "SG2",
-      "region": "secureRegion"
-    }
-  ],
-  "users": [
-    {
-      "name": "tushark",
-      "roles": [
-        "jmxReader"
-      ]
-    }
-  ]
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserMultipleRole.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserMultipleRole.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserMultipleRole.json
deleted file mode 100644
index 7a07a21..0000000
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/testUserMultipleRole.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "roles": [
-    {
-      "name": "jmxReader",
-      "operationsAllowed": [
-        "QUERY:EXECUTE"
-      ]
-    },
-    {
-      "name": "sysMonitors",
-      "operationsAllowed": [
-        "MEMBER:EXPORT_LOGS",
-        "MEMBER:GC"
-      ]
-    }
-  ],
-  "users": [
-    {
-      "name": "tushark",
-      "roles": [
-        "jmxReader",
-        "sysMonitors"
-      ]
-    }
-  ]
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/resources/shiro.ini
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/shiro.ini b/geode-core/src/test/resources/shiro.ini
index 37b81b2..a9746a5 100644
--- a/geode-core/src/test/resources/shiro.ini
+++ b/geode-core/src/test/resources/shiro.ini
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# the users and roles in this file needs to be kept in sync with shiro.ini
+# since they are used by the same test to test ShiroUtil
 # -----------------------------------------------------------------------------
 # Users and their (optional) assigned roles
 # username = password, role1, role2, ..., roleN
@@ -20,7 +22,10 @@
 [users]
 root = secret, admin
 guest = guest, guest
-stranger = 12345, none
+regionAReader = password, readRegionA
+regionAUser = password, useRegionA
+dataReader = 12345, readData
+reader = 12345, readAll
 
 # -----------------------------------------------------------------------------
 # Roles with assigned permissions
@@ -28,4 +33,8 @@ stranger = 12345, none
 # -----------------------------------------------------------------------------
 [roles]
 admin = *
-guest = none
\ No newline at end of file
+guest = none
+readRegionA = DATA:READ:RegionA
+useRegionA = *:*:RegionA
+readData = DATA:READ
+readAll = *:READ
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/DescribedExternalResource.java
----------------------------------------------------------------------
diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/DescribedExternalResource.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/DescribedExternalResource.java
index 543b7fc..b12bab1 100644
--- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/DescribedExternalResource.java
+++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/DescribedExternalResource.java
@@ -14,18 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/**
- * this class extends the capability of JUnit's ExternalResource in that
- * it provides a Description object in the before and after methods, so that
- * the implementation would have access to the annotation of the test methods
- */
 package com.gemstone.gemfire.test.junit.rules;
 
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
+/**
+ * this class extends the capability of JUnit's ExternalResource in that
+ * it provides a Description object in the before and after methods, so that
+ * the implementation would have access to the annotation of the test methods
+ */
 public class DescribedExternalResource implements TestRule {
   public Statement apply(Statement base, Description description) {
     return statement(base, description);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
index 5253f2f..a7a611d 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package com.vmware.gemfire.tools.pulse.internal.security;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import javax.management.MBeanServerConnection;
@@ -33,87 +33,59 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority;
 
 /**
  * Spring security authentication object for GemFire
- * 
+ * <p>
  * To use GemFire Integrated Security Model set Spring Application Profile to pulse.authentication.gemfire
- * 
- * 1. Authentication : 
- *    1.a GemFire profile creates JMX connection with given credentials at the login time. 
- *    1.b Successful connect is considered as Successful Authentication for Pulse WebApp
- *    
- *    
+ * <p>
+ * 1. Authentication :
+ * 1.a GemFire profile creates JMX connection with given credentials at the login time.
+ * 1.b Successful connect is considered as Successful Authentication for Pulse WebApp
+ * <p>
+ * <p>
  * 2. Authorization :
- *    2.a Using newly created authenticated connection AccessControlMXBean is called to get authentication
- *      levels. See @See {@link #populateAuthorities(JMXConnector)}. This sets Spring Security Authorities
- *    2.b DataBrowser end-points are required to be authorized against Spring Granted Authority
- *      @See spring-security.xml
- *    2.c When executing Data-Browser query, user-level jmx connection is used so at to put access-control
- *      over the resources query is accessing. 
- *      @See #com.vmware.gemfire.tools.pulse.internal.data.JMXDataUpdater#executeQuery
- *         
- * 3. Connection Management - Spring Security LogoutHandler closes session level connection
- *
- * TODO : Better model would be to maintain background connection map for Databrowser instead
- * of each web session creating rmi connection and map user to correct entry in the connection map
- *
+ * 2.a Using newly created authenticated connection AccessControlMXBean is called to get authentication
+ * levels. See @See {@link #populateAuthorities(JMXConnector)}. This sets Spring Security Authorities
+ * 2.b DataBrowser end-points are required to be authorized against Spring Granted Authority
  * @since version 9.0
  */
-public class GemFireAuthentication extends UsernamePasswordAuthenticationToken {	
+public class GemFireAuthentication extends UsernamePasswordAuthenticationToken {
 
   private final static PulseLogWriter logger = PulseLogWriter.getLogger();
-  
-	private JMXConnector jmxc=null;	
-	
-	public GemFireAuthentication(Object principal, Object credentials, Collection<GrantedAuthority> list, JMXConnector jmxc) {
-		super(principal, credentials, list);
-		this.jmxc = jmxc;
-	}
 
-	private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
-		
-	
-	public void closeJMXConnection(){
-		try {
-			jmxc.close();
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-	}
-	
-	public MBeanServerConnection getRemoteMBeanServer() {
-		try {
-			return jmxc.getMBeanServerConnection();
-		} catch (IOException e) {
-			throw new RuntimeException(e);
-		}
-	}
+  private JMXConnector jmxc = null;
+
+  public GemFireAuthentication(Object principal, Object credentials, Collection<GrantedAuthority> list, JMXConnector jmxc) {
+    super(principal, credentials, list);
+    this.jmxc = jmxc;
+  }
+
+  private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
 
-	public static ArrayList<GrantedAuthority> populateAuthorities(JMXConnector jmxc) {
-		ObjectName name;
-		ArrayList<GrantedAuthority> authorities = new ArrayList<>();
-		try {
-			name = new ObjectName(PulseConstants.OBJECT_NAME_ACCESSCONTROL_MBEAN);
-			MBeanServerConnection mbeanServer = jmxc.getMBeanServerConnection();
+  public static ArrayList<GrantedAuthority> populateAuthorities(JMXConnector jmxc) {
+    ObjectName name;
+    ArrayList<GrantedAuthority> authorities = new ArrayList<>();
+    try {
+      name = new ObjectName(PulseConstants.OBJECT_NAME_ACCESSCONTROL_MBEAN);
+      MBeanServerConnection mbeanServer = jmxc.getMBeanServerConnection();
 
-			for(String role : PulseConstants.PULSE_ROLES){
-				Object[] params = role.split(":");
-				String[] signature = new String[] {String.class.getCanonicalName(), String.class.getCanonicalName()};
-				boolean result = (Boolean)mbeanServer.invoke(name, "authorize", params, signature);
-				if(result){
-					authorities.add(new SimpleGrantedAuthority(role));
-				}
-			}
-		}catch (Exception e){
-			throw new RuntimeException(e.getMessage(), e);
-		}
+      for (String role : PulseConstants.PULSE_ROLES) {
+        Object[] params = role.split(":");
+        String[] signature = new String[] { String.class.getCanonicalName(), String.class.getCanonicalName() };
+        boolean result = (Boolean) mbeanServer.invoke(name, "authorize", params, signature);
+        if (result) {
+          authorities.add(new SimpleGrantedAuthority(role));
+        }
+      }
+    }
+    catch (Exception e) {
+      throw new RuntimeException(e.getMessage(), e);
+    }
 
-		return authorities;
+    return authorities;
 
-	}
+  }
 
-	public JMXConnector getJmxc() {
-		return jmxc;
-	}
-	
-	
+  public JMXConnector getJmxc() {
+    return jmxc;
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java
index 548c3a5..ee263b1 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthenticationProvider.java
@@ -16,8 +16,12 @@
  */
 package com.vmware.gemfire.tools.pulse.internal.security;
 
+import java.util.Collection;
+import javax.management.remote.JMXConnector;
+
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
+
 import org.springframework.security.authentication.AuthenticationProvider;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.BadCredentialsException;
@@ -26,14 +30,9 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
 
-import javax.management.remote.JMXConnector;
-import java.util.Collection;
-
 /**
  * Spring security AuthenticationProvider for GemFire. It connects to gemfire manager using given credentials.
  * Successful connect is treated as successful authentication and web user is authenticated
- *
- * @author Tushar Khairnar
  * @since version 9.0
  */
 public class GemFireAuthenticationProvider implements AuthenticationProvider {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/LogoutHandler.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/LogoutHandler.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/LogoutHandler.java
index a70925d..7309f90 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/LogoutHandler.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/LogoutHandler.java
@@ -16,20 +16,20 @@
  */
 package com.vmware.gemfire.tools.pulse.internal.security;
 
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
+
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
 import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
 
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
 /**
  * Handler is used to close jmx connection maintained at user-level
- * @author tushark
  *
  */
 public class LogoutHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {


[14/50] [abbrv] incubator-geode git commit: GEODE-17: hide shiro.ini configuration in the logs

Posted by kl...@apache.org.
GEODE-17: hide shiro.ini configuration in the logs

* hide shiro.ini configuration in the logs
* fixed a merge problem


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/9220f429
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/9220f429
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/9220f429

Branch: refs/heads/feature/GEODE-1255
Commit: 9220f4292cbd9a0999c2237597bc06ff30961a92
Parents: 7e9d249
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon Apr 25 08:19:22 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Mon Apr 25 08:32:28 2016 -0700

----------------------------------------------------------------------
 .../internal/AbstractDistributionConfig.java    | 13 ++++-----
 .../gemfire/internal/AbstractConfig.java        | 28 +++++++++++++++-----
 .../WanCommandPauseResumeDUnitTest.java         |  8 +++---
 3 files changed, 32 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9220f429/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
index e1881e3..d38e1a9 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
@@ -536,14 +536,11 @@ public abstract class AbstractDistributionConfig
 
     Method setter = setters.get(attName);
     if (setter == null) {
-      // if we cann't find the defined setter, look for two more special cases
-      if (attName.startsWith(SECURITY_PREFIX_NAME)) {
-        this.setSecurity(attName,(String)attValue);
-        getAttSourceMap().put(attName, source);
-        return;
-      }
-      if (attName.startsWith(SSL_SYSTEM_PROPS_NAME) || attName.startsWith(SYS_PROP_NAME)) {
-        this.setSSLProperty(attName, (String) attValue);
+      // if we cann't find the defined setter, but the attributeName starts with these special characters
+      // since we already set it in the respecitive properties above, we need to set the source then return
+      if (attName.startsWith(SECURITY_PREFIX_NAME) ||
+        attName.startsWith(SSL_SYSTEM_PROPS_NAME) ||
+        attName.startsWith(SYS_PROP_NAME)) {
         getAttSourceMap().put(attName, source);
         return;
       }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9220f429/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
index 09fc61c..a4c2f2f 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractConfig.java
@@ -17,18 +17,30 @@
 
 package com.gemstone.gemfire.internal;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Array;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeSet;
+
 import com.gemstone.gemfire.InternalGemFireException;
 import com.gemstone.gemfire.UnmodifiableException;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.distributed.internal.FlowControlParams;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 
-import java.io.*;
-import java.lang.reflect.Array;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.*;
-
 /**
  * Provides an implementation of the {@link Config} interface
  * that implements functionality that all {@link Config} implementations
@@ -159,6 +171,10 @@ public abstract class AbstractConfig implements Config {
           pw.println("### GemFire Properties defined with " + source.getDescription() + " ###");
         }
       }
+      // hide the shiro-init configuration for now. Remove after we can allow customer to specify shiro.ini file
+      if(attName.equals("shiro-init")){
+        continue;
+      }
       pw.print(attName);
       pw.print('=');
       if (source == null // always show defaults

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9220f429/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/wancommand/WanCommandPauseResumeDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/wancommand/WanCommandPauseResumeDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/wancommand/WanCommandPauseResumeDUnitTest.java
index 17986e0..a4e843c 100644
--- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/wancommand/WanCommandPauseResumeDUnitTest.java
+++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/wancommand/WanCommandPauseResumeDUnitTest.java
@@ -23,9 +23,6 @@ import static com.gemstone.gemfire.test.dunit.Wait.*;
 import java.util.List;
 import java.util.Properties;
 
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.management.cli.Result;
@@ -34,6 +31,9 @@ import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
 import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
 import com.gemstone.gemfire.test.junit.categories.DistributedTest;
 
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
 @Category(DistributedTest.class)
 public class WanCommandPauseResumeDUnitTest extends WANCommandTestBase {
 
@@ -144,6 +144,8 @@ public class WanCommandPauseResumeDUnitTest extends WANCommandTestBase {
             2, false, 100, 400, false, false, null, true ));
 
     vm3.invoke(() -> startSender( "ln" ));
+    vm4.invoke(() -> startSender( "ln" ));
+    vm5.invoke(() -> startSender( "ln" ));
 
     vm3.invoke(() -> verifySenderState(
             "ln", true, false ));


[43/50] [abbrv] incubator-geode git commit: GEODE-11-Added-xml-support-for-analyzer-per-field

Posted by kl...@apache.org.
GEODE-11-Added-xml-support-for-analyzer-per-field


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/2a786ee7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/2a786ee7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/2a786ee7

Branch: refs/heads/feature/GEODE-1255
Commit: 2a786ee7aa3de5da4ffeeb841f6bbbcce55186f2
Parents: 8e74498
Author: Barry Oglesby <bo...@pivotal.io>
Authored: Fri Apr 29 15:58:49 2016 -0700
Committer: Barry Oglesby <bo...@pivotal.io>
Committed: Mon May 2 14:03:07 2016 -0700

----------------------------------------------------------------------
 .../gemfire/internal/i18n/LocalizedStrings.java |  2 +
 .../gemfire/cache/lucene/LuceneIndex.java       |  2 +-
 .../LuceneIndexForReplicatedRegion.java         |  2 +-
 .../cache/lucene/internal/LuceneIndexImpl.java  | 14 ++-
 .../lucene/internal/LuceneServiceImpl.java      | 21 +++--
 .../internal/xml/LuceneIndexCreation.java       | 42 +++++----
 .../internal/xml/LuceneIndexXmlGenerator.java   |  5 +
 .../lucene/internal/xml/LuceneXmlConstants.java |  1 +
 .../lucene/internal/xml/LuceneXmlParser.java    | 27 +++++-
 .../geode.apache.org/lucene/lucene-1.0.xsd      |  1 +
 ...uceneIndexXmlParserIntegrationJUnitTest.java | 52 +++++++++--
 .../xml/LuceneIndexXmlParserJUnitTest.java      | 97 ++++++++++++++------
 ...erIntegrationJUnitTest.createIndex.cache.xml |  7 +-
 ...nJUnitTest.parseIndexWithAnalyzers.cache.xml | 36 ++++++++
 14 files changed, 241 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
index ff960ca..a6bbb86 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
@@ -2127,6 +2127,8 @@ public class LocalizedStrings extends ParentLocalizedStrings {
   public static final StringId SwaggerConfig_DOC_TITLE = new StringId(6621, "Apache Geode Documentation");
   public static final StringId SwaggerConfig_DOC_LINK = new StringId(6622, "http://geode.incubator.apache.org/docs/");
 
+  public static final StringId LuceneXmlParser_CLASS_0_IS_NOT_AN_INSTANCE_OF_ANALYZER = new StringId(6623, "Class \"{0}\" is not an instance of Analyzer.");
+
   /** Testing strings, messageId 90000-99999 **/
   
   /** These are simple messages for testing, translated with Babelfish. **/

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java
index 7475fde..743045b 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java
@@ -54,6 +54,6 @@ public interface LuceneIndex {
   /**
    * @return the field to analyzer map
    */
-  public Map<String, Analyzer> getFieldAnalyzerMap();
+  public Map<String, Analyzer> getFieldAnalyzers();
   
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java
index 7c585cf..cd07672 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java
@@ -41,7 +41,7 @@ public class LuceneIndexForReplicatedRegion extends LuceneIndexImpl {
   }
 
   @Override
-  public Map<String, Analyzer> getFieldAnalyzerMap() {
+  public Map<String, Analyzer> getFieldAnalyzers() {
     throw new UnsupportedOperationException("Lucene indexes on replicated regions is not yet implemented");
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
index f869755..f530f8c 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
@@ -19,6 +19,7 @@
 
 package com.gemstone.gemfire.cache.lucene.internal;
 
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.logging.log4j.Logger;
@@ -47,6 +48,7 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
   protected String indexName;
   protected String regionPath;
   protected boolean hasInitialized = false;
+  protected Map<String, Analyzer> fieldAnalyzers;
 
   @Override
   public String getName() {
@@ -68,10 +70,8 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
   }
 
   @Override
-  public Map<String, Analyzer> getFieldAnalyzerMap() {
-    // TODO Auto-generated method stub
-    // Will do that later: Gester
-    return null;
+  public Map<String, Analyzer> getFieldAnalyzers() {
+    return this.fieldAnalyzers;
   }
 
   public RepositoryManager getRepositoryManager() {
@@ -90,6 +90,10 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
     return this.analyzer;
   }
 
+  public void setFieldAnalyzers(Map<String, Analyzer> fieldAnalyzers) {
+    this.fieldAnalyzers = Collections.unmodifiableMap(fieldAnalyzers);
+  }
+
   protected abstract void initialize();
   
   /**
@@ -101,7 +105,7 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
     creation.setName(this.getName());
     creation.addFieldNames(this.getFieldNames());
     creation.setRegion(dataRegion);
-    creation.setFieldFieldAnalyzerMap(this.getFieldAnalyzerMap());
+    creation.setFieldAnalyzers(this.getFieldAnalyzers());
     dataRegion.getExtensionPoint().addExtension(creation);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
index 9d6aed4..58a9b20 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
@@ -22,6 +22,7 @@ package com.gemstone.gemfire.cache.lucene.internal;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.analysis.Analyzer;
@@ -102,19 +103,21 @@ public class LuceneServiceImpl implements InternalLuceneService {
   public void createIndex(String indexName, String regionPath, String... fields) {
     StandardAnalyzer analyzer = new StandardAnalyzer();
     
-    createIndex(indexName, regionPath, analyzer, fields);
+    createIndex(indexName, regionPath, analyzer, null, fields);
   }
   
   @Override
-  public void createIndex(String indexName, String regionPath, Map<String, Analyzer> analyzerPerField) {
-    Analyzer analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer(), analyzerPerField);
-    String[] fields = (String[])analyzerPerField.keySet().toArray(new String[analyzerPerField.keySet().size()]);
+  public void createIndex(String indexName, String regionPath, Map<String, Analyzer> fieldAnalyzers) {
+    Analyzer analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer(), fieldAnalyzers);
+    Set<String> fieldsSet = fieldAnalyzers.keySet();
+    String[] fields = (String[])fieldsSet.toArray(new String[fieldsSet.size()]);
 
-    createIndex(indexName, regionPath, analyzer, fields);
+    createIndex(indexName, regionPath, analyzer, fieldAnalyzers, fields);
   }
 
   private void createIndex(final String indexName, String regionPath,
-      final Analyzer analyzer, final String... fields) {
+      final Analyzer analyzer, final Map<String, Analyzer> fieldAnalyzers,
+      final String... fields) {
 
     if(!regionPath.startsWith("/")) {
       regionPath = "/" + regionPath;
@@ -143,7 +146,7 @@ public class LuceneServiceImpl implements InternalLuceneService {
       @Override
       public void afterCreate(Region region) {
         if(region.getFullPath().equals(dataRegionPath)) {
-          afterDataRegionCreated(indexName, analyzer, dataRegionPath, fields);
+          afterDataRegionCreated(indexName, analyzer, dataRegionPath, fieldAnalyzers, fields);
           cache.removeRegionListener(this);
         }
       }
@@ -158,11 +161,11 @@ public class LuceneServiceImpl implements InternalLuceneService {
    */
   public void afterDataRegionCreated(final String indexName,
       final Analyzer analyzer, final String dataRegionPath,
-      final String... fields) {
+      final Map<String, Analyzer> fieldAnalyzers, final String... fields) {
     LuceneIndexImpl index = createIndexRegions(indexName, dataRegionPath);
     index.setSearchableFields(fields);
-    // for this API, set index to use the default StandardAnalyzer for each field
     index.setAnalyzer(analyzer);
+    index.setFieldAnalyzers(fieldAnalyzers);
     index.initialize();
     registerIndex(index);
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
index e664895..86a10e4 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexCreation.java
@@ -19,12 +19,10 @@
 
 package com.gemstone.gemfire.cache.lucene.internal.xml;
 
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 
 import com.gemstone.gemfire.cache.Cache;
@@ -41,7 +39,7 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
   private Region region;
   private String name;
   private Set<String> fieldNames = new LinkedHashSet<String>();
-  private Map<String, Analyzer> fieldFieldAnalyzerMap;
+  private Map<String, Analyzer> fieldAnalyzers;
 
   
   public void setRegion(Region region) {
@@ -52,18 +50,17 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
     this.name = name;
   }
 
-  public Map<String, Analyzer> getFieldFieldAnalyzerMap() {
-    return fieldFieldAnalyzerMap;
-  }
-
-  public void setFieldFieldAnalyzerMap(
-      Map<String, Analyzer> fieldFieldAnalyzerMap) {
-    this.fieldFieldAnalyzerMap = fieldFieldAnalyzerMap;
+  public void setFieldAnalyzers(
+      Map<String, Analyzer> fieldAnalyzers) {
+    this.fieldAnalyzers = fieldAnalyzers;
   }
   
   @Override
-  public Map<String, Analyzer> getFieldAnalyzerMap() {
-    return this.fieldFieldAnalyzerMap;
+  public Map<String, Analyzer> getFieldAnalyzers() {
+    if (this.fieldAnalyzers == null) {
+      this.fieldAnalyzers = new HashMap<>();
+    }
+    return this.fieldAnalyzers;
   }
 
   public String getName() {
@@ -87,7 +84,6 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
   @Override
   public void onCreate(Extensible<Region<?, ?>> source,
       Extensible<Region<?, ?>> target) {
-    target.getExtensionPoint().addExtension(this);
     Cache cache = target.getExtensionPoint().getTarget().getCache();
     LuceneServiceImpl service = (LuceneServiceImpl) LuceneServiceProvider.get(cache);
     Region region = target.getExtensionPoint().getTarget();
@@ -97,15 +93,25 @@ public class LuceneIndexCreation implements LuceneIndex, Extension<Region<?, ?>>
     //TODO - this may only work for PRs. We need to intercept the attributes
     //before the region is created with a RegionListener.
     region.getAttributesMutator().addAsyncEventQueueId(aeqId);
-    service.afterDataRegionCreated(getName(), new StandardAnalyzer(), getRegionPath(), getFieldNames());
+    Analyzer analyzer = null;
+    if (this.fieldAnalyzers == null) {
+      analyzer = new StandardAnalyzer();
+    } else {
+      analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer(), this.fieldAnalyzers);
+    }
+    service.afterDataRegionCreated(getName(), analyzer, getRegionPath(), this.fieldAnalyzers, getFieldNames());
+  }
+
+  protected void addField(String name) {
+    this.fieldNames.add(name);
   }
 
-  public void addField(String name) {
+  protected void addFieldAndAnalyzer(String name, Analyzer analyzer) {
     this.fieldNames.add(name);
+    getFieldAnalyzers().put(name, analyzer);
   }
 
   public void addFieldNames(String[] fieldNames) {
     this.fieldNames.addAll(Arrays.asList(fieldNames));
-    
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
index 6399a80..37c9ca2 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGenerator.java
@@ -21,6 +21,7 @@ package com.gemstone.gemfire.cache.lucene.internal.xml;
 
 import static com.gemstone.gemfire.cache.lucene.internal.xml.LuceneXmlConstants.*;
 
+import org.apache.lucene.analysis.Analyzer;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.AttributesImpl;
@@ -57,6 +58,10 @@ public class LuceneIndexXmlGenerator implements XmlGenerator<Region<?, ?>> {
     for(String field : index.getFieldNames()) {
       AttributesImpl fieldAttr = new AttributesImpl();
       XmlGeneratorUtils.addAttribute(fieldAttr, NAME, field);
+      Analyzer analyzer = index.getFieldAnalyzers().get(field);
+      if (analyzer != null) {
+        XmlGeneratorUtils.addAttribute(fieldAttr, ANALYZER, analyzer.getClass().getName());
+      }
       XmlGeneratorUtils.emptyElement(handler, PREFIX, FIELD, fieldAttr);
     }
     XmlGeneratorUtils.endElement(handler, PREFIX, INDEX);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
index bc80180..91d1643 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlConstants.java
@@ -27,5 +27,6 @@ public class LuceneXmlConstants {
   public static final String REGION = "index";
   public static final String INDEX = "index";
   public static final String FIELD = "field";
+  public static final String ANALYZER = "analyzer";
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
index 764f461..40bf0ac 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneXmlParser.java
@@ -21,6 +21,10 @@ package com.gemstone.gemfire.cache.lucene.internal.xml;
 
 import static com.gemstone.gemfire.cache.lucene.internal.xml.LuceneXmlConstants.*;
 
+import com.gemstone.gemfire.cache.CacheXmlException;
+import com.gemstone.gemfire.internal.InternalDataSerializer;
+import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+import org.apache.lucene.analysis.Analyzer;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
@@ -58,7 +62,13 @@ public class LuceneXmlParser extends AbstractXmlParser {
     }
     LuceneIndexCreation creation = (LuceneIndexCreation) stack.peek();
     String name = atts.getValue(NAME);
-    creation.addField(name);
+    String className = atts.getValue(ANALYZER);
+    if (className == null) {
+      creation.addField(name);
+    } else {
+      Analyzer analyzer = createAnalyzer(className);
+      creation.addFieldAndAnalyzer(name, analyzer);
+    }
   }
 
   private void startIndex(Attributes atts) {
@@ -94,4 +104,19 @@ public class LuceneXmlParser extends AbstractXmlParser {
     //Remove the index creation from the stack
     stack.pop();
   }
+
+  private Analyzer createAnalyzer(String className) {
+    Object obj;
+    try {
+      Class c = InternalDataSerializer.getCachedClass(className);
+      obj = c.newInstance();
+    }
+    catch (Exception ex) {
+      throw new CacheXmlException(LocalizedStrings.CacheXmlParser_WHILE_INSTANTIATING_A_0.toLocalizedString(className), ex);
+    }
+    if (!(obj instanceof Analyzer)) {
+      throw new CacheXmlException(LocalizedStrings.LuceneXmlParser_CLASS_0_IS_NOT_AN_INSTANCE_OF_ANALYZER.toLocalizedString(className));
+    }
+    return (Analyzer) obj;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/main/resources/META-INF/schemas/geode.apache.org/lucene/lucene-1.0.xsd
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/resources/META-INF/schemas/geode.apache.org/lucene/lucene-1.0.xsd b/geode-lucene/src/main/resources/META-INF/schemas/geode.apache.org/lucene/lucene-1.0.xsd
index 6fd7306..ec82c2f 100644
--- a/geode-lucene/src/main/resources/META-INF/schemas/geode.apache.org/lucene/lucene-1.0.xsd
+++ b/geode-lucene/src/main/resources/META-INF/schemas/geode.apache.org/lucene/lucene-1.0.xsd
@@ -48,6 +48,7 @@ XML schema for Lucene indexes in Geode.
     	  <xsd:element name="field" maxOccurs="unbounded">
 			<xsd:complexType>
 				<xsd:attribute name="name" type="xsd:string" />
+				<xsd:attribute name="analyzer" type="xsd:string" />
 			</xsd:complexType>
     	  </xsd:element>
     	</xsd:sequence>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.java
index 62b4f5a..f2972d4 100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.java
@@ -27,6 +27,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.core.KeywordAnalyzer;
+import org.apache.lucene.analysis.core.SimpleAnalyzer;
+import org.apache.lucene.analysis.standard.ClassicAnalyzer;
 import org.junit.After;
 import org.junit.Rule;
 import org.junit.Test;
@@ -65,21 +69,55 @@ public class LuceneIndexXmlParserIntegrationJUnitTest {
    */
   @Test
   public void parseIndex() throws FileNotFoundException {
-    CacheXmlParser parser = CacheXmlParser.parse(new FileInputStream(getXmlFileForTest()));
-    CacheCreation cache = parser.getCacheCreation();
-    RegionCreation region = (RegionCreation) cache.getRegion("region");
+    RegionCreation region = createRegionCreation("region");
     Map<String, String[]> expectedIndexes = new HashMap<String, String[]>();
     expectedIndexes.put("index1", new String[] {"a", "b", "c", "d"});
-    expectedIndexes.put("index2", new String[] { "f", "g"});
+    expectedIndexes.put("index2", new String[] {"f", "g"});
+    validateExpectedIndexes(region, expectedIndexes);
+  }
+
+  @Test
+  public void parseIndexWithAnalyzers() throws FileNotFoundException {
+    RegionCreation region = createRegionCreation("region");
+
+    // Validate expected indexes
+    Map<String, String[]> expectedIndexes = new HashMap<String, String[]>();
+    expectedIndexes.put("index", new String[] {"a", "b", "c"});
+    validateExpectedIndexes(region, expectedIndexes);
+
+    // Validate expected analyzers
+    Map<String, Map<String,Class<? extends Analyzer>>> expectedIndexAnalyzers = new HashMap<>();
+    Map<String,Class<? extends Analyzer>> expectedFieldAnalyzers = new HashMap<>();
+    expectedFieldAnalyzers.put("a", KeywordAnalyzer.class);
+    expectedFieldAnalyzers.put("b", SimpleAnalyzer.class);
+    expectedFieldAnalyzers.put("c", ClassicAnalyzer.class);
+    expectedIndexAnalyzers.put("index", expectedFieldAnalyzers);
+    validateExpectedAnalyzers(region, expectedIndexAnalyzers);
+  }
+
+  private RegionCreation createRegionCreation(String regionName) throws FileNotFoundException {
+    CacheXmlParser parser = CacheXmlParser.parse(new FileInputStream(getXmlFileForTest()));
+    CacheCreation cache = parser.getCacheCreation();
+    return (RegionCreation) cache.getRegion(regionName);
+  }
+
+  private void validateExpectedIndexes(RegionCreation region, Map<String, String[]> expectedIndexes) {
     for(Extension extension : region.getExtensionPoint().getExtensions()) {
       LuceneIndexCreation index = (LuceneIndexCreation) extension;
       assertEquals("/region", index.getRegionPath());
       assertArrayEquals(expectedIndexes.remove(index.getName()), index.getFieldNames());
     }
-    
     assertEquals(Collections.emptyMap(),expectedIndexes);
   }
 
+  private void validateExpectedAnalyzers(RegionCreation region, Map<String, Map<String,Class<? extends Analyzer>>> expectedIndexAnalyzers) {
+    for(Extension extension : region.getExtensionPoint().getExtensions()) {
+      LuceneIndexCreation index = (LuceneIndexCreation) extension;
+      expectedIndexAnalyzers.remove(index.getName());
+    }
+    assertEquals(Collections.emptyMap(),expectedIndexAnalyzers);
+  }
+
   /**
    * Test that the Index creation objects get appropriately translated
    * into a real index.
@@ -93,11 +131,13 @@ public class LuceneIndexXmlParserIntegrationJUnitTest {
     Cache cache = cf.create();
 
     LuceneService service = LuceneServiceProvider.get(cache);
-    assertEquals(2, service.getAllIndexes().size());
+    assertEquals(3, service.getAllIndexes().size());
     LuceneIndex index1 = service.getIndex("index1", "/region");
     LuceneIndex index2 = service.getIndex("index2", "/region");
+    LuceneIndex index3 = service.getIndex("index3", "/region");
     assertArrayEquals(index1.getFieldNames(), new String[] {"a", "b", "c", "d"});
     assertArrayEquals(index2.getFieldNames(), new String[] { "f", "g"});
+    assertArrayEquals(index3.getFieldNames(), new String[] { "h", "i", "j"});
   }
 
   private String getXmlFileForTest() {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
index 298c92f..cae2142 100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserJUnitTest.java
@@ -21,8 +21,13 @@ package com.gemstone.gemfire.cache.lucene.internal.xml;
 
 import static org.junit.Assert.*;
 
+import java.util.Map;
 import java.util.Stack;
 
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.core.KeywordAnalyzer;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.xml.sax.SAXException;
@@ -35,38 +40,78 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 @Category(UnitTest.class)
 public class LuceneIndexXmlParserJUnitTest {
-  
-  @Test
-  public void generateWithFields() throws SAXException {
-    LuceneXmlParser parser = new LuceneXmlParser();
-    AttributesImpl attrs = new AttributesImpl();
+
+  private LuceneXmlParser parser;
+
+  private RegionCreation rc;
+
+  private Stack<Object> stack;
+
+  @Before
+  public void setUp() {
+    this.parser = new LuceneXmlParser();
     CacheCreation cache = new CacheCreation();
-    RegionCreation rc = new RegionCreation(cache, "region");
-    Stack<Object> stack = new Stack<Object>();
+    this.rc = new RegionCreation(cache, "region");
+    this.stack = new Stack<Object>();
     stack.push(cache);
     stack.push(rc);
-    parser.setStack(stack);
+    this.parser.setStack(stack);
+  }
+
+  @After
+  public void tearDown() {
+    this.parser = null;
+    this.rc = null;
+    this.stack = null;
+  }
+
+  @Test
+  public void generateWithFields() throws SAXException {
+    AttributesImpl attrs = new AttributesImpl();
     XmlGeneratorUtils.addAttribute(attrs, LuceneXmlConstants.NAME, "index");
-    parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null, attrs);
-    
-    AttributesImpl field1 = new AttributesImpl();
-    XmlGeneratorUtils.addAttribute(field1, LuceneXmlConstants.NAME, "field1");
-    AttributesImpl field2 = new AttributesImpl();
-    XmlGeneratorUtils.addAttribute(field2, LuceneXmlConstants.NAME, "field2");
-    
-    parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null, field1);
-    parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null);
-    parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null, field2);
-    parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null);
-    
-    
-    parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null);
-    assertEquals(rc, stack.peek());
+    this.parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null, attrs);
+
+    addField("field1");
+    addField("field2");
+    addField("field3", KeywordAnalyzer.class.getName());
+
+    this.parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null);
+    assertEquals(this.rc, this.stack.peek());
     
-    LuceneIndexCreation index = (LuceneIndexCreation) rc.getExtensionPoint().getExtensions().iterator().next();
+    LuceneIndexCreation index = (LuceneIndexCreation) this.rc.getExtensionPoint().getExtensions().iterator().next();
     assertEquals("index", index.getName());
-    assertArrayEquals(new String[] {"field1", "field2"}, index.getFieldNames());
+    assertArrayEquals(new String[] {"field1", "field2", "field3"}, index.getFieldNames());
+
+    // Assert analyzers
+    Map<String, Analyzer> fieldAnalyzers = index.getFieldAnalyzers();
+    assertEquals(1, fieldAnalyzers.size());
+    assertTrue(fieldAnalyzers.containsKey("field3"));
+    assertTrue(fieldAnalyzers.get("field3") instanceof KeywordAnalyzer);
+  }
+
+  @Test
+  public void attemptInvalidAnalyzerClass() throws SAXException {
+    AttributesImpl attrs = new AttributesImpl();
+    XmlGeneratorUtils.addAttribute(attrs, LuceneXmlConstants.NAME, "index");
+    this.parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.INDEX, null, attrs);
+    try {
+      addField("field", "some.invalid.class");
+      fail("Should not have been able to add a field with an invalid analyzer class name");
+    } catch (Exception e) {
+    }
   }
-  
 
+  private void addField(String fieldName) throws SAXException {
+    addField(fieldName, null);
+  }
+
+  private void addField(String fieldName, String analyzerClassName) throws SAXException {
+    AttributesImpl field = new AttributesImpl();
+    XmlGeneratorUtils.addAttribute(field, LuceneXmlConstants.NAME, fieldName);
+    if (analyzerClassName != null) {
+      XmlGeneratorUtils.addAttribute(field, LuceneXmlConstants.ANALYZER, analyzerClassName);
+    }
+    this.parser.startElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null, field);
+    this.parser.endElement(LuceneXmlConstants.NAMESPACE, LuceneXmlConstants.FIELD, null);
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml b/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
index 89d5bef..acbf2c3 100644
--- a/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
+++ b/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.createIndex.cache.xml
@@ -37,5 +37,10 @@
     	  <lucene:field name="f"/>
     	  <lucene:field name="g"/>
     	</lucene:index>
-    </region>    
+		<lucene:index name="index3">
+		  <lucene:field name="h" analyzer="org.apache.lucene.analysis.core.KeywordAnalyzer"/>
+		  <lucene:field name="i" analyzer="org.apache.lucene.analysis.core.SimpleAnalyzer"/>
+		  <lucene:field name="j" analyzer="org.apache.lucene.analysis.standard.ClassicAnalyzer"/>
+		</lucene:index>
+    </region>
 </cache>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2a786ee7/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndexWithAnalyzers.cache.xml
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndexWithAnalyzers.cache.xml b/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndexWithAnalyzers.cache.xml
new file mode 100644
index 0000000..eed71fc
--- /dev/null
+++ b/geode-lucene/src/test/resources/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlParserIntegrationJUnitTest.parseIndexWithAnalyzers.cache.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+
+<cache
+    xmlns="http://geode.apache.org/schema/cache"
+    xmlns:lucene="http://geode.apache.org/schema/lucene"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://geode.apache.org/schema/cache
+        http://geode.apache.org/schema/cache/cache-1.0.xsd
+        http://geode.apache.org/schema/lucene
+        http://geode.apache.org/schema/lucene/lucene-1.0.xsd"
+    version="1.0">
+
+	<region name="region" refid="PARTITION">
+		<lucene:index name="index">
+		  <lucene:field name="a" analyzer="org.apache.lucene.analysis.core.KeywordAnalyzer"/>
+		  <lucene:field name="b" analyzer="org.apache.lucene.analysis.core.SimpleAnalyzer"/>
+		  <lucene:field name="c" analyzer="org.apache.lucene.analysis.standard.ClassicAnalyzer"/>
+		</lucene:index>
+    </region>
+</cache>
\ No newline at end of file


[23/50] [abbrv] incubator-geode git commit: GEODE-17: review changes

Posted by kl...@apache.org.
GEODE-17: review changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/3d8f54c9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/3d8f54c9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/3d8f54c9

Branch: refs/heads/feature/GEODE-1255
Commit: 3d8f54c9827ed308696ae44481a3705ca6e52c54
Parents: 165c9bc
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Apr 28 09:38:12 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 28 11:21:09 2016 -0700

----------------------------------------------------------------------
 .../internal/security/AuthorizeRequest.java        | 17 -----------------
 .../internal/security/MBeanServerWrapper.java      |  4 ++--
 .../com/gemstone/gemfire/security/ShiroUtil.java   | 10 +++++++---
 3 files changed, 9 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3d8f54c9/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
index 7981ccb..9ec7578 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java
@@ -95,23 +95,6 @@ public class AuthorizeRequest {
         new Object[] {id, authzFactoryName});
     }
   }
- 
-  public AccessControl getAuthzCallback() {
-
-    return this.authzCallback;
-  }
-
-  public Principal getPrincipal() {
-    return principal;
-  }
-
-  public boolean isPrincipalSerializable() {
-    return isPrincipalSerializable;
-  }
-
-  public LogWriterI18n getLogger() {
-    return logger;
-  }
 
   public GetOperationContext getAuthorize(String regionName, Object key,
       Object callbackArg) throws NotAuthorizedException {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3d8f54c9/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
index c7cb058..bbc0442 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
@@ -207,7 +207,7 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
       try {
         setAttribute(name, attribute);
       } catch (Exception e) {
-        throw new GemFireSecurityException("error setting attribute "+attribute+" of "+name);
+        throw new GemFireSecurityException("error setting attribute "+attribute+" of "+name, e);
       }
     }
     return attributes;
@@ -237,7 +237,7 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
     try {
       beanInfo = mbs.getMBeanInfo(objectName);
     } catch (IntrospectionException e) {
-      throw new GemFireSecurityException("error getting beanInfo of "+objectName);
+      throw new GemFireSecurityException("error getting beanInfo of "+objectName, e);
     }
     // If there is no annotation defined either in the class level or method level, we should consider this operation/attribute freely accessible
     ResourceOperationContext result = null;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3d8f54c9/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
index 5eedaf4..01914e4 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
@@ -22,6 +22,8 @@ import java.util.concurrent.Callable;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
 import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+
+import org.apache.logging.log4j.Logger;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.ShiroException;
 import org.apache.shiro.UnavailableSecurityManagerException;
@@ -31,6 +33,8 @@ import org.apache.shiro.util.ThreadContext;
 
 public class ShiroUtil {
 
+  private static Logger logger = LogService.getLogger();
+
   public static void login(String username, String password){
     if(!isShiroConfigured())
       return;
@@ -40,7 +44,7 @@ public class ShiroUtil {
     UsernamePasswordToken token =
         new UsernamePasswordToken(username, password);
     try {
-      LogService.getLogger().info("Logging in "+username+"/"+password);
+      logger.info("Logging in "+username+"/"+password);
       currentUser.login(token);
     } catch (ShiroException e) {
       throw new AuthenticationFailedException(e.getMessage(), e);
@@ -53,7 +57,7 @@ public class ShiroUtil {
 
     Subject currentUser = SecurityUtils.getSubject();
     try {
-      LogService.getLogger().info("Logging out "+currentUser.getPrincipal());
+      logger.info("Logging out "+currentUser.getPrincipal());
       currentUser.logout();
     }
     catch(ShiroException e){
@@ -93,7 +97,7 @@ public class ShiroUtil {
       currentUser.checkPermission(permission);
     }
     catch(ShiroException e){
-      LogService.getLogger().info(currentUser.getPrincipal() + " not authorized for "+resource+":"+operation+":"+regionName);
+      logger.info(currentUser.getPrincipal() + " not authorized for "+resource+":"+operation+":"+regionName);
       throw new GemFireSecurityException(e.getMessage(), e);
     }
   }


[09/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2

# Conflicts:
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
#	geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
#	geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/183c48ae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/183c48ae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/183c48ae

Branch: refs/heads/feature/GEODE-1255
Commit: 183c48ae20647077f461af6cc24541137281e671
Parents: 7ed7916 70c5467
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 22 10:25:38 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 22 10:25:38 2016 -0700

----------------------------------------------------------------------
 LICENSE                                         |   60 +
 extensions/geode-modules-assembly/build.gradle  |    1 +
 geode-assembly/src/main/dist/LICENSE            |    8 +-
 geode-assembly/src/main/dist/NOTICE             |   36 +-
 .../client/internal/ServerRegionProxy.java      |    3 +-
 .../internal/admin/ClientStatsManager.java      |    3 +-
 .../cache/AbstractBucketRegionQueue.java        |    3 +-
 .../internal/cache/AbstractLRURegionMap.java    |    4 +
 .../internal/cache/AbstractRegionEntry.java     |    2 +-
 .../internal/cache/AbstractRegionMap.java       |   15 +-
 .../gemfire/internal/cache/BucketRegion.java    |   14 +-
 .../internal/cache/BucketRegionQueue.java       |    7 +-
 .../internal/cache/DestroyOperation.java        |    6 +-
 .../internal/cache/DistPeerTXStateStub.java     |    2 +
 .../gemfire/internal/cache/DistTXState.java     |    9 +-
 .../cache/DistTXStateOnCoordinator.java         |    2 +
 .../DistTXStateProxyImplOnCoordinator.java      |    2 +
 .../cache/DistributedCacheOperation.java        |    4 +-
 .../cache/DistributedPutAllOperation.java       |   23 +-
 .../internal/cache/DistributedRegion.java       |    9 +-
 .../cache/DistributedRemoveAllOperation.java    |   22 +-
 .../gemfire/internal/cache/EntryEventImpl.java  |   41 +-
 .../gemfire/internal/cache/EntryExpiryTask.java |    9 +-
 .../gemfire/internal/cache/EventIDHolder.java   |   35 +
 .../gemfire/internal/cache/FilterProfile.java   |   13 +-
 .../gemfire/internal/cache/HARegion.java        |    5 +-
 .../internal/cache/InitialImageOperation.java   |    2 +-
 .../internal/cache/InvalidateOperation.java     |    5 +-
 .../gemfire/internal/cache/LocalRegion.java     |  141 +-
 .../internal/cache/PartitionedRegion.java       |   13 +-
 .../gemfire/internal/cache/ProxyRegionMap.java  |    7 +-
 .../gemfire/internal/cache/QueuedOperation.java |    3 +-
 .../internal/cache/RemoteDestroyMessage.java    |    3 +-
 .../internal/cache/RemoteInvalidateMessage.java |    4 +-
 .../internal/cache/RemotePutAllMessage.java     |    5 +-
 .../internal/cache/RemotePutMessage.java        |    4 +-
 .../internal/cache/RemoteRemoveAllMessage.java  |    5 +-
 .../cache/SearchLoadAndWriteProcessor.java      |    6 +-
 .../gemfire/internal/cache/TXCommitMessage.java |    4 +-
 .../gemfire/internal/cache/TXEntryState.java    |    6 +-
 .../gemfire/internal/cache/TXRegionState.java   |    1 +
 .../gemfire/internal/cache/TXRmtEvent.java      |    9 +-
 .../gemfire/internal/cache/TXState.java         |    9 +-
 .../cache/TimestampedEntryEventImpl.java        |    2 +
 .../cache/UpdateEntryVersionOperation.java      |    4 +-
 .../gemfire/internal/cache/UpdateOperation.java |    8 +-
 .../internal/cache/VersionTagHolder.java        |   34 +
 .../cache/partitioned/DestroyMessage.java       |   11 +-
 .../partitioned/FetchBulkEntriesMessage.java    |    4 +-
 .../internal/cache/partitioned/GetMessage.java  |    5 +-
 .../cache/partitioned/InvalidateMessage.java    |    3 +-
 .../PRUpdateEntryVersionMessage.java            |    1 +
 .../cache/partitioned/PutAllPRMessage.java      |   12 +-
 .../internal/cache/partitioned/PutMessage.java  |   11 +-
 .../cache/partitioned/RemoveAllPRMessage.java   |   13 +-
 .../cache/tier/sockets/BaseCommand.java         |   12 +-
 .../cache/tier/sockets/CacheClientUpdater.java  |    3 +-
 .../cache/tier/sockets/command/Destroy.java     |    3 +-
 .../cache/tier/sockets/command/Destroy65.java   |    3 +-
 .../sockets/command/GatewayReceiverCommand.java |   11 +-
 .../cache/tier/sockets/command/Get70.java       |   15 +-
 .../cache/tier/sockets/command/Invalidate.java  |    3 +-
 .../cache/tier/sockets/command/Put.java         |    5 +-
 .../cache/tier/sockets/command/Put61.java       |    5 +-
 .../cache/tier/sockets/command/Put65.java       |    3 +-
 .../internal/cache/tx/DistTxEntryEvent.java     |   13 +-
 .../cache/tx/PartitionedTXRegionStub.java       |   17 +-
 .../cache/wan/AbstractGatewaySender.java        |    5 +-
 .../AbstractGatewaySenderEventProcessor.java    |    2 +
 .../cache/wan/serial/BatchDestroyOperation.java |    5 +-
 ...urrentSerialGatewaySenderEventProcessor.java |    3 +-
 .../wan/serial/SerialGatewaySenderQueue.java    |    2 +-
 .../query/dunit/QueryUsingPoolDUnitTest.java    | 2711 ++++++++----------
 .../DistributedAckRegionCCEDUnitTest.java       |    6 +-
 .../gemfire/distributed/LocatorDUnitTest.java   |  431 ++-
 .../internal/cache/UpdateVersionJUnitTest.java  |    4 +-
 .../cache/ha/EventIdOptimizationDUnitTest.java  |    5 +-
 .../DestroyEntryPropagationDUnitTest.java       |    5 +-
 .../cli/commands/CliCommandTestBase.java        |   32 +-
 .../security/ClientAuthorizationDUnitTest.java  |    6 +-
 .../security/ClientAuthorizationTestCase.java   |   24 +-
 .../DeltaClientPostAuthorizationDUnitTest.java  |    6 +-
 .../security/P2PAuthenticationDUnitTest.java    |    2 -
 .../internal/JUnit4DistributedTestCase.java     |    2 +-
 .../test/dunit/standalone/ProcessManager.java   |    7 +-
 .../cache/RemoteCQTransactionDUnitTest.java     |   17 +-
 .../cli/commands/ClientCommandsDUnitTest.java   | 1730 +++++------
 .../security/ClientAuthzObjectModDUnitTest.java |   36 +-
 .../ClientCQPostAuthorizationDUnitTest.java     |    8 +-
 .../ClientPostAuthorizationDUnitTest.java       |   11 +-
 .../MultiUserDurableCQAuthzDUnitTest.java       |    8 +-
 .../LuceneIndexForPartitionedRegion.java        |   30 +-
 .../internal/LuceneServiceImplJUnitTest.java    |  146 +-
 geode-pulse/src/main/webapp/META-INF/NOTICE     |   18 +-
 .../internal/cache/UpdateVersionDUnitTest.java  |    4 +-
 .../wan/misc/WANConfigurationJUnitTest.java     |   11 +-
 geode-web-api/src/main/webapp/META-INF/NOTICE   |   12 +-
 gradle/utilities.gradle                         |    5 +
 98 files changed, 2825 insertions(+), 3235 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/183c48ae/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
index b60cf6f,acb07ca..1c6b6b1
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
@@@ -16,23 -16,6 +16,21 @@@
   */
  package com.gemstone.gemfire.management.internal.cli.commands;
  
 +import static com.gemstone.gemfire.test.dunit.Assert.*;
 +import static com.gemstone.gemfire.test.dunit.LogWriterUtils.*;
 +
 +import java.io.IOException;
 +import java.io.PrintStream;
 +import java.io.PrintWriter;
 +import java.io.StringWriter;
 +import java.net.InetAddress;
 +import java.net.UnknownHostException;
- import java.util.Arrays;
- import java.util.Collection;
 +import java.util.Map;
 +import java.util.Properties;
 +import java.util.Set;
 +import java.util.regex.Matcher;
 +import java.util.regex.Pattern;
 +
  import com.gemstone.gemfire.cache.Cache;
  import com.gemstone.gemfire.distributed.internal.DistributionConfig;
  import com.gemstone.gemfire.internal.AvailablePortHelper;
@@@ -44,12 -27,21 +42,25 @@@ import com.gemstone.gemfire.management.
  import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
  import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
  import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
 +import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
  import com.gemstone.gemfire.test.dunit.Host;
++import com.gemstone.gemfire.test.dunit.SerializableCallable;
 +import com.gemstone.gemfire.test.dunit.SerializableRunnable;
  import com.gemstone.gemfire.test.dunit.cache.internal.JUnit4CacheTestCase;
 +import org.junit.runners.Parameterized;
  
+ import java.io.IOException;
+ import java.io.PrintStream;
+ import java.net.InetAddress;
+ import java.net.UnknownHostException;
+ import java.util.Map;
+ import java.util.Properties;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+ 
+ import static com.gemstone.gemfire.test.dunit.Assert.*;
+ import static com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter;
+ 
  /**
   * Base class for all the CLI/gfsh command dunit tests.
   */
@@@ -142,29 -108,27 +153,23 @@@ public abstract class CliCommandTestBas
        localProps.setProperty(DistributionConfig.JMX_MANAGER_PORT_NAME, String.valueOf(jmxPort));
        localProps.setProperty(DistributionConfig.HTTP_SERVICE_PORT_NAME, String.valueOf(httpPort));
  
 +      if(enableAuth){
 +        localProps.put(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME,
-             JSONAuthorization.class.getName() + ".create");
++          JSONAuthorization.class.getName() + ".create");
 +        localProps.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
 +
 +        JSONAuthorization.setUpWithJsonFile(jsonAuthorization);
 +      }
 +
        getSystem(localProps);
        verifyManagementServiceStarted(getCache());
  
 -      returnValue[0] = jmxHost;
 -      returnValue[1] = jmxPort;
 -      returnValue[2] = httpPort;
 +      results[0] = jmxHost;
 +      results[1] = jmxPort;
 +      results[2] = httpPort;
  
 -      return returnValue;
 +      return results;
      });
--
--    this.jmxHost = (String) result[0];
--    this.jmxPort = (Integer) result[1];
--    this.httpPort = (Integer) result[2];
 -
 -    return defaultShellConnect();
 -  }
 -
 -  protected boolean useHTTPByTest() {
 -    return false;
--  }
--
    /**
     * Destroy all of the components created for the default setup.
     */

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/183c48ae/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationDUnitTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/183c48ae/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
index d5d62d2,7a4308f..a41f677
--- a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
@@@ -770,10 -773,12 +772,11 @@@ public abstract class ClientAuthorizati
  
        // Perform the operation from selected client
        if (useThisVM) {
 -        doOp(opCode.toOrdinal(), currentOp.getIndices(), new Integer(opFlags), new Integer(expectedResult));
 +        doOp(opCode, currentOp.getIndices(), new Integer(opFlags), new Integer(expectedResult));
        } else {
 -        byte ordinal = opCode.toOrdinal();
          int[] indices = currentOp.getIndices();
-         clientVM.invoke(() -> ClientAuthorizationTestCase.doOp(opCode, indices, new Integer(opFlags), new Integer(expectedResult) ));
+         clientVM.invoke("ClientAuthorizationTestCase.doOp",
+             () -> ClientAuthorizationTestCase.doOp( new Byte(ordinal), indices, new Integer(opFlags), new Integer(expectedResult) ));
        }
      }
    }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/183c48ae/geode-core/src/test/java/com/gemstone/gemfire/security/DeltaClientPostAuthorizationDUnitTest.java
----------------------------------------------------------------------


[15/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7e43465f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7e43465f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7e43465f

Branch: refs/heads/feature/GEODE-1255
Commit: 7e43465f93635f6186422811e033aa16e2aeff2b
Parents: 9220f42 3c5a2e8
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon Apr 25 08:34:38 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Mon Apr 25 08:34:38 2016 -0700

----------------------------------------------------------------------
 geode-assembly/build.gradle                     |  4 +-
 .../membership/gms/membership/GMSJoinLeave.java | 96 ++++++++++++++++----
 .../gemfire/cache/ConnectionPoolDUnitTest.java  | 21 -----
 .../gemfire/distributed/LocatorDUnitTest.java   | 32 ++++---
 .../gms/membership/GMSJoinLeaveJUnitTest.java   |  7 +-
 .../gms/membership/GMSJoinLeaveTestHelper.java  |  5 +
 geode-site/website/content/releases/index.html  | 52 +++++++++++
 gradle/publish.gradle                           |  4 +-
 8 files changed, 163 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e43465f/geode-assembly/build.gradle
----------------------------------------------------------------------


[33/50] [abbrv] incubator-geode git commit: GEODE-17: have a more readable error message when authentication failed.

Posted by kl...@apache.org.
GEODE-17: have a more readable error message when authentication failed.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/53760ec8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/53760ec8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/53760ec8

Branch: refs/heads/feature/GEODE-1255
Commit: 53760ec866e22357b7d0acc9d612573ffd94d2ad
Parents: f04b669
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 12:19:35 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 12:19:35 2016 -0700

----------------------------------------------------------------------
 .../internal/security/GeodeSecurityUtil.java       |  2 ++
 .../internal/security/shiro/CustomAuthRealm.java   | 17 ++++++++---------
 .../internal/security/JSONAuthorization.java       |  4 +++-
 .../com/gemstone/gemfire/util/test/TestUtil.java   |  8 +-------
 4 files changed, 14 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/53760ec8/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
index 4fd92ed..1f1f4eb 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
@@ -53,6 +53,7 @@ public class GeodeSecurityUtil {
       logger.info("Logging in "+username+"/"+password);
       currentUser.login(token);
     } catch (ShiroException e) {
+      logger.info(e.getMessage(), e);
       throw new AuthenticationFailedException(e.getMessage(), e);
     }
   }
@@ -67,6 +68,7 @@ public class GeodeSecurityUtil {
       currentUser.logout();
     }
     catch(ShiroException e){
+      logger.info(e.getMessage(), e);
       throw new AuthenticationFailedException(e.getMessage(), e);
     }
     // clean out Shiro's thread local content

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/53760ec8/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
index afc3125..cb2b66b 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
@@ -36,7 +36,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
 import com.gemstone.gemfire.security.AccessControl;
-import com.gemstone.gemfire.security.AuthenticationFailedException;
 import com.gemstone.gemfire.security.Authenticator;
 
 import org.apache.logging.log4j.LogManager;
@@ -116,8 +115,8 @@ public class CustomAuthRealm extends AuthorizingRealm{
           cachedAuthZCallback.put(principal, authzCallback);
           return authzCallback;
         } catch (Exception ex) {
-          throw new AuthenticationFailedException(
-              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+          throw new AuthenticationException(
+              ex.toString(), ex);
         }
       }
     } else {
@@ -131,25 +130,25 @@ public class CustomAuthRealm extends AuthorizingRealm{
           cachedPostAuthZCallback.put(principal, postAuthzCallback);
           return postAuthzCallback;
         } catch (Exception ex) {
-          throw new AuthenticationFailedException(
-              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+          throw new AuthenticationException(
+              ex.toString(), ex);
         }
       }
     }
     return null;
   }
 
-  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationFailedException {
+  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationException {
     Authenticator auth;
     try {
       Method instanceGetter = ClassLoadUtil.methodFromName(this.authenticatorFactoryName);
       auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
     } catch (Exception ex) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+      throw new AuthenticationException(
+          ex.toString(), ex);
     }
     if (auth == null) {
-      throw new AuthenticationFailedException(
+      throw new AuthenticationException(
           LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
     }
     auth.init(gfSecurityProperties);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/53760ec8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
index 83f4876..9670822 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
@@ -64,7 +64,9 @@ public class JSONAuthorization implements AccessControl, Authenticator {
     return new JSONAuthorization();
   }
 
-  public JSONAuthorization() {
+  public JSONAuthorization() throws IOException, JSONException {
+    // initialize with a default json file
+    setUpWithJsonFile("shiro-ini.json");
   }
 
   public JSONAuthorization(String jsonFileName) throws IOException, JSONException {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/53760ec8/geode-core/src/test/java/com/gemstone/gemfire/util/test/TestUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/util/test/TestUtil.java b/geode-core/src/test/java/com/gemstone/gemfire/util/test/TestUtil.java
index 45369be..7d402d6 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/util/test/TestUtil.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/util/test/TestUtil.java
@@ -21,8 +21,6 @@ import java.io.IOException;
 import java.net.URISyntaxException;
 import java.net.URL;
 
-import junit.framework.AssertionFailedError;
-
 import com.gemstone.gemfire.internal.FileUtil;
 
 public class TestUtil {
@@ -42,7 +40,7 @@ public class TestUtil {
   public static String getResourcePath(Class<?> clazz, String name) {
     URL resource = clazz.getResource(name);
     if(resource == null) {
-      throw new AssertionFailedError("Could not find resource " + name);
+      throw new RuntimeException("Could not find resource " + name);
     }
     try {
       String path = resource.toURI().getPath();
@@ -58,8 +56,4 @@ public class TestUtil {
       throw new RuntimeException("Failed getting path to resource " + name, e);
     }
   }
-
-  private TestUtil() {
-    
-  }
 }


[29/50] [abbrv] incubator-geode git commit: GEODE-17: move GeodeSecurityUtil and two other classes to internal package

Posted by kl...@apache.org.
GEODE-17: move GeodeSecurityUtil and two other classes to internal package


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

Branch: refs/heads/feature/GEODE-1255
Commit: f04b66956c8b98909b924f2ed648ba735610bebb
Parents: 7c38f0d
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 10:06:12 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 10:06:12 2016 -0700

----------------------------------------------------------------------
 .../internal/security/GeodeSecurityUtil.java    | 165 +++++++++++++++++
 .../security/shiro/CustomAuthRealm.java         | 177 +++++++++++++++++++
 .../security/shiro/JMXShiroAuthenticator.java   |  69 ++++++++
 .../management/internal/ManagementAgent.java    |   2 +-
 .../internal/SystemManagementService.java       |   2 +-
 .../internal/cli/commands/DataCommands.java     |   2 +-
 .../internal/cli/remote/CommandProcessor.java   |   2 +-
 .../internal/security/AccessControlMBean.java   |   2 +-
 .../internal/security/MBeanServerWrapper.java   |   2 +-
 .../controllers/AbstractCommandsController.java |   2 +-
 .../support/LoginHandlerInterceptor.java        |   2 +-
 .../gemfire/security/CustomAuthRealm.java       | 174 ------------------
 .../gemfire/security/GeodeSecurityUtil.java     | 163 -----------------
 .../gemfire/security/JMXShiroAuthenticator.java |  68 -------
 .../GeodeSecurityUtilCustomRealmJUnitTest.java  |   2 +-
 .../GeodeSecurityUtilWithIniFileJUnitTest.java  |   2 +-
 .../gemfire/tools/pulse/tests/Server.java       |   4 +-
 17 files changed, 423 insertions(+), 417 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
new file mode 100644
index 0000000..4fd92ed
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/GeodeSecurityUtil.java
@@ -0,0 +1,165 @@
+/*
+ * 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 com.gemstone.gemfire.internal.security;
+
+import java.util.concurrent.Callable;
+
+import com.gemstone.gemfire.cache.operations.OperationContext;
+import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+import com.gemstone.gemfire.cache.operations.OperationContext.Resource;
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+import com.gemstone.gemfire.security.AuthenticationFailedException;
+import com.gemstone.gemfire.security.GemFireSecurityException;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.Logger;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.ShiroException;
+import org.apache.shiro.UnavailableSecurityManagerException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.ThreadContext;
+
+public class GeodeSecurityUtil {
+
+  private static Logger logger = LogService.getLogger();
+
+  public static void login(String username, String password){
+    if(!isShiroConfigured())
+      return;
+
+    Subject currentUser = SecurityUtils.getSubject();
+
+    UsernamePasswordToken token =
+        new UsernamePasswordToken(username, password);
+    try {
+      logger.info("Logging in "+username+"/"+password);
+      currentUser.login(token);
+    } catch (ShiroException e) {
+      throw new AuthenticationFailedException(e.getMessage(), e);
+    }
+  }
+
+  public static void logout(){
+    if(!isShiroConfigured())
+      return;
+
+    Subject currentUser = SecurityUtils.getSubject();
+    try {
+      logger.info("Logging out "+currentUser.getPrincipal());
+      currentUser.logout();
+    }
+    catch(ShiroException e){
+      throw new AuthenticationFailedException(e.getMessage(), e);
+    }
+    // clean out Shiro's thread local content
+    ThreadContext.remove();
+  }
+
+  public static Callable associateWith(Callable callable){
+    if(!isShiroConfigured())
+      return callable;
+
+    Subject currentUser = SecurityUtils.getSubject();
+    return currentUser.associateWith(callable);
+  }
+
+  public static void authorize(ResourceOperation resourceOperation) {
+    if(resourceOperation==null)
+      return;
+
+    authorize(resourceOperation.resource().name(),
+      resourceOperation.operation().name(),
+      null);
+  }
+
+  public static void authorizeClusterManage(){
+    authorize("CLUSTER", "MANAGE");
+  }
+
+  public static void authorizeClusterWrite(){
+    authorize("CLUSTER", "WRITE");
+  }
+
+  public static void authorizeClusterRead(){
+    authorize("CLUSTER", "READ");
+  }
+
+  public static void authorizeDataManage(){
+    authorize("DATA", "MANAGE");
+  }
+
+  public static void authorizeDataWrite(){
+    authorize("DATA", "WRITE");
+  }
+
+  public static void authorizeDataRead(){
+    authorize("DATA", "READ");
+  }
+
+  public static void authorizeRegionWrite(String regionName){
+    authorize("DATA", "WRITE", regionName);
+  }
+
+  public static void authorizeRegionRead(String regionName){
+    authorize("DATA", "READ", regionName);
+  }
+
+  public static void authorize(String resource, String operation){
+    authorize(resource, operation, null);
+  }
+
+  private static void authorize(String resource, String operation, String regionName){
+    regionName = StringUtils.stripStart(regionName, "/");
+    authorize(new ResourceOperationContext(resource, operation, regionName));
+  }
+
+  public static void authorize(OperationContext context) {
+    if(context==null)
+      return;
+
+    if(context.getResource()== Resource.NULL && context.getOperationCode()== OperationCode.NULL)
+      return;
+
+    if(!isShiroConfigured())
+      return;
+
+
+    Subject currentUser = SecurityUtils.getSubject();
+    try {
+      currentUser.checkPermission(context);
+    }
+    catch(ShiroException e){
+      logger.info(currentUser.getPrincipal() + " not authorized for " + context);
+      throw new GemFireSecurityException(e.getMessage(), e);
+    }
+  }
+
+  private static boolean isShiroConfigured(){
+    try{
+      SecurityUtils.getSecurityManager();
+    }
+    catch(UnavailableSecurityManagerException e){
+      return false;
+    }
+    return true;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
new file mode 100644
index 0000000..afc3125
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/CustomAuthRealm.java
@@ -0,0 +1,177 @@
+/*
+ * 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 com.gemstone.gemfire.internal.security.shiro;
+
+import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
+
+import java.lang.reflect.Method;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.Principal;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import javax.management.remote.JMXPrincipal;
+import javax.security.auth.Subject;
+
+import com.gemstone.gemfire.cache.operations.OperationContext;
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.internal.ClassLoadUtil;
+import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+import com.gemstone.gemfire.internal.lang.StringUtils;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+import com.gemstone.gemfire.security.AccessControl;
+import com.gemstone.gemfire.security.AuthenticationFailedException;
+import com.gemstone.gemfire.security.Authenticator;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+
+public class CustomAuthRealm extends AuthorizingRealm{
+  public static final String REALM_NAME = "CUSTOMAUTHREALM";
+
+  private static final Logger logger = LogManager.getLogger(CustomAuthRealm.class);
+  private String authzFactoryName;
+  private String postAuthzFactoryName;
+  private String authenticatorFactoryName;
+  private Properties securityProps = null;
+  private ConcurrentMap<Principal, AccessControl> cachedAuthZCallback;
+  private ConcurrentMap<Principal, AccessControl> cachedPostAuthZCallback;
+
+  public CustomAuthRealm(Properties securityProps) {
+    this.securityProps = securityProps;
+    this.authzFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME);
+    this.postAuthzFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_PP_NAME);
+    this.authenticatorFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
+    this.cachedAuthZCallback = new ConcurrentHashMap<>();
+    this.cachedPostAuthZCallback = new ConcurrentHashMap<>();
+  }
+
+  @Override
+  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+    UsernamePasswordToken authToken = (UsernamePasswordToken) token;
+    String username = authToken.getUsername();
+    String password = new String(authToken.getPassword());
+
+    Properties credentialProps = new Properties();
+    credentialProps.put(ResourceConstants.USER_NAME, username);
+    credentialProps.put(ResourceConstants.PASSWORD, password);
+
+    Principal principal  = getAuthenticator(securityProps).authenticate(credentialProps);
+
+    return new SimpleAuthenticationInfo(principal, authToken.getPassword(), REALM_NAME);
+  }
+
+
+  @Override
+  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
+    // we intercepted the call to this method by overriding the isPermitted call
+    return null;
+  }
+
+  @Override
+  public boolean isPermitted(PrincipalCollection principals, Permission permission) {
+    OperationContext context =(OperationContext)permission;
+    Principal principal = (Principal)principals.getPrimaryPrincipal();
+    // if no access control is specified, then we allow all
+    if(StringUtils.isBlank(authzFactoryName))
+      return true;
+    AccessControl accessControl = getAccessControl(principal, false);
+    return accessControl.authorizeOperation(context.getRegionName(), context);
+  }
+
+  public AccessControl getAccessControl(Principal principal, boolean isPost) {
+    if (!isPost) {
+      if (cachedAuthZCallback.containsKey(principal)) {
+        return cachedAuthZCallback.get(principal);
+      } else if (!StringUtils.isBlank(authzFactoryName)) {
+        try {
+          Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
+          AccessControl authzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
+          authzCallback.init(principal, null);
+          cachedAuthZCallback.put(principal, authzCallback);
+          return authzCallback;
+        } catch (Exception ex) {
+          throw new AuthenticationFailedException(
+              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+        }
+      }
+    } else {
+      if (cachedPostAuthZCallback.containsKey(principal)) {
+        return cachedPostAuthZCallback.get(principal);
+      } else if (!StringUtils.isBlank(postAuthzFactoryName)) {
+        try {
+          Method authzMethod = ClassLoadUtil.methodFromName(postAuthzFactoryName);
+          AccessControl postAuthzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
+          postAuthzCallback.init(principal, null);
+          cachedPostAuthZCallback.put(principal, postAuthzCallback);
+          return postAuthzCallback;
+        } catch (Exception ex) {
+          throw new AuthenticationFailedException(
+              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+        }
+      }
+    }
+    return null;
+  }
+
+  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationFailedException {
+    Authenticator auth;
+    try {
+      Method instanceGetter = ClassLoadUtil.methodFromName(this.authenticatorFactoryName);
+      auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
+    } catch (Exception ex) {
+      throw new AuthenticationFailedException(
+          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+    }
+    if (auth == null) {
+      throw new AuthenticationFailedException(
+          LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
+    }
+    auth.init(gfSecurityProperties);
+    return auth;
+  }
+
+  public void postAuthorize(OperationContext context) {
+    if (StringUtils.isBlank(postAuthzFactoryName)){
+      return ;
+    }
+
+    AccessControlContext acc = AccessController.getContext();
+    Subject subject = Subject.getSubject(acc);
+    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
+    if (principals == null || principals.isEmpty()) {
+      throw new SecurityException(ACCESS_DENIED_MESSAGE);
+    }
+    Principal principal = principals.iterator().next();
+    AccessControl accessControl = getAccessControl(principal, true);
+    if (!accessControl.authorizeOperation(null, context)) {
+      throw new SecurityException(ACCESS_DENIED_MESSAGE);
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/JMXShiroAuthenticator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/JMXShiroAuthenticator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/JMXShiroAuthenticator.java
new file mode 100644
index 0000000..4a4cc28
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/shiro/JMXShiroAuthenticator.java
@@ -0,0 +1,69 @@
+/*
+ * 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 com.gemstone.gemfire.internal.security.shiro;
+
+import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
+
+import java.util.Collections;
+import java.util.Properties;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+import javax.management.remote.JMXAuthenticator;
+import javax.management.remote.JMXConnectionNotification;
+import javax.management.remote.JMXPrincipal;
+import javax.security.auth.Subject;
+
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+
+/**
+ * this will make JMX authentication to use Shiro for Authentication
+ */
+
+public class JMXShiroAuthenticator implements JMXAuthenticator, NotificationListener {
+
+  @Override
+  public Subject authenticate(Object credentials) {
+    String username = null, password = null;
+    if (credentials instanceof String[]) {
+      final String[] aCredentials = (String[]) credentials;
+      username = aCredentials[0];
+      password = aCredentials[1];
+    } else if (credentials instanceof Properties) {
+      username = ((Properties) credentials).getProperty(ResourceConstants.USER_NAME);
+      password = ((Properties) credentials).getProperty(ResourceConstants.PASSWORD);
+    } else {
+      throw new SecurityException(WRONGE_CREDENTIALS_MESSAGE);
+    }
+
+    GeodeSecurityUtil.login(username, password);
+
+    return new Subject(true, Collections.singleton(new JMXPrincipal(username)), Collections.EMPTY_SET,
+      Collections.EMPTY_SET);
+  }
+
+  @Override
+  public void handleNotification(Notification notification, Object handback) {
+    if (notification instanceof JMXConnectionNotification) {
+      JMXConnectionNotification cxNotification = (JMXConnectionNotification) notification;
+      String type = cxNotification.getType();
+      if (JMXConnectionNotification.CLOSED.equals(type)) {
+        GeodeSecurityUtil.logout();
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
index d6c18df..adc69c4 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
@@ -61,7 +61,7 @@ import com.gemstone.gemfire.management.internal.security.AccessControlMBean;
 import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
 import com.gemstone.gemfire.management.internal.unsafe.ReadOpFileAccessController;
-import com.gemstone.gemfire.security.JMXShiroAuthenticator;
+import com.gemstone.gemfire.internal.security.shiro.JMXShiroAuthenticator;
 
 import org.apache.logging.log4j.Logger;
 import org.eclipse.jetty.server.Server;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
index 7fec9b7..dac016e 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
@@ -54,7 +54,7 @@ import com.gemstone.gemfire.management.RegionMXBean;
 import com.gemstone.gemfire.management.internal.beans.ManagementAdapter;
 import com.gemstone.gemfire.management.membership.MembershipEvent;
 import com.gemstone.gemfire.management.membership.MembershipListener;
-import com.gemstone.gemfire.security.CustomAuthRealm;
+import com.gemstone.gemfire.internal.security.shiro.CustomAuthRealm;
 import org.apache.logging.log4j.Logger;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.config.IniSecurityManagerFactory;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
index 61803fe..fafea9a 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
@@ -73,7 +73,7 @@ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 
 import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
index c3b0b7f..7edc3e4 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
@@ -31,7 +31,7 @@ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.util.CommentSkipHelper;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 
 import org.springframework.shell.core.Parser;
 import org.springframework.shell.event.ParseResult;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
index 33b80e2..1a7191b 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
@@ -17,7 +17,7 @@
 package com.gemstone.gemfire.management.internal.security;
 
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 
 /**
  * AccessControlMBean Implementation. This retrieves JMXPrincipal from AccessController

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
index 8d1031a..99cbe2e 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
@@ -46,7 +46,7 @@ import javax.management.remote.MBeanServerForwarder;
 
 import com.gemstone.gemfire.management.internal.ManagementConstants;
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 
 /**
  * This class intercepts all MBean requests for GemFire MBeans and passed it to

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
index 08865b4..c411972 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
@@ -50,7 +50,7 @@ import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
 import com.gemstone.gemfire.management.internal.web.controllers.support.LoginHandlerInterceptor;
 import com.gemstone.gemfire.management.internal.web.controllers.support.MemberMXBeanAdapter;
 import com.gemstone.gemfire.management.internal.web.util.UriUtils;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 
 import org.apache.logging.log4j.Logger;
 import org.springframework.beans.propertyeditors.StringArrayPropertyEditor;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
index 5465ea3..e6cdbee 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
@@ -27,7 +27,7 @@ import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
 import com.gemstone.gemfire.security.Authenticator;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 
 import org.apache.logging.log4j.Logger;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
deleted file mode 100644
index 706a7cc..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.security;
-
-import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
-
-import java.lang.reflect.Method;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Principal;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import javax.management.remote.JMXPrincipal;
-import javax.security.auth.Subject;
-
-import com.gemstone.gemfire.cache.operations.OperationContext;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.internal.ClassLoadUtil;
-import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
-import com.gemstone.gemfire.internal.lang.StringUtils;
-import com.gemstone.gemfire.management.internal.security.ResourceConstants;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.AuthenticationInfo;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.SimpleAuthenticationInfo;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.authz.AuthorizationInfo;
-import org.apache.shiro.authz.Permission;
-import org.apache.shiro.realm.AuthorizingRealm;
-import org.apache.shiro.subject.PrincipalCollection;
-
-public class CustomAuthRealm extends AuthorizingRealm{
-  public static final String REALM_NAME = "CUSTOMAUTHREALM";
-
-  private static final Logger logger = LogManager.getLogger(CustomAuthRealm.class);
-  private String authzFactoryName;
-  private String postAuthzFactoryName;
-  private String authenticatorFactoryName;
-  private Properties securityProps = null;
-  private ConcurrentMap<Principal, AccessControl> cachedAuthZCallback;
-  private ConcurrentMap<Principal, AccessControl> cachedPostAuthZCallback;
-
-  public CustomAuthRealm(Properties securityProps) {
-    this.securityProps = securityProps;
-    this.authzFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME);
-    this.postAuthzFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_PP_NAME);
-    this.authenticatorFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
-    this.cachedAuthZCallback = new ConcurrentHashMap<>();
-    this.cachedPostAuthZCallback = new ConcurrentHashMap<>();
-  }
-
-  @Override
-  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
-    UsernamePasswordToken authToken = (UsernamePasswordToken) token;
-    String username = authToken.getUsername();
-    String password = new String(authToken.getPassword());
-
-    Properties credentialProps = new Properties();
-    credentialProps.put(ResourceConstants.USER_NAME, username);
-    credentialProps.put(ResourceConstants.PASSWORD, password);
-
-    Principal principal  = getAuthenticator(securityProps).authenticate(credentialProps);
-
-    return new SimpleAuthenticationInfo(principal, authToken.getPassword(), REALM_NAME);
-  }
-
-
-  @Override
-  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
-    // we intercepted the call to this method by overriding the isPermitted call
-    return null;
-  }
-
-  @Override
-  public boolean isPermitted(PrincipalCollection principals, Permission permission) {
-    OperationContext context =(OperationContext)permission;
-    Principal principal = (Principal)principals.getPrimaryPrincipal();
-    // if no access control is specified, then we allow all
-    if(StringUtils.isBlank(authzFactoryName))
-      return true;
-    AccessControl accessControl = getAccessControl(principal, false);
-    return accessControl.authorizeOperation(context.getRegionName(), context);
-  }
-
-  public AccessControl getAccessControl(Principal principal, boolean isPost) {
-    if (!isPost) {
-      if (cachedAuthZCallback.containsKey(principal)) {
-        return cachedAuthZCallback.get(principal);
-      } else if (!StringUtils.isBlank(authzFactoryName)) {
-        try {
-          Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
-          AccessControl authzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
-          authzCallback.init(principal, null);
-          cachedAuthZCallback.put(principal, authzCallback);
-          return authzCallback;
-        } catch (Exception ex) {
-          throw new AuthenticationFailedException(
-              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-        }
-      }
-    } else {
-      if (cachedPostAuthZCallback.containsKey(principal)) {
-        return cachedPostAuthZCallback.get(principal);
-      } else if (!StringUtils.isBlank(postAuthzFactoryName)) {
-        try {
-          Method authzMethod = ClassLoadUtil.methodFromName(postAuthzFactoryName);
-          AccessControl postAuthzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
-          postAuthzCallback.init(principal, null);
-          cachedPostAuthZCallback.put(principal, postAuthzCallback);
-          return postAuthzCallback;
-        } catch (Exception ex) {
-          throw new AuthenticationFailedException(
-              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-        }
-      }
-    }
-    return null;
-  }
-
-  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationFailedException {
-    Authenticator auth;
-    try {
-      Method instanceGetter = ClassLoadUtil.methodFromName(this.authenticatorFactoryName);
-      auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
-    } catch (Exception ex) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-    }
-    if (auth == null) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
-    }
-    auth.init(gfSecurityProperties);
-    return auth;
-  }
-
-  public void postAuthorize(OperationContext context) {
-    if (StringUtils.isBlank(postAuthzFactoryName)){
-      return ;
-    }
-
-    AccessControlContext acc = AccessController.getContext();
-    Subject subject = Subject.getSubject(acc);
-    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
-    if (principals == null || principals.isEmpty()) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE);
-    }
-    Principal principal = principals.iterator().next();
-    AccessControl accessControl = getAccessControl(principal, true);
-    if (!accessControl.authorizeOperation(null, context)) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE);
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java
deleted file mode 100644
index 148a963..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.security;
-
-import java.util.concurrent.Callable;
-
-import com.gemstone.gemfire.cache.operations.OperationContext;
-import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import com.gemstone.gemfire.cache.operations.OperationContext.Resource;
-import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.management.internal.security.ResourceOperation;
-import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.logging.log4j.Logger;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.ShiroException;
-import org.apache.shiro.UnavailableSecurityManagerException;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.util.ThreadContext;
-
-public class GeodeSecurityUtil {
-
-  private static Logger logger = LogService.getLogger();
-
-  public static void login(String username, String password){
-    if(!isShiroConfigured())
-      return;
-
-    Subject currentUser = SecurityUtils.getSubject();
-
-    UsernamePasswordToken token =
-        new UsernamePasswordToken(username, password);
-    try {
-      logger.info("Logging in "+username+"/"+password);
-      currentUser.login(token);
-    } catch (ShiroException e) {
-      throw new AuthenticationFailedException(e.getMessage(), e);
-    }
-  }
-
-  public static void logout(){
-    if(!isShiroConfigured())
-      return;
-
-    Subject currentUser = SecurityUtils.getSubject();
-    try {
-      logger.info("Logging out "+currentUser.getPrincipal());
-      currentUser.logout();
-    }
-    catch(ShiroException e){
-      throw new AuthenticationFailedException(e.getMessage(), e);
-    }
-    // clean out Shiro's thread local content
-    ThreadContext.remove();
-  }
-
-  public static Callable associateWith(Callable callable){
-    if(!isShiroConfigured())
-      return callable;
-
-    Subject currentUser = SecurityUtils.getSubject();
-    return currentUser.associateWith(callable);
-  }
-
-  public static void authorize(ResourceOperation resourceOperation) {
-    if(resourceOperation==null)
-      return;
-
-    authorize(resourceOperation.resource().name(),
-      resourceOperation.operation().name(),
-      null);
-  }
-
-  public static void authorizeClusterManage(){
-    authorize("CLUSTER", "MANAGE");
-  }
-
-  public static void authorizeClusterWrite(){
-    authorize("CLUSTER", "WRITE");
-  }
-
-  public static void authorizeClusterRead(){
-    authorize("CLUSTER", "READ");
-  }
-
-  public static void authorizeDataManage(){
-    authorize("DATA", "MANAGE");
-  }
-
-  public static void authorizeDataWrite(){
-    authorize("DATA", "WRITE");
-  }
-
-  public static void authorizeDataRead(){
-    authorize("DATA", "READ");
-  }
-
-  public static void authorizeRegionWrite(String regionName){
-    authorize("DATA", "WRITE", regionName);
-  }
-
-  public static void authorizeRegionRead(String regionName){
-    authorize("DATA", "READ", regionName);
-  }
-
-  public static void authorize(String resource, String operation){
-    authorize(resource, operation, null);
-  }
-
-  private static void authorize(String resource, String operation, String regionName){
-    regionName = StringUtils.stripStart(regionName, "/");
-    authorize(new ResourceOperationContext(resource, operation, regionName));
-  }
-
-  public static void authorize(OperationContext context) {
-    if(context==null)
-      return;
-
-    if(context.getResource()== Resource.NULL && context.getOperationCode()== OperationCode.NULL)
-      return;
-
-    if(!isShiroConfigured())
-      return;
-
-
-    Subject currentUser = SecurityUtils.getSubject();
-    try {
-      currentUser.checkPermission(context);
-    }
-    catch(ShiroException e){
-      logger.info(currentUser.getPrincipal() + " not authorized for " + context);
-      throw new GemFireSecurityException(e.getMessage(), e);
-    }
-  }
-
-  private static boolean isShiroConfigured(){
-    try{
-      SecurityUtils.getSecurityManager();
-    }
-    catch(UnavailableSecurityManagerException e){
-      return false;
-    }
-    return true;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
deleted file mode 100644
index c55e700..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.security;
-
-import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
-
-import java.util.Collections;
-import java.util.Properties;
-import javax.management.Notification;
-import javax.management.NotificationListener;
-import javax.management.remote.JMXAuthenticator;
-import javax.management.remote.JMXConnectionNotification;
-import javax.management.remote.JMXPrincipal;
-import javax.security.auth.Subject;
-
-import com.gemstone.gemfire.management.internal.security.ResourceConstants;
-
-/**
- * this will make JMX authentication to use Shiro for Authentication
- */
-
-public class JMXShiroAuthenticator implements JMXAuthenticator, NotificationListener {
-
-  @Override
-  public Subject authenticate(Object credentials) {
-    String username = null, password = null;
-    if (credentials instanceof String[]) {
-      final String[] aCredentials = (String[]) credentials;
-      username = aCredentials[0];
-      password = aCredentials[1];
-    } else if (credentials instanceof Properties) {
-      username = ((Properties) credentials).getProperty(ResourceConstants.USER_NAME);
-      password = ((Properties) credentials).getProperty(ResourceConstants.PASSWORD);
-    } else {
-      throw new SecurityException(WRONGE_CREDENTIALS_MESSAGE);
-    }
-
-    GeodeSecurityUtil.login(username, password);
-
-    return new Subject(true, Collections.singleton(new JMXPrincipal(username)), Collections.EMPTY_SET,
-      Collections.EMPTY_SET);
-  }
-
-  @Override
-  public void handleNotification(Notification notification, Object handback) {
-    if (notification instanceof JMXConnectionNotification) {
-      JMXConnectionNotification cxNotification = (JMXConnectionNotification) notification;
-      String type = cxNotification.getType();
-      if (JMXConnectionNotification.CLOSED.equals(type)) {
-        GeodeSecurityUtil.logout();
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
index cc6af0e..0bf3cab 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilCustomRealmJUnitTest.java
@@ -20,7 +20,7 @@ package com.gemstone.gemfire.management.internal.security;
 import java.util.Properties;
 
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.security.CustomAuthRealm;
+import com.gemstone.gemfire.internal.security.shiro.CustomAuthRealm;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 import org.apache.shiro.SecurityUtils;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
index 4ad390d..fe80180 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GeodeSecurityUtilWithIniFileJUnitTest.java
@@ -21,7 +21,7 @@ import static org.assertj.core.api.Assertions.*;
 
 import com.gemstone.gemfire.cache.operations.OperationContext;
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.GeodeSecurityUtil;
+import com.gemstone.gemfire.internal.security.GeodeSecurityUtil;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 import org.apache.shiro.SecurityUtils;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f04b6695/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
index 0ae5d26..3759895 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
@@ -42,8 +42,8 @@ import com.gemstone.gemfire.management.internal.security.AccessControlMBean;
 import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
 import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
-import com.gemstone.gemfire.security.CustomAuthRealm;
-import com.gemstone.gemfire.security.JMXShiroAuthenticator;
+import com.gemstone.gemfire.internal.security.shiro.CustomAuthRealm;
+import com.gemstone.gemfire.internal.security.shiro.JMXShiroAuthenticator;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 
 import org.apache.shiro.SecurityUtils;


[22/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/165c9bc9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/165c9bc9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/165c9bc9

Branch: refs/heads/feature/GEODE-1255
Commit: 165c9bc9ee262fd1edeaf4038480f042a644a787
Parents: c235ef8 7e2ca6c
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Apr 28 07:51:27 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 28 07:51:27 2016 -0700

----------------------------------------------------------------------
 .../com/gemstone/gemfire/cache/query/Utils.java |   38 +
 .../dunit/QueryDataInconsistencyDUnitTest.java  |    2 -
 .../QueryUsingFunctionContextDUnitTest.java     |    8 +-
 .../QueryREUpdateInProgressJUnitTest.java       |   12 +-
 ...rrentIndexInitOnOverflowRegionDUnitTest.java |   27 +-
 ...ndexOperationsOnOverflowRegionDUnitTest.java |   97 +-
 ...pdateWithInplaceObjectModFalseDUnitTest.java |   46 +-
 ...ConcurrentIndexUpdateWithoutWLDUnitTest.java |   48 +-
 ...itializeIndexEntryDestroyQueryDUnitTest.java |   96 +-
 .../PRBasicIndexCreationDUnitTest.java          |  302 ++---
 .../PRBasicIndexCreationDeadlockDUnitTest.java  |   42 +-
 .../PRBasicMultiIndexCreationDUnitTest.java     |  267 ++---
 .../partitioned/PRBasicQueryDUnitTest.java      |   36 +-
 .../PRBasicRemoveIndexDUnitTest.java            |   37 +-
 .../PRColocatedEquiJoinDUnitTest.java           |  106 +-
 .../partitioned/PRInvalidQueryDUnitTest.java    |   26 +-
 .../partitioned/PRQueryCacheCloseDUnitTest.java |   81 +-
 .../query/partitioned/PRQueryDUnitHelper.java   |  818 ++-----------
 .../query/partitioned/PRQueryDUnitTest.java     |   87 +-
 .../query/partitioned/PRQueryPerfDUnitTest.java |  504 --------
 .../PRQueryRegionCloseDUnitTest.java            |   28 +-
 .../PRQueryRegionDestroyedDUnitTest.java        |   36 +-
 .../PRQueryRemoteNodeExceptionDUnitTest.java    |   48 +-
 .../cache30/ClientMembershipDUnitTest.java      |  827 +++++++------
 ...hreadPoolExecutorWithKeepAliveJUnitTest.java |   10 +-
 .../cache/wan/AsyncEventQueueTestBase.java      |   12 -
 .../asyncqueue/AsyncEventListenerDUnitTest.java | 1112 +++++++++---------
 .../AsyncEventQueueStatsDUnitTest.java          |  186 +--
 .../ConcurrentAsyncEventQueueDUnitTest.java     |  168 +--
 .../CommonParallelAsyncEventQueueDUnitTest.java |    8 +-
 .../gemfire/management/QueryDataDUnitTest.java  |    6 +-
 .../gemfire/internal/cache/wan/WANTestBase.java |   17 +
 .../wan/misc/NewWanAuthenticationDUnitTest.java |  309 +++++
 .../serial/SerialWANPropogationDUnitTest.java   |    4 -
 34 files changed, 2282 insertions(+), 3169 deletions(-)
----------------------------------------------------------------------



[17/50] [abbrv] incubator-geode git commit: GEODE-17: add license header

Posted by kl...@apache.org.
GEODE-17: add license header


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

Branch: refs/heads/feature/GEODE-1255
Commit: e0549dfdad85ab3f030e5baf33a38bfe47e3441d
Parents: 734082a
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Tue Apr 26 07:37:56 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Tue Apr 26 07:37:56 2016 -0700

----------------------------------------------------------------------
 .../com/gemstone/gemfire/security/ShiroUtil.java   | 17 +++++++++++++++++
 .../security/GfshCommandsSecurityTest.java         | 17 +++++++++++++++++
 .../management/internal/security/TestCommand.java  | 17 +++++++++++++++++
 geode-core/src/test/resources/shiro.ini            | 15 +++++++++++++++
 4 files changed, 66 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e0549dfd/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
index 1a46d41..5eedaf4 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
@@ -1,3 +1,20 @@
+/*
+ * 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 com.gemstone.gemfire.security;
 
 import java.util.concurrent.Callable;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e0549dfd/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
index 5149883..56d7030 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
@@ -1,3 +1,20 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
 
 import static org.junit.Assert.*;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e0549dfd/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
index c42e510..c25044d 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
@@ -1,3 +1,20 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
 
 import java.util.ArrayList;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e0549dfd/geode-core/src/test/resources/shiro.ini
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/shiro.ini b/geode-core/src/test/resources/shiro.ini
index 5785782..37b81b2 100644
--- a/geode-core/src/test/resources/shiro.ini
+++ b/geode-core/src/test/resources/shiro.ini
@@ -1,3 +1,18 @@
+# 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.
+
 # -----------------------------------------------------------------------------
 # Users and their (optional) assigned roles
 # username = password, role1, role2, ..., roleN


[07/50] [abbrv] incubator-geode git commit: GEODE-17: make sure PulseAuthTest runs successfully

Posted by kl...@apache.org.
GEODE-17: make sure PulseAuthTest runs successfully

* revive the AccessControlMBean since its needed by pulse to do authorization check
* the server can be configured with only authentication


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/5757ca4b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/5757ca4b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/5757ca4b

Branch: refs/heads/feature/GEODE-1255
Commit: 5757ca4b4afca5f82acf601bc3f0463f519cb9a9
Parents: 832ae35
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Apr 21 16:21:40 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 21 16:21:40 2016 -0700

----------------------------------------------------------------------
 .../management/internal/ManagementAgent.java    | 44 ++++++++++++++++++--
 .../internal/security/AccessControlMBean.java   | 41 ++++++++++++++++++
 .../gemfire/security/CustomAuthRealm.java       |  4 +-
 .../gemfire/security/JMXShiroAuthenticator.java |  6 ++-
 .../gemstone/gemfire/security/ShiroUtil.java    |  1 +
 .../security/AccessControlMBeanJUnitTest.java   |  8 ++--
 .../security/GemFireAuthentication.java         | 41 +++++++-----------
 .../gemfire/tools/pulse/tests/Server.java       | 28 +++++++++++--
 8 files changed, 133 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
index 0ba62e7..d6c18df 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
@@ -30,7 +30,13 @@ import java.rmi.server.RMIClientSocketFactory;
 import java.rmi.server.RMIServerSocketFactory;
 import java.rmi.server.UnicastRemoteObject;
 import java.util.HashMap;
+import java.util.Set;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
 import javax.management.remote.JMXConnectorServer;
 import javax.management.remote.JMXServiceURL;
 import javax.management.remote.rmi.RMIConnectorServer;
@@ -38,6 +44,7 @@ import javax.management.remote.rmi.RMIJRMPServerImpl;
 import javax.management.remote.rmi.RMIServerImpl;
 import javax.rmi.ssl.SslRMIClientSocketFactory;
 
+import com.gemstone.gemfire.GemFireConfigException;
 import com.gemstone.gemfire.cache.CacheFactory;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.distributed.internal.DistributionManager;
@@ -50,9 +57,12 @@ import com.gemstone.gemfire.internal.tcp.TCPConduit;
 import com.gemstone.gemfire.management.ManagementException;
 import com.gemstone.gemfire.management.ManagementService;
 import com.gemstone.gemfire.management.ManagerMXBean;
+import com.gemstone.gemfire.management.internal.security.AccessControlMBean;
 import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
 import com.gemstone.gemfire.management.internal.unsafe.ReadOpFileAccessController;
 import com.gemstone.gemfire.security.JMXShiroAuthenticator;
+
 import org.apache.logging.log4j.Logger;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
@@ -442,10 +452,11 @@ public class ManagementAgent {
       shiroAuthenticator = new JMXShiroAuthenticator();
       env.put(JMXConnectorServer.AUTHENTICATOR, shiroAuthenticator);
       cs.addNotificationListener(shiroAuthenticator, null, cs.getAttributes());
-      if(! StringUtils.isBlank(shiroConfig) || isCustomAuthorizer()) {
-        MBeanServerWrapper mBeanServerWrapper = new MBeanServerWrapper();
-        cs.setMBeanServerForwarder(mBeanServerWrapper);
-      }
+      // always going to assume authorization is needed as well, if no custom AccessControl, then the CustomAuthRealm
+      // should take care of that
+      MBeanServerWrapper mBeanServerWrapper = new MBeanServerWrapper();
+      cs.setMBeanServerForwarder(mBeanServerWrapper);
+      registerAccessControlMBean();
     }
 
     else {
@@ -472,6 +483,31 @@ public class ManagementAgent {
     }
   }
 
+  private void registerAccessControlMBean() {
+    try {
+      AccessControlMBean acc = new AccessControlMBean();
+      ObjectName accessControlMBeanON = new ObjectName(ResourceConstants.OBJECT_NAME_ACCESSCONTROL);
+      MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
+
+      Set<ObjectName> names = platformMBeanServer.queryNames(accessControlMBeanON, null);
+      if (names.isEmpty()) {
+        try {
+          platformMBeanServer.registerMBean(acc, accessControlMBeanON);
+          logger.info("Registered AccessContorlMBean on " + accessControlMBeanON);
+        } catch (InstanceAlreadyExistsException e) {
+          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+        } catch (MBeanRegistrationException e) {
+          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+        } catch (NotCompliantMBeanException e) {
+          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+        }
+      }
+    } catch (MalformedObjectNameException e) {
+      throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
+    }
+  }
+
+
   private boolean isCustomAuthenticator() {
     String factoryName = config.getSecurityClientAuthenticator();
     return factoryName != null && !factoryName.isEmpty();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
new file mode 100644
index 0000000..9921538
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
@@ -0,0 +1,41 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import com.gemstone.gemfire.security.GemFireSecurityException;
+import com.gemstone.gemfire.security.ShiroUtil;
+
+/**
+ * AccessControlMBean Implementation. This retrieves JMXPrincipal from AccessController
+ * and performs authorization for given role using gemfire AccessControl Plugin
+ *
+ * @since 9.0
+ */
+public class AccessControlMBean implements AccessControlMXBean {
+
+  @Override
+  public boolean authorize(String resource, String permission) {
+    try {
+      ShiroUtil.authorize(resource, permission);
+      return true;
+    }
+    catch (GemFireSecurityException e){
+      return false;
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
index 3028f0b..76fc852 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
@@ -95,7 +95,9 @@ public class CustomAuthRealm extends AuthorizingRealm{
   public boolean isPermitted(PrincipalCollection principals, Permission permission) {
     ResourceOperationContext context =(ResourceOperationContext)permission;
     Principal principal = (Principal)principals.getPrimaryPrincipal();
-
+    // if no access control is specified, then we allow all
+    if(StringUtils.isBlank(authzFactoryName))
+      return true;
     AccessControl accessControl = getAccessControl(principal, false);
     return accessControl.authorizeOperation(null, context);
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
index 7151dc5..8f86c38 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
@@ -18,11 +18,13 @@ package com.gemstone.gemfire.security;
 
 import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
 
+import java.util.Collections;
 import java.util.Properties;
 import javax.management.Notification;
 import javax.management.NotificationListener;
 import javax.management.remote.JMXAuthenticator;
 import javax.management.remote.JMXConnectionNotification;
+import javax.management.remote.JMXPrincipal;
 import javax.security.auth.Subject;
 
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
@@ -49,8 +51,8 @@ public class JMXShiroAuthenticator implements JMXAuthenticator, NotificationList
 
     ShiroUtil.login(username, password);
 
-    // we are not using JMX mechanism to do authentication, therefore, this return value does not matter
-    return null;
+    return new Subject(true, Collections.singleton(new JMXPrincipal(username)), Collections.EMPTY_SET,
+      Collections.EMPTY_SET);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
index d19ff00..1a46d41 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
@@ -76,6 +76,7 @@ public class ShiroUtil {
       currentUser.checkPermission(permission);
     }
     catch(ShiroException e){
+      LogService.getLogger().info(currentUser.getPrincipal() + " not authorized for "+resource+":"+operation+":"+regionName);
       throw new GemFireSecurityException(e.getMessage(), e);
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
index 35bb3f2..ac5c65a 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
@@ -16,17 +16,17 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
 import org.junit.Before;
 import org.junit.ClassRule;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
 @Category(IntegrationTest.class)
 public class AccessControlMBeanJUnitTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -50,11 +50,9 @@ public class AccessControlMBeanJUnitTest {
    * @throws Exception
    */
   @Test
-  @Ignore("No AccessControlMBean")
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   public void testAnyAccess() throws Exception {
     assertThat(bean.authorize("DATA", "READ")).isEqualTo(false);
     assertThat(bean.authorize("CLUSTER", "READ")).isEqualTo(false);
   }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
index fb40a20..5253f2f 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/security/GemFireAuthentication.java
@@ -16,24 +16,21 @@
  */
 package com.vmware.gemfire.tools.pulse.internal.security;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import javax.management.MBeanServerConnection;
+import javax.management.ObjectName;
+import javax.management.remote.JMXConnector;
+
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
 import com.vmware.gemfire.tools.pulse.internal.log.PulseLogWriter;
+
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.SpringSecurityCoreVersion;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanException;
-import javax.management.MBeanServerConnection;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.management.ReflectionException;
-import javax.management.remote.JMXConnector;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-
 /**
  * Spring security authentication object for GemFire
  * 
@@ -62,7 +59,7 @@ import java.util.Collection;
  */
 public class GemFireAuthentication extends UsernamePasswordAuthenticationToken {	
 
-  private final static PulseLogWriter LOGGER = PulseLogWriter.getLogger();
+  private final static PulseLogWriter logger = PulseLogWriter.getLogger();
   
 	private JMXConnector jmxc=null;	
 	
@@ -92,31 +89,25 @@ public class GemFireAuthentication extends UsernamePasswordAuthenticationToken {
 
 	public static ArrayList<GrantedAuthority> populateAuthorities(JMXConnector jmxc) {
 		ObjectName name;
+		ArrayList<GrantedAuthority> authorities = new ArrayList<>();
 		try {
 			name = new ObjectName(PulseConstants.OBJECT_NAME_ACCESSCONTROL_MBEAN);
 			MBeanServerConnection mbeanServer = jmxc.getMBeanServerConnection();
-			ArrayList<GrantedAuthority> authorities = new ArrayList<>();
+
 			for(String role : PulseConstants.PULSE_ROLES){
 				Object[] params = role.split(":");
 				String[] signature = new String[] {String.class.getCanonicalName(), String.class.getCanonicalName()};
 				boolean result = (Boolean)mbeanServer.invoke(name, "authorize", params, signature);
 				if(result){
-				  //spring sec require ROLE_ prefix
 					authorities.add(new SimpleGrantedAuthority(role));
 				}
 			}
-			return authorities;
-		} catch (MalformedObjectNameException e) {
-			throw new RuntimeException(e);
-		} catch (InstanceNotFoundException e) {
-			throw new RuntimeException(e);
-		} catch (MBeanException e) {
-			throw new RuntimeException(e);
-		} catch (ReflectionException e) {
-			throw new RuntimeException(e);
-		} catch (IOException e) {
-			throw new RuntimeException(e);
+		}catch (Exception e){
+			throw new RuntimeException(e.getMessage(), e);
 		}
+
+		return authorities;
+
 	}
 
 	public JMXConnector getJmxc() {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5757ca4b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
index bd34820..0ae5d26 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
@@ -38,11 +38,18 @@ import javax.management.remote.JMXConnectorServerFactory;
 import javax.management.remote.JMXServiceURL;
 
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.management.internal.security.AccessControlMBean;
 import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
 import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+import com.gemstone.gemfire.security.CustomAuthRealm;
 import com.gemstone.gemfire.security.JMXShiroAuthenticator;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
-import org.json.JSONException;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.realm.Realm;
 
 public class Server {
   private static final String DEFAULT_HOST = "127.0.0.1"; //"localhost"
@@ -52,7 +59,7 @@ public class Server {
   private JMXConnectorServer cs;
   private String propFile = null;
 
-  public Server(int port, String properties, String jsonAuthFile) throws IOException, JSONException {
+  public Server(int port, String properties, String jsonAuthFile) throws Exception {
     this.propFile = properties;
     mbs = ManagementFactory.getPlatformMBeanServer();
     url = new JMXServiceURL(formJMXServiceURLString(DEFAULT_HOST, port));
@@ -64,14 +71,29 @@ public class Server {
       System.setProperty("spring.profiles.active", "pulse.authentication.gemfire");
       Properties props = new Properties();
       props.put(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME, JSONAuthorization.class.getName() + ".create");
-      props.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
+      //props.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
       JSONAuthorization.setUpWithJsonFile(jsonAuthFile);
       Map<String, Object> env = new HashMap<String, Object>();
 
+      // set up Shiro Security Manager
+      Realm realm = new CustomAuthRealm(props);
+      SecurityManager securityManager = new DefaultSecurityManager(realm);
+      SecurityUtils.setSecurityManager(securityManager);
+
+      // register the AccessControll bean
+      AccessControlMBean acc = new AccessControlMBean();
+      ObjectName accessControlMBeanON = new ObjectName(ResourceConstants.OBJECT_NAME_ACCESSCONTROL);
+      MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
+      platformMBeanServer.registerMBean(acc, accessControlMBeanON);
+
+      // wire in the authenticator and authorizaton
       JMXShiroAuthenticator interceptor = new JMXShiroAuthenticator();
       env.put(JMXConnectorServer.AUTHENTICATOR, interceptor);
       cs = JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);
       cs.setMBeanServerForwarder(new MBeanServerWrapper());
+
+      //set up the AccessControlMXBean
+
     } else {
       System.setProperty("spring.profiles.active", "pulse.authentication.default");
       cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);


[41/50] [abbrv] incubator-geode git commit: GEODE-1323: Adding SuppressWarnings for unchecked assignment

Posted by kl...@apache.org.
GEODE-1323: Adding SuppressWarnings for unchecked assignment


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/152ef59a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/152ef59a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/152ef59a

Branch: refs/heads/feature/GEODE-1255
Commit: 152ef59af96fd26f334d249e9d4b827413f1afe8
Parents: 9681329
Author: Jens Deppe <jd...@pivotal.io>
Authored: Mon May 2 09:41:27 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Mon May 2 09:41:27 2016 -0700

----------------------------------------------------------------------
 .../gemfire/modules/session/junit/PerTestClassLoaderRunner.java    | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/152ef59a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
----------------------------------------------------------------------
diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
index dda5307..c56a259 100644
--- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
+++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
@@ -179,6 +179,7 @@ public class PerTestClassLoaderRunner extends NamedRunner {
     return new RunBefores(statement, befores, target);
   }
 
+  @SuppressWarnings("unchecked")
   @Override
   protected List<MethodRule> rules(Object target) {
     List<MethodRule> result = testClassFromClassLoader.getAnnotatedMethodValues(target,
@@ -190,6 +191,7 @@ public class PerTestClassLoaderRunner extends NamedRunner {
     return result;
   }
 
+  @SuppressWarnings("unchecked")
   @Override
   protected List<TestRule> getTestRules(Object target) {
     List<TestRule> result = testClassFromClassLoader.getAnnotatedMethodValues(target,


[34/50] [abbrv] incubator-geode git commit: Merge branch 'feature/GEODE-17-2' into develop

Posted by kl...@apache.org.
Merge branch 'feature/GEODE-17-2' into develop


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/72be65ff
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/72be65ff
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/72be65ff

Branch: refs/heads/feature/GEODE-1255
Commit: 72be65fffe0378ce203ba8d45ed63f17610c2403
Parents: b2f8e59 53760ec
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 12:21:45 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 12:21:45 2016 -0700

----------------------------------------------------------------------
 geode-assembly/build.gradle                     |    1 +
 .../LauncherLifecycleCommandsDUnitTest.java     |    3 +
 .../SharedConfigurationEndToEndDUnitTest.java   |    1 -
 .../src/test/resources/expected_jars.txt        |    1 +
 geode-core/build.gradle                         |    4 +-
 .../cache/operations/OperationContext.java      |  556 ++++------
 .../internal/AbstractDistributionConfig.java    |   48 +-
 .../distributed/internal/ConfigAttribute.java   |    1 -
 .../internal/ConfigAttributeChecker.java        |    1 -
 .../internal/ConfigAttributeDesc.java           |    3 -
 .../internal/ConfigAttributeGetter.java         |    3 -
 .../internal/ConfigAttributeSetter.java         |    3 -
 .../internal/DistributionConfig.java            |    7 +
 .../internal/DistributionConfigImpl.java        |   38 +-
 .../gemfire/internal/AbstractConfig.java        |   28 +-
 .../internal/security/AuthorizeRequest.java     |    5 -
 .../internal/security/GeodeSecurityUtil.java    |  167 +++
 .../security/shiro/CustomAuthRealm.java         |  176 +++
 .../security/shiro/JMXShiroAuthenticator.java   |   69 ++
 .../management/AsyncEventQueueMXBean.java       |    5 +
 .../gemfire/management/CacheServerMXBean.java   |   12 +-
 .../gemfire/management/DiskStoreMXBean.java     |    9 +
 .../DistributedLockServiceMXBean.java           |    8 +-
 .../management/DistributedRegionMXBean.java     |    5 +
 .../management/DistributedSystemMXBean.java     |   30 +-
 .../management/GatewayReceiverMXBean.java       |    8 +-
 .../gemfire/management/GatewaySenderMXBean.java |   12 +-
 .../gemfire/management/LocatorMXBean.java       |    5 +
 .../gemfire/management/LockServiceMXBean.java   |   10 +-
 .../gemfire/management/ManagerMXBean.java       |   12 +-
 .../gemfire/management/MemberMXBean.java        |   15 +-
 .../gemfire/management/RegionMXBean.java        |    4 +
 .../management/internal/ManagementAgent.java    |  126 ++-
 .../internal/SystemManagementService.java       |   36 +-
 .../internal/beans/GatewaySenderMBean.java      |    8 +-
 .../internal/beans/MemberMBeanBridge.java       |   17 +-
 .../management/internal/cli/CommandManager.java |    3 -
 .../internal/cli/commands/ClientCommands.java   |   50 +-
 .../internal/cli/commands/ConfigCommands.java   |   44 +-
 .../CreateAlterDestroyRegionCommands.java       |   42 +-
 .../internal/cli/commands/DataCommands.java     |   36 +-
 .../internal/cli/commands/DeployCommands.java   |   21 +-
 .../cli/commands/DiskStoreCommands.java         |   64 +-
 .../cli/commands/DurableClientCommands.java     |   45 +-
 ...ExportImportSharedConfigurationCommands.java |   23 +-
 .../internal/cli/commands/FunctionCommands.java |   33 +-
 .../internal/cli/commands/GfshHelpCommands.java |   13 +-
 .../internal/cli/commands/IndexCommands.java    |   39 +-
 .../cli/commands/LauncherLifecycleCommands.java |   81 +-
 .../internal/cli/commands/MemberCommands.java   |   27 +-
 .../cli/commands/MiscellaneousCommands.java     |   99 +-
 .../internal/cli/commands/PDXCommands.java      |   33 +-
 .../internal/cli/commands/QueueCommands.java    |   25 +-
 .../internal/cli/commands/RegionCommands.java   |   17 +-
 .../internal/cli/commands/ShellCommands.java    |  106 +-
 .../internal/cli/commands/StatusCommands.java   |   24 +-
 .../internal/cli/commands/WanCommands.java      |  336 +++---
 .../internal/cli/remote/CommandProcessor.java   |   24 +-
 .../internal/cli/result/ErrorResultData.java    |   10 +-
 .../internal/cli/result/ResultBuilder.java      |    7 +-
 .../internal/cli/shell/JmxOperationInvoker.java |   70 +-
 .../internal/security/AccessControl.java        |   51 -
 .../internal/security/AccessControlContext.java |   37 -
 .../internal/security/AccessControlMBean.java   |   41 +
 .../internal/security/AccessControlMXBean.java  |    6 +-
 .../internal/security/CLIOperationContext.java  |  138 ---
 .../internal/security/JMXOperationContext.java  |  177 ---
 .../internal/security/JSONAuthorization.java    |  308 ------
 .../internal/security/MBeanServerWrapper.java   |  168 ++-
 .../security/ManagementInterceptor.java         |  271 -----
 .../management/internal/security/Resource.java  |   26 -
 .../internal/security/ResourceConstants.java    |   91 +-
 .../internal/security/ResourceOperation.java    |   13 +-
 .../security/ResourceOperationContext.java      |  252 ++---
 .../controllers/AbstractCommandsController.java |   82 +-
 .../controllers/ConfigCommandsController.java   |   20 +-
 .../web/controllers/DataCommandsController.java |   26 +-
 .../DiskStoreCommandsController.java            |   14 +-
 .../controllers/FunctionCommandsController.java |    9 +-
 .../MiscellaneousCommandsController.java        |    8 +-
 .../web/controllers/WanCommandsController.java  |    2 +-
 .../EnvironmentVariablesHandlerInterceptor.java |   92 --
 .../support/LoginHandlerInterceptor.java        |  122 ++
 .../web/http/support/SimpleHttpRequester.java   |  105 +-
 .../web/shell/AbstractHttpOperationInvoker.java |   28 +-
 .../web/shell/RestHttpOperationInvoker.java     |   26 +-
 .../web/shell/SimpleHttpOperationInvoker.java   |   11 +-
 .../gemfire/security/AccessControl.java         |   16 +-
 .../gemfire/security/Authenticator.java         |   18 +-
 .../internal/DistributionConfigJUnitTest.java   |   74 +-
 .../gemfire/internal/ConfigSourceJUnitTest.java |    8 +-
 .../extension/mock/MockExtensionCommands.java   |   23 +-
 .../internal/cli/CommandManagerJUnitTest.java   |   45 +-
 .../internal/cli/GfshParserJUnitTest.java       |   45 +-
 .../management/internal/cli/HeadlessGfsh.java   |    2 +-
 .../cli/commands/CliCommandTestBase.java        |  134 ++-
 .../cli/commands/ConfigCommandsDUnitTest.java   |   26 +-
 ...eateAlterDestroyRegionCommandsDUnitTest.java |   34 +-
 .../cli/commands/DeployCommandsDUnitTest.java   |   14 +-
 .../commands/DiskStoreCommandsDUnitTest.java    |   30 +-
 .../commands/DiskStoreCommandsJUnitTest.java    |    1 +
 .../cli/commands/FunctionCommandsDUnitTest.java |   40 +-
 .../commands/GemfireDataCommandsDUnitTest.java  |   28 +-
 ...WithCacheLoaderDuringCacheMissDUnitTest.java |   15 +-
 .../cli/commands/IndexCommandsDUnitTest.java    |   21 +-
 ...stAndDescribeDiskStoreCommandsDUnitTest.java |   14 +-
 .../ListAndDescribeRegionDUnitTest.java         |   13 +-
 .../cli/commands/ListIndexCommandDUnitTest.java |   14 +-
 .../MiscellaneousCommandsDUnitTest.java         |   40 +-
 ...laneousCommandsExportLogsPart1DUnitTest.java |   15 +-
 ...laneousCommandsExportLogsPart2DUnitTest.java |   16 +-
 ...laneousCommandsExportLogsPart3DUnitTest.java |   24 +-
 ...laneousCommandsExportLogsPart4DUnitTest.java |   15 +-
 .../cli/commands/QueueCommandsDUnitTest.java    |   16 +-
 .../SharedConfigurationCommandsDUnitTest.java   |   16 +-
 .../cli/commands/ShellCommandsDUnitTest.java    |   12 +-
 .../cli/commands/ShowMetricsDUnitTest.java      |   16 +-
 .../cli/commands/ShowStackTraceDUnitTest.java   |   14 +-
 .../cli/commands/UserCommandsDUnitTest.java     |   16 +-
 .../shell/GfshExecutionStrategyJUnitTest.java   |   36 +-
 .../cli/shell/GfshHistoryJUnitTest.java         |    2 -
 .../security/AccessControlMBeanJUnitTest.java   |   58 +
 ...rDistributedSystemMXBeanIntegrationTest.java |   50 -
 ...horizeOperationForMBeansIntegrationTest.java |  323 ------
 ...erationForRegionCommandsIntegrationTest.java |  136 ---
 ...CacheServerMBeanAuthenticationJUnitTest.java |   58 +
 .../CacheServerMBeanAuthorizationJUnitTest.java |   90 ++
 .../CacheServerMBeanShiroJUnitTest.java         |   93 ++
 .../security/CliCommandsSecurityTest.java       |   83 ++
 .../security/DataCommandsSecurityTest.java      |   83 ++
 .../DiskStoreMXBeanSecurityJUnitTest.java       |   83 ++
 .../GatewayReceiverMBeanSecurityTest.java       |   90 ++
 .../GatewaySenderMBeanSecurityTest.java         |  105 ++
 .../GeodeSecurityUtilCustomRealmJUnitTest.java  |   52 +
 .../GeodeSecurityUtilWithIniFileJUnitTest.java  |  147 +++
 .../security/GfshCommandsSecurityTest.java      |  165 +++
 .../security/GfshShellConnectionRule.java       |  109 ++
 .../security/JMXConnectionConfiguration.java    |   33 +
 .../internal/security/JSONAuthorization.java    |  204 ++++
 ...JSONAuthorizationDetailsIntegrationTest.java |  163 ---
 .../JsonAuthorizationCacheStartRule.java        |   83 ++
 .../LockServiceMBeanAuthorizationJUnitTest.java |   90 ++
 .../security/MBeanSecurityJUnitTest.java        |  117 ++
 .../security/MBeanServerConnectionRule.java     |  130 +++
 .../ManagerMBeanAuthorizationJUnitTest.java     |   78 ++
 .../security/MemberMBeanSecurityJUnitTest.java  |  110 ++
 ...tionCodesForDataCommandsIntegrationTest.java |  101 --
 ...tionCodesForDistributedSystemMXBeanTest.java |   76 --
 .../ResourceOperationContextJUnitTest.java      |   88 ++
 .../internal/security/ShiroCacheStartRule.java  |   63 ++
 .../internal/security/TestCommand.java          |  227 ++++
 .../ReadOpFileAccessControllerJUnitTest.java    |   19 +-
 .../security/ClientAuthorizationDUnitTest.java  |    7 +-
 .../security/ClientAuthorizationTestCase.java   |   20 +-
 .../DeltaClientPostAuthorizationDUnitTest.java  |   21 +-
 .../security/templates/XmlAuthorization.java    |    2 +-
 .../com/gemstone/gemfire/test/dunit/VM.java     |   62 +-
 .../gemstone/gemfire/util/test/TestUtil.java    |    8 +-
 .../gemfire/codeAnalysis/excludedClasses.txt    |   28 +-
 .../codeAnalysis/sanctionedSerializables.txt    |    2 +
 .../management/internal/security/auth1.json     |   28 +-
 .../management/internal/security/auth3.json     |   55 +-
 .../internal/security/cacheServer.json          |  188 ++++
 .../management/internal/security/shiro-ini.json |   87 ++
 .../internal/security/testInheritRole.json      |   40 -
 .../security/testSimpleUserAndRole.json         |   14 -
 .../testUserAndRoleRegionServerGroup.json       |   16 -
 .../internal/security/testUserMultipleRole.json |   20 -
 geode-core/src/test/resources/shiro.ini         |   40 +
 .../cli/commands/ClientCommandsDUnitTest.java   |   53 +-
 .../DurableClientCommandsDUnitTest.java         |    2 +-
 .../junit/rules/DescribedExternalResource.java  |   63 ++
 .../LuceneFunctionReadPathDUnitTest.java        |   17 +-
 geode-pulse/build.gradle                        |    1 +
 .../tools/pulse/internal/PulseAppListener.java  |   68 +-
 .../internal/controllers/PulseController.java   |   28 +-
 .../tools/pulse/internal/data/Cluster.java      |   14 +-
 .../pulse/internal/data/JMXDataUpdater.java     |  217 ++--
 .../pulse/internal/data/PulseConstants.java     |   14 +
 .../tools/pulse/internal/data/Repository.java   |   54 +-
 .../pulse/internal/log/PulseLogWriter.java      |    4 -
 .../security/GemFireAuthentication.java         |   91 ++
 .../security/GemFireAuthenticationProvider.java |   80 ++
 .../pulse/internal/security/LogoutHandler.java  |   55 +
 geode-pulse/src/main/resources/pulse.properties |   12 +-
 .../src/main/webapp/WEB-INF/spring-security.xml |   59 +-
 .../controllers/PulseControllerJUnitTest.java   |   56 +-
 .../tools/pulse/testbed/driver/PulseUITest.java |    2 +-
 .../pulse/tests/DataBrowserResultLoader.java    |   14 +-
 .../tools/pulse/tests/PulseAbstractTest.java    | 1047 ++++++++++++++++++
 .../tools/pulse/tests/PulseAuthTest.java        |   33 +
 .../tools/pulse/tests/PulseAutomatedTest.java   |   17 +-
 .../tools/pulse/tests/PulseBaseTest.java        |    4 +-
 .../tools/pulse/tests/PulseNoAuthTest.java      |   33 +
 .../gemfire/tools/pulse/tests/PulseTest.java    | 1039 -----------------
 .../gemfire/tools/pulse/tests/Region.java       |    2 +-
 .../gemfire/tools/pulse/tests/Server.java       |  156 ++-
 geode-pulse/src/test/resources/pulse-auth.json  |   21 +
 .../wan/wancommand/WANCommandTestBase.java      |  104 +-
 ...anCommandCreateGatewayReceiverDUnitTest.java |  174 +--
 .../WanCommandCreateGatewaySenderDUnitTest.java |  192 ++--
 ...WanCommandGatewayReceiverStartDUnitTest.java |  120 +-
 .../WanCommandGatewayReceiverStopDUnitTest.java |  120 +-
 .../WanCommandGatewaySenderStartDUnitTest.java  |  177 ++-
 .../WanCommandGatewaySenderStopDUnitTest.java   |  158 +--
 .../wan/wancommand/WanCommandListDUnitTest.java |  135 ++-
 .../WanCommandPauseResumeDUnitTest.java         |  370 +++----
 .../wancommand/WanCommandStatusDUnitTest.java   |  174 +--
 .../src/main/webapp/WEB-INF/gemfire-servlet.xml |    2 +-
 ...entVariablesHandlerInterceptorJUnitTest.java |  267 -----
 .../LoginHandlerInterceptorJUnitTest.java       |  274 +++++
 gradle/dependency-versions.properties           |    1 +
 212 files changed, 8790 insertions(+), 6365 deletions(-)
----------------------------------------------------------------------



[44/50] [abbrv] incubator-geode git commit: GEODE-11: Added conditional for null case

Posted by kl...@apache.org.
GEODE-11: Added conditional for null case


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/1400eaed
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/1400eaed
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/1400eaed

Branch: refs/heads/feature/GEODE-1255
Commit: 1400eaed861288da69a1c0ab669e7cbedb3621c1
Parents: 2a786ee
Author: Barry Oglesby <bo...@pivotal.io>
Authored: Mon May 2 14:21:56 2016 -0700
Committer: Barry Oglesby <bo...@pivotal.io>
Committed: Mon May 2 14:21:56 2016 -0700

----------------------------------------------------------------------
 .../gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1400eaed/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
index f530f8c..1158fd1 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
@@ -91,7 +91,7 @@ public abstract class LuceneIndexImpl implements InternalLuceneIndex {
   }
 
   public void setFieldAnalyzers(Map<String, Analyzer> fieldAnalyzers) {
-    this.fieldAnalyzers = Collections.unmodifiableMap(fieldAnalyzers);
+    this.fieldAnalyzers = fieldAnalyzers == null ? null : Collections.unmodifiableMap(fieldAnalyzers);
   }
 
   protected abstract void initialize();


[10/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2

# Conflicts:
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
#	geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
#	geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java


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

Branch: refs/heads/feature/GEODE-1255
Commit: da0bbfec00395062886137a6550fa2ec7e7a0e30
Parents: 183c48a
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 22 10:26:10 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 22 10:26:10 2016 -0700

----------------------------------------------------------------------
 .../cli/commands/CliCommandTestBase.java        | 34 ++++---------
 .../security/ClientAuthorizationTestCase.java   |  2 +-
 .../cli/commands/ClientCommandsDUnitTest.java   | 53 ++++++++++++--------
 3 files changed, 44 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/da0bbfec/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
index 1c6b6b1..9ddfbbb 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
@@ -21,13 +21,12 @@ import static com.gemstone.gemfire.test.dunit.LogWriterUtils.*;
 
 import java.io.IOException;
 import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -44,22 +43,9 @@ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
 import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
 import com.gemstone.gemfire.test.dunit.Host;
-import com.gemstone.gemfire.test.dunit.SerializableCallable;
-import com.gemstone.gemfire.test.dunit.SerializableRunnable;
 import com.gemstone.gemfire.test.dunit.cache.internal.JUnit4CacheTestCase;
-import org.junit.runners.Parameterized;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Map;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import static com.gemstone.gemfire.test.dunit.Assert.*;
-import static com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter;
+import org.junit.runners.Parameterized;
 
 /**
  * Base class for all the CLI/gfsh command dunit tests.
@@ -127,14 +113,15 @@ public abstract class CliCommandTestBase extends JUnit4CacheTestCase {
     return shell;
   }
 
-  protected void setUpJMXManagerOnVM(int vm, final Properties props){
-    Object[] result = (Object[]) Host.getHost(0).getVM(vm).invoke( "setUpJmxManagerOnVm0ThenConnect", () -> {
+  protected void setUpJMXManagerOnVM(int vm, final Properties props) {
+    Object[] result = (Object[]) Host.getHost(0).getVM(vm).invoke("setUpJmxManagerOnVm0ThenConnect", () -> {
       final Object[] results = new Object[3];
       final Properties localProps = (props != null ? props : new Properties());
 
       try {
         jmxHost = InetAddress.getLocalHost().getHostName();
-      } catch (UnknownHostException ignore) {
+      }
+      catch (UnknownHostException ignore) {
         jmxHost = "localhost";
       }
 
@@ -153,7 +140,7 @@ public abstract class CliCommandTestBase extends JUnit4CacheTestCase {
       localProps.setProperty(DistributionConfig.JMX_MANAGER_PORT_NAME, String.valueOf(jmxPort));
       localProps.setProperty(DistributionConfig.HTTP_SERVICE_PORT_NAME, String.valueOf(httpPort));
 
-      if(enableAuth){
+      if (enableAuth) {
         localProps.put(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME,
           JSONAuthorization.class.getName() + ".create");
         localProps.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
@@ -170,11 +157,12 @@ public abstract class CliCommandTestBase extends JUnit4CacheTestCase {
 
       return results;
     });
+  }
+
   /**
    * Destroy all of the components created for the default setup.
    */
-  @SuppressWarnings("serial")
-  protected final void destroyDefaultSetup() {
+    protected final void destroyDefaultSetup() {
     if (this.shell != null) {
       executeCommand(shell, "exit");
       this.shell.terminate();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/da0bbfec/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
index a41f677..58d3442 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestCase.java
@@ -776,7 +776,7 @@ public abstract class ClientAuthorizationTestCase extends JUnit4DistributedTestC
       } else {
         int[] indices = currentOp.getIndices();
         clientVM.invoke("ClientAuthorizationTestCase.doOp",
-            () -> ClientAuthorizationTestCase.doOp( new Byte(ordinal), indices, new Integer(opFlags), new Integer(expectedResult) ));
+            () -> ClientAuthorizationTestCase.doOp( opCode, indices, new Integer(opFlags), new Integer(expectedResult) ));
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/da0bbfec/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java
index e551dce..a277162 100644
--- a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java
+++ b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java
@@ -16,8 +16,31 @@
  */
 package com.gemstone.gemfire.management.internal.cli.commands;
 
-import com.gemstone.gemfire.cache.*;
-import com.gemstone.gemfire.cache.client.*;
+import static com.gemstone.gemfire.test.dunit.Assert.*;
+import static com.gemstone.gemfire.test.dunit.DistributedTestUtils.*;
+import static com.gemstone.gemfire.test.dunit.LogWriterUtils.*;
+import static com.gemstone.gemfire.test.dunit.NetworkUtils.*;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import javax.management.ObjectName;
+
+import com.gemstone.gemfire.cache.AttributesFactory;
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.cache.DataPolicy;
+import com.gemstone.gemfire.cache.PartitionAttributesFactory;
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.Scope;
+import com.gemstone.gemfire.cache.client.ClientCache;
+import com.gemstone.gemfire.cache.client.ClientCacheFactory;
+import com.gemstone.gemfire.cache.client.ClientRegionFactory;
+import com.gemstone.gemfire.cache.client.ClientRegionShortcut;
+import com.gemstone.gemfire.cache.client.PoolManager;
 import com.gemstone.gemfire.cache.client.internal.PoolImpl;
 import com.gemstone.gemfire.cache.query.CqAttributesFactory;
 import com.gemstone.gemfire.cache.query.QueryService;
@@ -47,23 +70,11 @@ import com.gemstone.gemfire.test.dunit.VM;
 import com.gemstone.gemfire.test.junit.categories.DistributedTest;
 import com.gemstone.gemfire.test.junit.categories.FlakyTest;
 import com.jayway.awaitility.Awaitility;
+
 import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import javax.management.ObjectName;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-
-import static com.gemstone.gemfire.test.dunit.Assert.*;
-import static com.gemstone.gemfire.test.dunit.DistributedTestUtils.getDUnitLocatorPort;
-import static com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter;
-import static com.gemstone.gemfire.test.dunit.NetworkUtils.getServerHostName;
-
 /**
  * Dunit class for testing gemfire Client commands : list client , describe client
  *
@@ -577,7 +588,7 @@ public class ClientCommandsDUnitTest extends CliCommandTestBase {
 
   private void setupSystemForListClient() throws Exception {
     disconnectAllFromDS();
-    createDefaultSetup(getServerProperties());
+    setUpJmxManagerOnVm0ThenConnect(getServerProperties());
 
     final VM server1 = Host.getHost(0).getVM(1);
     final VM client1 = Host.getHost(0).getVM(2);
@@ -590,7 +601,7 @@ public class ClientCommandsDUnitTest extends CliCommandTestBase {
 
   private void setupSystem() throws Exception {
     disconnectAllFromDS();
-    createDefaultSetup(getServerProperties());
+    setUpJmxManagerOnVm0ThenConnect(getServerProperties());
 
     final VM manager = Host.getHost(0).getVM(0);
     final VM server1 = Host.getHost(0).getVM(1);
@@ -616,7 +627,7 @@ public class ClientCommandsDUnitTest extends CliCommandTestBase {
 
   private void setupSystem2() throws Exception {
     disconnectAllFromDS();
-    createDefaultSetup(getServerProperties());
+    setUpJmxManagerOnVm0ThenConnect(getServerProperties());
 
     final VM manager = Host.getHost(0).getVM(0);
     final VM server1 = Host.getHost(0).getVM(1);
@@ -644,7 +655,7 @@ public class ClientCommandsDUnitTest extends CliCommandTestBase {
 
   private void setupSystem3() throws Exception {
     disconnectAllFromDS();
-    createDefaultSetup(getServerProperties());
+    setUpJmxManagerOnVm0ThenConnect(getServerProperties());
 
     final VM manager = Host.getHost(0).getVM(0);
     final VM server1 = Host.getHost(0).getVM(1);
@@ -1001,7 +1012,7 @@ public class ClientCommandsDUnitTest extends CliCommandTestBase {
 
   private void setUpNonSubscribedClient() throws Exception {
     disconnectAllFromDS();
-    createDefaultSetup(getServerProperties());
+    setUpJmxManagerOnVm0ThenConnect(getServerProperties());
 
     final VM manager = Host.getHost(0).getVM(0);
     final VM server1 = Host.getHost(0).getVM(1);
@@ -1030,7 +1041,7 @@ public class ClientCommandsDUnitTest extends CliCommandTestBase {
 
   private String[] setupSystemWithSubAndNonSubClient() throws Exception {
     disconnectAllFromDS();
-    createDefaultSetup(getServerProperties());
+    setUpJmxManagerOnVm0ThenConnect(getServerProperties());
 
     final VM manager = Host.getHost(0).getVM(0);
     final VM server1 = Host.getHost(0).getVM(1);


[36/50] [abbrv] incubator-geode git commit: GEODE-17: do not initialize the JSONAuthorization with a default json

Posted by kl...@apache.org.
GEODE-17: do not initialize the JSONAuthorization with a default json


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

Branch: refs/heads/feature/GEODE-1255
Commit: c06a7956619284da55c4028f289f3b2c922e437c
Parents: 72be65f
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 14:25:14 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 14:25:14 2016 -0700

----------------------------------------------------------------------
 .../management/internal/security/ResourceOperationContext.java     | 2 +-
 .../gemfire/management/internal/security/JSONAuthorization.java    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c06a7956/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
index 50f9b78..7f6f72e 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
@@ -45,7 +45,7 @@ public class ResourceOperationContext extends OperationContext {
     if (operation != null) this.operation = OperationCode.valueOf(operation);
     if (regionName !=null ) this.regionName = regionName;
 
-    setParts(this.resource.name()+":"+this.operation.name()+":"+regionName);
+    setParts(this.resource.name()+":"+this.operation.name()+":"+this.regionName);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c06a7956/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
index 9670822..7f1d2bf 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
@@ -66,7 +66,7 @@ public class JSONAuthorization implements AccessControl, Authenticator {
 
   public JSONAuthorization() throws IOException, JSONException {
     // initialize with a default json file
-    setUpWithJsonFile("shiro-ini.json");
+    //setUpWithJsonFile("shiro-ini.json");
   }
 
   public JSONAuthorization(String jsonFileName) throws IOException, JSONException {


[45/50] [abbrv] incubator-geode git commit: GEODE-1329 auto-reconnect attempts cease if kicked out during boot-up of the cache

Posted by kl...@apache.org.
GEODE-1329 auto-reconnect attempts cease if kicked out during boot-up of the cache

InternalDistributedSystem.reconnect() now includes cache-creation in its retry
loop and, should the cache fail to start due to a CancelException it will shut
down and try again.

While creating a new test in ReconnectDUnitTest I found problems with the
other tests in that class that I fixed.  Notably the method
getDistributedSystemProperties() wasn't returning the correct properties
for a lot of test cases because the dsProperties variable wasn't being set
by them and they were using the getCache() method.  This was causing the
current distributed system to be destroyed and a new one created with
different properties than the test wanted.  That was causing periodic
test failures.


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

Branch: refs/heads/feature/GEODE-1255
Commit: b893abe094b2df73e51cdce1d0716fc984b1115c
Parents: 1400eae
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Mon May 2 14:33:35 2016 -0700
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Mon May 2 14:35:38 2016 -0700

----------------------------------------------------------------------
 .../gemfire/distributed/DistributedSystem.java  |   7 +-
 .../internal/InternalDistributedSystem.java     | 240 +++++++++----------
 .../internal/cache/DistributedRegion.java       |  11 +-
 .../internal/cache/GemFireCacheImpl.java        |  20 +-
 .../gemfire/cache30/ReconnectDUnitTest.java     | 235 ++++++++++++------
 5 files changed, 308 insertions(+), 205 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b893abe0/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
old mode 100644
new mode 100755
index 1de675d..3a52ee0
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
@@ -1594,12 +1594,17 @@ public abstract class DistributedSystem implements StatisticsFactory {
 
       } else {
         boolean existingSystemDisconnecting = true;
-        while (!existingSystems.isEmpty() && existingSystemDisconnecting) {
+        boolean isReconnecting = false;
+        while (!existingSystems.isEmpty() && existingSystemDisconnecting && !isReconnecting) {
           Assert.assertTrue(existingSystems.size() == 1);
 
           InternalDistributedSystem existingSystem =
               (InternalDistributedSystem) existingSystems.get(0);
           existingSystemDisconnecting = existingSystem.isDisconnecting();
+          // a reconnecting DS will block on GemFireCache.class and a ReconnectThread
+          // holds that lock and invokes this method, so we break out of the loop
+          // if we detect this condition
+          isReconnecting = existingSystem.isReconnectingDS();
           if (existingSystemDisconnecting) {
             boolean interrupted = Thread.interrupted();
             try {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b893abe0/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
old mode 100644
new mode 100755
index 3ef8e80..df85417
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
@@ -1445,7 +1445,9 @@ public class InternalDistributedSystem
    * the attempt has been cancelled.
    */
   public boolean isReconnectCancelled() {
-    return this.reconnectCancelled;
+    synchronized(reconnectCancelledLock) {
+      return reconnectCancelled;
+    }
   }
 
   /**
@@ -2377,10 +2379,7 @@ public class InternalDistributedSystem
    * to reconnect and that failed.
    * */
   private volatile static int reconnectAttemptCounter = 0;
-  public static int getReconnectAttemptCounter() {
-    return reconnectAttemptCounter;
-  }
-  
+
   /**
    * The time at which reconnect attempts last began
    */
@@ -2420,9 +2419,21 @@ public class InternalDistributedSystem
    * this instance of the DS is now disconnected and unusable.
    */
   public boolean isReconnecting(){
-    return attemptingToReconnect || (reconnectDS != null);
+    InternalDistributedSystem rds = this.reconnectDS;
+    if (!attemptingToReconnect) {
+      return false;
+    }
+    if (reconnectCancelled) {
+      return false;
+    }
+    boolean newDsConnected = (rds == null || !rds.isConnected());
+    if (!newDsConnected) {
+      return false;
+    }
+    return true;
   }
-  
+
+
   /**
    * Returns true if we are reconnecting the distributed system
    * and this instance was created for one of the connection
@@ -2498,6 +2509,9 @@ public class InternalDistributedSystem
    */
   public boolean tryReconnect(boolean forcedDisconnect, String reason, GemFireCacheImpl oldCache) {
     final boolean isDebugEnabled = logger.isDebugEnabled();
+    if (this.isReconnectingDS && forcedDisconnect) {
+      return false;
+    }
     synchronized (CacheFactory.class) { // bug #51335 - deadlock with app thread trying to create a cache
       synchronized (GemFireCacheImpl.class) {
         // bug 39329: must lock reconnectLock *after* the cache
@@ -2535,7 +2549,7 @@ public class InternalDistributedSystem
    * Returns the value for the number of time reconnect has been tried.
    * Test method used by DUnit.
    * */
-  public static int getReconnectCount(){
+  public static int getReconnectAttemptCounter() {
     return reconnectAttemptCounter;
   }
   
@@ -2590,8 +2604,6 @@ public class InternalDistributedSystem
     int maxTries = oldConfig.getMaxNumReconnectTries();
 
     final boolean isDebugEnabled = logger.isDebugEnabled();
-    
-//    logger.info("reconnecting IDS@"+System.identityHashCode(this));
 
     if (Thread.currentThread().getName().equals("DisconnectThread")) {
       if (isDebugEnabled) {
@@ -2625,18 +2637,17 @@ public class InternalDistributedSystem
     }
     try {
       while (this.reconnectDS == null || !this.reconnectDS.isConnected()) {
-        synchronized(this.reconnectCancelledLock) {
-          if (this.reconnectCancelled) {
-            break;
-          }
+        if (isReconnectCancelled()) {
+          break;
         }
+
         if (!forcedDisconnect) {
           if (isDebugEnabled) {
             logger.debug("Max number of tries : {} and max time out : {}", maxTries, timeOut);
           }
           if(reconnectAttemptCounter >= maxTries){
             if (isDebugEnabled) {
-              logger.debug("Stopping the checkrequiredrole thread becuase reconnect : {} reached the max number of reconnect tries : {}", reconnectAttemptCounter, maxTries);
+              logger.debug("Stopping the checkrequiredrole thread because reconnect : {} reached the max number of reconnect tries : {}", reconnectAttemptCounter, maxTries);
             }
             throw new CacheClosedException(LocalizedStrings.InternalDistributedSystem_SOME_REQUIRED_ROLES_MISSING.toLocalizedString());
           }
@@ -2647,18 +2658,12 @@ public class InternalDistributedSystem
         }
         reconnectAttemptCounter++;
         
-        synchronized(this.reconnectCancelledLock) { 
-          if (this.reconnectCancelled) {
-            if (isDebugEnabled) {
-              logger.debug("reconnect can no longer be done because of an explicit disconnect");
-            }
-            return;
-          }
+        if (isReconnectCancelled()) {
+          return;
         }
     
         logger.info("Disconnecting old DistributedSystem to prepare for a reconnect attempt");
-//        logger.info("IDS@"+System.identityHashCode(this));
-        
+
         try {
           disconnect(true, reason, false);
         }
@@ -2667,7 +2672,6 @@ public class InternalDistributedSystem
         }
         
         try {
-  //        log.fine("waiting " + timeOut + " before reconnecting to the distributed system");
           reconnectLock.wait(timeOut);
         }
         catch (InterruptedException e) {
@@ -2675,13 +2679,9 @@ public class InternalDistributedSystem
           Thread.currentThread().interrupt();
           return;
         }
-        synchronized(this.reconnectCancelledLock) { 
-          if (this.reconnectCancelled) {
-            if (isDebugEnabled) {
-              logger.debug("reconnect can no longer be done because of an explicit disconnect");
-            }
-            return;
-          }
+
+        if (isReconnectCancelled()) {
+          return;
         }
         
     
@@ -2691,32 +2691,30 @@ public class InternalDistributedSystem
         try {
           // notify listeners of each attempt and then again after successful
           notifyReconnectListeners(this, this.reconnectDS, true);
+
           if (this.locatorDMTypeForced) {
             System.setProperty(InternalLocator.FORCE_LOCATOR_DM_TYPE, "true");
           }
-  //        log.fine("DistributedSystem@"+System.identityHashCode(this)+" reconnecting distributed system.  attempt #"+reconnectAttemptCounter);
+
           configProps.put(DistributionConfig.DS_RECONNECTING_NAME, Boolean.TRUE);
           if (quorumChecker != null) {
             configProps.put(DistributionConfig.DS_QUORUM_CHECKER_NAME, quorumChecker);
           }
+
           InternalDistributedSystem newDS = null;
-          synchronized(this.reconnectCancelledLock) { 
-            if (this.reconnectCancelled) {
-              if (isDebugEnabled) {
-                logger.debug("reconnect can no longer be done because of an explicit disconnect");
-              }
-              return;
-            }
+          if (isReconnectCancelled()) {
+            return;
           }
+
           try {
+
             newDS = (InternalDistributedSystem)connect(configProps);
-          } catch (DistributedSystemDisconnectedException e) {
-            synchronized(this.reconnectCancelledLock) {
-          	  if (this.reconnectCancelled) {
-          	    return;
-          	  } else {
-          	    throw e;
-          	  }
+
+          } catch (CancelException e) {
+            if (isReconnectCancelled()) {
+              return;
+            } else {
+              throw e;
             }
           } finally {
             if (newDS == null  &&  quorumChecker != null) {
@@ -2724,36 +2722,29 @@ public class InternalDistributedSystem
               quorumChecker.resume();
             }
           }
-          if (newDS != null) { // newDS will not be null here but findbugs requires this check
-            boolean cancelled;
-            synchronized(this.reconnectCancelledLock) { 
-              cancelled = this.reconnectCancelled;
-            }
-            if (cancelled) {
-              newDS.disconnect();
-            } else {
-              this.reconnectDS = newDS;
-              newDS.isReconnectingDS = false;
-              notifyReconnectListeners(this, this.reconnectDS, false);
-            }
+
+          if (this.reconnectCancelled) {
+            newDS.disconnect();
+            continue;
           }
+
+          this.reconnectDS = newDS;
         }
         catch (SystemConnectException e) {
-          // retry;
-          if (isDebugEnabled) {
-            logger.debug("Attempt to reconnect failed with SystemConnectException");
-          }
-          if (e.getMessage().contains("Rejecting the attempt of a member using an older version")
-              || e.getMessage().contains("15806")) { // 15806 is in the message if it's been localized to another language
+          logger.debug("Attempt to reconnect failed with SystemConnectException");
+
+          if (e.getMessage().contains("Rejecting the attempt of a member using an older version")) {
             logger.warn(LocalizedMessage.create(LocalizedStrings.InternalDistributedSystem_EXCEPTION_OCCURED_WHILE_TRYING_TO_CONNECT_THE_SYSTEM_DURING_RECONNECT), e);
             attemptingToReconnect = false;
             return;
           }
+          continue;
         }
         catch (GemFireConfigException e) {
           if (isDebugEnabled) {
             logger.debug("Attempt to reconnect failed with GemFireConfigException");
           }
+          continue;
         }
         catch (Exception ee) {
           logger.warn(LocalizedMessage.create(LocalizedStrings.InternalDistributedSystem_EXCEPTION_OCCURED_WHILE_TRYING_TO_CONNECT_THE_SYSTEM_DURING_RECONNECT), ee);
@@ -2766,9 +2757,64 @@ public class InternalDistributedSystem
           }
           reconnectAttemptCounter = savNumOfTries;
         }
+
+
+        DM newDM = this.reconnectDS.getDistributionManager();
+        if ( !inhibitCacheForSQLFire && (newDM instanceof DistributionManager) ) {
+          // sqlfire will have already replayed DDL and recovered.
+          // Admin systems don't carry a cache, but for others we can now create
+          // a cache
+          if (((DistributionManager)newDM).getDMType() != DistributionManager.ADMIN_ONLY_DM_TYPE) {
+            try {
+              CacheConfig config = new CacheConfig();
+              if (cacheXML != null) {
+                config.setCacheXMLDescription(cacheXML);
+              }
+              cache = GemFireCacheImpl.create(this.reconnectDS, config);
+
+              createAndStartCacheServers(cacheServerCreation, cache);
+
+              if (cache.getCachePerfStats().getReliableRegionsMissing() == 0){
+                reconnectAttemptCounter = 0;
+              }
+              else {
+                // this try failed. The new cache will call reconnect again
+              }
+            }
+            catch (CancelException ignor) {
+              logger.warn("Exception occured while trying to create the cache during reconnect",ignor);
+              reconnectDS.disconnect();
+              reconnectDS = null;
+            }
+            catch (Exception e) {
+              logger.warn(LocalizedMessage.create(LocalizedStrings.InternalDistributedSystem_EXCEPTION_OCCURED_WHILE_TRYING_TO_CREATE_THE_CACHE_DURING_RECONNECT), e);
+            }
+          }
+        }
+
+        if (reconnectDS != null && reconnectDS.isConnected()) {
+          // make sure the new DS and cache are stable before exiting this loop
+          try {
+            Thread.sleep(config.getMemberTimeout() * 3);
+          } catch (InterruptedException e) {
+            logger.info("Reconnect thread has been interrupted - exiting");
+            Thread.currentThread().interrupt();
+            return;
+          }
+        }
+
       } // while()
+
+      if (isReconnectCancelled()) {
+        reconnectDS.disconnect();
+      } else {
+        reconnectDS.isReconnectingDS = false;
+        notifyReconnectListeners(this, this.reconnectDS, false);
+      }
+
     } finally {
       systemAttemptingReconnect = null;
+      attemptingToReconnect = false;
       if (appendToLogFile == null) {
         System.getProperties().remove(APPEND_TO_LOG_FILE);
       } else {
@@ -2783,59 +2829,18 @@ public class InternalDistributedSystem
         mbrMgr.releaseQuorumChecker(quorumChecker);
       }
     }
-    
-    boolean cancelled;
-    synchronized(this.reconnectCancelledLock) { 
-      cancelled = this.reconnectCancelled;
-    }
-    if (cancelled) {
-      if (isDebugEnabled) {
-        logger.debug("reconnect can no longer be done because of an explicit disconnect");
-      }
+
+    if (isReconnectCancelled()) {
+      logger.debug("reconnect can no longer be done because of an explicit disconnect");
       if (reconnectDS != null) {
         reconnectDS.disconnect();
       }
       attemptingToReconnect = false;
       return;
+    } else {
+      logger.info("Reconnect completed.\nNew DistributedSystem is {}\nNew Cache is {}", reconnectDS, cache);
     }
 
-    try {
-      DM newDM = this.reconnectDS.getDistributionManager();
-      if ( !inhibitCacheForSQLFire && (newDM instanceof DistributionManager) ) {
-        // sqlfire will have already replayed DDL and recovered.
-        // Admin systems don't carry a cache, but for others we can now create
-        // a cache
-        if (((DistributionManager)newDM).getDMType() != DistributionManager.ADMIN_ONLY_DM_TYPE) {
-          try {
-            CacheConfig config = new CacheConfig();
-            if (cacheXML != null) {
-              config.setCacheXMLDescription(cacheXML);
-            }
-            cache = GemFireCacheImpl.create(this.reconnectDS, config);
-            
-            createAndStartCacheServers(cacheServerCreation, cache);
-
-            if (cache.getCachePerfStats().getReliableRegionsMissing() == 0){
-              reconnectAttemptCounter = 0;
-              logger.info("Reconnected properly");
-            }
-            else {
-              // this try failed. The new cache will call reconnect again
-            }
-          }
-          catch (CancelException ignor) {
-              //getLogWriter().warning("Exception occured while trying to create the cache during reconnect : "+ignor.toString());
-              throw ignor;
-              // this.reconnectDS.reconnect();
-          }
-          catch (Exception e) {
-            logger.warn(LocalizedMessage.create(LocalizedStrings.InternalDistributedSystem_EXCEPTION_OCCURED_WHILE_TRYING_TO_CREATE_THE_CACHE_DURING_RECONNECT), e);
-          }
-        }
-      }
-    } finally {
-      attemptingToReconnect = false;
-    }
   }
 
 
@@ -3017,11 +3022,8 @@ public class InternalDistributedSystem
     }
     synchronized(this.reconnectLock) {
       InternalDistributedSystem recon = this.reconnectDS;
-//      (new ManagerLogWriter(LogWriterImpl.FINE_LEVEL, System.out)).fine("IDS.waitUntilReconnected: reconnectCancelled = "+reconnectCancelled
-//          +"; reconnectDS="+reconnectDS);
 
-          
-      while (attemptingToReconnect && (recon == null || !recon.isConnected())) {
+      while (isReconnecting()) {
         synchronized(this.reconnectCancelledLock) {
           if (this.reconnectCancelled) {
             break;
@@ -3030,16 +3032,12 @@ public class InternalDistributedSystem
         if (time != 0) {
           this.reconnectLock.wait(sleepTime);
         }
-        if (recon == null) {
-          recon = this.reconnectDS;
-        }
         if (time == 0  ||  System.currentTimeMillis() > endTime) {
-//          (new ManagerLogWriter(LogWriterImpl.FINE_LEVEL, System.out)).fine("IDS.waitUntilReconnected timed out");
           break;
         }
       }
-//      (new ManagerLogWriter(LogWriterImpl.FINE_LEVEL, System.out)).fine("IDS.waitUntilReconnected finished & returning: attemptingToReconnect="
-//                +attemptingToReconnect+"; reconnectDS=" + recon);
+
+      recon = this.reconnectDS;
       return !attemptingToReconnect  &&  recon != null  &&  recon.isConnected();
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b893abe0/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java
old mode 100644
new mode 100755
index 226d914..cc86e2c
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java
@@ -944,8 +944,10 @@ public class DistributedRegion extends LocalRegion implements
   protected boolean lostReliability(final InternalDistributedMember id,
       final Set newlyMissingRoles)
   {
-    if (DistributedRegion.ignoreReconnect)
+    if (DistributedRegion.ignoreReconnect) { // test hook
       return false;
+    }
+
     boolean async = false;
     try {
       if (getMembershipAttributes().getLossAction().isReconnect()) {
@@ -998,12 +1000,11 @@ public class DistributedRegion extends LocalRegion implements
           public void run()
           {
             try {
-              // TODO: may need to check isReconnecting and checkReadiness...
-              if (logger.isDebugEnabled()) {
-                logger.debug("Reliability loss with policy of reconnect and membership thread doing reconnect");
-              }
+              logger.debug("Reliability loss with policy of reconnect and membership thread doing reconnect");
+
               initializationLatchAfterMemberTimeout.await();
               getSystem().tryReconnect(false, "Role Loss", getCache());
+
               synchronized (missingRequiredRoles) {
                 // any number of threads may be waiting on missingRequiredRoles
                 missingRequiredRoles.notifyAll();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b893abe0/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
index c477466..96b7bbc 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
@@ -337,6 +337,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
 
   private final ConcurrentMap pathToRegion = new ConcurrentHashMap();
 
+  protected volatile boolean isInitialized = false;
   protected volatile boolean isClosing = false;
   protected volatile boolean closingGatewaySendersByShutdownAll = false;
   protected volatile boolean closingGatewayReceiversByShutdownAll = false;
@@ -1187,6 +1188,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
         DEFAULT_CLIENT_FUNCTION_TIMEOUT);
     clientFunctionTimeout = time >= 0 ? time : DEFAULT_CLIENT_FUNCTION_TIMEOUT;
 
+    isInitialized = true;
   }
 
   /**
@@ -2344,7 +2346,15 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
 
   // see Cache.waitUntilReconnected(long, TimeUnit)
   public boolean waitUntilReconnected(long time, TimeUnit units) throws InterruptedException {
-    return this.system.waitUntilReconnected(time,  units);
+    boolean systemReconnected = this.system.waitUntilReconnected(time,  units);
+    if (!systemReconnected) {
+      return false;
+    }
+    GemFireCacheImpl cache = getInstance();
+    if (cache == null || !cache.isInitialized()) {
+      return false;
+    }
+    return true;
   }
   
   // see Cache.stopReconnecting()
@@ -2354,8 +2364,8 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
   
   // see Cache.getReconnectedCache()
   public Cache getReconnectedCache() {
-    Cache c = GemFireCacheImpl.getInstance();
-    if (c == this) {
+    GemFireCacheImpl c = GemFireCacheImpl.getInstance();
+    if (c == this || !c.isInitialized()) {
       c = null;
     }
     return c;
@@ -3502,6 +3512,10 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
     }
   }
 
+  public boolean isInitialized() {
+    return this.isInitialized;
+  }
+
   public boolean isClosed() {
     return this.isClosing;
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b893abe0/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReconnectDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReconnectDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReconnectDUnitTest.java
old mode 100644
new mode 100755
index a4ba33d..fdbc96c
--- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReconnectDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReconnectDUnitTest.java
@@ -16,31 +16,10 @@
  */
 package com.gemstone.gemfire.cache30;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
 import com.gemstone.gemfire.CancelException;
 import com.gemstone.gemfire.SystemFailure;
-import com.gemstone.gemfire.cache.AttributesFactory;
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.CacheException;
-import com.gemstone.gemfire.cache.CacheFactory;
-import com.gemstone.gemfire.cache.DataPolicy;
-import com.gemstone.gemfire.cache.LossAction;
-import com.gemstone.gemfire.cache.MembershipAttributes;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionAttributes;
-import com.gemstone.gemfire.cache.RegionDestroyedException;
-import com.gemstone.gemfire.cache.RegionExistsException;
-import com.gemstone.gemfire.cache.ResumptionAction;
-import com.gemstone.gemfire.cache.Scope;
-import com.gemstone.gemfire.cache.TimeoutException;
+import com.gemstone.gemfire.cache.*;
+import com.gemstone.gemfire.cache.util.CacheListenerAdapter;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.DistributedSystem;
 import com.gemstone.gemfire.distributed.Locator;
@@ -53,21 +32,18 @@ import com.gemstone.gemfire.distributed.internal.membership.gms.MembershipManage
 import com.gemstone.gemfire.distributed.internal.membership.gms.mgr.GMSMembershipManager;
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.internal.AvailablePortHelper;
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
 import com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlGenerator;
-import com.gemstone.gemfire.test.dunit.Assert;
-import com.gemstone.gemfire.test.dunit.AsyncInvocation;
-import com.gemstone.gemfire.test.dunit.DistributedTestCase;
-import com.gemstone.gemfire.test.dunit.DistributedTestUtils;
-import com.gemstone.gemfire.test.dunit.Host;
-import com.gemstone.gemfire.test.dunit.IgnoredException;
-import com.gemstone.gemfire.test.dunit.Invoke;
-import com.gemstone.gemfire.test.dunit.LogWriterUtils;
-import com.gemstone.gemfire.test.dunit.SerializableCallable;
-import com.gemstone.gemfire.test.dunit.SerializableRunnable;
-import com.gemstone.gemfire.test.dunit.ThreadUtils;
-import com.gemstone.gemfire.test.dunit.VM;
-import com.gemstone.gemfire.test.dunit.Wait;
-import com.gemstone.gemfire.test.dunit.WaitCriterion;
+import com.gemstone.gemfire.test.dunit.*;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 @SuppressWarnings("serial")
 public class ReconnectDUnitTest extends CacheTestCase
@@ -75,19 +51,21 @@ public class ReconnectDUnitTest extends CacheTestCase
   static int locatorPort;
   static Locator locator;
   static DistributedSystem savedSystem;
+  static GemFireCacheImpl savedCache;
   static int locatorVMNumber = 3;
   static Thread gfshThread;
   
-  Properties dsProperties;
-  
+  static Properties dsProperties;
+  static String fileSeparator = File.separator;
+
   public ReconnectDUnitTest(String name) {
     super(name);
   }
   
   @Override
   public final void postSetUp() throws Exception {
-    this.locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
-    final int locPort = this.locatorPort;
+    locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+    final int locPort = locatorPort;
     Host.getHost(0).getVM(locatorVMNumber)
       .invoke(new SerializableRunnable("start locator") {
       public void run() {
@@ -96,6 +74,7 @@ public class ReconnectDUnitTest extends CacheTestCase
           if (ds != null) {
             ds.disconnect();
           }
+          dsProperties = null;
           locatorPort = locPort;
           Properties props = getDistributedSystemProperties();
           locator = Locator.startLocatorAndDS(locatorPort, new File(""), props);
@@ -107,6 +86,16 @@ public class ReconnectDUnitTest extends CacheTestCase
       }
     });
 
+    SerializableRunnable setDistributedSystemProperties = new SerializableRunnable("set distributed system properties") {
+      public void run() {
+        dsProperties = null;
+        locatorPort = locPort;
+        getDistributedSystemProperties();
+      }
+    };
+    setDistributedSystemProperties.run();
+    Invoke.invokeInEveryVM(setDistributedSystemProperties);
+
     beginCacheXml();
     createRegion("myRegion", createAtts());
     finishCacheXml("MyDisconnect");
@@ -119,11 +108,12 @@ public class ReconnectDUnitTest extends CacheTestCase
   @Override
   public Properties getDistributedSystemProperties() {
     if (dsProperties == null) {
-      dsProperties = super.getDistributedSystemProperties();
+      dsProperties = new Properties();
       dsProperties.put(DistributionConfig.MAX_WAIT_TIME_FOR_RECONNECT_NAME, "20000");
       dsProperties.put(DistributionConfig.ENABLE_NETWORK_PARTITION_DETECTION_NAME, "true");
       dsProperties.put(DistributionConfig.DISABLE_AUTO_RECONNECT_NAME, "false");
-      dsProperties.put(DistributionConfig.LOCATORS_NAME, "localHost["+this.locatorPort+"]");
+      dsProperties.put(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "false");
+      dsProperties.put(DistributionConfig.LOCATORS_NAME, "localHost["+locatorPort+"]");
       dsProperties.put(DistributionConfig.MCAST_PORT_NAME, "0");
       dsProperties.put(DistributionConfig.MEMBER_TIMEOUT_NAME, "1000");
       dsProperties.put(DistributionConfig.LOG_LEVEL_NAME, LogWriterUtils.getDUnitLogLevel());
@@ -133,23 +123,25 @@ public class ReconnectDUnitTest extends CacheTestCase
   
   @Override
   public final void postTearDownCacheTestCase() throws Exception {
-    try {
-      Host.getHost(0).getVM(locatorVMNumber).invoke(new SerializableRunnable("stop locator") {
-        public void run() {
-          if (locator != null) {
-            LogWriterUtils.getLogWriter().info("stopping locator " + locator);
-            locator.stop();
-          }
+    System.out.println("entering postTearDownCacheTestCase");
+    SerializableRunnable disconnect = new SerializableRunnable("disconnect and clean up") {
+      public void run() {
+        if (savedSystem != null && savedSystem.isReconnecting()) {
+          savedSystem.stopReconnecting();
         }
-      });
-    } finally {
-      Invoke.invokeInEveryVM(new SerializableRunnable() {
-        public void run() {
-          ReconnectDUnitTest.savedSystem = null;
+        savedSystem = null;
+        savedCache = null;
+        dsProperties = null;
+        locator = null;
+        locatorPort = 0;
+        InternalDistributedSystem ds = InternalDistributedSystem.getAnyInstance();
+        if (ds != null) {
+          ds.disconnect();
         }
-      });
-      disconnectAllFromDS();
-    }
+      }
+    };
+    Invoke.invokeInEveryVM(disconnect);
+    disconnect.run();
   }
 
   /**
@@ -199,9 +191,9 @@ public class ReconnectDUnitTest extends CacheTestCase
         //      DebuggerSupport.waitForJavaDebugger(getLogWriter(), " about to create region");
         locatorPort = locPort;
         Properties props = getDistributedSystemProperties();
-        props.put("cache-xml-file", xmlFileLoc+"/MyDisconnect-cache.xml");
+        props.put("cache-xml-file", xmlFileLoc+ fileSeparator +"MyDisconnect-cache.xml");
         props.put("max-num-reconnect-tries", "2");
-        props.put("log-file", "autoReconnectVM"+VM.getCurrentVMNum()+"_"+getPID()+".log");
+//        props.put("log-file", "autoReconnectVM"+VM.getCurrentVMNum()+"_"+getPID()+".log");
         Cache cache = new CacheFactory(props).create();
         IgnoredException.addIgnoredException("com.gemstone.gemfire.ForcedDisconnectException||Possible loss of quorum");
         Region myRegion = cache.getRegion("root/myRegion");
@@ -249,7 +241,7 @@ public class ReconnectDUnitTest extends CacheTestCase
   /** bug #51335 - customer is also trying to recreate the cache */
   // this test is disabled due to a high failure rate during CI test runs.
   // see bug #52160
-  public void disabledtestReconnectCollidesWithApplication() throws Exception  {
+  public void testReconnectCollidesWithApplication() throws Exception  {
     doTestReconnectOnForcedDisconnect(true);
   }
   
@@ -278,7 +270,7 @@ public class ReconnectDUnitTest extends CacheTestCase
         //      DebuggerSupport.waitForJavaDebugger(getLogWriter(), " about to create region");
         locatorPort = locPort;
         Properties props = getDistributedSystemProperties();
-        props.put("cache-xml-file", xmlFileLoc+"/MyDisconnect-cache.xml");
+        props.put("cache-xml-file", xmlFileLoc+ fileSeparator +"MyDisconnect-cache.xml");
         props.put("max-wait-time-reconnect", "1000");
         props.put("max-num-reconnect-tries", "2");
 //        props.put("log-file", "autoReconnectVM"+VM.getCurrentVMNum()+"_"+getPID()+".log");
@@ -298,7 +290,7 @@ public class ReconnectDUnitTest extends CacheTestCase
         //            DebuggerSupport.waitForJavaDebugger(getLogWriter(), " about to create region");
         locatorPort = locPort;
         final Properties props = getDistributedSystemProperties();
-        props.put("cache-xml-file", xmlFileLoc+"/MyDisconnect-cache.xml");
+        props.put("cache-xml-file", xmlFileLoc+ fileSeparator +"MyDisconnect-cache.xml");
         props.put("max-wait-time-reconnect", "5000");
         props.put("max-num-reconnect-tries", "2");
         props.put("start-locator", "localhost["+secondLocPort+"]");
@@ -336,7 +328,10 @@ public class ReconnectDUnitTest extends CacheTestCase
 
     vm0.invoke(create1);
     DistributedMember dm = (DistributedMember)vm1.invoke(create2);
+
+    IgnoredException.addIgnoredException("ForcedDisconnectException");
     forceDisconnect(vm1);
+
     DistributedMember newdm = (DistributedMember)vm1.invoke(new SerializableCallable("wait for reconnect(1)") {
       public Object call() {
         final DistributedSystem ds = ReconnectDUnitTest.savedSystem;
@@ -393,6 +388,7 @@ public class ReconnectDUnitTest extends CacheTestCase
         DistributedSystem newDs = InternalDistributedSystem.getAnyInstance();
         if (newDs != null) {
           LogWriterUtils.getLogWriter().warning("expected distributed system to be disconnected: " + newDs);
+          newDs.disconnect();
           return false;
         }
         return true;
@@ -499,7 +495,7 @@ public class ReconnectDUnitTest extends CacheTestCase
         //      DebuggerSupport.waitForJavaDebugger(getLogWriter(), " about to create region");
         locatorPort = locPort;
         Properties props = getDistributedSystemProperties();
-        props.put("cache-xml-file", xmlFileLoc+"/MyDisconnect-cache.xml");
+        props.put("cache-xml-file", xmlFileLoc+ fileSeparator +"MyDisconnect-cache.xml");
         props.put("max-wait-time-reconnect", "1000");
         props.put("max-num-reconnect-tries", "2");
         ReconnectDUnitTest.savedSystem = getSystem(props);
@@ -664,17 +660,17 @@ public class ReconnectDUnitTest extends CacheTestCase
 
     SerializableRunnable roleLoss = new CacheSerializableRunnable(
         "ROLERECONNECTTESTS") {
-      public void run2() throws CacheException, RuntimeException
+      public void run2() throws RuntimeException
       {
         LogWriterUtils.getLogWriter().info("####### STARTING THE REAL TEST ##########");
         locatorPort = locPort;
         Properties props = getDistributedSystemProperties();
-        props.put("cache-xml-file", xmlFileLoc+File.separator+"RoleReconnect-cache.xml");
+        props.put("cache-xml-file", xmlFileLoc+ fileSeparator +"RoleReconnect-cache.xml");
         props.put("max-wait-time-reconnect", "200");
         final int timeReconnect = 3;
         props.put("max-num-reconnect-tries", "3");
         props.put(DistributionConfig.LOG_LEVEL_NAME, LogWriterUtils.getDUnitLogLevel());
-        props.put("log-file", "roleLossVM0.log");
+//        props.put("log-file", "roleLossVM0.log");
 
         getSystem(props);
 
@@ -693,7 +689,7 @@ public class ReconnectDUnitTest extends CacheTestCase
           basicGetSystem().getLogWriter().info("<ExpectedException action=remove>"
               + "CacheClosedException" + "</ExpectedException");
         }
-        LogWriterUtils.getLogWriter().fine("roleLoss Sleeping SO call dumprun.sh");
+
         WaitCriterion ev = new WaitCriterion() {
           public boolean done() {
             return reconnectTries >= timeReconnect;
@@ -821,10 +817,7 @@ public class ReconnectDUnitTest extends CacheTestCase
           return true;
         }
         Object res = vm0.invoke(() -> ReconnectDUnitTest.reconnectTries());
-        if (((Integer)res).intValue() != 0) {
-          return true;
-        }
-        return false;
+        return ((Integer) res).intValue() != 0;
       }
       public String description() {
         return "waiting for event";
@@ -883,7 +876,7 @@ public class ReconnectDUnitTest extends CacheTestCase
           LogWriterUtils.getLogWriter().info(startupMessage);
           WaitCriterion ev = new WaitCriterion() {
             public boolean done() {
-              return ((Boolean)otherVM.invoke(() -> ReconnectDUnitTest.isInitialRolePlayerStarted())).booleanValue();
+              return otherVM.invoke(() -> ReconnectDUnitTest.isInitialRolePlayerStarted()).booleanValue();
             }
             public String description() {
               return null;
@@ -930,7 +923,7 @@ public class ReconnectDUnitTest extends CacheTestCase
           ev = new WaitCriterion() {
             String excuse;
             public boolean done() {
-              if (InternalDistributedSystem.getReconnectCount() != 0) {
+              if (InternalDistributedSystem.getReconnectAttemptCounter() != 0) {
                 excuse = "reconnectCount is " + reconnectTries
                     + " waiting for it to be zero";
                 return false;
@@ -1023,6 +1016,67 @@ public class ReconnectDUnitTest extends CacheTestCase
     }; // roleloss runnable
   }
 
+  /**
+   * auto-reconnect was found to stop attempting to reconnect and rebuild
+   * the cache if another forced-disconnect was triggered after reconnect
+   * but before cache creation was completed.  This test uses a region
+   * listener to crash the reconnecting distributed system during cache
+   * creation and asserts that it then reconnects and rebuilds the cache.
+   */
+  public void testReconnectFailsInCacheCreation() throws Exception {
+
+    Host host = Host.getHost(0);
+    VM vm0 = host.getVM(0);
+    VM vm1 = host.getVM(1);
+
+    final int locPort = locatorPort;
+
+    final String xmlFileLoc = (new File(".")).getAbsolutePath();
+
+    SerializableRunnable createCache = new SerializableRunnable(
+            "Create Cache and Regions") {
+      public void run()  {
+        locatorPort = locPort;
+        final Properties props = getDistributedSystemProperties();
+        props.put("max-wait-time-reconnect", "1000");
+//        props.put("log-file", "");
+        dsProperties = props;
+        ReconnectDUnitTest.savedSystem = getSystem(props);
+        ReconnectDUnitTest.savedCache = (GemFireCacheImpl)getCache();
+        Region myRegion = createRegion("myRegion", createAtts());
+        myRegion.put("MyKey", "MyValue");
+        myRegion.getAttributesMutator().addCacheListener(new CacheKillingListener());
+      }
+    };
+
+    vm0.invoke(createCache);  // vm0 keeps the locator from losing quorum when vm1 crashes
+
+    vm1.invoke(createCache);
+    IgnoredException.addIgnoredException("DistributedSystemDisconnectedException|ForcedDisconnectException", vm1);
+    forceDisconnect(vm1);
+
+    vm1.invoke(new SerializableRunnable("wait for reconnect") {
+      public void run() {
+        final GemFireCacheImpl cache = ReconnectDUnitTest.savedCache;
+        Wait.waitForCriterion(new WaitCriterion() {
+          public boolean done() {
+            return cache.isReconnecting();
+          }
+          public String description() {
+            return "waiting for cache to begin reconnecting";
+          }
+        }, 30000, 100, true);
+        System.out.println("entering reconnect wait for " + cache);
+        try {
+          cache.waitUntilReconnected(20, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+          fail("interrupted");
+        }
+        assertNotNull(cache.getReconnectedCache());
+      }
+    });
+  }
+
   private CacheSerializableRunnable getRoleAPlayerRunnable(
       final int locPort, final String regionName, final String myKey, final String myValue,
       final String startupMessage) {
@@ -1099,7 +1153,7 @@ public class ReconnectDUnitTest extends CacheTestCase
         LogWriterUtils.getLogWriter().info("STARTED THE REQUIREDROLES CACHE");
         initialRolePlayerStarted = true;
 
-        while(!((Boolean)otherVM.invoke(() -> ReconnectDUnitTest.isInitialized())).booleanValue()){
+        while(!otherVM.invoke(() -> ReconnectDUnitTest.isInitialized()).booleanValue()){
           try{
             Thread.sleep(15);
           }catch(InterruptedException ignor){
@@ -1169,4 +1223,35 @@ public class ReconnectDUnitTest extends CacheTestCase
     return 0;
   }
 
+  /**
+   * CacheKillingListener crashes the distributed system when it is invoked
+   * for the first time.  After that it ignores any notifications.
+   */
+  public static class CacheKillingListener extends CacheListenerAdapter implements Declarable {
+    public static int crashCount = 0;
+
+    @Override
+    public void afterRegionCreate(final RegionEvent event) {
+      if (crashCount == 0) {
+        crashCount += 1;
+        // we crash the system in a different thread than the ReconnectThread
+        // to simulate receiving a ForcedDisconnect from the membership manager
+        // in the UDP reader thread
+        Thread t = new Thread("crash reconnecting system (ReconnectDUnitTest)") {
+          public void run() {
+            System.out.println("crashing distributed system");
+            GemFireCacheImpl cache = (GemFireCacheImpl)event.getRegion().getCache();
+            MembershipManagerHelper.crashDistributedSystem(cache.getDistributedSystem());
+          }
+        };
+        t.setDaemon(true);
+        t.start();
+      }
+    }
+
+    @Override
+    public void init(Properties props) {
+    }
+
+  }
 }



[30/50] [abbrv] incubator-geode git commit: GEODE-1321 Caught IllegealStateException and then ignored

Posted by kl...@apache.org.
GEODE-1321 Caught IllegealStateException and then ignored


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

Branch: refs/heads/feature/GEODE-1255
Commit: bcae906597b167c9bef3b14de5f1341a822f564a
Parents: a254c42
Author: Hitesh Khamesra <hk...@pivotal.io>
Authored: Thu Apr 28 15:04:23 2016 -0700
Committer: Hitesh Khamesra <hk...@pivotal.io>
Committed: Fri Apr 29 10:20:47 2016 -0700

----------------------------------------------------------------------
 .../internal/membership/gms/fd/GMSHealthMonitor.java          | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/bcae9065/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index 2d0f039..f27e0b8 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -519,7 +519,12 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     catch (IOException e) {
       // this is expected if it is a connection-timeout or other failure
       // to connect
-    } 
+    }
+    catch (IllegalStateException e) {
+      if (!isStopping) {
+        logger.trace("Unexpected exception", e);
+      }
+    }
     finally {
       try {
         if (clientSocket != null) {


[25/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/0c0825af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/0c0825af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/0c0825af

Branch: refs/heads/feature/GEODE-1255
Commit: 0c0825afc2ca492d17b6b1332ee7e5278282bb7f
Parents: f446bbe a254c42
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 08:22:01 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 08:22:01 2016 -0700

----------------------------------------------------------------------
 .../internal/cache/FixedPRSinglehopDUnitTest.java   | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------



[06/50] [abbrv] incubator-geode git commit: GEODE-17: fix compiling error after merge

Posted by kl...@apache.org.
GEODE-17: fix compiling error after merge


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/832ae353
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/832ae353
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/832ae353

Branch: refs/heads/feature/GEODE-1255
Commit: 832ae353d3b34730a847298a9d6032ced980bbe7
Parents: c733f0c
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Apr 21 10:25:09 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 21 10:25:09 2016 -0700

----------------------------------------------------------------------
 .../commands/CreateAlterDestroyRegionCommandsDUnitTest.java | 9 +++++----
 .../internal/cli/commands/DiskStoreCommandsDUnitTest.java   | 1 +
 .../internal/cli/commands/IndexCommandsDUnitTest.java       | 1 +
 3 files changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/832ae353/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
index 28a85d0..087e826 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
@@ -35,10 +35,6 @@ import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.PartitionAttributesFactory;
 import com.gemstone.gemfire.cache.Region;
@@ -69,6 +65,11 @@ import com.gemstone.gemfire.test.dunit.SerializableCallable;
 import com.gemstone.gemfire.test.dunit.VM;
 import com.gemstone.gemfire.test.junit.categories.DistributedTest;
 import com.gemstone.gemfire.test.junit.categories.FlakyTest;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 @Category(DistributedTest.class)
 @RunWith(Parameterized.class)

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/832ae353/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
index aa4b12b..731e07c 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
@@ -66,6 +66,7 @@ import com.gemstone.gemfire.test.dunit.SerializableRunnable;
 import com.gemstone.gemfire.test.dunit.VM;
 import com.gemstone.gemfire.test.dunit.WaitCriterion;
 import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+import com.gemstone.gemfire.test.junit.categories.FlakyTest;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/832ae353/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
index 256f2ee..529032c 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
@@ -51,6 +51,7 @@ import com.gemstone.gemfire.test.dunit.Wait;
 import com.gemstone.gemfire.test.dunit.WaitCriterion;
 import com.gemstone.gemfire.test.junit.categories.DistributedTest;
 import com.gemstone.gemfire.test.junit.categories.FlakyTest;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;


[18/50] [abbrv] incubator-geode git commit: GEODE-17: fix PulseControllerJUnitTest

Posted by kl...@apache.org.
GEODE-17: fix PulseControllerJUnitTest


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

Branch: refs/heads/feature/GEODE-1255
Commit: adc885d1437bb4a0f04600e0ef9d973b637c0da0
Parents: e0549df
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Tue Apr 26 08:19:35 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Tue Apr 26 08:19:35 2016 -0700

----------------------------------------------------------------------
 .../internal/controllers/PulseController.java   | 35 +++---------
 .../controllers/PulseControllerJUnitTest.java   | 56 ++++++--------------
 2 files changed, 25 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adc885d1/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
index fd71f4a..bbbadf4 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java
@@ -19,6 +19,13 @@
 
 package com.vmware.gemfire.tools.pulse.internal.controllers;
 
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -32,19 +39,13 @@ import com.vmware.gemfire.tools.pulse.internal.service.PulseService;
 import com.vmware.gemfire.tools.pulse.internal.service.PulseServiceFactory;
 import com.vmware.gemfire.tools.pulse.internal.service.SystemAlertsService;
 import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
+
 import org.apache.commons.lang.StringEscapeUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
 /**
  * Class PulseController
  * 
@@ -146,26 +147,6 @@ public class PulseController {
     return null != request.getUserPrincipal();
   }
 
-  /* Not used replaced by SpringSecurity Logout tag with LogoutHandler
-  @RequestMapping(value = "/clusterLogout", method = RequestMethod.GET)
-  public void clusterLogout(HttpServletRequest request,
-      HttpServletResponse response) throws IOException {
-    PulseLogWriter LOGGER = PulseLogWriter.getLogger();   
-    LOGGER.info("Inside #clusterLogout...");    
-    if(Repository.get().isUseGemFireCredentials()) {      
-      GemFireAuthentication authentication = (GemFireAuthentication) SecurityContextHolder.getContext()
-          .getAuthentication();
-      authentication.getJmxc().close();
-      LOGGER.info("Closing GemFireAuthentication JMX Connection...");
-    }
-    HttpSession session = request.getSession(false);
-    if (session != null) {
-      // End session and redirect
-      session.invalidate();
-    }
-    response.sendRedirect("../Login.html");
-  }*/
-
   @RequestMapping(value = "/pulseVersion", method = RequestMethod.GET)
   public void pulseVersion(HttpServletRequest request,
       HttpServletResponse response) throws IOException {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adc885d1/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
index 38bf9c4..2af8fea 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
@@ -16,13 +16,28 @@
  */
 package com.vmware.gemfire.tools.pulse.controllers;
 
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.*;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.powermock.api.mockito.PowerMockito.spy;
+import static org.powermock.api.mockito.PowerMockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import java.io.File;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.HashMap;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
-import com.vmware.gemfire.tools.pulse.internal.PulseAppListener;
 import com.vmware.gemfire.tools.pulse.internal.controllers.PulseController;
 import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig;
 import com.vmware.gemfire.tools.pulse.internal.data.Repository;
+
 import org.apache.commons.collections.buffer.CircularFifoBuffer;
 import org.junit.Before;
 import org.junit.Rule;
@@ -37,7 +52,6 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
-import org.springframework.mock.web.MockHttpSession;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.web.WebAppConfiguration;
@@ -45,26 +59,6 @@ import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import org.springframework.web.context.WebApplicationContext;
 
-import javax.servlet.ServletContextListener;
-import java.io.File;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.UUID;
-
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doReturn;
-import static org.powermock.api.mockito.PowerMockito.spy;
-import static org.powermock.api.mockito.PowerMockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-
 /**
  */
 @Category(UnitTest.class)
@@ -111,6 +105,7 @@ public class PulseControllerJUnitTest {
   public void setup() throws Exception {
     this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
 
+
     cluster = Mockito.spy(Cluster.class);
 
     Cluster.Region region = new Cluster.Region();
@@ -704,24 +699,7 @@ public class PulseControllerJUnitTest {
   }
 
   @Test
-  public void clusterLogout() throws Exception {
-    MockHttpSession mockSession = new MockHttpSession(wac.getServletContext(), UUID.randomUUID().toString());
-    assertFalse(mockSession.isInvalid());
-
-    this.mockMvc.perform(get("/clusterLogout").principal(principal)
-        .session(mockSession)
-        .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
-        .andExpect(status().is3xxRedirection())
-        .andExpect(redirectedUrl("../Login.html"));
-
-    assertTrue(mockSession.isInvalid());
-  }
-
-  @Test
   public void pulseVersion() throws Exception {
-    ServletContextListener listener = new PulseAppListener();
-    listener.contextInitialized(null);
-
     this.mockMvc.perform(get("/pulseVersion")
         .accept(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE)))
         .andExpect(status().isOk())


[02/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2

# Conflicts:
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeRegionDUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java
#	geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java


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

Branch: refs/heads/feature/GEODE-1255
Commit: def78f1882b2a3b065e0d6aa06deeb8a81ec91d8
Parents: 7b73595 ff914bd
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Apr 21 10:15:17 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 21 10:15:17 2016 -0700

----------------------------------------------------------------------
 .../SessionReplicationIntegrationJUnitTest.java |   10 +-
 .../client/internal/CloseConnectionOp.java      |   26 +-
 .../distributed/internal/InternalLocator.java   |   18 +-
 .../internal/WanLocatorDiscoverer.java          |    4 +
 .../internal/tcpserver/TcpServer.java           |    4 +-
 .../gemfire/internal/AvailablePort.java         |    6 +-
 .../tier/sockets/command/CloseConnection.java   |   17 +-
 .../internal/cli/commands/ShellCommands.java    |    2 +-
 .../cli/functions/ShutDownFunction.java         |   52 +-
 .../com/gemstone/gemfire/TXExpiryJUnitTest.java |    6 +-
 .../gemfire/cache/ConnectionPoolDUnitTest.java  |    3 +
 .../pooling/ConnectionManagerJUnitTest.java     |    8 +-
 .../management/MemoryThresholdsDUnitTest.java   |    4 +
 .../MemoryThresholdsOffHeapDUnitTest.java       |    9 +-
 .../management/ResourceManagerDUnitTest.java    |   16 +-
 .../gemfire/cache/query/QueryTestUtils.java     |  238 +--
 .../cache/query/QueryTestUtilsJUnitTest.java    |    1 +
 .../query/dunit/CompactRangeIndexDUnitTest.java |    1 +
 .../cache/query/dunit/HashIndexDUnitTest.java   |    1 +
 .../dunit/QueryDataInconsistencyDUnitTest.java  |   12 +-
 .../QueryUsingFunctionContextDUnitTest.java     |   11 +-
 .../query/dunit/QueryUsingPoolDUnitTest.java    |    3 +
 .../cache/query/dunit/RemoteQueryDUnitTest.java |    3 +
 .../QueryREUpdateInProgressJUnitTest.java       |    3 +-
 .../index/CompactRangeIndexJUnitTest.java       |    1 +
 ...pdateWithInplaceObjectModFalseDUnitTest.java |    9 +-
 ...itializeIndexEntryDestroyQueryDUnitTest.java |   14 +-
 .../partitioned/PRQueryCacheCloseDUnitTest.java |   29 +-
 .../gemfire/cache30/Bug44418JUnitTest.java      |   10 +-
 .../gemfire/cache30/CacheLogRollDUnitTest.java  |   13 +-
 .../cache30/ClientMembershipDUnitTest.java      |    4 +
 ...iskDistributedNoAckAsyncRegionDUnitTest.java |    4 -
 .../DiskDistributedNoAckRegionTestCase.java     |    7 +-
 ...tributedAckPersistentRegionCCEDUnitTest.java |   80 +-
 .../DistributedAckRegionCCEDUnitTest.java       |   70 +-
 .../cache30/DistributedAckRegionDUnitTest.java  |    2 -
 .../DistributedNoAckRegionCCEDUnitTest.java     |   76 +-
 .../DistributedNoAckRegionDUnitTest.java        |    3 +-
 .../gemfire/cache30/MultiVMRegionTestCase.java  |   18 +-
 .../cache30/PartitionedRegionDUnitTest.java     |    6 +-
 .../cache30/RegionReliabilityTestCase.java      |    4 +
 .../gemfire/cache30/RegionTestCase.java         |   11 +-
 .../gemfire/cache30/TXDistributedDUnitTest.java |    5 +-
 .../gemfire/distributed/LocatorDUnitTest.java   |   11 +-
 .../LocatorLauncherRemoteJUnitTest.java         |   13 +-
 .../ServerLauncherRemoteJUnitTest.java          |   11 +-
 .../internal/LocatorLoadSnapshotJUnitTest.java  |    2 +
 .../GemFireDeadlockDetectorDUnitTest.java       |   12 +-
 .../gemfire/disttx/DistTXExpiryJUnitTest.java   |    1 -
 ...hreadPoolExecutorWithKeepAliveJUnitTest.java |    9 +-
 .../cache/FixedPRSinglehopDUnitTest.java        |    4 +
 .../internal/cache/GIIDeltaDUnitTest.java       |    9 +-
 .../cache/NetSearchMessagingDUnitTest.java      |   12 +-
 .../gemfire/internal/cache/OplogJUnitTest.java  |   13 +-
 .../PartitionedRegionCreationDUnitTest.java     |   17 +-
 ...rtitionedRegionDelayedRecoveryDUnitTest.java |   13 +-
 .../PartitionedRegionSingleHopDUnitTest.java    |    5 +
 .../internal/cache/SingleHopStatsDUnitTest.java |    9 +-
 ...ributedRegionFunctionExecutionDUnitTest.java |   11 +-
 ...onFunctionExecutionNoSingleHopDUnitTest.java |    7 +-
 .../PRFunctionExecutionTimeOutDUnitTest.java    |   17 +-
 .../internal/cache/ha/Bug48571DUnitTest.java    |    6 +-
 .../cache/ha/HARegionQueueDUnitTest.java        |   14 +-
 ...tentColocatedPartitionedRegionDUnitTest.java |   16 +-
 .../PersistentPartitionedRegionDUnitTest.java   |   15 +-
 ...tentPartitionedRegionOldConfigDUnitTest.java |    6 +-
 .../fixed/FixedPartitioningDUnitTest.java       |   12 +-
 .../DestroyEntryPropagationDUnitTest.java       |   14 +-
 .../sockets/HAStartupAndFailoverDUnitTest.java  |   21 +-
 .../sockets/ReliableMessagingDUnitTest.java     |   12 +-
 .../sockets/UpdatePropagationDUnitTest.java     |   17 +-
 .../asyncqueue/AsyncEventListenerDUnitTest.java |    3 +
 .../AsyncEventListenerOffHeapDUnitTest.java     |    4 +-
 .../management/DLockManagementDUnitTest.java    |   22 +-
 ...ersalMembershipListenerAdapterDUnitTest.java |    5 +-
 .../cli/commands/CliCommandTestBase.java        |   14 +-
 ...eateAlterDestroyRegionCommandsDUnitTest.java |   19 +-
 .../commands/DiskStoreCommandsDUnitTest.java    |    1 +
 .../commands/GemfireDataCommandsDUnitTest.java  |    2 +
 .../cli/commands/IndexCommandsDUnitTest.java    |   11 +-
 .../ListAndDescribeRegionDUnitTest.java         |    2 +
 .../MiscellaneousCommandsDUnitTest.java         |    3 +-
 ...laneousCommandsExportLogsPart3DUnitTest.java |    2 +
 .../cli/commands/ShellCommandsDUnitTest.java    |   47 +-
 .../SharedConfigurationUsingDirDUnitTest.java   |    2 +
 .../GemcachedDevelopmentJUnitTest.java          |    2 +
 .../pdx/DistributedSystemIdDUnitTest.java       |   13 +-
 .../gemfire/redis/RedisDistDUnitTest.java       |    4 +
 .../security/ClientAuthenticationDUnitTest.java |    2 +
 .../security/P2PAuthenticationDUnitTest.java    |    3 +
 .../cache/query/cq/dunit/CqPerfDUnitTest.java   |    5 +-
 .../cq/dunit/CqPerfUsingPoolDUnitTest.java      |    9 +-
 .../cache/query/cq/dunit/CqQueryDUnitTest.java  |    2 +-
 .../cq/dunit/CqQueryUsingPoolDUnitTest.java     |   22 +-
 .../query/cq/dunit/PrCqUsingPoolDUnitTest.java  |   18 +-
 .../query/dunit/QueryMonitorDUnitTest.java      |    8 +-
 .../sockets/DurableClientSimpleDUnitTest.java   |  203 +-
 .../tier/sockets/DurableClientTestCase.java     |    1 -
 .../cli/commands/ClientCommandsDUnitTest.java   |    7 +-
 .../security/ClientAuthzObjectModDUnitTest.java |    4 +-
 .../ClientPostAuthorizationDUnitTest.java       |    9 +-
 .../cache/lucene/LuceneServiceProvider.java     |    9 +-
 .../LuceneIndexForPartitionedRegion.java        |  117 +-
 .../LuceneIndexForPartitionedRegionTest.java    |  348 ++++
 .../LuceneIndexRecoveryHAJUnitTest.java         |    5 +-
 .../internal/LuceneServiceImplJUnitTest.java    |   68 +-
 geode-spark-connector/doc/10_demos.md           |   12 +-
 geode-spark-connector/doc/1_building.md         |   18 +-
 geode-spark-connector/doc/2_quick.md            |   26 +-
 geode-spark-connector/doc/3_connecting.md       |   38 +-
 geode-spark-connector/doc/4_loading.md          |   30 +-
 geode-spark-connector/doc/5_rdd_join.md         |   26 +-
 geode-spark-connector/doc/6_save_rdd.md         |   20 +-
 geode-spark-connector/doc/7_save_dstream.md     |   10 +-
 geode-spark-connector/doc/8_oql.md              |    8 +-
 geode-spark-connector/doc/9_java_api.md         |   36 +-
 .../connector/internal/RegionMetadata.java      |   93 -
 .../gemfirefunctions/QueryFunction.java         |   99 -
 .../RetrieveRegionFunction.java                 |  208 --
 .../RetrieveRegionMetadataFunction.java         |  118 --
 .../StructStreamingResultSender.java            |  219 --
 .../gemfire/spark/connector/Employee.java       |   54 -
 .../spark/connector/JavaApiIntegrationTest.java |  424 ----
 .../gemfire/spark/connector/Portfolio.java      |  109 -
 .../gemfire/spark/connector/Position.java       |   73 -
 .../src/it/resources/test-regions.xml           |   49 -
 .../src/it/resources/test-retrieve-regions.xml  |   57 -
 .../spark/connector/BasicIntegrationTest.scala  |  598 ------
 .../RDDJoinRegionIntegrationTest.scala          |  300 ---
 .../RetrieveRegionIntegrationTest.scala         |  253 ---
 .../gemfire/spark/connector/package.scala       |   29 -
 .../connector/testkit/GemFireCluster.scala      |   47 -
 .../spark/connector/testkit/GemFireRunner.scala |  148 --
 .../spark/connector/testkit/IOUtils.scala       |   94 -
 .../spark/streaming/ManualClockHelper.scala     |   28 -
 .../spark/streaming/TestInputDStream.scala      |   44 -
 .../javaapi/GemFireJavaDStreamFunctions.java    |   86 -
 .../GemFireJavaPairDStreamFunctions.java        |   77 -
 .../javaapi/GemFireJavaPairRDDFunctions.java    |  238 ---
 .../javaapi/GemFireJavaRDDFunctions.java        |  178 --
 .../javaapi/GemFireJavaSQLContextFunctions.java |   49 -
 .../GemFireJavaSparkContextFunctions.java       |   87 -
 .../connector/javaapi/GemFireJavaUtil.java      |  122 --
 .../spark/connector/GemFireConnection.scala     |   67 -
 .../spark/connector/GemFireConnectionConf.scala |   73 -
 .../connector/GemFireConnectionManager.scala    |   31 -
 .../connector/GemFireFunctionDeployer.scala     |   81 -
 .../connector/GemFireKryoRegistrator.scala      |   29 -
 .../connector/GemFirePairRDDFunctions.scala     |  140 --
 .../spark/connector/GemFireRDDFunctions.scala   |  120 --
 .../connector/GemFireSQLContextFunctions.scala  |   42 -
 .../GemFireSparkContextFunctions.scala          |   39 -
 .../internal/DefaultGemFireConnection.scala     |  164 --
 .../DefaultGemFireConnectionManager.scala       |   77 -
 .../connector/internal/LocatorHelper.scala      |  135 --
 .../StructStreamingResultCollector.scala        |  152 --
 .../connector/internal/oql/QueryParser.scala    |   58 -
 .../spark/connector/internal/oql/QueryRDD.scala |   83 -
 .../internal/oql/QueryResultCollector.scala     |   69 -
 .../connector/internal/oql/RDDConverter.scala   |   40 -
 .../connector/internal/oql/RowBuilder.scala     |   38 -
 .../connector/internal/oql/SchemaBuilder.scala  |   73 -
 .../internal/oql/UndefinedSerializer.scala      |   46 -
 .../connector/internal/rdd/GemFireJoinRDD.scala |   67 -
 .../internal/rdd/GemFireOuterJoinRDD.scala      |   69 -
 .../internal/rdd/GemFireRDDPartition.scala      |   36 -
 .../internal/rdd/GemFireRDDPartitioner.scala    |   59 -
 .../rdd/GemFireRDDPartitionerImpl.scala         |   89 -
 .../internal/rdd/GemFireRDDWriter.scala         |   82 -
 .../internal/rdd/GemFireRegionRDD.scala         |  138 --
 .../javaapi/GemFireJavaRegionRDD.scala          |   26 -
 .../spark/connector/javaapi/JavaAPIHelper.scala |   53 -
 .../gemfire/spark/connector/package.scala       |   69 -
 .../streaming/GemFireDStreamFunctions.scala     |   89 -
 .../spark/connector/streaming/package.scala     |   32 -
 .../gemfire/spark/connector/JavaAPITest.java    |  163 --
 .../connector/GemFireFunctionDeployerTest.scala |   58 -
 .../DefaultGemFireConnectionManagerTest.scala   |   82 -
 ...tStreamingResultSenderAndCollectorTest.scala |  254 ---
 .../internal/oql/QueryParserTest.scala          |   83 -
 .../connector/ConnectorImplicitsTest.scala      |   50 -
 .../connector/GemFireConnectionConfTest.scala   |  100 -
 .../connector/GemFireDStreamFunctionsTest.scala |   79 -
 .../connector/GemFireRDDFunctionsTest.scala     |  139 --
 .../spark/connector/LocatorHelperTest.scala     |  168 --
 .../rdd/GemFireRDDPartitionerTest.scala         |  190 --
 .../connector/rdd/GemFireRegionRDDTest.scala    |  117 --
 .../basic-demos/src/main/java/demo/Emp.java     |   95 -
 .../src/main/java/demo/OQLJavaDemo.java         |   59 -
 .../src/main/java/demo/PairRDDSaveJavaDemo.java |   86 -
 .../src/main/java/demo/RDDSaveJavaDemo.java     |   85 -
 .../src/main/java/demo/RegionToRDDJavaDemo.java |   57 -
 .../src/main/scala/demo/NetworkWordCount.scala  |   75 -
 .../connector/internal/RegionMetadata.java      |   93 +
 .../internal/geodefunctions/QueryFunction.java  |   99 +
 .../geodefunctions/RetrieveRegionFunction.java  |  208 ++
 .../RetrieveRegionMetadataFunction.java         |  118 ++
 .../StructStreamingResultSender.java            |  219 ++
 .../pivotal/geode/spark/connector/Employee.java |   54 +
 .../spark/connector/JavaApiIntegrationTest.java |  424 ++++
 .../geode/spark/connector/Portfolio.java        |  109 +
 .../pivotal/geode/spark/connector/Position.java |   73 +
 .../src/it/resources/test-regions.xml           |   49 +
 .../src/it/resources/test-retrieve-regions.xml  |   57 +
 .../spark/connector/BasicIntegrationTest.scala  |  598 ++++++
 .../RDDJoinRegionIntegrationTest.scala          |  300 +++
 .../RetrieveRegionIntegrationTest.scala         |  253 +++
 .../pivotal/geode/spark/connector/package.scala |   29 +
 .../spark/connector/testkit/GeodeCluster.scala  |   47 +
 .../spark/connector/testkit/GeodeRunner.scala   |  148 ++
 .../geode/spark/connector/testkit/IOUtils.scala |   94 +
 .../spark/streaming/ManualClockHelper.scala     |   28 +
 .../spark/streaming/TestInputDStream.scala      |   44 +
 .../javaapi/GeodeJavaDStreamFunctions.java      |   86 +
 .../javaapi/GeodeJavaPairDStreamFunctions.java  |   77 +
 .../javaapi/GeodeJavaPairRDDFunctions.java      |  238 +++
 .../javaapi/GeodeJavaRDDFunctions.java          |  178 ++
 .../javaapi/GeodeJavaSQLContextFunctions.java   |   49 +
 .../javaapi/GeodeJavaSparkContextFunctions.java |   87 +
 .../spark/connector/javaapi/GeodeJavaUtil.java  |  122 ++
 .../geode/spark/connector/GeodeConnection.scala |   67 +
 .../spark/connector/GeodeConnectionConf.scala   |   73 +
 .../connector/GeodeConnectionManager.scala      |   31 +
 .../spark/connector/GeodeFunctionDeployer.scala |   81 +
 .../spark/connector/GeodeKryoRegistrator.scala  |   29 +
 .../spark/connector/GeodePairRDDFunctions.scala |  140 ++
 .../spark/connector/GeodeRDDFunctions.scala     |  120 ++
 .../connector/GeodeSQLContextFunctions.scala    |   42 +
 .../connector/GeodeSparkContextFunctions.scala  |   39 +
 .../internal/DefaultGeodeConnection.scala       |  164 ++
 .../DefaultGeodeConnectionManager.scala         |   77 +
 .../connector/internal/LocatorHelper.scala      |  135 ++
 .../StructStreamingResultCollector.scala        |  152 ++
 .../connector/internal/oql/QueryParser.scala    |   58 +
 .../spark/connector/internal/oql/QueryRDD.scala |   83 +
 .../internal/oql/QueryResultCollector.scala     |   69 +
 .../connector/internal/oql/RDDConverter.scala   |   40 +
 .../connector/internal/oql/RowBuilder.scala     |   38 +
 .../connector/internal/oql/SchemaBuilder.scala  |   73 +
 .../internal/oql/UndefinedSerializer.scala      |   46 +
 .../connector/internal/rdd/GeodeJoinRDD.scala   |   67 +
 .../internal/rdd/GeodeOuterJoinRDD.scala        |   69 +
 .../internal/rdd/GeodeRDDPartition.scala        |   36 +
 .../internal/rdd/GeodeRDDPartitioner.scala      |   59 +
 .../internal/rdd/GeodeRDDPartitionerImpl.scala  |   89 +
 .../connector/internal/rdd/GeodeRDDWriter.scala |   82 +
 .../connector/internal/rdd/GeodeRegionRDD.scala |  138 ++
 .../connector/javaapi/GeodeJavaRegionRDD.scala  |   26 +
 .../spark/connector/javaapi/JavaAPIHelper.scala |   53 +
 .../pivotal/geode/spark/connector/package.scala |   69 +
 .../streaming/GeodeDStreamFunctions.scala       |   89 +
 .../spark/connector/streaming/package.scala     |   32 +
 .../geode/spark/connector/JavaAPITest.java      |  163 ++
 .../connector/GeodeFunctionDeployerTest.scala   |   58 +
 .../DefaultGeodeConnectionManagerTest.scala     |   82 +
 ...tStreamingResultSenderAndCollectorTest.scala |  254 +++
 .../internal/oql/QueryParserTest.scala          |   83 +
 .../connector/ConnectorImplicitsTest.scala      |   50 +
 .../connector/GeodeConnectionConfTest.scala     |  100 +
 .../connector/GeodeDStreamFunctionsTest.scala   |   79 +
 .../spark/connector/GeodeRDDFunctionsTest.scala |  139 ++
 .../spark/connector/LocatorHelperTest.scala     |  168 ++
 .../connector/rdd/GeodeRDDPartitionerTest.scala |  190 ++
 .../connector/rdd/GeodeRegionRDDTest.scala      |  117 ++
 .../basic-demos/src/main/java/demo/Emp.java     |   95 +
 .../src/main/java/demo/OQLJavaDemo.java         |   59 +
 .../src/main/java/demo/PairRDDSaveJavaDemo.java |   86 +
 .../src/main/java/demo/RDDSaveJavaDemo.java     |   85 +
 .../src/main/java/demo/RegionToRDDJavaDemo.java |   57 +
 .../src/main/scala/demo/NetworkWordCount.scala  |   75 +
 .../project/Dependencies.scala                  |    8 +-
 .../project/GemFireSparkBuild.scala             |   76 -
 .../project/GeodeSparkBuild.scala               |   76 +
 geode-spark-connector/project/Settings.scala    |    4 +-
 .../client/internal/GatewaySenderBatchOp.java   |    9 +-
 .../internal/locator/wan/LocatorDiscovery.java  |   16 +-
 .../locator/wan/WanLocatorDiscovererImpl.java   |   19 +-
 .../cache/CacheXml70GatewayDUnitTest.java       |   22 +-
 .../cache/CacheXml80GatewayDUnitTest.java       |    4 +-
 .../cache/wan/CacheClientNotifierDUnitTest.java |    6 +-
 .../gemfire/internal/cache/wan/WANTestBase.java | 1866 +++---------------
 ...oncurrentParallelGatewaySenderDUnitTest.java |   38 +-
 ...allelGatewaySenderOperation_1_DUnitTest.java |   27 +-
 ...allelGatewaySenderOperation_2_DUnitTest.java |  168 +-
 .../ConcurrentWANPropogation_1_DUnitTest.java   |   16 +-
 .../ConcurrentWANPropogation_2_DUnitTest.java   |   39 +-
 .../cache/wan/disttx/DistTXWANDUnitTest.java    |   10 +-
 .../CommonParallelGatewaySenderDUnitTest.java   |    8 +-
 ...wWANConcurrencyCheckForDestroyDUnitTest.java |   18 +-
 .../cache/wan/misc/PDXNewWanDUnitTest.java      |   31 +-
 ...dRegion_ParallelWANPersistenceDUnitTest.java |   19 +-
 ...dRegion_ParallelWANPropogationDUnitTest.java |   51 +-
 ...downAllPersistentGatewaySenderDUnitTest.java |    4 +-
 .../cache/wan/misc/WANSSLDUnitTest.java         |    6 +-
 .../wan/misc/WanAutoDiscoveryDUnitTest.java     |   42 +-
 .../cache/wan/misc/WanValidationsDUnitTest.java |   27 +-
 .../ParallelWANPropogationOffHeapDUnitTest.java |    3 +-
 .../SerialWANPropogationOffHeapDUnitTest.java   |    3 +-
 ...ation_PartitionedRegionOffHeapDUnitTest.java |    3 +-
 ...arallelGatewaySenderOperationsDUnitTest.java |   16 +-
 ...llelGatewaySenderQueueOverflowDUnitTest.java |   24 +-
 .../ParallelWANConflationDUnitTest.java         |   20 +-
 ...ersistenceEnabledGatewaySenderDUnitTest.java |   35 +-
 ...lelWANPropagationConcurrentOpsDUnitTest.java |    6 +-
 .../ParallelWANPropagationDUnitTest.java        |   51 +-
 ...ParallelWANPropagationLoopBackDUnitTest.java |   21 +-
 .../wan/parallel/ParallelWANStatsDUnitTest.java |   23 +-
 ...tewaySenderDistributedDeadlockDUnitTest.java |   12 +-
 ...rialGatewaySenderEventListenerDUnitTest.java |   16 +-
 .../SerialGatewaySenderOperationsDUnitTest.java |   25 +-
 .../SerialGatewaySenderQueueDUnitTest.java      |    6 +-
 ...ersistenceEnabledGatewaySenderDUnitTest.java |   14 +-
 .../SerialWANPropagationLoopBackDUnitTest.java  |   28 +-
 .../serial/SerialWANPropogationDUnitTest.java   |  119 +-
 ...NPropogation_PartitionedRegionDUnitTest.java |   24 +-
 .../SerialWANPropogationsFeatureDUnitTest.java  |   19 +-
 .../wan/serial/SerialWANStatsDUnitTest.java     |   49 +-
 .../management/WANManagementDUnitTest.java      |    6 +-
 .../pulse/TestRemoteClusterDUnitTest.java       |    2 +-
 319 files changed, 10555 insertions(+), 11307 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
index e19eec2,92ed262..28a85d0
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommandsDUnitTest.java
@@@ -63,19 -67,10 +67,11 @@@ import com.gemstone.gemfire.management.
  import com.gemstone.gemfire.test.dunit.Host;
  import com.gemstone.gemfire.test.dunit.SerializableCallable;
  import com.gemstone.gemfire.test.dunit.VM;
- import com.gemstone.gemfire.test.junit.Retry;
  import com.gemstone.gemfire.test.junit.categories.DistributedTest;
  import com.gemstone.gemfire.test.junit.categories.FlakyTest;
- import com.gemstone.gemfire.test.junit.rules.RetryRule;
- import org.junit.Ignore;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.experimental.categories.Category;
- import org.junit.runner.RunWith;
- import org.junit.runners.Parameterized;
  
- @Category({ DistributedTest.class, FlakyTest.class }) // GEODE-973
+ @Category(DistributedTest.class)
 +@RunWith(Parameterized.class)
  public class CreateAlterDestroyRegionCommandsDUnitTest extends CliCommandTestBase {
  
    private static final long serialVersionUID = 1L;
@@@ -95,13 -90,6 +91,10 @@@
  
    final List<String> filesToBeDeleted = new CopyOnWriteArrayList<String>();
  
-   @Rule
-   public RetryRule retryRule = new RetryRule();
- 
 +  public CreateAlterDestroyRegionCommandsDUnitTest(boolean useHttpOnConnect){
 +    super(useHttpOnConnect);
 +  }
 +
    /**
     * Asserts that the "compressor" option for the "create region" command succeeds for a recognized compressor.
     */
@@@ -367,10 -355,10 +360,10 @@@
      };
    }
  
+   @Category(FlakyTest.class) // GEODE-973: random ports, BindException, java.rmi.server.ExportException: Port already in use
    @Test
-   @Retry(2) // GEODE-973: getRandomAvailablePort
    public void testCreateRegion46391() throws IOException {
 -    createDefaultSetup(null); // GEODE-973: getRandomAvailablePort
 +    setUpJmxManagerOnVm0ThenConnect(null); // GEODE-973: getRandomAvailablePort
      String command = CliStrings.CREATE_REGION + " --" + CliStrings.CREATE_REGION__REGION + "=" + this.region46391 + " --" + CliStrings.CREATE_REGION__REGIONSHORTCUT + "=REPLICATE";
  
      getLogWriter().info("testCreateRegion46391 create region command=" + command);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java
index a76454e,6858f78..2966072
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java
@@@ -78,10 -81,7 +78,11 @@@ import com.gemstone.gemfire.test.dunit.
  import com.gemstone.gemfire.test.dunit.VM;
  import com.gemstone.gemfire.test.dunit.WaitCriterion;
  import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+ import com.gemstone.gemfire.test.junit.categories.FlakyTest;
 +import org.junit.Test;
 +import org.junit.experimental.categories.Category;
 +import org.junit.runner.RunWith;
 +import org.junit.runners.Parameterized;
  
  /**
   * Dunit class for testing gemfire data commands : get, put, remove, select, rebalance

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
index fc2fe7b,12c5249..256f2ee
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsDUnitTest.java
@@@ -51,12 -54,8 +51,12 @@@ import com.gemstone.gemfire.test.dunit.
  import com.gemstone.gemfire.test.dunit.WaitCriterion;
  import com.gemstone.gemfire.test.junit.categories.DistributedTest;
  import com.gemstone.gemfire.test.junit.categories.FlakyTest;
 +import org.junit.experimental.categories.Category;
 +import org.junit.runner.RunWith;
 +import org.junit.runners.Parameterized;
  
- @Category({ DistributedTest.class, FlakyTest.class }) // see GEODE-689, GEODE-1048
+ @Category(DistributedTest.class)
 +@RunWith(Parameterized.class)
  public class IndexCommandsDUnitTest extends CliCommandTestBase {
  
    private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeRegionDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeRegionDUnitTest.java
index 591a323,ff84036..a422fc7
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeRegionDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeRegionDUnitTest.java
@@@ -43,13 -46,9 +43,14 @@@ import com.gemstone.gemfire.test.dunit.
  import com.gemstone.gemfire.test.dunit.SerializableRunnable;
  import com.gemstone.gemfire.test.dunit.VM;
  import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+ import com.gemstone.gemfire.test.junit.categories.FlakyTest;
 +import org.junit.Test;
 +import org.junit.experimental.categories.Category;
 +import org.junit.runner.RunWith;
 +import org.junit.runners.Parameterized;
  
  @Category(DistributedTest.class)
 +@RunWith(Parameterized.class)
  public class ListAndDescribeRegionDUnitTest extends CliCommandTestBase {
  
    private static final String REGION1 = "region1";

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java
index cdf4348,848c1ba..ec0f020
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java
@@@ -61,8 -60,7 +61,8 @@@ import org.junit.runners.Parameterized
  /**
   * Dunit class for testing gemfire function commands : GC, Shutdown
   */
- @Category({ DistributedTest.class, FlakyTest.class }) // see GEODE-1034
+ @Category(DistributedTest.class)
 +@RunWith(Parameterized.class)
  public class MiscellaneousCommandsDUnitTest extends CliCommandTestBase {
  
    private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java
index 51b1008,626dbe1..967dfb1
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java
@@@ -38,10 -41,7 +38,11 @@@ import com.gemstone.gemfire.test.dunit.
  import com.gemstone.gemfire.test.dunit.SerializableRunnable;
  import com.gemstone.gemfire.test.dunit.VM;
  import com.gemstone.gemfire.test.junit.categories.DistributedTest;
 +import org.junit.Test;
 +import org.junit.experimental.categories.Category;
 +import org.junit.runner.RunWith;
 +import org.junit.runners.Parameterized;
+ import com.gemstone.gemfire.test.junit.categories.FlakyTest;
  
  /**
   * Dunit class for testing gemfire function commands : export logs

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
index 313e4db,86f6dc8..d4fe871
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
@@@ -35,13 -38,9 +35,14 @@@ import com.gemstone.gemfire.management.
  import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
  import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
  import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+ import com.gemstone.gemfire.test.junit.categories.FlakyTest;
 +import org.junit.Test;
 +import org.junit.experimental.categories.Category;
 +import org.junit.runner.RunWith;
 +import org.junit.runners.Parameterized;
  
  @Category(DistributedTest.class)
 +@RunWith(Parameterized.class)
  public class ShellCommandsDUnitTest extends CliCommandTestBase {
  
    private static final long serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/def78f18/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java
----------------------------------------------------------------------


[21/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2

# Conflicts:
#	geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt


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

Branch: refs/heads/feature/GEODE-1255
Commit: c235ef84adae4346933c14e58e42369d13a04abd
Parents: 7e8294d
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Wed Apr 27 14:16:06 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Apr 27 14:16:06 2016 -0700

----------------------------------------------------------------------
 .../gemfire/codeAnalysis/sanctionedSerializables.txt    | 12 ------------
 1 file changed, 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c235ef84/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
index f7ce62b..03746c1 100644
--- a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
+++ b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
@@ -128,18 +128,6 @@ com/gemstone/gemfire/cache/execute/EmtpyRegionFunctionException,true,1
 com/gemstone/gemfire/cache/execute/FunctionAdapter,false
 com/gemstone/gemfire/cache/execute/FunctionException,true,4893171227542647452
 com/gemstone/gemfire/cache/execute/FunctionInvocationTargetException,true,1,id:com/gemstone/gemfire/distributed/DistributedMember
-com/gemstone/gemfire/cache/hdfs/HDFSIOException,false
-com/gemstone/gemfire/cache/hdfs/StoreExistsException,true,1
-com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreConfigHolder,false,autoMajorCompact:boolean,batchIntervalMillis:int,batchSize:int,blockCacheSize:float,clientConfigFile:java/lang/String,diskStoreName:java/lang/String,diskSynchronous:boolean,dispatcherThreads:int,fileRolloverInterval:int,homeDir:java/lang/String,isAutoCompact:boolean,isPersistenceEnabled:boolean,logPrefix:java/lang/String,majorCompactionConcurrency:int,majorCompactionIntervalMins:int,maxConcurrency:int,maxFileSize:int,maxInputFileCount:int,maxInputFileSizeMB:int,maximumQueueMemory:int,minInputFileCount:int,name:java/lang/String,namenodeURL:java/lang/String,oldFileCleanupIntervalMins:int
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSCompactionManager$CompactionIsDisabled,true,1
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSFlushQueueFunction,false
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionFunction,false
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSLastCompactionTimeFunction,false
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer$HoplogReadersController$1,true,1,this$1:com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer$HoplogReadersController,val$this$0:com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer$HoplogReadersController$2,true,1,this$1:com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer$HoplogReadersController,val$this$0:com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/Hoplog$HoplogVersion,false
-com/gemstone/gemfire/cache/hdfs/internal/hoplog/Hoplog$Meta,false
-com/gemstone/gemfire/cache/hdfs/internal/org/apache/hadoop/io/SequenceFile$CompressionType,false
 com/gemstone/gemfire/cache/operations/OperationContext$OperationCode,false
 com/gemstone/gemfire/cache/operations/OperationContext$Resource,false
 com/gemstone/gemfire/cache/partition/PartitionNotAvailableException,true,1


[24/50] [abbrv] incubator-geode git commit: GEODE-17: geode-pulse test depends on geode-core test

Posted by kl...@apache.org.
GEODE-17: geode-pulse test depends on geode-core test


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

Branch: refs/heads/feature/GEODE-1255
Commit: f446bbe8987b389e2263e04edd4df2471afd5ca2
Parents: 3d8f54c
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Thu Apr 28 13:25:36 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 28 13:25:36 2016 -0700

----------------------------------------------------------------------
 geode-pulse/build.gradle | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f446bbe8/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index 5d8e890..e53a698 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -70,7 +70,7 @@ dependencies {
 
   testCompile project(':geode-junit')
   testCompile project(':geode-core')
-  testCompile project(path: ':geode-core', configuration: 'testOutput')
+  testCompile files(project(':geode-core').sourceSets.test.output)
 
   testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:' + project.'selenium.version'
   testCompile 'org.seleniumhq.selenium:selenium-api:' + project.'selenium.version'


[20/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2

# Conflicts:
#	geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7e8294d7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7e8294d7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7e8294d7

Branch: refs/heads/feature/GEODE-1255
Commit: 7e8294d736dbdc3103dacbb42e9be2519d4e3e81
Parents: 7927758 46535f2
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Wed Apr 27 14:13:38 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Apr 27 14:13:38 2016 -0700

----------------------------------------------------------------------
 geode-core/build.gradle                         |   22 -
 .../gemfire/cache/AttributesFactory.java        |   58 -
 .../gemfire/cache/AttributesMutator.java        |   14 -
 .../gemfire/cache/CustomEvictionAttributes.java |   78 -
 .../com/gemstone/gemfire/cache/DataPolicy.java  |   11 -
 .../gemfire/cache/EvictionCriteria.java         |   57 -
 .../com/gemstone/gemfire/cache/Operation.java   |   13 -
 .../gemfire/cache/RegionAttributes.java         |   23 -
 .../gemstone/gemfire/cache/RegionFactory.java   |   24 -
 .../internal/AsyncEventQueueFactoryImpl.java    |    5 -
 .../gemfire/cache/hdfs/HDFSIOException.java     |   52 -
 .../gemstone/gemfire/cache/hdfs/HDFSStore.java  |  341 --
 .../gemfire/cache/hdfs/HDFSStoreFactory.java    |  203 -
 .../gemfire/cache/hdfs/HDFSStoreMutator.java    |  196 -
 .../cache/hdfs/StoreExistsException.java        |   32 -
 .../cache/hdfs/internal/FailureTracker.java     |   96 -
 .../cache/hdfs/internal/FlushObserver.java      |   53 -
 .../hdfs/internal/HDFSBucketRegionQueue.java    | 1232 ------
 .../cache/hdfs/internal/HDFSEntriesSet.java     |  329 --
 .../cache/hdfs/internal/HDFSEventListener.java  |  179 -
 .../hdfs/internal/HDFSEventQueueFilter.java     |   73 -
 .../hdfs/internal/HDFSGatewayEventImpl.java     |  180 -
 .../hdfs/internal/HDFSIntegrationUtil.java      |  117 -
 .../HDFSParallelGatewaySenderQueue.java         |  471 ---
 .../hdfs/internal/HDFSStoreConfigHolder.java    |  559 ---
 .../cache/hdfs/internal/HDFSStoreCreation.java  |  198 -
 .../hdfs/internal/HDFSStoreFactoryImpl.java     |   77 -
 .../cache/hdfs/internal/HDFSStoreImpl.java      |  638 ---
 .../hdfs/internal/HDFSStoreMutatorImpl.java     |  200 -
 .../HDFSWriteOnlyStoreEventListener.java        |  184 -
 .../hdfs/internal/HoplogListenerForRegion.java  |   72 -
 .../cache/hdfs/internal/PersistedEventImpl.java |  202 -
 .../hdfs/internal/QueuedPersistentEvent.java    |   27 -
 .../hdfs/internal/SignalledFlushObserver.java   |  122 -
 .../internal/SortedHDFSQueuePersistedEvent.java |   86 -
 .../internal/SortedHoplogPersistedEvent.java    |  114 -
 .../UnsortedHDFSQueuePersistedEvent.java        |   76 -
 .../internal/UnsortedHoplogPersistedEvent.java  |   92 -
 .../hdfs/internal/hoplog/AbstractHoplog.java    |  357 --
 .../hoplog/AbstractHoplogOrganizer.java         |  430 --
 .../cache/hdfs/internal/hoplog/BloomFilter.java |   36 -
 .../hoplog/CloseTmpHoplogsTimerTask.java        |  108 -
 .../hdfs/internal/hoplog/CompactionStatus.java  |   72 -
 .../cache/hdfs/internal/hoplog/FlushStatus.java |   72 -
 .../internal/hoplog/HDFSCompactionManager.java  |  330 --
 .../internal/hoplog/HDFSFlushQueueArgs.java     |   93 -
 .../internal/hoplog/HDFSFlushQueueFunction.java |  287 --
 .../hoplog/HDFSForceCompactionArgs.java         |  107 -
 .../hoplog/HDFSForceCompactionFunction.java     |  129 -
 .../HDFSForceCompactionResultCollector.java     |  131 -
 .../hoplog/HDFSLastCompactionTimeFunction.java  |   56 -
 .../internal/hoplog/HDFSRegionDirector.java     |  480 ---
 .../hdfs/internal/hoplog/HDFSStoreDirector.java |   78 -
 .../hoplog/HDFSUnsortedHoplogOrganizer.java     |  447 ---
 .../hdfs/internal/hoplog/HFileSortedOplog.java  |  853 ----
 .../hoplog/HdfsSortedOplogOrganizer.java        | 2004 ----------
 .../cache/hdfs/internal/hoplog/Hoplog.java      |  263 --
 .../hdfs/internal/hoplog/HoplogConfig.java      |   74 -
 .../hdfs/internal/hoplog/HoplogListener.java    |   47 -
 .../hdfs/internal/hoplog/HoplogOrganizer.java   |  123 -
 .../hdfs/internal/hoplog/HoplogSetIterator.java |  166 -
 .../hdfs/internal/hoplog/HoplogSetReader.java   |  114 -
 .../internal/hoplog/SequenceFileHoplog.java     |  395 --
 .../hoplog/mapred/AbstractGFRecordReader.java   |  106 -
 .../internal/hoplog/mapred/GFInputFormat.java   |   95 -
 .../internal/hoplog/mapred/GFOutputFormat.java  |   75 -
 .../mapreduce/AbstractGFRecordReader.java       |  140 -
 .../hoplog/mapreduce/GFInputFormat.java         |  124 -
 .../hdfs/internal/hoplog/mapreduce/GFKey.java   |   72 -
 .../hoplog/mapreduce/GFOutputFormat.java        |  198 -
 .../hoplog/mapreduce/HDFSSplitIterator.java     |  197 -
 .../internal/hoplog/mapreduce/HoplogUtil.java   |  463 ---
 .../hoplog/mapreduce/RWSplitIterator.java       |   48 -
 .../hoplog/mapreduce/StreamSplitIterator.java   |   46 -
 .../org/apache/hadoop/io/SequenceFile.java      | 3726 ------------------
 .../query/internal/index/DummyQRegion.java      |    3 -
 .../cache/query/internal/index/HashIndex.java   |    1 -
 .../query/internal/index/IndexManager.java      |    8 -
 .../gemfire/cache/wan/GatewaySender.java        |    2 -
 .../gemstone/gemfire/internal/DSFIDFactory.java |    3 -
 .../internal/DataSerializableFixedID.java       |    1 -
 .../gemfire/internal/HeapDataOutputStream.java  |    3 -
 .../admin/remote/RemoteRegionAttributes.java    |   25 -
 .../cache/AbstractBucketRegionQueue.java        |   18 +-
 .../gemfire/internal/cache/AbstractRegion.java  |  147 -
 .../internal/cache/AbstractRegionEntry.java     |   36 +-
 .../internal/cache/AbstractRegionMap.java       |   86 +-
 .../gemfire/internal/cache/BucketAdvisor.java   |    1 -
 .../gemfire/internal/cache/BucketRegion.java    |  212 +-
 .../internal/cache/BucketRegionQueue.java       |    6 +-
 .../cache/CacheDistributionAdvisor.java         |   22 +-
 .../gemfire/internal/cache/CachePerfStats.java  |   75 -
 .../internal/cache/ColocationHelper.java        |    3 -
 .../cache/CustomEvictionAttributesImpl.java     |   35 -
 .../gemfire/internal/cache/DiskEntry.java       |    1 -
 .../gemfire/internal/cache/DistTXState.java     |    2 +-
 .../cache/DistributedCacheOperation.java        |    7 +-
 .../cache/DistributedPutAllOperation.java       |   33 +-
 .../internal/cache/DistributedRegion.java       |   31 +-
 .../cache/DistributedRemoveAllOperation.java    |   19 +-
 .../gemfire/internal/cache/EntryEventImpl.java  |   55 +-
 .../gemfire/internal/cache/EvictorService.java  |  284 --
 .../gemfire/internal/cache/FilterProfile.java   |   13 +-
 .../internal/cache/GemFireCacheImpl.java        |   99 -
 .../gemfire/internal/cache/HARegion.java        |   15 +-
 .../internal/cache/HDFSLRURegionMap.java        |  111 -
 .../gemfire/internal/cache/HDFSRegionMap.java   |   32 -
 .../internal/cache/HDFSRegionMapDelegate.java   |  540 ---
 .../internal/cache/HDFSRegionMapImpl.java       |   74 -
 .../gemfire/internal/cache/InternalCache.java   |    4 -
 .../internal/cache/InternalDataView.java        |   28 +-
 .../internal/cache/InternalRegionArguments.java |   16 -
 .../gemfire/internal/cache/LocalRegion.java     |  288 +-
 .../internal/cache/LocalRegionDataView.java     |   35 +-
 .../internal/cache/NonLocalRegionEntry.java     |   20 -
 .../gemstone/gemfire/internal/cache/Oplog.java  |   14 -
 .../gemfire/internal/cache/OverflowOplog.java   |    1 -
 .../internal/cache/PartitionedRegion.java       |  482 +--
 .../cache/PartitionedRegionDataStore.java       |   49 +-
 .../cache/PartitionedRegionDataView.java        |   27 +-
 .../gemfire/internal/cache/ProxyRegionMap.java  |   21 -
 .../gemfire/internal/cache/RegionEntry.java     |   20 -
 .../internal/cache/RegionMapFactory.java        |    6 -
 .../internal/cache/RemoteDestroyMessage.java    |    2 +-
 .../internal/cache/RemoteGetMessage.java        |    2 +-
 .../internal/cache/RemotePutMessage.java        |    2 +-
 .../gemfire/internal/cache/TXEntry.java         |    3 +-
 .../gemfire/internal/cache/TXEntryState.java    |   14 -
 .../gemfire/internal/cache/TXState.java         |   38 +-
 .../internal/cache/TXStateInterface.java        |   10 +-
 .../internal/cache/TXStateProxyImpl.java        |   30 +-
 .../gemfire/internal/cache/TXStateStub.java     |   32 +-
 .../gemfire/internal/cache/UpdateOperation.java |    3 -
 .../cache/UserSpecifiedRegionAttributes.java    |   24 +-
 .../cache/VMStatsDiskLRURegionEntryHeap.java    |    2 +-
 .../cache/VMStatsDiskLRURegionEntryOffHeap.java |    2 +-
 .../cache/VMStatsDiskRegionEntryHeap.java       |    2 +-
 .../cache/VMStatsDiskRegionEntryOffHeap.java    |    2 +-
 .../cache/VMStatsLRURegionEntryHeap.java        |    2 +-
 .../cache/VMStatsLRURegionEntryOffHeap.java     |    2 +-
 .../internal/cache/VMStatsRegionEntryHeap.java  |    2 +-
 .../cache/VMStatsRegionEntryOffHeap.java        |    2 +-
 .../cache/VMThinDiskLRURegionEntryHeap.java     |    2 +-
 .../cache/VMThinDiskLRURegionEntryOffHeap.java  |    2 +-
 .../cache/VMThinDiskRegionEntryHeap.java        |    2 +-
 .../cache/VMThinDiskRegionEntryOffHeap.java     |    2 +-
 .../cache/VMThinLRURegionEntryHeap.java         |    2 +-
 .../cache/VMThinLRURegionEntryOffHeap.java      |    2 +-
 .../internal/cache/VMThinRegionEntryHeap.java   |    2 +-
 .../cache/VMThinRegionEntryOffHeap.java         |    2 +-
 .../internal/cache/ValidatingDiskRegion.java    |   13 -
 .../VersionedStatsDiskLRURegionEntryHeap.java   |    2 +-
 ...VersionedStatsDiskLRURegionEntryOffHeap.java |    2 +-
 .../VersionedStatsDiskRegionEntryHeap.java      |    2 +-
 .../VersionedStatsDiskRegionEntryOffHeap.java   |    2 +-
 .../cache/VersionedStatsLRURegionEntryHeap.java |    2 +-
 .../VersionedStatsLRURegionEntryOffHeap.java    |    2 +-
 .../cache/VersionedStatsRegionEntryHeap.java    |    2 +-
 .../cache/VersionedStatsRegionEntryOffHeap.java |    2 +-
 .../VersionedThinDiskLRURegionEntryHeap.java    |    2 +-
 .../VersionedThinDiskLRURegionEntryOffHeap.java |    2 +-
 .../cache/VersionedThinDiskRegionEntryHeap.java |    2 +-
 .../VersionedThinDiskRegionEntryOffHeap.java    |    2 +-
 .../cache/VersionedThinLRURegionEntryHeap.java  |    2 +-
 .../VersionedThinLRURegionEntryOffHeap.java     |    2 +-
 .../cache/VersionedThinRegionEntryHeap.java     |    2 +-
 .../cache/VersionedThinRegionEntryOffHeap.java  |    2 +-
 .../cache/control/InternalResourceManager.java  |   10 -
 .../cache/partitioned/DestroyMessage.java       |    2 +-
 .../partitioned/FetchBulkEntriesMessage.java    |    2 +-
 .../internal/cache/partitioned/GetMessage.java  |   22 +-
 .../cache/partitioned/PutAllPRMessage.java      |   16 +-
 .../internal/cache/partitioned/PutMessage.java  |   12 +-
 .../persistence/soplog/ByteComparator.java      |   55 -
 .../persistence/soplog/CursorIterator.java      |   81 -
 .../soplog/DelegatingSerializedComparator.java  |   37 -
 .../soplog/HFileStoreStatistics.java            |  205 -
 .../persistence/soplog/KeyValueIterator.java    |   42 -
 .../soplog/SortedOplogStatistics.java           |  505 ---
 .../cache/persistence/soplog/SortedReader.java  |  255 --
 .../persistence/soplog/TrackedReference.java    |  153 -
 .../cache/tier/sockets/BaseCommand.java         |   11 +-
 .../internal/cache/tier/sockets/Message.java    |   16 -
 .../cache/tier/sockets/command/Destroy65.java   |    2 +-
 .../cache/tier/sockets/command/Get70.java       |    4 +-
 .../cache/tier/sockets/command/Request.java     |    4 +-
 .../internal/cache/tx/ClientTXRegionStub.java   |    4 +-
 .../cache/tx/DistributedTXRegionStub.java       |   14 +-
 .../cache/tx/PartitionedTXRegionStub.java       |    8 +-
 .../gemfire/internal/cache/tx/TXRegionStub.java |    4 +-
 .../cache/wan/AbstractGatewaySender.java        |   22 +-
 .../cache/wan/GatewaySenderAttributes.java      |    5 -
 .../cache/wan/GatewaySenderEventImpl.java       |    5 -
 ...rentParallelGatewaySenderEventProcessor.java |    3 -
 .../ConcurrentParallelGatewaySenderQueue.java   |   12 -
 .../ParallelGatewaySenderEventProcessor.java    |   22 +-
 .../parallel/ParallelGatewaySenderQueue.java    |   21 +-
 .../cache/xmlcache/AsyncEventQueueCreation.java |    9 -
 .../internal/cache/xmlcache/CacheCreation.java  |   39 +-
 .../internal/cache/xmlcache/CacheXml.java       |   31 -
 .../internal/cache/xmlcache/CacheXmlParser.java |  170 -
 .../xmlcache/RegionAttributesCreation.java      |   55 +-
 .../gemfire/internal/i18n/LocalizedStrings.java |   30 -
 .../internal/offheap/AbstractStoredObject.java  |    1 -
 .../internal/offheap/FreeListManager.java       |    7 -
 .../internal/offheap/OffHeapStoredObject.java   |    6 -
 .../internal/offheap/TinyStoredObject.java      |    4 -
 .../gemfire/internal/tcp/MsgStreamer.java       |   11 -
 .../management/DistributedRegionMXBean.java     |   11 -
 .../management/DistributedSystemMXBean.java     |    8 -
 .../gemfire/management/MemberMXBean.java        |    7 -
 .../gemfire/management/RegionMXBean.java        |   10 -
 .../internal/beans/DistributedRegionBridge.java |    5 -
 .../internal/beans/DistributedRegionMBean.java  |    5 -
 .../internal/beans/DistributedSystemBridge.java |   19 -
 .../internal/beans/DistributedSystemMBean.java  |    7 -
 .../internal/beans/HDFSRegionBridge.java        |  173 -
 .../management/internal/beans/MemberMBean.java  |    5 -
 .../internal/beans/MemberMBeanBridge.java       |   27 -
 .../internal/beans/PartitionedRegionBridge.java |   13 +-
 .../management/internal/beans/RegionMBean.java  |    5 -
 .../internal/beans/RegionMBeanBridge.java       |    5 -
 .../beans/stats/RegionClusterStatsMonitor.java  |    7 -
 .../cli/domain/RegionAttributesInfo.java        |   21 +-
 .../functions/DescribeHDFSStoreFunction.java    |   86 -
 .../cli/util/HDFSStoreNotFoundException.java    |   47 -
 .../cli/util/RegionAttributesNames.java         |    4 +-
 .../support/MemberMXBeanAdapter.java            |    5 -
 .../gemfire/pdx/internal/PdxReaderImpl.java     |    3 -
 .../geode.apache.org/schema/cache/cache-1.0.xsd |   31 -
 .../SignalledFlushObserverJUnitTest.java        |   97 -
 .../SortedListForAsyncQueueJUnitTest.java       |  564 ---
 .../GetOperationContextImplJUnitTest.java       |    1 -
 .../gemfire/cache30/Bug38741DUnitTest.java      |    2 +-
 .../gemfire/distributed/LocatorDUnitTest.java   |   31 +
 .../ParallelGatewaySenderQueueJUnitTest.java    |    2 +-
 .../domain/CacheElementJUnitTest.java           |    1 -
 .../internal/JUnit4DistributedTestCase.java     |    3 -
 .../sanctionedDataSerializables.txt             |   92 +-
 .../codeAnalysis/sanctionedSerializables.txt    |   15 +-
 .../cache/query/internal/cq/CqServiceImpl.java  |    2 +-
 geode-lucene/build.gradle                       |    4 -
 .../tools/pulse/internal/data/Cluster.java      |    9 -
 .../pulse/internal/data/PulseConstants.java     |    1 -
 .../internal/service/ClusterRegionService.java  |   11 -
 .../internal/service/ClusterRegionsService.java |   11 -
 .../service/ClusterSelectedRegionService.java   |    6 -
 .../scripts/pulsescript/PulseCallbacks.js       |    2 -
 .../webapp/scripts/pulsescript/clusterDetail.js |    7 +-
 .../controllers/PulseControllerJUnitTest.java   |    3 -
 .../gemfire/tools/pulse/tests/Region.java       |    9 +-
 geode-pulse/src/test/resources/test.properties  |    6 +-
 geode-rebalancer/build.gradle                   |    7 -
 .../cache/wan/GatewaySenderFactoryImpl.java     |    4 -
 .../internal/cache/UpdateVersionDUnitTest.java  |    6 +-
 255 files changed, 542 insertions(+), 25074 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/build.gradle
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedRegionMXBean.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/src/main/java/com/gemstone/gemfire/management/RegionMXBean.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConstants.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e8294d7/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/controllers/PulseControllerJUnitTest.java
----------------------------------------------------------------------


[46/50] [abbrv] incubator-geode git commit: GEODE-1240: Changed the test to use Awaitility with a maximum timeout period. This might work better than the time sensitive conditionals that this test uses.

Posted by kl...@apache.org.
GEODE-1240: Changed the test to use Awaitility with a maximum timeout period. This might work better than the time sensitive conditionals that this test uses.


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

Branch: refs/heads/feature/GEODE-1255
Commit: 1aa08cd54d2023ac9101c779c1e52024a2aa7967
Parents: b893abe
Author: Udo Kohlmeyer <uk...@pivotal.io>
Authored: Mon May 2 14:51:32 2016 +1000
Committer: Udo Kohlmeyer <uk...@pivotal.io>
Committed: Tue May 3 10:38:07 2016 +1000

----------------------------------------------------------------------
 .../cache30/ClientMembershipDUnitTest.java      | 347 ++++++++-----------
 1 file changed, 141 insertions(+), 206 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1aa08cd5/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java
index f8e036b..4652e74 100755
--- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java
@@ -81,23 +81,7 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
 
   private void waitForAcceptsInProgressToBe(final int target)
       throws Exception {
-//    WaitCriterion ev = new WaitCriterion() {
-//      String excuse;
-//
-//      public boolean done() {
-//        int actual = getAcceptsInProgress();
-//        if (actual == getAcceptsInProgress()) {
-//          return true;
-//        }
-//        excuse = "accepts in progress (" + actual + ") never became " + target;
-//        return false;
-//      }
-//
-//      public String description() {
-//        return excuse;
-//      }
-//    };
-    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100,TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
         .until(() -> {
           int actual = getAcceptsInProgress();
           if (actual == getAcceptsInProgress()) {
@@ -105,7 +89,6 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
           }
           return false;
         });
-//    Wait.waitForCriterion(ev, 60 * 1000, 200, true);
   }
 
   protected int getAcceptsInProgress() {
@@ -156,20 +139,20 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
         assertEquals(0, getAcceptsInProgress());
 
         System.out.println("creating mean socket");
-        vm0.invoke(createMeanSocket);
+        vm0.invoke("Connect to server with socket", () -> createMeanSocket);
         try {
           System.out.println("waiting to see it connect on server");
           waitForAcceptsInProgressToBe(1);
         } finally {
           System.out.println("closing mean socket");
-          vm0.invoke(closeMeanSocket);
+          vm0.invoke("close mean socket", () -> closeMeanSocket);
         }
         System.out.println("waiting to see accept to go away on server");
         waitForAcceptsInProgressToBe(0);
 
         // now try it without a close. Server should timeout the mean connect
         System.out.println("creating mean socket 2");
-        vm0.invoke(createMeanSocket);
+        vm0.invoke("Connect to server with socket", () -> createMeanSocket);
         try {
           System.out.println("waiting to see it connect on server 2");
           waitForAcceptsInProgressToBe(1);
@@ -177,7 +160,7 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
           waitForAcceptsInProgressToBe(0);
         } finally {
           System.out.println("closing mean socket 2");
-          vm0.invoke(closeMeanSocket);
+          vm0.invoke("close mean socket", () -> closeMeanSocket);
         }
 
         //       SerializableRunnable denialOfService = new CacheSerializableRunnable("Do lots of connects") {
@@ -247,28 +230,25 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     final boolean[] isClient = new boolean[3];
 
     ClientMembershipListener listener = new ClientMembershipListener() {
-      public synchronized void memberJoined(ClientMembershipEvent event) {
+      public void memberJoined(ClientMembershipEvent event) {
         fired[JOINED] = true;
         member[JOINED] = event.getMember();
         memberId[JOINED] = event.getMemberId();
         isClient[JOINED] = event.isClient();
-        notify();
       }
 
-      public synchronized void memberLeft(ClientMembershipEvent event) {
+      public void memberLeft(ClientMembershipEvent event) {
         fired[LEFT] = true;
         member[LEFT] = event.getMember();
         memberId[LEFT] = event.getMemberId();
         isClient[LEFT] = event.isClient();
-        notify();
       }
 
-      public synchronized void memberCrashed(ClientMembershipEvent event) {
+      public void memberCrashed(ClientMembershipEvent event) {
         fired[CRASHED] = true;
         member[CRASHED] = event.getMember();
         memberId[CRASHED] = event.getMemberId();
         isClient[CRASHED] = event.isClient();
-        notify();
       }
     };
     ClientMembership.registerClientMembershipListener(listener);
@@ -276,11 +256,12 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // test JOIN for server
     DistributedMember serverJoined = new TestDistributedMember("serverJoined");
     InternalClientMembership.notifyJoined(serverJoined, SERVER);
-    synchronized (listener) {
-      if (!fired[JOINED]) {
-        listener.wait(2000);
-      }
-    }
+
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED];
+        });
+
     assertTrue(fired[JOINED]);
     assertEquals(serverJoined, member[JOINED]);
     assertEquals(serverJoined.getId(), memberId[JOINED]);
@@ -296,11 +277,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // test JOIN for client
     DistributedMember clientJoined = new TestDistributedMember("clientJoined");
     InternalClientMembership.notifyJoined(clientJoined, CLIENT);
-    synchronized (listener) {
-      if (!fired[JOINED]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED];
+        });
+
     assertTrue(fired[JOINED]);
     assertEquals(clientJoined, member[JOINED]);
     assertEquals(clientJoined.getId(), memberId[JOINED]);
@@ -316,11 +297,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // test LEFT for server
     DistributedMember serverLeft = new TestDistributedMember("serverLeft");
     InternalClientMembership.notifyLeft(serverLeft, SERVER);
-    synchronized (listener) {
-      if (!fired[LEFT]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[LEFT];
+        });
+
     assertFalse(fired[JOINED]);
     assertNull(memberId[JOINED]);
     assertFalse(isClient[JOINED]);
@@ -336,11 +317,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // test LEFT for client
     DistributedMember clientLeft = new TestDistributedMember("clientLeft");
     InternalClientMembership.notifyLeft(clientLeft, CLIENT);
-    synchronized (listener) {
-      if (!fired[LEFT]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[LEFT];
+        });
+
     assertFalse(fired[JOINED]);
     assertNull(memberId[JOINED]);
     assertFalse(isClient[JOINED]);
@@ -356,11 +337,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // test CRASHED for server
     DistributedMember serverCrashed = new TestDistributedMember("serverCrashed");
     InternalClientMembership.notifyCrashed(serverCrashed, SERVER);
-    synchronized (listener) {
-      if (!fired[CRASHED]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[CRASHED];
+        });
+
     assertFalse(fired[JOINED]);
     assertNull(memberId[JOINED]);
     assertFalse(isClient[JOINED]);
@@ -376,11 +357,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // test CRASHED for client
     DistributedMember clientCrashed = new TestDistributedMember("clientCrashed");
     InternalClientMembership.notifyCrashed(clientCrashed, CLIENT);
-    synchronized (listener) {
-      if (!fired[CRASHED]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[CRASHED];
+        });
+
     assertFalse(fired[JOINED]);
     assertNull(memberId[JOINED]);
     assertFalse(isClient[JOINED]);
@@ -423,12 +404,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     getSystem();
 
     ClientMembershipListener listener = new ClientMembershipListener() {
-      public synchronized void memberJoined(ClientMembershipEvent event) {
+      public void memberJoined(ClientMembershipEvent event) {
         fired[0] = true;
         member[0] = event.getMember();
         memberId[0] = event.getMemberId();
         isClient[0] = event.isClient();
-        notify();
       }
 
       public void memberLeft(ClientMembershipEvent event) {
@@ -442,11 +422,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // fire event to make sure listener is registered
     DistributedMember clientJoined = new TestDistributedMember("clientJoined");
     InternalClientMembership.notifyJoined(clientJoined, true);
-    synchronized (listener) {
-      if (!fired[0]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED];
+        });
+
     assertTrue(fired[0]);
     assertEquals(clientJoined, member[0]);
     assertEquals(clientJoined.getId(), memberId[0]);
@@ -460,9 +440,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // unregister and verify listener is not notified
     ClientMembership.unregisterClientMembershipListener(listener);
     InternalClientMembership.notifyJoined(clientJoined, true);
-    synchronized (listener) {
-      listener.wait(20);
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS)
+        .until(() -> {
+          return true;
+        });
+
     assertFalse(fired[0]);
     assertNull(member[0]);
     assertNull(memberId[0]);
@@ -482,7 +464,7 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     for (int i = 0; i < NUM_LISTENERS; i++) {
       final int whichListener = i;
       listeners[i] = new ClientMembershipListener() {
-        public synchronized void memberJoined(ClientMembershipEvent event) {
+        public void memberJoined(ClientMembershipEvent event) {
           assertFalse(fired[whichListener]);
           assertNull(member[whichListener]);
           assertNull(memberId[whichListener]);
@@ -491,7 +473,6 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
           member[whichListener] = event.getMember();
           memberId[whichListener] = event.getMemberId();
           isClient[whichListener] = event.isClient();
-          notify();
         }
 
         public void memberLeft(ClientMembershipEvent event) {
@@ -823,13 +804,8 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     DistributedMember test = new TestDistributedMember("test");
     InternalClientMembership.notifyJoined(test, SERVER);
 
-    Awaitility.await().pollInterval(50,TimeUnit.MILLISECONDS).timeout(300,TimeUnit.SECONDS)
-        .pollDelay(50,TimeUnit.MILLISECONDS).until(()->fired[JOINED] || fired[CRASHED]);
-//    synchronized (listener) {
-//      if (!fired[JOINED] && !fired[CRASHED]) {
-//        listener.wait(2000);
-//      }
-//    }
+    Awaitility.await().pollInterval(50, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .pollDelay(50, TimeUnit.MILLISECONDS).until(() -> fired[JOINED] || fired[CRASHED]);
 
     assertTrue(fired[JOINED]);
     assertEquals(test, member[JOINED]);
@@ -863,13 +839,8 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
       Assert.fail("While creating Region on Edge", ex);
     }
 
-    Awaitility.await().pollInterval(50,TimeUnit.MILLISECONDS).timeout(300,TimeUnit.SECONDS)
-        .pollDelay(50,TimeUnit.MILLISECONDS).until(()->fired[JOINED] || fired[CRASHED]);
-//    synchronized(listener) {
-//      if (!fired[JOINED] && !fired[CRASHED]) {
-//        listener.wait(60 * 1000);
-//      }
-//    }
+    Awaitility.await().pollInterval(50, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .pollDelay(50, TimeUnit.MILLISECONDS).until(() -> fired[JOINED] || fired[CRASHED]);
 
     System.out.println("[testClientMembershipEventsInClient] assert client detected server join");
 
@@ -900,14 +871,8 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
 
     vm0.invoke("Stop BridgeServer", () -> stopBridgeServers(getCache()));
 
-//    synchronized (listener) {
-//      if (!fired[JOINED] && !fired[CRASHED]) {
-//        listener.wait(60 * 1000);
-//      }
-//    }
-
-    Awaitility.await().pollInterval(50,TimeUnit.MILLISECONDS).timeout(300,TimeUnit.SECONDS)
-        .pollDelay(50,TimeUnit.MILLISECONDS).until(()->fired[JOINED] || fired[CRASHED]);
+    Awaitility.await().pollInterval(50, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .pollDelay(50, TimeUnit.MILLISECONDS).until(() -> fired[JOINED] || fired[CRASHED]);
 
     System.out.println("[testClientMembershipEventsInClient] assert client detected server departure");
     assertFalse(fired[JOINED]);
@@ -936,14 +901,9 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
         fail("Failed to start CacheServer on VM1: " + e.getMessage());
       }
     });
-//    synchronized (listener) {
-//      if (!fired[JOINED] && !fired[CRASHED]) {
-//        listener.wait(60 * 1000);
-//      }
-//    }
 
-    Awaitility.await().pollInterval(50,TimeUnit.MILLISECONDS).timeout(300,TimeUnit.SECONDS)
-        .pollDelay(50,TimeUnit.MILLISECONDS).until(()->fired[JOINED] || fired[CRASHED]);
+    Awaitility.await().pollInterval(50, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .pollDelay(50, TimeUnit.MILLISECONDS).until(() -> fired[JOINED] || fired[CRASHED]);
 
     System.out.println("[testClientMembershipEventsInClient] assert client detected server recovery");
     assertTrue(fired[JOINED]);
@@ -1041,11 +1001,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     System.out.println("[testClientMembershipEventsInServer] sanity check");
     DistributedMember test = new TestDistributedMember("test");
     InternalClientMembership.notifyJoined(test, CLIENT);
-    synchronized (listener) {
-      if (!fired[JOINED] && !fired[LEFT] && !fired[CRASHED]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED] || fired[LEFT] || fired[CRASHED];
+        });
+
     assertTrue(fired[JOINED]);
     assertEquals(test, member[JOINED]);
     assertEquals(test.getId(), memberId[JOINED]);
@@ -1083,11 +1043,10 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     DistributedMember clientMember = (DistributedMember) vm0.invoke(createConnectionPool);
     String clientMemberId = clientMember.toString();
 
-    synchronized (listener) {
-      if (!fired[JOINED] && !fired[LEFT] && !fired[CRASHED]) {
-        listener.wait(60000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED] || fired[LEFT] || fired[CRASHED];
+        });
 
     System.out.println("[testClientMembershipEventsInServer] assert server detected client join");
     assertTrue(fired[JOINED]);
@@ -1121,11 +1080,10 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
       }
     });
 
-    synchronized (listener) {
-      if (!fired[JOINED] && !fired[LEFT] && !fired[CRASHED]) {
-        listener.wait(60000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED] || fired[LEFT] || fired[CRASHED];
+        });
 
     System.out.println("[testClientMembershipEventsInServer] assert server detected client left");
     assertFalse(fired[JOINED]);
@@ -1145,11 +1103,10 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // reconnect bridge client to test for crashed event
     clientMemberId = vm0.invoke(createConnectionPool).toString();
 
-    synchronized (listener) {
-      if (!fired[JOINED] && !fired[LEFT] && !fired[CRASHED]) {
-        listener.wait(60000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED] || fired[LEFT] || fired[CRASHED];
+        });
 
     System.out.println("[testClientMembershipEventsInServer] assert server detected client re-join");
     assertTrue(fired[JOINED]);
@@ -1183,11 +1140,10 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
         }
       });
 
-      synchronized (listener) {
-        if (!fired[JOINED] && !fired[LEFT] && !fired[CRASHED]) {
-          listener.wait(60000);
-        }
-      }
+      Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+          .until(() -> {
+            return fired[JOINED] || fired[LEFT] || fired[CRASHED];
+          });
 
       System.out.println("[testClientMembershipEventsInServer] assert server detected client crashed");
       assertFalse(fired[JOINED]);
@@ -1232,7 +1188,7 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
 
     // create and register ClientMembershipListener in controller vm...
     ClientMembershipListener listener = new ClientMembershipListener() {
-      public synchronized void memberJoined(ClientMembershipEvent event) {
+      public void memberJoined(ClientMembershipEvent event) {
         assertFalse(fired[JOINED]);
         assertNull(member[JOINED]);
         assertNull(memberId[JOINED]);
@@ -1241,13 +1197,12 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
         member[JOINED] = event.getMember();
         memberId[JOINED] = event.getMemberId();
         isClient[JOINED] = event.isClient();
-        notifyAll();
       }
 
-      public synchronized void memberLeft(ClientMembershipEvent event) {
+      public void memberLeft(ClientMembershipEvent event) {
       }
 
-      public synchronized void memberCrashed(ClientMembershipEvent event) {
+      public void memberCrashed(ClientMembershipEvent event) {
       }
     };
     ClientMembership.registerClientMembershipListener(listener);
@@ -1262,11 +1217,10 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     // assert that event is fired while connected
     DistributedMember serverJoined = new TestDistributedMember("serverJoined");
     InternalClientMembership.notifyJoined(serverJoined, SERVER);
-    synchronized (listener) {
-      if (!fired[JOINED]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED];
+        });
     assertTrue(fired[JOINED]);
     assertEquals(serverJoined, member[JOINED]);
     assertEquals(serverJoined.getId(), memberId[JOINED]);
@@ -1277,9 +1231,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     disconnectFromDS();
 
     InternalClientMembership.notifyJoined(serverJoined, SERVER);
-    synchronized (listener) {
-      listener.wait(20);
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS)
+        .until(() -> {
+          return true;
+        });
+
     assertFalse(fired[JOINED]);
     assertNull(member[JOINED]);
     assertNull(memberId[JOINED]);
@@ -1292,11 +1248,11 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     assertTrue(sys.isConnected());
 
     InternalClientMembership.notifyJoined(serverJoined, SERVER);
-    synchronized (listener) {
-      if (!fired[JOINED]) {
-        listener.wait(2000);
-      }
-    }
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
+          return fired[JOINED];
+        });
+
     assertTrue(fired[JOINED]);
     assertEquals(serverJoined, member[JOINED]);
     assertEquals(serverJoined.getId(), memberId[JOINED]);
@@ -1360,23 +1316,17 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
 
     {
       final int expectedClientCount = clientMemberIds.size();
-      WaitCriterion wc = new WaitCriterion() {
-        public String description() {
-          return "wait for clients";
-        }
-
-        public boolean done() {
-          Map connectedClients = InternalClientMembership.getConnectedClients(false);
-          if (connectedClients == null) {
-            return false;
-          }
-          if (connectedClients.size() != expectedClientCount) {
-            return false;
-          }
-          return true;
-        }
-      };
-      Wait.waitForCriterion(wc, 30000, 100, false);
+      Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+          .until(() -> {
+            Map connectedClients = InternalClientMembership.getConnectedClients(false);
+            if (connectedClients == null) {
+              return false;
+            }
+            if (connectedClients.size() != expectedClientCount) {
+              return false;
+            }
+            return true;
+          });
     }
 
     Map connectedClients = InternalClientMembership.getConnectedClients(false);
@@ -1406,32 +1356,30 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     for (int i = 0; i < host.getVMCount(); i++) {
       final int whichVM = i;
       final VM vm = Host.getHost(0).getVM(i);
-      vm.invoke(new CacheSerializableRunnable("Create bridge server") {
-        public void run2() throws CacheException {
-          // create BridgeServer in controller vm...
-          System.out.println("[testGetConnectedServers] Create BridgeServer");
-          getSystem();
-          AttributesFactory factory = new AttributesFactory();
-          factory.setScope(Scope.LOCAL);
-          Region region = createRegion(name + "_" + whichVM, factory.create());
-          assertNotNull(region);
-          assertNotNull(getRootRegion().getSubregion(name + "_" + whichVM));
-          region.put("KEY-1", "VAL-1");
+      vm.invoke("Create bridge server", () -> {
+        // create BridgeServer in controller vm...
+        System.out.println("[testGetConnectedServers] Create BridgeServer");
+        getSystem();
+        AttributesFactory factory = new AttributesFactory();
+        factory.setScope(Scope.LOCAL);
+        Region region = createRegion(name + "_" + whichVM, factory.create());
+        assertNotNull(region);
+        assertNotNull(getRootRegion().getSubregion(name + "_" + whichVM));
+        region.put("KEY-1", "VAL-1");
 
-          try {
-            testGetConnectedServers_port = startBridgeServer(0);
-          } catch (IOException e) {
-            com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().error("startBridgeServer threw IOException", e);
-            fail("startBridgeServer threw IOException " + e.getMessage());
-          }
+        try {
+          testGetConnectedServers_port = startBridgeServer(0);
+        } catch (IOException e) {
+          com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().error("startBridgeServer threw IOException", e);
+          fail("startBridgeServer threw IOException " + e.getMessage());
+        }
 
-          assertTrue(testGetConnectedServers_port != 0);
+        assertTrue(testGetConnectedServers_port != 0);
 
-          System.out.println("[testGetConnectedServers] port=" +
-              ports[whichVM]);
-          System.out.println("[testGetConnectedServers] serverMemberId=" +
-              getDistributedMember());
-        }
+        System.out.println("[testGetConnectedServers] port=" +
+            ports[whichVM]);
+        System.out.println("[testGetConnectedServers] serverMemberId=" +
+            getDistributedMember());
       });
       ports[whichVM] = vm.invoke("getTestGetConnectedServers_port",
           () -> ClientMembershipDUnitTest.getTestGetConnectedServers_port());
@@ -1459,14 +1407,9 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
       region.get("KEY-1");
     }
 
-    {
-      final int expectedVMCount = host.getVMCount();
-      WaitCriterion wc = new WaitCriterion() {
-        public String description() {
-          return "wait for pools and servers";
-        }
-
-        public boolean done() {
+    final int expectedVMCount = host.getVMCount();
+    Awaitility.await().pollInterval(100, TimeUnit.MILLISECONDS).pollDelay(100, TimeUnit.MILLISECONDS).timeout(300, TimeUnit.SECONDS)
+        .until(() -> {
           if (PoolManager.getAll().size() != expectedVMCount) {
             return false;
           }
@@ -1478,15 +1421,9 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
             return false;
           }
           return true;
-        }
-      };
-      Wait.waitForCriterion(wc, 60000, 100, false);
-    }
-
-    {
-      assertEquals(host.getVMCount(), PoolManager.getAll().size());
+        });
 
-    }
+    assertEquals(host.getVMCount(), PoolManager.getAll().size());
 
     Map connectedServers = InternalClientMembership.getConnectedServers();
     assertNotNull(connectedServers);
@@ -1583,15 +1520,13 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
     for (int i = 0; i < host.getVMCount(); i++) {
       final int whichVM = i;
       final VM vm = Host.getHost(0).getVM(i);
-      vm.invoke(new CacheSerializableRunnable("Create bridge server") {
-        public void run2() throws CacheException {
-          Map clients = InternalClientMembership.getConnectedClients(true);
-          assertNotNull(clients);
-          testGetNotifiedClients_clientCount = clients.size();
-          if (testGetNotifiedClients_clientCount > 0) {
-            // assert that the clientMemberId matches
-            assertEquals(clientMemberId, clients.keySet().iterator().next());
-          }
+      vm.invoke("Create bridge server", () -> {
+        Map clients = InternalClientMembership.getConnectedClients(true);
+        assertNotNull(clients);
+        testGetNotifiedClients_clientCount = clients.size();
+        if (testGetNotifiedClients_clientCount > 0) {
+          // assert that the clientMemberId matches
+          assertEquals(clientMemberId, clients.keySet().iterator().next());
         }
       });
       clientCounts[whichVM] = vm.invoke("getTestGetNotifiedClients_clientCount",


[48/50] [abbrv] incubator-geode git commit: GEODE-17 - use null instead of "NULL" for regionName

Posted by kl...@apache.org.
GEODE-17 - use null instead of "NULL" for regionName

* create an example JSONAuthorization that initialize with a default security.json file.


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

Branch: refs/heads/feature/GEODE-1255
Commit: b8fc3c706ef672c48a04f7c6ec4bf593414c6494
Parents: 51e4e71
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon May 2 07:26:27 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Tue May 3 07:55:25 2016 -0700

----------------------------------------------------------------------
 .../security/ResourceOperationContext.java      |   9 +-
 .../security/ExampleJSONAuthorization.java      | 197 +++++++++++++++++++
 .../internal/security/JSONAuthorization.java    |   5 +-
 .../ResourceOperationContextJUnitTest.java      |   8 +-
 4 files changed, 203 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b8fc3c70/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
index 7f6f72e..2e46104 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
@@ -18,8 +18,6 @@ package com.gemstone.gemfire.management.internal.security;
 
 import com.gemstone.gemfire.cache.operations.OperationContext;
 
-import org.apache.shiro.authz.Permission;
-
 /**
  * This is base class for OperationContext for resource (JMX and CLI) operations
  */
@@ -30,7 +28,7 @@ public class ResourceOperationContext extends OperationContext {
   private Resource resource = Resource.NULL;
   private OperationCode operation = OperationCode.NULL;
 
-  private String regionName = "NULL";
+  private String regionName = null;
 
   public ResourceOperationContext() {
     this(null, null, null);
@@ -81,9 +79,4 @@ public class ResourceOperationContext extends OperationContext {
   public Object getOperationResult() {
     return this.opResult;
   }
-
-  @Override
-  public boolean implies(Permission p){
-    return super.implies(p);
-  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b8fc3c70/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ExampleJSONAuthorization.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ExampleJSONAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ExampleJSONAuthorization.java
new file mode 100644
index 0000000..f34be0b
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ExampleJSONAuthorization.java
@@ -0,0 +1,197 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import javax.management.remote.JMXPrincipal;
+
+import com.gemstone.gemfire.LogWriter;
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.operations.OperationContext;
+import com.gemstone.gemfire.distributed.DistributedMember;
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.security.AccessControl;
+import com.gemstone.gemfire.security.AuthenticationFailedException;
+import com.gemstone.gemfire.security.Authenticator;
+import com.gemstone.gemfire.security.NotAuthorizedException;
+
+import org.apache.commons.io.IOUtils;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class ExampleJSONAuthorization implements AccessControl, Authenticator {
+
+  public static class Role {
+    List<OperationContext> permissions = new ArrayList<>();
+    String name;
+    String serverGroup;
+  }
+
+  public static class User {
+    String name;
+    Set<Role> roles = new HashSet<>();
+    String pwd;
+  }
+
+  private static Map<String, User> acl = null;
+
+  public static ExampleJSONAuthorization create() throws IOException, JSONException {
+    return new ExampleJSONAuthorization();
+  }
+
+  public ExampleJSONAuthorization() throws IOException, JSONException {
+    setUpWithJsonFile("security.json");
+  }
+
+  public static void setUpWithJsonFile(String jsonFileName) throws IOException, JSONException {
+    InputStream input = ExampleJSONAuthorization.class.getResourceAsStream(jsonFileName);
+    if(input==null){
+      throw new RuntimeException("Could not find resource " + jsonFileName);
+    }
+
+    StringWriter writer = new StringWriter();
+    IOUtils.copy(input, writer, "UTF-8");
+    String json = writer.toString();
+    readSecurityDescriptor(json);
+  }
+
+  private static void readSecurityDescriptor(String json) throws IOException, JSONException {
+    JSONObject jsonBean = new JSONObject(json);
+    acl = new HashMap<>();
+    Map<String, Role> roleMap = readRoles(jsonBean);
+    readUsers(acl, jsonBean, roleMap);
+  }
+
+  private static void readUsers(Map<String, User> acl, JSONObject jsonBean, Map<String, Role> roleMap)
+      throws JSONException {
+    JSONArray array = jsonBean.getJSONArray("users");
+    for (int i = 0; i < array.length(); i++) {
+      JSONObject obj = array.getJSONObject(i);
+      User user = new User();
+      user.name = obj.getString("name");
+      if (obj.has("password")) {
+        user.pwd = obj.getString("password");
+      } else {
+        user.pwd = user.name;
+      }
+
+      JSONArray ops = obj.getJSONArray("roles");
+      for (int j = 0; j < ops.length(); j++) {
+        String roleName = ops.getString(j);
+        user.roles.add(roleMap.get(roleName));
+      }
+      acl.put(user.name, user);
+    }
+  }
+
+  private static Map<String, Role> readRoles(JSONObject jsonBean) throws JSONException {
+    Map<String, Role> roleMap = new HashMap<>();
+    JSONArray array = jsonBean.getJSONArray("roles");
+    for (int i = 0; i < array.length(); i++) {
+      JSONObject obj = array.getJSONObject(i);
+      Role role = new Role();
+      role.name = obj.getString("name");
+      String regionNames = null;
+      if(obj.has("regions")) {
+        regionNames = obj.getString("regions");
+      }
+      JSONArray ops = obj.getJSONArray("operationsAllowed");
+      for (int j = 0; j < ops.length(); j++) {
+        String[] parts = ops.getString(j).split(":");
+        if(regionNames!=null) {
+          role.permissions.add(new ResourceOperationContext(parts[0], parts[1], regionNames));
+        }
+        else
+          role.permissions.add(new ResourceOperationContext(parts[0], parts[1], "*"));
+      }
+
+      roleMap.put(role.name, role);
+
+      if (obj.has("serverGroup")) {
+        role.serverGroup = obj.getString("serverGroup");
+      }
+    }
+
+    return roleMap;
+  }
+
+  public static Map<String, User> getAcl() {
+    return acl;
+  }
+
+  private Principal principal = null;
+
+  @Override
+  public void close() {
+
+  }
+
+  @Override
+  public boolean authorizeOperation(String region, OperationContext context) {
+    if (principal == null)
+      return false;
+
+    User user = acl.get(principal.getName());
+    if(user == null)
+      return false; // this user is not authorized to do anything
+
+    // check if the user has this permission defined in the context
+    for(Role role:acl.get(user.name).roles) {
+      for (OperationContext permitted : role.permissions) {
+        if (permitted.implies(context)) {
+          return true;
+        }
+      }
+    }
+
+    return false;
+  }
+
+  @Override
+  public void init(Principal principal, DistributedMember arg1, Cache arg2) throws NotAuthorizedException {
+    this.principal = principal;
+  }
+
+  @Override
+  public Principal authenticate(Properties props, DistributedMember arg1) throws AuthenticationFailedException {
+    String user = props.getProperty(ResourceConstants.USER_NAME);
+    String pwd = props.getProperty(ResourceConstants.PASSWORD);
+    User userObj = acl.get(user);
+    if (userObj == null) throw new AuthenticationFailedException("Wrong username/password");
+    LogService.getLogger().info("User=" + user + " pwd=" + pwd);
+    if (user != null && !userObj.pwd.equals(pwd) && !"".equals(user))
+      throw new AuthenticationFailedException("Wrong username/password");
+    return new JMXPrincipal(user);
+  }
+
+  @Override
+  public void init(Properties arg0, LogWriter arg1, LogWriter arg2) throws AuthenticationFailedException {
+
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b8fc3c70/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
index 7f1d2bf..e14d1de 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
@@ -64,10 +64,7 @@ public class JSONAuthorization implements AccessControl, Authenticator {
     return new JSONAuthorization();
   }
 
-  public JSONAuthorization() throws IOException, JSONException {
-    // initialize with a default json file
-    //setUpWithJsonFile("shiro-ini.json");
-  }
+  public JSONAuthorization() throws IOException, JSONException {}
 
   public JSONAuthorization(String jsonFileName) throws IOException, JSONException {
     setUpWithJsonFile(jsonFileName);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b8fc3c70/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
index 318d327..9e2e41a 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContextJUnitTest.java
@@ -37,7 +37,7 @@ public class ResourceOperationContextJUnitTest {
     context = new ResourceOperationContext();
     assertEquals(Resource.NULL, context.getResource());
     assertEquals(OperationCode.NULL, context.getOperationCode());
-    assertEquals("NULL", context.getRegionName());
+    assertEquals(null, context.getRegionName());
   }
 
   @Test
@@ -51,17 +51,17 @@ public class ResourceOperationContextJUnitTest {
     context = new ResourceOperationContext(null, null, null);
     assertEquals(Resource.NULL, context.getResource());
     assertEquals(OperationCode.NULL, context.getOperationCode());
-    assertEquals("NULL", context.getRegionName());
+    assertEquals(null, context.getRegionName());
 
     context = new ResourceOperationContext(null, null);
     assertEquals(Resource.NULL, context.getResource());
     assertEquals(OperationCode.NULL, context.getOperationCode());
-    assertEquals("NULL", context.getRegionName());
+    assertEquals(null, context.getRegionName());
 
     context = new ResourceOperationContext("DATA", null, null);
     assertEquals(Resource.DATA, context.getResource());
     assertEquals(OperationCode.NULL, context.getOperationCode());
-    assertEquals("NULL", context.getRegionName());
+    assertEquals(null, context.getRegionName());
 
     context = new ResourceOperationContext(null, "MANAGE", "REGIONA");
     assertEquals(Resource.NULL, context.getResource());


[13/50] [abbrv] incubator-geode git commit: GEODE-17: fix test failures due to security configuration with no setter specified

Posted by kl...@apache.org.
GEODE-17: fix test failures due to security configuration with no setter specified


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7e9d2494
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7e9d2494
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7e9d2494

Branch: refs/heads/feature/GEODE-1255
Commit: 7e9d2494dabb9e592fc4d4119bcefcafee3e37ad
Parents: 047bf8b
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Sun Apr 24 19:32:36 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Sun Apr 24 19:32:36 2016 -0700

----------------------------------------------------------------------
 .../internal/AbstractDistributionConfig.java    | 23 +++++++++++++++-----
 .../internal/DistributionConfigJUnitTest.java   | 14 ++++++++++++
 2 files changed, 32 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e9d2494/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
index e8dafb8..e1881e3 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
@@ -519,6 +519,13 @@ public abstract class AbstractDistributionConfig
       return;
     }
 
+    // special case: log-level and security-log-level attributes are String type, but the setter accepts int
+    if(attName.equalsIgnoreCase(LOG_LEVEL_NAME) || attName.equalsIgnoreCase(SECURITY_LOG_LEVEL_NAME)){
+      if(attValue instanceof String) {
+        attValue = LogWriterImpl.levelNameToCode((String) attValue);
+      }
+    }
+
     if (attName.startsWith(SECURITY_PREFIX_NAME)) {
       this.setSecurity(attName,attValue.toString());
     }
@@ -527,13 +534,19 @@ public abstract class AbstractDistributionConfig
       this.setSSLProperty(attName, attValue.toString());
     }
 
-    // special case: log-level and security-log-level attributes are String type, but the setter accepts int
-    if(attName.equalsIgnoreCase(LOG_LEVEL_NAME) || attName.equalsIgnoreCase(SECURITY_LOG_LEVEL_NAME)){
-      attValue = LogWriterImpl.levelNameToCode((String)attValue);
-    }
-
     Method setter = setters.get(attName);
     if (setter == null) {
+      // if we cann't find the defined setter, look for two more special cases
+      if (attName.startsWith(SECURITY_PREFIX_NAME)) {
+        this.setSecurity(attName,(String)attValue);
+        getAttSourceMap().put(attName, source);
+        return;
+      }
+      if (attName.startsWith(SSL_SYSTEM_PROPS_NAME) || attName.startsWith(SYS_PROP_NAME)) {
+        this.setSSLProperty(attName, (String) attValue);
+        getAttSourceMap().put(attName, source);
+        return;
+      }
       throw new InternalGemFireException(LocalizedStrings.AbstractDistributionConfig_UNHANDLED_ATTRIBUTE_NAME_0.toLocalizedString(attName));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7e9d2494/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
index 3e7008d..31acc47 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
@@ -330,6 +330,20 @@ public class DistributionConfigJUnitTest {
     assertEquals(config.getSecurityProps().size(), 3);
   }
 
+  @Test
+  public void testSecurityPropsWithNoSetter(){
+    Properties props = new Properties();
+    props.put(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME, JSONAuthorization.class.getName() + ".create");
+    props.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
+    props.put(DistributionConfig.SECURITY_LOG_LEVEL_NAME, "config");
+    // add another non-security property to verify it won't get put in the security properties
+    props.put(DistributionConfig.ACK_WAIT_THRESHOLD_NAME, 2);
+    props.put("security-username", "testName");
+
+    DistributionConfig config = new DistributionConfigImpl(props);
+    assertEquals(config.getSecurityProps().size(), 4);
+  }
+
   public final static Map<Class<?>, Class<?>> classMap = new HashMap<Class<?>, Class<?>>();
 
   static {


[39/50] [abbrv] incubator-geode git commit: GEODE-510 added cache-server port to 0 and added wait for client queue to pause

Posted by kl...@apache.org.
GEODE-510 added cache-server port to 0 and added wait for client queue to pause


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/15b1e70e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/15b1e70e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/15b1e70e

Branch: refs/heads/feature/GEODE-1255
Commit: 15b1e70e7de5c8cb27508fc0e7d9973722013170
Parents: 29fde0d
Author: Hitesh Khamesra <hi...@yahoo.com>
Authored: Fri Apr 29 15:57:50 2016 -0700
Committer: Hitesh Khamesra <hi...@yahoo.com>
Committed: Fri Apr 29 15:57:50 2016 -0700

----------------------------------------------------------------------
 .../internal/cache/ha/Bug48571DUnitTest.java    | 34 ++++++++++++++++++--
 1 file changed, 31 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/15b1e70e/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug48571DUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug48571DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug48571DUnitTest.java
index a81d9c1..02f7014 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug48571DUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug48571DUnitTest.java
@@ -16,6 +16,8 @@
  */
 package com.gemstone.gemfire.internal.cache.ha;
 
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.Properties;
 
 import org.junit.experimental.categories.Category;
@@ -90,7 +92,32 @@ public class Bug48571DUnitTest extends DistributedTestCase {
     }
   }
 
-  @Category(FlakyTest.class) // GEODE-510: random ports, async actions, AsyncInvocation orphan
+  private static void verifyProxyHasBeenPaused() {
+    WaitCriterion criterion = new WaitCriterion() {
+      @Override
+      public boolean done() {
+        CacheClientNotifier ccn = CacheClientNotifier.getInstance();
+        Collection<CacheClientProxy> ccProxies = ccn.getClientProxies();
+
+        Iterator<CacheClientProxy> itr = ccProxies.iterator();
+
+        while (itr.hasNext()) {
+          CacheClientProxy ccp = itr.next();
+          System.out.println("proxy status " + ccp.getState());
+          if (ccp.isPaused())
+            return true;
+        }
+        return false;
+      }
+      @Override
+      public String description() {
+        // TODO Auto-generated method stub
+        return "Proxy has not paused yet";
+      }
+    };
+    Wait.waitForCriterion(criterion, 15 * 1000, 200, true);
+  }
+  
   public void testStatsMatchWithSize() throws Exception {
     IgnoredException.addIgnoredException("Unexpected IOException||Connection reset");
     // start a server
@@ -101,6 +128,8 @@ public class Bug48571DUnitTest extends DistributedTestCase {
     server.invoke(() -> Bug48571DUnitTest.doPuts());
     // close durable client
     client.invoke(() -> Bug48571DUnitTest.closeClientCache());
+    
+    server.invoke("verifyProxyHasBeenPaused", () -> verifyProxyHasBeenPaused() );
     // resume puts on server, add another 100.
     server.invokeAsync(() -> Bug48571DUnitTest.resumePuts()); // TODO: join or await result
     // start durable client
@@ -131,9 +160,8 @@ public class Bug48571DUnitTest extends DistributedTestCase {
     rf.setConcurrencyChecksEnabled(false);
     rf.create(region);
 
-    int port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
     CacheServer server1 = cache.addCacheServer();
-    server1.setPort(port);
+    server1.setPort(0);
     server1.start();
     return server1.getPort();
   }


[08/50] [abbrv] incubator-geode git commit: GEODE-17: fix the precheck failures

Posted by kl...@apache.org.
GEODE-17: fix the precheck failures

* added the distributionConfig count since we added the shiro.ini file in the configuration
* add shiro-core.jar in the expected_jars.txt


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7ed7916c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7ed7916c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7ed7916c

Branch: refs/heads/feature/GEODE-1255
Commit: 7ed7916cacc8fdc0a6f2ef94d67209d15a005665
Parents: 5757ca4
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 22 09:56:04 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 22 09:56:04 2016 -0700

----------------------------------------------------------------------
 .../src/test/resources/expected_jars.txt        |  1 +
 .../EnvironmentVariablesHandlerInterceptor.java |  8 ++++++
 .../internal/DistributionConfigJUnitTest.java   | 26 +++++++++++---------
 3 files changed, 24 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7ed7916c/geode-assembly/src/test/resources/expected_jars.txt
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/resources/expected_jars.txt b/geode-assembly/src/test/resources/expected_jars.txt
index 159d1e6..da05d54 100644
--- a/geode-assembly/src/test/resources/expected_jars.txt
+++ b/geode-assembly/src/test/resources/expected_jars.txt
@@ -55,6 +55,7 @@ paranamer
 ra.jar
 scala-library
 scala-reflect
+shiro-core
 slf4j-api
 snappy-java
 spring-aop

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7ed7916c/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
index 34cf380..bb7a27d 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
@@ -108,6 +108,14 @@ public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAd
                               final Exception ex)
     throws Exception
   {
+    afterConcurrentHandlingStarted(request, response, handler);
     ShiroUtil.logout();
   }
+
+  @Override
+  public void afterConcurrentHandlingStarted(
+    HttpServletRequest request, HttpServletResponse response, Object handler)
+    throws Exception {
+    ENV.remove();
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7ed7916c/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
index d2b5643..7a54040 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
@@ -16,24 +16,28 @@
  */
 package com.gemstone.gemfire.distributed.internal;
 
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.*;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
 import com.gemstone.gemfire.InternalGemFireException;
 import com.gemstone.gemfire.UnmodifiableException;
 import com.gemstone.gemfire.internal.ConfigSource;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import java.io.File;
-import java.lang.reflect.Method;
-import java.util.*;
-
-import static org.junit.Assert.*;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
 /**
  * Created by jiliao on 2/2/16.
  */
@@ -65,7 +69,7 @@ public class DistributionConfigJUnitTest {
   @Test
   public void testGetAttributeNames() {
     String[] attNames = AbstractDistributionConfig._getAttNames();
-    assertEquals(attNames.length, 140);
+    assertEquals(attNames.length, 141);
 
     List boolList = new ArrayList();
     List intList = new ArrayList();
@@ -98,7 +102,7 @@ public class DistributionConfigJUnitTest {
     System.out.println("otherList: " + otherList);
     assertEquals(boolList.size(), 30);
     assertEquals(intList.size(), 33);
-    assertEquals(stringList.size(), 69);
+    assertEquals(stringList.size(), 70);
     assertEquals(fileList.size(), 5);
     assertEquals(otherList.size(), 3);
   }


[49/50] [abbrv] incubator-geode git commit: Merge remote-tracking branch 'origin/develop' into feature/GEODE-1255

Posted by kl...@apache.org.
Merge remote-tracking branch 'origin/develop' into feature/GEODE-1255


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

Branch: refs/heads/feature/GEODE-1255
Commit: f6334f2f52ed1c787a5a5529ffdf97192a0599e8
Parents: 0fc02ae b8fc3c7
Author: Kirk Lund <kl...@apache.org>
Authored: Tue May 3 13:55:11 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Tue May 3 13:55:11 2016 -0700

----------------------------------------------------------------------
 BUILDING.md                                     |    2 +-
 build.gradle                                    |    4 +
 .../SessionReplicationIntegrationJUnitTest.java |   30 +-
 .../session/junit/PerTestClassLoaderRunner.java |  138 +--
 geode-assembly/build.gradle                     |    1 +
 .../LauncherLifecycleCommandsDUnitTest.java     |    3 +
 .../src/test/resources/expected_jars.txt        |    1 +
 geode-core/build.gradle                         |    4 +-
 .../cache/operations/OperationContext.java      |  556 ++++------
 .../gemfire/distributed/DistributedSystem.java  |    7 +-
 .../internal/AbstractDistributionConfig.java    |   48 +-
 .../distributed/internal/ConfigAttribute.java   |    1 -
 .../internal/ConfigAttributeChecker.java        |    1 -
 .../internal/ConfigAttributeDesc.java           |    3 -
 .../internal/ConfigAttributeGetter.java         |    3 -
 .../internal/ConfigAttributeSetter.java         |    3 -
 .../internal/DistributionConfig.java            |    7 +
 .../internal/DistributionConfigImpl.java        |   38 +-
 .../internal/InternalDistributedSystem.java     |  240 ++--
 .../membership/gms/fd/GMSHealthMonitor.java     |    7 +-
 .../gemfire/internal/AbstractConfig.java        |   28 +-
 .../internal/cache/DistributedRegion.java       |   11 +-
 .../internal/cache/GemFireCacheImpl.java        |   20 +-
 .../cache/tier/sockets/CacheClientNotifier.java |   36 +-
 .../gemfire/internal/i18n/LocalizedStrings.java |    2 +
 .../internal/security/AuthorizeRequest.java     |    5 -
 .../internal/security/GeodeSecurityUtil.java    |  167 +++
 .../security/shiro/CustomAuthRealm.java         |  176 +++
 .../security/shiro/JMXShiroAuthenticator.java   |   69 ++
 .../management/AsyncEventQueueMXBean.java       |    5 +
 .../gemfire/management/CacheServerMXBean.java   |   12 +-
 .../gemfire/management/DiskStoreMXBean.java     |    9 +
 .../DistributedLockServiceMXBean.java           |    8 +-
 .../management/DistributedRegionMXBean.java     |    5 +
 .../management/DistributedSystemMXBean.java     |   30 +-
 .../management/GatewayReceiverMXBean.java       |    8 +-
 .../gemfire/management/GatewaySenderMXBean.java |   12 +-
 .../gemfire/management/LocatorMXBean.java       |    5 +
 .../gemfire/management/LockServiceMXBean.java   |   10 +-
 .../gemfire/management/ManagerMXBean.java       |   12 +-
 .../gemfire/management/MemberMXBean.java        |   15 +-
 .../gemfire/management/RegionMXBean.java        |    4 +
 .../management/internal/ManagementAgent.java    |  126 ++-
 .../internal/SystemManagementService.java       |   39 +-
 .../internal/beans/GatewaySenderMBean.java      |    8 +-
 .../internal/beans/MemberMBeanBridge.java       |   17 +-
 .../management/internal/cli/CommandManager.java |    3 -
 .../internal/cli/commands/ClientCommands.java   |   50 +-
 .../internal/cli/commands/ConfigCommands.java   |   44 +-
 .../CreateAlterDestroyRegionCommands.java       |   42 +-
 .../internal/cli/commands/DataCommands.java     |   36 +-
 .../internal/cli/commands/DeployCommands.java   |   21 +-
 .../cli/commands/DiskStoreCommands.java         |   64 +-
 .../cli/commands/DurableClientCommands.java     |   45 +-
 ...ExportImportSharedConfigurationCommands.java |   23 +-
 .../internal/cli/commands/FunctionCommands.java |   33 +-
 .../internal/cli/commands/GfshHelpCommands.java |   13 +-
 .../internal/cli/commands/IndexCommands.java    |   39 +-
 .../cli/commands/LauncherLifecycleCommands.java |   81 +-
 .../internal/cli/commands/MemberCommands.java   |   27 +-
 .../cli/commands/MiscellaneousCommands.java     |   99 +-
 .../internal/cli/commands/PDXCommands.java      |   33 +-
 .../internal/cli/commands/QueueCommands.java    |   25 +-
 .../internal/cli/commands/RegionCommands.java   |   17 +-
 .../internal/cli/commands/ShellCommands.java    |  106 +-
 .../internal/cli/commands/StatusCommands.java   |   24 +-
 .../internal/cli/commands/WanCommands.java      |  336 +++---
 .../internal/cli/remote/CommandProcessor.java   |   24 +-
 .../internal/cli/result/ErrorResultData.java    |   10 +-
 .../internal/cli/result/ResultBuilder.java      |    7 +-
 .../internal/cli/shell/JmxOperationInvoker.java |   70 +-
 .../internal/security/AccessControl.java        |   51 -
 .../internal/security/AccessControlContext.java |   37 -
 .../internal/security/AccessControlMBean.java   |   41 +
 .../internal/security/AccessControlMXBean.java  |    6 +-
 .../internal/security/CLIOperationContext.java  |  138 ---
 .../internal/security/JMXOperationContext.java  |  177 ---
 .../internal/security/JSONAuthorization.java    |  308 ------
 .../internal/security/MBeanServerWrapper.java   |  168 ++-
 .../security/ManagementInterceptor.java         |  271 -----
 .../management/internal/security/Resource.java  |   26 -
 .../internal/security/ResourceConstants.java    |   91 +-
 .../internal/security/ResourceOperation.java    |   13 +-
 .../security/ResourceOperationContext.java      |  221 +---
 .../controllers/AbstractCommandsController.java |   82 +-
 .../controllers/ConfigCommandsController.java   |   20 +-
 .../web/controllers/DataCommandsController.java |   26 +-
 .../DiskStoreCommandsController.java            |   14 +-
 .../controllers/FunctionCommandsController.java |    9 +-
 .../MiscellaneousCommandsController.java        |    8 +-
 .../web/controllers/WanCommandsController.java  |    2 +-
 .../EnvironmentVariablesHandlerInterceptor.java |   92 --
 .../support/LoginHandlerInterceptor.java        |  122 ++
 .../web/http/support/SimpleHttpRequester.java   |  105 +-
 .../web/shell/AbstractHttpOperationInvoker.java |   28 +-
 .../web/shell/RestHttpOperationInvoker.java     |   26 +-
 .../web/shell/SimpleHttpOperationInvoker.java   |   11 +-
 .../gemfire/security/AccessControl.java         |   16 +-
 .../gemfire/security/Authenticator.java         |   18 +-
 .../cache30/ClientMembershipDUnitTest.java      |  347 +++---
 .../gemfire/cache30/ReconnectDUnitTest.java     |  235 ++--
 .../internal/DistributionConfigJUnitTest.java   |   74 +-
 .../gemfire/internal/ConfigSourceJUnitTest.java |    8 +-
 .../extension/mock/MockExtensionCommands.java   |   23 +-
 .../internal/cache/ha/Bug48571DUnitTest.java    |   34 +-
 .../internal/cli/CommandManagerJUnitTest.java   |   45 +-
 .../internal/cli/GfshParserJUnitTest.java       |   45 +-
 .../management/internal/cli/HeadlessGfsh.java   |    2 +-
 .../cli/commands/CliCommandTestBase.java        |  126 ++-
 .../cli/commands/ConfigCommandsDUnitTest.java   |   26 +-
 ...eateAlterDestroyRegionCommandsDUnitTest.java |   34 +-
 .../cli/commands/DeployCommandsDUnitTest.java   |   14 +-
 .../commands/DiskStoreCommandsDUnitTest.java    |   30 +-
 .../commands/DiskStoreCommandsJUnitTest.java    |    1 +
 .../cli/commands/FunctionCommandsDUnitTest.java |  112 +-
 .../commands/GemfireDataCommandsDUnitTest.java  |   28 +-
 ...WithCacheLoaderDuringCacheMissDUnitTest.java |   14 +-
 .../cli/commands/IndexCommandsDUnitTest.java    |   21 +-
 ...stAndDescribeDiskStoreCommandsDUnitTest.java |   14 +-
 .../ListAndDescribeRegionDUnitTest.java         |   13 +-
 .../cli/commands/ListIndexCommandDUnitTest.java |  122 +-
 .../MiscellaneousCommandsDUnitTest.java         |   40 +-
 ...laneousCommandsExportLogsPart1DUnitTest.java |   15 +-
 ...laneousCommandsExportLogsPart2DUnitTest.java |   16 +-
 ...laneousCommandsExportLogsPart3DUnitTest.java |   24 +-
 ...laneousCommandsExportLogsPart4DUnitTest.java |   15 +-
 .../cli/commands/QueueCommandsDUnitTest.java    |   16 +-
 .../SharedConfigurationCommandsDUnitTest.java   |    9 +-
 .../cli/commands/ShellCommandsDUnitTest.java    |   12 +-
 .../cli/commands/ShowMetricsDUnitTest.java      |   16 +-
 .../cli/commands/ShowStackTraceDUnitTest.java   |   14 +-
 .../cli/commands/ToUpperResultCollector.java    |   65 ++
 .../cli/commands/UserCommandsDUnitTest.java     |   16 +-
 .../shell/GfshExecutionStrategyJUnitTest.java   |   36 +-
 .../cli/shell/GfshHistoryJUnitTest.java         |    2 -
 .../security/AccessControlMBeanJUnitTest.java   |   58 +
 ...rDistributedSystemMXBeanIntegrationTest.java |   50 -
 ...horizeOperationForMBeansIntegrationTest.java |  323 ------
 ...erationForRegionCommandsIntegrationTest.java |  136 ---
 ...CacheServerMBeanAuthenticationJUnitTest.java |   58 +
 .../CacheServerMBeanAuthorizationJUnitTest.java |   90 ++
 .../CacheServerMBeanShiroJUnitTest.java         |   93 ++
 .../security/CliCommandsSecurityTest.java       |   83 ++
 .../security/DataCommandsSecurityTest.java      |   83 ++
 .../DiskStoreMXBeanSecurityJUnitTest.java       |   83 ++
 .../security/ExampleJSONAuthorization.java      |  197 ++++
 .../GatewayReceiverMBeanSecurityTest.java       |   90 ++
 .../GatewaySenderMBeanSecurityTest.java         |  105 ++
 .../GeodeSecurityUtilCustomRealmJUnitTest.java  |   52 +
 .../GeodeSecurityUtilWithIniFileJUnitTest.java  |  147 +++
 .../security/GfshCommandsSecurityTest.java      |  165 +++
 .../security/GfshShellConnectionRule.java       |  109 ++
 .../security/JMXConnectionConfiguration.java    |   33 +
 .../internal/security/JSONAuthorization.java    |  201 ++++
 ...JSONAuthorizationDetailsIntegrationTest.java |  163 ---
 .../JsonAuthorizationCacheStartRule.java        |   83 ++
 .../LockServiceMBeanAuthorizationJUnitTest.java |   90 ++
 .../security/MBeanSecurityJUnitTest.java        |  117 ++
 .../security/MBeanServerConnectionRule.java     |  130 +++
 .../ManagerMBeanAuthorizationJUnitTest.java     |   78 ++
 .../security/MemberMBeanSecurityJUnitTest.java  |  110 ++
 ...tionCodesForDataCommandsIntegrationTest.java |  101 --
 ...tionCodesForDistributedSystemMXBeanTest.java |   76 --
 .../ResourceOperationContextJUnitTest.java      |   88 ++
 .../internal/security/ShiroCacheStartRule.java  |   63 ++
 .../internal/security/TestCommand.java          |  227 ++++
 .../ReadOpFileAccessControllerJUnitTest.java    |   19 +-
 .../security/ClientAuthorizationDUnitTest.java  |    7 +-
 .../security/ClientAuthorizationTestCase.java   |   20 +-
 .../DeltaClientPostAuthorizationDUnitTest.java  |   21 +-
 .../security/templates/XmlAuthorization.java    |    2 +-
 .../com/gemstone/gemfire/test/dunit/VM.java     |   62 +-
 .../gemstone/gemfire/util/test/TestUtil.java    |    8 +-
 .../gemfire/codeAnalysis/excludedClasses.txt    |   28 +-
 .../codeAnalysis/sanctionedSerializables.txt    |    2 +
 .../management/internal/security/auth1.json     |   28 +-
 .../management/internal/security/auth3.json     |   55 +-
 .../internal/security/cacheServer.json          |  188 ++++
 .../management/internal/security/shiro-ini.json |   87 ++
 .../internal/security/testInheritRole.json      |   40 -
 .../security/testSimpleUserAndRole.json         |   14 -
 .../testUserAndRoleRegionServerGroup.json       |   16 -
 .../internal/security/testUserMultipleRole.json |   20 -
 geode-core/src/test/resources/shiro.ini         |   40 +
 .../cli/commands/ClientCommandsDUnitTest.java   |   53 +-
 .../DurableClientCommandsDUnitTest.java         |    2 +-
 .../junit/rules/DescribedExternalResource.java  |   63 ++
 .../gemfire/cache/lucene/LuceneIndex.java       |    2 +-
 .../LuceneIndexForReplicatedRegion.java         |    2 +-
 .../cache/lucene/internal/LuceneIndexImpl.java  |   14 +-
 .../lucene/internal/LuceneServiceImpl.java      |   21 +-
 .../internal/xml/LuceneIndexCreation.java       |   42 +-
 .../internal/xml/LuceneIndexXmlGenerator.java   |    5 +
 .../lucene/internal/xml/LuceneXmlConstants.java |    1 +
 .../lucene/internal/xml/LuceneXmlParser.java    |   27 +-
 .../geode.apache.org/lucene/lucene-1.0.xsd      |    1 +
 .../LuceneFunctionReadPathDUnitTest.java        |   17 +-
 ...uceneIndexXmlParserIntegrationJUnitTest.java |   52 +-
 .../xml/LuceneIndexXmlParserJUnitTest.java      |   97 +-
 ...erIntegrationJUnitTest.createIndex.cache.xml |    7 +-
 ...nJUnitTest.parseIndexWithAnalyzers.cache.xml |   36 +
 geode-pulse/build.gradle                        |    1 +
 .../tools/pulse/internal/PulseAppListener.java  |   68 +-
 .../internal/controllers/PulseController.java   |   28 +-
 .../tools/pulse/internal/data/Cluster.java      |   14 +-
 .../pulse/internal/data/JMXDataUpdater.java     |  217 ++--
 .../pulse/internal/data/PulseConstants.java     |   14 +
 .../tools/pulse/internal/data/Repository.java   |   54 +-
 .../pulse/internal/log/PulseLogWriter.java      |    4 -
 .../security/GemFireAuthentication.java         |   91 ++
 .../security/GemFireAuthenticationProvider.java |   80 ++
 .../pulse/internal/security/LogoutHandler.java  |   55 +
 geode-pulse/src/main/resources/pulse.properties |   12 +-
 .../src/main/webapp/WEB-INF/spring-security.xml |   59 +-
 .../controllers/PulseControllerJUnitTest.java   |   56 +-
 .../tools/pulse/testbed/driver/PulseUITest.java |    2 +-
 .../pulse/tests/DataBrowserResultLoader.java    |   14 +-
 .../tools/pulse/tests/PulseAbstractTest.java    | 1047 ++++++++++++++++++
 .../tools/pulse/tests/PulseAuthTest.java        |   33 +
 .../tools/pulse/tests/PulseAutomatedTest.java   |   17 +-
 .../tools/pulse/tests/PulseBaseTest.java        |    4 +-
 .../tools/pulse/tests/PulseNoAuthTest.java      |   33 +
 .../gemfire/tools/pulse/tests/PulseTest.java    | 1039 -----------------
 .../gemfire/tools/pulse/tests/Region.java       |    2 +-
 .../gemfire/tools/pulse/tests/Server.java       |  156 ++-
 geode-pulse/src/test/resources/pulse-auth.json  |   21 +
 .../cache/wan/CacheClientNotifierDUnitTest.java |  106 +-
 .../cache/wan/Simple2CacheServerDUnitTest.java  |  157 +++
 .../wan/wancommand/WANCommandTestBase.java      |  104 +-
 ...anCommandCreateGatewayReceiverDUnitTest.java |  174 +--
 .../WanCommandCreateGatewaySenderDUnitTest.java |  192 ++--
 ...WanCommandGatewayReceiverStartDUnitTest.java |  120 +-
 .../WanCommandGatewayReceiverStopDUnitTest.java |  120 +-
 .../WanCommandGatewaySenderStartDUnitTest.java  |  177 ++-
 .../WanCommandGatewaySenderStopDUnitTest.java   |  158 +--
 .../wan/wancommand/WanCommandListDUnitTest.java |  135 ++-
 .../WanCommandPauseResumeDUnitTest.java         |  370 +++----
 .../wancommand/WanCommandStatusDUnitTest.java   |  174 +--
 .../src/main/webapp/WEB-INF/gemfire-servlet.xml |    2 +-
 ...entVariablesHandlerInterceptorJUnitTest.java |  267 -----
 .../LoginHandlerInterceptorJUnitTest.java       |  274 +++++
 gradle.properties                               |    1 +
 gradle/dependency-versions.properties           |    1 +
 gradle/wrapper/gradle-wrapper.jar               |  Bin 53637 -> 53639 bytes
 gradle/wrapper/gradle-wrapper.properties        |    2 +-
 settings.gradle                                 |    1 -
 246 files changed, 10184 insertions(+), 7052 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
index 0ab68c8,f2dc80f..3b99733
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
@@@ -30,21 -45,8 +45,11 @@@ import com.gemstone.gemfire.management.
  import com.gemstone.gemfire.test.dunit.Host;
  import com.gemstone.gemfire.test.dunit.cache.internal.JUnit4CacheTestCase;
  
- import java.io.IOException;
- import java.io.PrintStream;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- import java.util.Map;
- import java.util.Properties;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- 
- import static com.gemstone.gemfire.test.dunit.Assert.*;
- import static com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter;
+ import org.junit.runners.Parameterized;
  
 +import org.junit.Rule;
 +import org.junit.rules.TemporaryFolder;
 +
  /**
   * Base class for all the CLI/gfsh command dunit tests.
   */
@@@ -58,30 -58,35 +61,51 @@@ public abstract class CliCommandTestBas
  
    private transient HeadlessGfsh shell;
  
-   private boolean useHttpOnConnect = Boolean.getBoolean("useHTTP");
+   protected boolean useHttpOnConnect = false;
+   protected boolean enableAuth = false;
+   protected String jsonAuthorization = "cacheServer.json";
+   protected String username = "super-user";
+   protected String password = "1234567";
  
 -  protected int httpPort;
 -  protected int jmxPort;
 +  private transient int httpPort;
 +  private transient int jmxPort;
 +  private transient String jmxHost;
 +  protected transient String gfshDir;
  
 -  protected String jmxHost;
 +  @Rule
 +  public transient TemporaryFolder temporaryFolder = new TemporaryFolder();
  
+   public CliCommandTestBase(){
+     this(false);
+   }
+ 
+   // Junit will use the parameters to initialize the test class and run the tests with different parameters
+   public CliCommandTestBase(boolean useHttpOnConnect){
+     this.useHttpOnConnect = useHttpOnConnect;
+   }
+ 
+   @Parameterized.Parameters
+   public static Collection parameters() {
+     return Arrays.asList(new Object[][] {
 -        { false},  // useHttpOnConnect=false,
 -        { true } // useHttpOnConnect=true,
++            { false},  // useHttpOnConnect=false,
++            { true } // useHttpOnConnect=true,
+     });
+   }
+ 
    @Override
 +  public final void postSetUp() throws Exception {
 +    setUpCliCommandTestBase();
 +    postSetUpCliCommandTestBase();
 +  }
 +
 +  private void setUpCliCommandTestBase() throws Exception {
 +    this.gfshDir = this.temporaryFolder.newFolder("gfsh_files").getCanonicalPath();
 +  }
 +
 +  protected void postSetUpCliCommandTestBase() throws Exception {
 +  }
 +
 +  @Override
    public final void preTearDownCacheTestCase() throws Exception {
      preTearDownCliCommandTestBase();
      destroyDefaultSetup();
@@@ -151,8 -166,7 +185,7 @@@
    /**
     * Destroy all of the components created for the default setup.
     */
-   @SuppressWarnings("serial")
 -    protected final void destroyDefaultSetup() {
 +  protected final void destroyDefaultSetup() {
      if (this.shell != null) {
        executeCommand(shell, "exit");
        this.shell.terminate();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
index fc8bb05,e4b50b9..ac26b1b
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java
@@@ -55,17 -56,20 +56,22 @@@ import org.junit.runners.Parameterized
   */
  @Category(DistributedTest.class)
  @SuppressWarnings("serial")
+ @RunWith(Parameterized.class)
  public class DeployCommandsDUnitTest extends CliCommandTestBase {
  
 -  File newDeployableJarFile = new File("DeployCommandsDUnit1.jar");
 -
 -  transient private ClassBuilder classBuilder = new ClassBuilder();
 -  transient private CommandProcessor commandProcessor;
 +  private final Pattern pattern = Pattern.compile("^" + JarDeployer.JAR_PREFIX + "DeployCommandsDUnit.*#\\d++$");
 +  private File newDeployableJarFile;
 +  private transient ClassBuilder classBuilder;
 +  private transient CommandProcessor commandProcessor;
  
+   public DeployCommandsDUnitTest(boolean useHttpOnConnect){
+     super(useHttpOnConnect);
+   }
+ 
    @Override
 -  public final void postSetUp() throws Exception {
 +  public final void postSetUpCliCommandTestBase() throws Exception {
 +    this.newDeployableJarFile = new File(this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "DeployCommandsDUnit1.jar");
 +    this.classBuilder = new ClassBuilder();
      this.commandProcessor = new CommandProcessor();
      assertFalse(this.commandProcessor.isStopped());
  

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java
index 9390ba0,55ef25c..ecf88bf
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java
@@@ -70,63 -73,17 +72,67 @@@ public class GetCommandOnRegionWithCach
    private static final String GEMFIRE_LOG_LEVEL = System.getProperty("logLevel", "config");
    private static final String USERS_REGION_NAME = "Users";
  
 -
+   public GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest(boolean useHttpOnConnect){
+     super(useHttpOnConnect);
+   }
+ 
 -  protected static String getRegionPath(final String regionName) {
 -    return (regionName.startsWith(Region.SEPARATOR) ? regionName : String.format("%1$s%2$s", Region.SEPARATOR,
 -        regionName));
 +  @Override
 +  public final void postSetUpCliCommandTestBase() throws Exception {
 +    Properties managerDistributedSystemProperties = createDistributedSystemProperties(GEMFIRE_MANAGER_NAME);
-     HeadlessGfsh gfsh = createDefaultSetup(managerDistributedSystemProperties);
++    HeadlessGfsh gfsh = setUpJmxManagerOnVm0ThenConnect(managerDistributedSystemProperties);
 +
 +    assertNotNull(gfsh);
 +    assertTrue(gfsh.isConnectedAndReady());
 +
 +    setupGemFire();
 +    verifyGemFireSetup(createPeer(getHost(0).getVM(0), managerDistributedSystemProperties));
 +  }
 +
 +  @Test
 +  public void testGetOnCacheMiss() {
 +    doHousekeeping();
 +
 +    CommandStringBuilder command = new CommandStringBuilder(CliStrings.GET);
 +    command.addOption(CliStrings.GET__REGIONNAME, USERS_REGION_NAME);
 +    command.addOption(CliStrings.GET__KEY, "jonbloom");
 +
 +    assertResult(true, runCommand(command.toString()));
 +
 +    command = new CommandStringBuilder(CliStrings.GET);
 +    command.addOption(CliStrings.GET__REGIONNAME, USERS_REGION_NAME);
 +    command.addOption(CliStrings.GET__KEY, "jondoe");
 +    command.addOption(CliStrings.GET__LOAD, "false");
 +
 +    assertResult(false, runCommand(command.toString()));
 +
 +    command = new CommandStringBuilder(CliStrings.GET);
 +    command.addOption(CliStrings.GET__REGIONNAME, USERS_REGION_NAME);
 +    command.addOption(CliStrings.GET__KEY, "jondoe");
 +    command.addOption(CliStrings.GET__LOAD, "true");
 +
 +    assertResult(true, runCommand(command.toString()));
 +
 +    // NOTE test the unspecified default value for the --load-on-cache-miss
 +    command = new CommandStringBuilder(CliStrings.GET);
 +    command.addOption(CliStrings.GET__REGIONNAME, USERS_REGION_NAME);
 +    command.addOption(CliStrings.GET__KEY, "janedoe");
 +
 +    assertResult(true, runCommand(command.toString()));
 +
 +    // NOTE now test an absolute cache miss both for in the Region as well as the CacheLoader
 +    command = new CommandStringBuilder(CliStrings.GET);
 +    command.addOption(CliStrings.GET__REGIONNAME, USERS_REGION_NAME);
 +    command.addOption(CliStrings.GET__KEY, "nonexistinguser");
 +    command.addOption(CliStrings.GET__LOAD, "true");
 +
 +    assertResult(false, runCommand(command.toString()));
 +  }
 +
 +  private static String getRegionPath(final String regionName) {
 +    return (regionName.startsWith(Region.SEPARATOR) ? regionName : String.format("%1$s%2$s", Region.SEPARATOR, regionName));
    }
  
 -  protected static String toString(final Result result) {
 +  private static String toString(final Result result) {
      assert result != null : "The Result object from the command execution was null!";
  
      StringBuilder buffer = new StringBuilder(System.getProperty("line.separator"));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
index fcf3fc7,bb46b75..1f09e4d
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java
@@@ -49,51 -50,14 +50,56 @@@ import org.junit.runners.Parameterized
   * @since 7.0
   */
  @Category(DistributedTest.class)
+ @RunWith(Parameterized.class)
  public class ListAndDescribeDiskStoreCommandsDUnitTest extends CliCommandTestBase {
  
+   public ListAndDescribeDiskStoreCommandsDUnitTest(boolean useHttpOnConnect) {
+     super(useHttpOnConnect);
+   }
+ 
 -  protected static String toString(final Result result) {
 +  @Override
 +  public final void postSetUpCliCommandTestBase() throws Exception {
-     createDefaultSetup(null);
++    setUpJmxManagerOnVm0ThenConnect(null);
 +    setupGemFire();
 +  }
 +
 +  @Test
 +  public void testListDiskStore() throws Exception {
 +    final Result result = executeCommand(CliStrings.LIST_DISK_STORE);
 +
 +    assertNotNull(result);
 +    getLogWriter().info(toString(result));
 +    assertEquals(Result.Status.OK, result.getStatus());
 +  }
 +
 +  @Test
 +  public void testDescribeDiskStore() throws Exception {
 +    final Result result = executeCommand(CliStrings.DESCRIBE_DISK_STORE + " --member=producerServer --name=producerData");
 +
 +    assertNotNull(result);
 +    getLogWriter().info(toString(result));
 +    assertEquals(Result.Status.OK, result.getStatus());
 +  }
 +
 +  @Test
 +  public void testDescribeDiskStoreWithInvalidMemberName() throws Exception {
 +    final Result commandResult = executeCommand(CliStrings.DESCRIBE_DISK_STORE + " --member=badMemberName --name=producerData");
 +
 +    assertNotNull(commandResult);
 +    assertEquals(Result.Status.ERROR, commandResult.getStatus());
 +    assertEquals(CliStrings.format(CliStrings.MEMBER_NOT_FOUND_ERROR_MESSAGE, "badMemberName"), toString(commandResult));
 +  }
 +
 +  @Test
 +  public void testDescribeDiskStoreWithInvalidDiskStoreName() {
 +    final Result commandResult = executeCommand(CliStrings.DESCRIBE_DISK_STORE + " --member=producerServer --name=badDiskStoreName");
 +
 +    assertNotNull(commandResult);
 +    assertEquals(Result.Status.ERROR, commandResult.getStatus());
 +    assertEquals("A disk store with name (badDiskStoreName) was not found on member (producerServer).", toString(commandResult));
 +  }
 +
 +  private static String toString(final Result result) {
      assert result != null : "The Result object from the command execution cannot be null!";
  
      final StringBuilder buffer = new StringBuilder(System.getProperty("line.separator"));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java
index 3013ba6,97ca98a..c527a80
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java
@@@ -31,9 -31,6 +31,11 @@@ import java.util.Random
  import java.util.Set;
  import java.util.concurrent.atomic.AtomicLong;
  
 +import org.junit.Test;
 +import org.junit.experimental.categories.Category;
++import org.junit.runner.RunWith;
++import org.junit.runners.Parameterized;
 +
  import com.gemstone.gemfire.cache.Cache;
  import com.gemstone.gemfire.cache.DataPolicy;
  import com.gemstone.gemfire.cache.Region;
@@@ -58,7 -55,11 +60,7 @@@ import com.gemstone.gemfire.test.junit.
  
  /**
   * The ListIndexCommandDUnitTest class is distributed test suite of test cases for testing the index-based GemFire shell
-- * (Gfsh) commands. </p>
++ * (Gfsh) commands.
   *
   * @see com.gemstone.gemfire.management.internal.cli.commands.CliCommandTestBase
   * @see com.gemstone.gemfire.management.internal.cli.commands.IndexCommands
@@@ -66,13 -67,18 +68,24 @@@
   */
  @SuppressWarnings("unused")
  @Category(DistributedTest.class)
+ @RunWith(Parameterized.class)
  public class ListIndexCommandDUnitTest extends CliCommandTestBase {
  
--  protected static final int DEFAULT_REGION_INITIAL_CAPACITY = 10000;
++  private static final int DEFAULT_REGION_INITIAL_CAPACITY = 10000;
  
    private final AtomicLong idGenerator = new AtomicLong(0l);
  
-   protected static String toString(final Result result) {
+   public ListIndexCommandDUnitTest(boolean useHttpOnConnect) {
+     super(useHttpOnConnect);
+   }
+ 
 -  protected static String toString(final Result result) {
++  @Override
++  public final void postSetUpCliCommandTestBase() throws Exception {
++    setUpJmxManagerOnVm0ThenConnect(null);
++    setupGemFire();
++  }
++
++  private static String toString(final Result result) {
      assert result != null : "The Result object from the command execution cannot be null!";
  
      final StringBuilder buffer = new StringBuilder(System.getProperty("line.separator"));
@@@ -85,48 -91,48 +98,41 @@@
      return buffer.toString();
    }
  
--  @Override
-   public final void postSetUpCliCommandTestBase() throws Exception {
-     createDefaultSetup(null);
 -  public final void postSetUp() throws Exception {
 -    setUpJmxManagerOnVm0ThenConnect(null);
--    setupGemFire();
--  }
--
--  protected Index createIndex(final String name, final String indexedExpression, final String fromClause) {
++  private Index createIndex(final String name, final String indexedExpression, final String fromClause) {
      return createIndex(name, IndexType.FUNCTIONAL, indexedExpression, fromClause);
    }
  
--  protected Index createIndex(final String name, final IndexType type, final String indexedExpression,
--      final String fromClause) {
++  private Index createIndex(final String name, final IndexType type, final String indexedExpression, final String fromClause) {
      return new IndexAdapter(name, type, indexedExpression, fromClause);
    }
  
--  protected Peer createPeer(final VM vm, final Properties distributedSystemProperties,
--      final RegionDefinition... regions) {
++  private Peer createPeer(final VM vm, final Properties distributedSystemProperties, final RegionDefinition... regions) {
      final Peer peer = new Peer(vm, distributedSystemProperties);
      peer.add(regions);
      return peer;
    }
  
--  protected RegionDefinition createRegionDefinition(final String regionName, final Class<?> keyConstraint,
--      final Class<?> valueConstraint, final Index... indexes) {
++  private RegionDefinition createRegionDefinition(final String regionName, final Class<?> keyConstraint, final Class<?> valueConstraint, final Index... indexes) {
      final RegionDefinition regionDefinition = new RegionDefinition(regionName, keyConstraint, valueConstraint);
      regionDefinition.add(indexes);
      return regionDefinition;
    }
  
--  protected void setupGemFire() throws Exception {
++  private void setupGemFire() throws Exception {
      final Host host = Host.getHost(0);
  
      final VM vm1 = host.getVM(1);
      final VM vm2 = host.getVM(2);
  
--    final Peer peer1 = createPeer(vm1, createDistributedSystemProperties("consumerServer"),
--        createRegionDefinition("consumers", Long.class, Consumer.class,
--            createIndex("cidIdx", IndexType.PRIMARY_KEY, "id", "/consumers"),
--            createIndex("cnameIdx", "name", "/consumers")));
++    final Peer peer1 = createPeer(vm1,
++                                  createDistributedSystemProperties("consumerServer"),
++                                  createRegionDefinition("consumers", Long.class, Consumer.class,
++                                          createIndex("cidIdx", IndexType.PRIMARY_KEY, "id", "/consumers"),
++                                          createIndex("cnameIdx", "name", "/consumers")));
  
--    final Peer peer2 = createPeer(vm2, createDistributedSystemProperties("producerServer"),
--        createRegionDefinition("producers", Long.class, Producer.class, createIndex("pidIdx", "id", "/producers")));
++    final Peer peer2 = createPeer(vm2,
++                                  createDistributedSystemProperties("producerServer"),
++                                  createRegionDefinition("producers", Long.class, Producer.class, createIndex("pidIdx", "id", "/producers")));
  
      createRegionWithIndexes(peer1);
      createRegionWithIndexes(peer2);
@@@ -135,7 -141,7 +141,7 @@@
      loadProducerData(peer2, 10000);
    }
  
--  protected Properties createDistributedSystemProperties(final String gemfireName) {
++  private Properties createDistributedSystemProperties(final String gemfireName) {
      final Properties distributedSystemProperties = new Properties();
  
      distributedSystemProperties.setProperty(DistributionConfig.LOG_LEVEL_NAME, getDUnitLogLevel());
@@@ -144,9 -150,9 +150,8 @@@
      return distributedSystemProperties;
    }
  
--  protected void createRegionWithIndexes(final Peer peer) throws Exception {
--    peer.run(new SerializableRunnable(
--        String.format("Creating Regions with Indexes on GemFire peer (%1$s).", peer.getName())) {
++  private void createRegionWithIndexes(final Peer peer) throws Exception {
++    peer.run(new SerializableRunnable(String.format("Creating Regions with Indexes on GemFire peer (%1$s).", peer.getName())) {
        public void run() {
          // create the GemFire distributed system with custom configuration properties...
          getSystem(peer.getConfiguration());
@@@ -176,16 -182,16 +181,14 @@@
                }
              }
            } catch (Exception e) {
--            getLogWriter().error(
--                String.format("Error occurred creating Index (%1$s) on Region (%2$s) - (%3$s)", indexName,
--                    region.getFullPath(), e.getMessage()));
++            getLogWriter().error(String.format("Error occurred creating Index (%1$s) on Region (%2$s) - (%3$s)", indexName, region.getFullPath(), e.getMessage()));
            }
          }
        }
      });
    }
  
--  protected void loadConsumerData(final Peer peer, final int operationsTotal) throws Exception {
++  private void loadConsumerData(final Peer peer, final int operationsTotal) throws Exception {
      peer.run(new SerializableRunnable("Load /consumers Region with data") {
        public void run() {
          final Cache cache = getCache();
@@@ -231,7 -237,7 +234,7 @@@
      });
    }
  
--  protected void loadProducerData(final Peer peer, final int operationsTotal) throws Exception {
++  private void loadProducerData(final Peer peer, final int operationsTotal) throws Exception {
      peer.run(new SerializableRunnable("Load /producers Region with data") {
        public void run() {
          final Cache cache = getCache();
@@@ -276,14 -282,14 +279,13 @@@
    }
  
    @SuppressWarnings("unchecked")
--  protected <T extends Comparable<T>, B extends AbstractBean<T>> B query(final Cache cache, final String queryString) {
++  private <T extends Comparable<T>, B extends AbstractBean<T>> B query(final Cache cache, final String queryString) {
      try {
        getLogWriter().info(String.format("Running Query (%1$s) in GemFire...", queryString));
  
        final SelectResults<B> results = (SelectResults<B>) cache.getQueryService().newQuery(queryString).execute();
  
--      getLogWriter().info(
--          String.format("Running Query (%1$s) in GemFire returned (%2$d) result(s).", queryString, results.size()));
++      getLogWriter().info(String.format("Running Query (%1$s) in GemFire returned (%2$d) result(s).", queryString, results.size()));
  
        return (results.iterator().hasNext() ? results.iterator().next() : null);
      } catch (Exception e) {
@@@ -291,23 -297,23 +293,17 @@@
      }
    }
  
--  protected <T extends Comparable<T>, B extends AbstractBean<T>> B query(final Region<T, B> region,
--      final String queryPredicate) {
++  private <T extends Comparable<T>, B extends AbstractBean<T>> B query(final Region<T, B> region, final String queryPredicate) {
      try {
--      getLogWriter().info(
--          String.format("Running Query (%1$s) on Region (%2$s)...", queryPredicate, region.getFullPath()));
++      getLogWriter().info(String.format("Running Query (%1$s) on Region (%2$s)...", queryPredicate, region.getFullPath()));
  
        final SelectResults<B> results = region.query(queryPredicate);
  
--      getLogWriter().info(
--          String.format("Running Query (%1$s) on Region (%2$s) returned (%3$d) result(s).", queryPredicate,
--              region.getFullPath(), results.size()));
++      getLogWriter().info(String.format("Running Query (%1$s) on Region (%2$s) returned (%3$d) result(s).", queryPredicate, region.getFullPath(), results.size()));
  
        return (results.iterator().hasNext() ? results.iterator().next() : null);
      } catch (Exception e) {
--      throw new RuntimeException(
--          String.format("An error occurred running Query (%1$s) on Region (%2$s)!", queryPredicate,
--              region.getFullPath()), e);
++      throw new RuntimeException(String.format("An error occurred running Query (%1$s) on Region (%2$s)!", queryPredicate, region.getFullPath()), e);
      }
    }
  
@@@ -320,7 -326,7 +316,7 @@@
      assertEquals(Result.Status.OK, result.getStatus());
    }
  
--  protected static class Peer implements Iterable<RegionDefinition>, Serializable {
++  private static class Peer implements Iterable<RegionDefinition>, Serializable {
  
      private final Properties distributedSystemProperties;
  
@@@ -350,6 -356,6 +346,7 @@@
        return (regionDefinitions != null && regions.addAll(Arrays.asList(regionDefinitions)));
      }
  
++    @Override
      public Iterator<RegionDefinition> iterator() {
        return Collections.unmodifiableSet(regions).iterator();
      }
@@@ -377,7 -383,7 +374,7 @@@
      }
    }
  
--  protected static class IndexAdapter implements Index, Serializable {
++  private static class IndexAdapter implements Index, Serializable {
  
      private final IndexDetails.IndexType type;
  
@@@ -389,11 -395,11 +386,9 @@@
        this(name, IndexType.FUNCTIONAL, indexedExpression, fromClause);
      }
  
--    protected IndexAdapter(final String name, final IndexType type, final String indexedExpression,
--        final String fromClause) {
++    protected IndexAdapter(final String name, final IndexType type, final String indexedExpression, final String fromClause) {
        assert name != null : "The name of the Index cannot be null!";
--      assert indexedExpression != null : String.format("The expression to index for Index (%1$s) cannot be null!",
--          name);
++      assert indexedExpression != null : String.format("The expression to index for Index (%1$s) cannot be null!", name);
        assert fromClause != null : String.format("The from clause for Index (%1$s) cannot be null!", name);
  
        this.type = ObjectUtils.defaultIfNull(IndexDetails.IndexType.valueOf(type), IndexDetails.IndexType.FUNCTIONAL);
@@@ -402,42 -408,42 +397,52 @@@
        this.fromClause = fromClause;
      }
  
++    @Override
      public String getName() {
        return this.name;
      }
  
++    @Override
      public String getFromClause() {
        return this.fromClause;
      }
  
++    @Override
      public String getCanonicalizedFromClause() {
        return this.fromClause;
      }
  
++    @Override
      public String getIndexedExpression() {
        return this.indexedExpression;
      }
  
++    @Override
      public String getCanonicalizedIndexedExpression() {
        return this.indexedExpression;
      }
  
++    @Override
      public String getProjectionAttributes() {
        throw new UnsupportedOperationException("Not Implemented!");
      }
  
++    @Override
      public String getCanonicalizedProjectionAttributes() {
        throw new UnsupportedOperationException("Not Implemented!");
      }
  
++    @Override
      public Region<?, ?> getRegion() {
        throw new UnsupportedOperationException("Not Implemented!");
      }
  
++    @Override
      public IndexStatistics getStatistics() {
        throw new UnsupportedOperationException("Not Implemented!");
      }
  
++    @Override
      public IndexType getType() {
        return type.getType();
      }
@@@ -454,7 -460,7 +459,7 @@@
      }
    }
  
--  protected static class RegionDefinition implements Iterable<Index>, Serializable {
++  private static class RegionDefinition implements Iterable<Index>, Serializable {
  
      private final Class<?> keyConstraint;
      private final Class<?> valueConstraint;
@@@ -487,6 -493,6 +492,7 @@@
        return (indexes != null && this.indexes.addAll(Arrays.asList(indexes)));
      }
  
++    @Override
      public Iterator<Index> iterator() {
        return Collections.unmodifiableSet(indexes).iterator();
      }
@@@ -528,7 -534,7 +534,7 @@@
      }
    }
  
--  protected static abstract class AbstractBean<T extends Comparable<T>> implements MutableIdentifiable<T>, Serializable {
++  private static abstract class AbstractBean<T extends Comparable<T>> implements MutableIdentifiable<T>, Serializable {
  
      private T id;
      private String name;
@@@ -540,10 -546,10 +546,12 @@@
        this.id = id;
      }
  
++    @Override
      public T getId() {
        return id;
      }
  
++    @Override
      public void setId(final T id) {
        this.id = id;
      }
@@@ -588,7 -594,7 +596,7 @@@
      }
    }
  
--  public static class Consumer extends AbstractBean<Long> {
++  private static class Consumer extends AbstractBean<Long> {
  
      private volatile int units;
  
@@@ -608,7 -614,7 +616,7 @@@
      }
    }
  
--  public static class Producer extends AbstractBean<Long> {
++  private static class Producer extends AbstractBean<Long> {
  
      private volatile int units;
  
@@@ -628,7 -634,7 +636,7 @@@
      }
    }
  
--  public static class Proxy extends AbstractBean<Long> {
++  private static class Proxy extends AbstractBean<Long> {
  
      private final AbstractBean<Long> bean;
      private int unitsSnapshot;
@@@ -661,7 -667,7 +669,7 @@@
      }
    }
  
--  protected static enum CrudOperation {
++  private static enum CrudOperation {
      CREATE,
      RETRIEVE,
      UPDATE,

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java
index 4182601,d871062..917678d
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java
@@@ -31,9 -25,8 +31,11 @@@ import java.io.IOException
  import java.util.Properties;
  import java.util.Set;
  
 +import org.junit.Test;
 +import org.junit.experimental.categories.Category;
++import org.junit.runner.RunWith;
++import org.junit.runners.Parameterized;
 +
  import com.gemstone.gemfire.cache.Cache;
  import com.gemstone.gemfire.cache.CacheFactory;
  import com.gemstone.gemfire.distributed.DistributedMember;
@@@ -58,94 -61,75 +60,99 @@@ import com.gemstone.gemfire.test.junit.
   * DUnit test to test export and import of shared configuration.
   */
  @Category(DistributedTest.class)
 -@SuppressWarnings("unchecked")
+ @RunWith(Parameterized.class)
++@SuppressWarnings("unchecked")
  public class SharedConfigurationCommandsDUnitTest extends CliCommandTestBase {
  
 -  private static final long serialVersionUID = 1L;
    private static final int TIMEOUT = 10000;
    private static final int INTERVAL = 500;
  
 -  File newDeployableJarFile = new File("DeployCommandsDUnit1.jar");
 -  private transient ClassBuilder classBuilder = new ClassBuilder();
 +  private final String region1Name = "r1";
 +  private final String region2Name = "r2";
 +  private final String logLevel = "info";
 +
 +  private String groupName;
 +
 +  private String deployedJarName;
 +  private File newDeployableJarFile;
 +  private ClassBuilder classBuilder;
 +
 +  private String sharedConfigZipFileName;
 +  private String startArchiveFileName;
 +  private int[] ports;
 +
 +  private int locator1Port;
 +  private String locator1Name;
 +  private String locator1LogFilePath;
 +
 +  private int locator2Port;
 +  private String locator2Name;
 +  private String locator2LogFilePath;
 +
 +  private int locator1HttpPort;
 +  private int locator1JmxPort;
 +  private String locator1JmxHost;
  
+   public SharedConfigurationCommandsDUnitTest(boolean useHttpOnConnect) {
+     super(useHttpOnConnect);
+   }
+ 
 -  @Test
 -  public void testExportImportSharedConfiguration() {
 +  @Override
 +  protected final void postSetUpCliCommandTestBase() throws Exception {
      disconnectAllFromDS();
  
 -    final String region1Name = "r1";
 -    final String region2Name = "r2";
 -    final String groupName = "testRegionSharedConfigGroup";
 -    final String sharedConfigZipFileName = "sharedConfig.zip";
 -    final String deployedJarName = "DeployCommandsDUnit1.jar";
 -    final String logLevel = "info";
 -    final String startArchiveFileName = "stats.gfs";
 -    final int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(3);
 -
 -    // TODO Sourabh - the code below is similar to CliCommandTestBase.setUpJmxManagerOnVm0ThenConnect(..); we may want to consider
 -    // refactoring this and combine the duplicate code blocks using either the Template Method and/or Strategy design
 -    // patterns.  We can talk about this.
 -    // Start the Locator and wait for shared configuration to be available
 -    final int locator1Port = ports[0];
 -    final String locator1Name = "locator1-" + locator1Port;
 -    VM locatorAndMgr = Host.getHost(0).getVM(3);
 -    Object[] result = (Object[]) locatorAndMgr.invoke(new SerializableCallable() {
 -      @Override
 -      public Object call() {
 -        int httpPort;
 -        int jmxPort;
 -        String jmxHost;
 +    this.groupName = getName();
- 
 +    this.deployedJarName = "DeployCommandsDUnit1.jar";
 +    this.newDeployableJarFile = new File(this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + deployedJarName);
 +    this.classBuilder = new ClassBuilder();
  
 -        try {
 -          jmxHost = InetAddress.getLocalHost().getHostName();
 -        } catch (UnknownHostException ignore) {
 -          jmxHost = "localhost";
 -        }
 +    this.sharedConfigZipFileName = this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "sharedConfig.zip";
 +    this.startArchiveFileName = this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "stats.gfs";
 +    this.ports = getRandomAvailableTCPPorts(4);
  
 -        final int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
 +    this.locator1Port = this.ports[0];
 +    this.locator1Name = "locator1-" + this.locator1Port;
 +    this.locator1LogFilePath = this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "locator-" + this.locator1Port + ".log";
  
 -        jmxPort = ports[0];
 -        httpPort = ports[1];
 +    this.locator2Port = this.ports[1];
 +    this.locator2Name = "Locator2-" + this.locator2Port;
 +    this.locator2LogFilePath = this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "locator-" + this.locator2Port + ".log";
  
 -        final File locatorLogFile = new File("locator-" + locator1Port + ".log");
 +    this.locator1HttpPort = ports[2];
 +    this.locator1JmxPort = ports[3];
 +    this.locator1JmxHost = getIPLiteral();
 +  }
 +
 +  @Override
 +  public final void postTearDownCacheTestCase() throws Exception {
 +    for (int i = 0; i < 4; i++) {
 +      getHost(0).getVM(i).invoke(SharedConfigurationTestUtils.cleanupLocator);
 +    }
 +  }
 +
 +  @Test
 +  public void testExportImportSharedConfiguration() throws IOException {
 +    // Start the Locator and wait for shared configuration to be available
 +    VM locatorAndMgr = getHost(0).getVM(3);
 +    Set<DistributedMember> normalMembers1 = (Set<DistributedMember>) locatorAndMgr.invoke(new SerializableCallable() {
 +      @Override
 +      public Object call() {
 +        final File locatorLogFile = new File(locator1LogFilePath);
  
          final Properties locatorProps = new Properties();
 -        locatorProps.setProperty(DistributionConfig.NAME_NAME, locator1Name);
 -        locatorProps.setProperty(DistributionConfig.MCAST_PORT_NAME, "0");
 -        locatorProps.setProperty(DistributionConfig.LOG_LEVEL_NAME, "config");
 -        locatorProps.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, "true");
 -        locatorProps.setProperty(DistributionConfig.JMX_MANAGER_NAME, "true");
 -        locatorProps.setProperty(DistributionConfig.JMX_MANAGER_START_NAME, "true");
 -        locatorProps.setProperty(DistributionConfig.JMX_MANAGER_BIND_ADDRESS_NAME, String.valueOf(jmxHost));
 -        locatorProps.setProperty(DistributionConfig.JMX_MANAGER_PORT_NAME, String.valueOf(jmxPort));
 -        locatorProps.setProperty(DistributionConfig.HTTP_SERVICE_PORT_NAME, String.valueOf(httpPort));
 +        locatorProps.setProperty(NAME_NAME, locator1Name);
 +        locatorProps.setProperty(MCAST_PORT_NAME, "0");
 +        locatorProps.setProperty(LOG_LEVEL_NAME, "config");
 +        locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION_NAME, "true");
 +        locatorProps.setProperty(JMX_MANAGER_NAME, "true");
 +        locatorProps.setProperty(JMX_MANAGER_START_NAME, "true");
 +        locatorProps.setProperty(JMX_MANAGER_BIND_ADDRESS_NAME, String.valueOf(locator1JmxHost));
 +        locatorProps.setProperty(JMX_MANAGER_PORT_NAME, String.valueOf(locator1JmxPort));
 +        locatorProps.setProperty(HTTP_SERVICE_PORT_NAME, String.valueOf(locator1HttpPort));
  
          try {
 -          final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port, locatorLogFile,
 -              null, locatorProps);
 +          final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port, locatorLogFile, null, locatorProps);
 +
            WaitCriterion wc = new WaitCriterion() {
              @Override
              public boolean done() {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
index 2518b7d,d4fe871..ff73297
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommandsDUnitTest.java
@@@ -45,8 -47,12 +47,12 @@@ public class ShellCommandsDUnitTest ext
  
    private static final long serialVersionUID = 1L;
  
+   public ShellCommandsDUnitTest(boolean useHttpOnConnect) {
+     super(useHttpOnConnect);
+   }
+ 
    @Override
 -  public final void postSetUp() throws Exception {
 +  public final void postSetUpCliCommandTestBase() throws Exception {
      getDefaultShell();
    }
  

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java
----------------------------------------------------------------------
diff --cc geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java
index 9ab3fb4,9f44c14..b6fa8c4
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java
@@@ -52,8 -54,12 +54,12 @@@ public class UserCommandsDUnitTest exte
    final File jarFile = new File(this.jarDirectory, "UserCommandsDUnit.jar");
    boolean deleteJarDirectory = false;
  
+   public UserCommandsDUnitTest(boolean useHttpOnConnect) {
+     super(useHttpOnConnect);
+   }
+ 
    @Override
 -  public final void postSetUp() throws Exception {
 +  public final void postSetUpCliCommandTestBase() throws Exception {
      createUserCommandJarFile();
    }
  

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f6334f2f/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/wancommand/WANCommandTestBase.java
----------------------------------------------------------------------


[12/50] [abbrv] incubator-geode git commit: GEODE-17: Delete the author tag

Posted by kl...@apache.org.
GEODE-17: Delete the author tag


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/047bf8bd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/047bf8bd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/047bf8bd

Branch: refs/heads/feature/GEODE-1255
Commit: 047bf8bdddfc5faf0d61a15c89d1a43da65ecd4c
Parents: adb7208
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 22 15:54:12 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 22 15:54:12 2016 -0700

----------------------------------------------------------------------
 .../gemfire/distributed/internal/ConfigAttribute.java        | 1 -
 .../gemfire/distributed/internal/ConfigAttributeChecker.java | 1 -
 .../gemfire/distributed/internal/ConfigAttributeDesc.java    | 3 ---
 .../gemfire/distributed/internal/ConfigAttributeGetter.java  | 3 ---
 .../gemfire/distributed/internal/ConfigAttributeSetter.java  | 3 ---
 .../com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java | 8 +++-----
 6 files changed, 3 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/047bf8bd/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
index 51712f9..de2573c 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttribute.java
@@ -22,7 +22,6 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Created by jiliao on 2/3/16.
  * min and max are used only when type is Integer
  */
 @Target(ElementType.FIELD)

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/047bf8bd/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
index 14c1e54..21e130d 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeChecker.java
@@ -22,7 +22,6 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Created by jiliao on 2/3/16.
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/047bf8bd/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
index 57a4a72..bc6f017 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeDesc.java
@@ -21,9 +21,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-/**
- * Created by jiliao on 2/3/16.
- */
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ConfigAttributeDesc {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/047bf8bd/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
index 678ecf0..6e24074 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeGetter.java
@@ -21,9 +21,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-/**
- * Created by jiliao on 2/3/16.
- */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ConfigAttributeGetter {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/047bf8bd/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
index ad8ad65..2cec022 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ConfigAttributeSetter.java
@@ -21,9 +21,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-/**
- * Created by jiliao on 2/3/16.
- */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ConfigAttributeSetter {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/047bf8bd/geode-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
index 73cd9a0..a6c6435 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/ConfigSourceJUnitTest.java
@@ -16,15 +16,13 @@
  */
 package com.gemstone.gemfire.internal;
 
+import static org.junit.Assert.*;
+
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.junit.Assert.*;
-
-/**
- * Created by jiliao on 2/2/16.
- */
 @Category(UnitTest.class)
 public class ConfigSourceJUnitTest {
   @Test


[16/50] [abbrv] incubator-geode git commit: GEODE-17: OperationCode and its child classes are now Serializable. Add them to the excludedClasses.txt.

Posted by kl...@apache.org.
GEODE-17: OperationCode and its child classes are now Serializable. Add them to the excludedClasses.txt.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/734082ad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/734082ad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/734082ad

Branch: refs/heads/feature/GEODE-1255
Commit: 734082adc5e7b391223cffb325490ae4481faab9
Parents: 7e43465
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon Apr 25 09:00:27 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Mon Apr 25 09:00:27 2016 -0700

----------------------------------------------------------------------
 .../gemfire/codeAnalysis/excludedClasses.txt    | 28 +++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/734082ad/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/excludedClasses.txt
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/excludedClasses.txt b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/excludedClasses.txt
index d5682a6..4b2d447 100644
--- a/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/excludedClasses.txt
+++ b/geode-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/excludedClasses.txt
@@ -116,4 +116,30 @@ com/gemstone/org/apache/logging/log4j/core/config/xml/GemFireXmlConfiguration$Er
 com/gemstone/gemfire/internal/ra/GFConnectionFactoryImpl
 com/gemstone/gemfire/internal/ra/GFConnectionImpl
 com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionFactory
-com/gemstone/gemfire/cache/operations/internal/UpdateOnlyMap
\ No newline at end of file
+com/gemstone/gemfire/cache/operations/internal/UpdateOnlyMap
+com/gemstone/gemfire/cache/operations/CloseCQOperationContext
+com/gemstone/gemfire/cache/operations/DestroyOperationContext
+com/gemstone/gemfire/cache/operations/ExecuteCQOperationContext
+com/gemstone/gemfire/cache/operations/ExecuteFunctionOperationContext
+com/gemstone/gemfire/cache/operations/GetDurableCQsOperationContext
+com/gemstone/gemfire/cache/operations/GetOperationContext
+com/gemstone/gemfire/cache/operations/InterestOperationContext
+com/gemstone/gemfire/cache/operations/InvalidateOperationContext
+com/gemstone/gemfire/cache/operations/KeyOperationContext
+com/gemstone/gemfire/cache/operations/KeySetOperationContext
+com/gemstone/gemfire/cache/operations/KeyValueOperationContext
+com/gemstone/gemfire/cache/operations/OperationContext
+com/gemstone/gemfire/cache/operations/PutAllOperationContext
+com/gemstone/gemfire/cache/operations/PutOperationContext
+com/gemstone/gemfire/cache/operations/QueryOperationContext
+com/gemstone/gemfire/cache/operations/RegionClearOperationContext
+com/gemstone/gemfire/cache/operations/RegionCreateOperationContext
+com/gemstone/gemfire/cache/operations/RegionDestroyOperationContext
+com/gemstone/gemfire/cache/operations/RegionOperationContext
+com/gemstone/gemfire/cache/operations/RegisterInterestOperationContext
+com/gemstone/gemfire/cache/operations/RemoveAllOperationContext
+com/gemstone/gemfire/cache/operations/StopCQOperationContext
+com/gemstone/gemfire/cache/operations/UnregisterInterestOperationContext
+com/gemstone/gemfire/cache/operations/internal/GetOperationContextImpl
+com/gemstone/gemfire/internal/cache/operations/ContainsKeyOperationContext
+com/gemstone/gemfire/management/internal/security/ResourceOperationContext
\ No newline at end of file


[38/50] [abbrv] incubator-geode git commit: GEODE-1326: fix compilation errors

Posted by kl...@apache.org.
GEODE-1326: fix compilation errors


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/29fde0dc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/29fde0dc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/29fde0dc

Branch: refs/heads/feature/GEODE-1255
Commit: 29fde0dcc8ff483312a6b95a1c3203485ec27edb
Parents: a3f308a
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 14:31:32 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 14:31:32 2016 -0700

----------------------------------------------------------------------
 .../internal/cli/commands/FunctionCommandsDUnitTest.java         | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/29fde0dc/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
index 86c0273..bc92409 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
@@ -171,7 +171,7 @@ public class FunctionCommandsDUnitTest extends CliCommandTestBase {
 
   @Test
   public void testExecuteFunctionOnRegionWithCustomResultCollector() {
-    createDefaultSetup(null);
+    setUpJmxManagerOnVm0ThenConnect(null);
 
     final Function function = new TestFunction(true, TestFunction.TEST_FUNCTION_RETURN_ARGS);
     Host.getHost(0).getVM(0).invoke(new SerializableRunnable() {
@@ -384,7 +384,7 @@ public class FunctionCommandsDUnitTest extends CliCommandTestBase {
     Properties localProps = new Properties();
     localProps.setProperty(DistributionConfig.NAME_NAME, "Manager");
     localProps.setProperty(DistributionConfig.GROUPS_NAME, "Group1");
-    createDefaultSetup(localProps);
+    setUpJmxManagerOnVm0ThenConnect(localProps);
     Function function = new TestFunction(true, TestFunction.TEST_FUNCTION_RETURN_ARGS);
     FunctionService.registerFunction(function);
 


[04/50] [abbrv] incubator-geode git commit: GEODE-17: Shiro Integration

Posted by kl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
index 806e926..211d0b1 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
@@ -25,8 +25,8 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Set;
+import java.util.concurrent.Callable;
 import javax.management.JMX;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
@@ -47,10 +47,10 @@ import com.gemstone.gemfire.management.internal.ManagementConstants;
 import com.gemstone.gemfire.management.internal.SystemManagementService;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
 import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
 import com.gemstone.gemfire.management.internal.web.controllers.support.MemberMXBeanAdapter;
 import com.gemstone.gemfire.management.internal.web.util.UriUtils;
+import com.gemstone.gemfire.security.ShiroUtil;
 import org.apache.logging.log4j.Logger;
 import org.springframework.beans.propertyeditors.StringArrayPropertyEditor;
 import org.springframework.http.HttpStatus;
@@ -434,17 +434,11 @@ public abstract class AbstractCommandsController {
       SystemManagementService service = (SystemManagementService) ManagementService
           .getExistingManagementService(GemFireCacheImpl.getInstance());
       MBeanServer mbs = getMBeanServer();
-      MBeanServerWrapper wrapper = service.getManagementAgent().getMBeanServerWrapper();
-      MBeanServer wrappedMbs = mbs;
-      if(wrapper!=null) {
-        wrapper.setMBeanServer(mbs);
-        wrappedMbs = wrapper;
-      }
 
-      final DistributedSystemMXBean distributedSystemMXBean = JMX.newMXBeanProxy(wrappedMbs,
+      final DistributedSystemMXBean distributedSystemMXBean = JMX.newMXBeanProxy(mbs,
         MBeanJMXAdapter.getDistributedSystemName(), DistributedSystemMXBean.class);
 
-      managingMemberMXBeanProxy = createMemberMXBeanForManagerUsingProxy(wrappedMbs,
+      managingMemberMXBeanProxy = createMemberMXBeanForManagerUsingProxy(mbs,
         distributedSystemMXBean.getMemberObjectName());
     }
 
@@ -554,14 +548,20 @@ public abstract class AbstractCommandsController {
   protected String processCommand(final String command) {
     return processCommand(command, getEnvironment(), null);
   }
+  protected Callable<ResponseEntity<String>> getProcessCommandCallable(final String command){
+    return getProcessCommandCallable(command, null);
+  }
 
-  protected String processCommandWithCredentials(final String command, Properties credentials) {
-    if (credentials != null) {
-      EnvironmentVariablesHandlerInterceptor.CREDENTIALS.set(credentials);
-    }
-    return processCommand(command, getEnvironment(), null);
+  protected Callable<ResponseEntity<String>> getProcessCommandCallable(final String command, final byte[][] fileData){
+    Callable callable = new Callable<ResponseEntity<String>>() {
+      @Override public ResponseEntity<String> call() throws Exception {
+        return new ResponseEntity<String>(processCommand(command, fileData), HttpStatus.OK);
+      }
+    };
+    return ShiroUtil.associateWith(callable);
   }
 
+
   /**
    * Executes the specified command as entered by the user using the GemFire Shell (Gfsh).  Note, Gfsh performs
    * validation of the command during parsing before sending the command to the Manager for processing.
@@ -579,13 +579,6 @@ public abstract class AbstractCommandsController {
     return processCommand(command, getEnvironment(), fileData);
   }
 
-  protected String processCommandWithCredentials(final String command, final byte[][] fileData, Properties credentials) {
-    if (credentials != null) {
-      EnvironmentVariablesHandlerInterceptor.CREDENTIALS.set(credentials);
-    }
-    return processCommand(command, getEnvironment(), fileData);
-  }
-
   /**
    * Executes the specified command as entered by the user using the GemFire Shell (Gfsh).  Note, Gfsh performs
    * validation of the command during parsing before sending the command to the Manager for processing.

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
index 892833f..fa0f8e9 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java
@@ -17,16 +17,12 @@
 package com.gemstone.gemfire.management.internal.web.controllers;
 
 import java.io.IOException;
-import java.util.Properties;
 import java.util.concurrent.Callable;
 
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
 import com.gemstone.gemfire.management.internal.web.util.ConvertUtils;
-
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -170,13 +166,7 @@ public class ConfigCommandsController extends AbstractMultiPartCommandsControlle
       command.addOption(CliStrings.EXPORT_CONFIG__DIR, decode(directory));
     }
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.GET, value = "/config/cluster")
@@ -191,13 +181,7 @@ public class ConfigCommandsController extends AbstractMultiPartCommandsControlle
       command.addOption(CliStrings.EXPORT_SHARED_CONFIG__DIR, directory);
     }
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.POST, value = "/config/cluster")
@@ -209,13 +193,7 @@ public class ConfigCommandsController extends AbstractMultiPartCommandsControlle
 
     command.addOption(CliStrings.IMPORT_SHARED_CONFIG__ZIP, zipFileName);
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), ConvertUtils.convert(zipFileResources), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString(), ConvertUtils.convert(zipFileResources));
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
index c04ce4a..91004b3 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java
@@ -16,15 +16,11 @@
  */
 package com.gemstone.gemfire.management.internal.web.controllers;
 
-import java.util.Properties;
 import java.util.concurrent.Callable;
 
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
-
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -139,13 +135,7 @@ public class DataCommandsController extends AbstractCommandsController {
     command.addOption(CliStrings.EXPORT_DATA__REGION, decode(regionNamePath));
     command.addOption(CliStrings.EXPORT_DATA__FILE, decode(file));
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.POST, value = "/members/{member}/regions/{region}/data")
@@ -159,13 +149,7 @@ public class DataCommandsController extends AbstractCommandsController {
     command.addOption(CliStrings.IMPORT_DATA__REGION, decode(regionNamePath));
     command.addOption(CliStrings.IMPORT_DATA__FILE, decode(file));
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.GET, value = "/regions/{region}/data/location")
@@ -208,13 +192,7 @@ public class DataCommandsController extends AbstractCommandsController {
     command.addOption(CliStrings.QUERY__STEPNAME, stepName);
     command.addOption(CliStrings.QUERY__INTERACTIVE, String.valueOf(Boolean.TRUE.equals(interactive)));
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.POST, value = "/regions/data", params = "op=rebalance")
@@ -238,13 +216,7 @@ public class DataCommandsController extends AbstractCommandsController {
     command.addOption(CliStrings.REBALANCE__SIMULATE, String.valueOf(simulate));
     command.addOption(CliStrings.REBALANCE__TIMEOUT, String.valueOf(timeout));
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
index d90cf88..d99909e 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java
@@ -16,15 +16,11 @@
  */
 package com.gemstone.gemfire.management.internal.web.controllers;
 
-import java.util.Properties;
 import java.util.concurrent.Callable;
 
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
-
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -70,13 +66,7 @@ public class DiskStoreCommandsController extends AbstractCommandsController {
       command.addOption(CliStrings.BACKUP_DISK_STORE__BASELINEDIR, decode(baselineDir));
     }
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.POST, value = "/diskstores/{name}", params = "op=compact")
@@ -91,13 +81,7 @@ public class DiskStoreCommandsController extends AbstractCommandsController {
       command.addOption(CliStrings.COMPACT_DISK_STORE__GROUP, StringUtils.concat(groups, StringUtils.COMMA_DELIMITER));
     }
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.POST, value = "/diskstores")

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
index da214a2..e8cee1d 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java
@@ -16,15 +16,11 @@
  */
 package com.gemstone.gemfire.management.internal.web.controllers;
 
-import java.util.Properties;
 import java.util.concurrent.Callable;
 
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
-
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -111,15 +107,7 @@ public class FunctionCommandsController extends AbstractCommandsController {
     if (hasValue(resultCollector)) {
       command.addOption(CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR, resultCollector);
     }
-
-
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   @RequestMapping(method = RequestMethod.DELETE, value = "/functions/{id}")

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
index 68917a9..2326109 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java
@@ -16,15 +16,11 @@
  */
 package com.gemstone.gemfire.management.internal.web.controllers;
 
-import java.util.Properties;
 import java.util.concurrent.Callable;
 
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
-
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -89,13 +85,7 @@ public class MiscellaneousCommandsController extends AbstractCommandsController
       command.addOption(CliStrings.EXPORT_LOGS__ENDTIME, endTime);
     }
 
-    final Properties credentials = EnvironmentVariablesHandlerInterceptor.CREDENTIALS.get();
-
-    return new Callable<ResponseEntity<String>>() {
-      @Override public ResponseEntity<String> call() throws Exception {
-        return new ResponseEntity<String>(processCommandWithCredentials(command.toString(), credentials), HttpStatus.OK);
-      }
-    };
+    return getProcessCommandCallable(command.toString());
   }
 
   // TODO determine whether Async functionality is required

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
index 569440d..34cf380 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
@@ -16,26 +16,21 @@
  */
 package com.gemstone.gemfire.management.internal.web.controllers.support;
 
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
 import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.management.ManagementService;
-import com.gemstone.gemfire.management.internal.SystemManagementService;
-import com.gemstone.gemfire.management.internal.security.ManagementInterceptor;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
 import com.gemstone.gemfire.security.Authenticator;
+import com.gemstone.gemfire.security.ShiroUtil;
 import org.apache.logging.log4j.Logger;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-
 /**
  * The GetEnvironmentHandlerInterceptor class handles extracting Gfsh environment variables encoded in the HTTP request
  * message as request parameters.
@@ -54,10 +49,6 @@ public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAd
 
   private Authenticator auth = null;
 
-
-  public static final ThreadLocal<Properties> CREDENTIALS = new ThreadLocal<Properties>();
-
-
   private static final ThreadLocal<Map<String, String>> ENV = new ThreadLocal<Map<String, String>>() {
     @Override
     protected Map<String, String> initialValue() {
@@ -100,7 +91,9 @@ public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAd
 
     }
 
-    securityCheck(requestParameterValues);
+    String username = requestParameterValues.get(ResourceConstants.USER_NAME);
+    String password = requestParameterValues.get(ResourceConstants.PASSWORD);
+    ShiroUtil.login(username, password);
 
     ENV.set(requestParameterValues);
 
@@ -108,37 +101,6 @@ public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAd
   }
 
 
-
-  protected void securityCheck(final Map<String, String> environment) {
-
-    Properties credentials = new Properties();
-
-    Iterator<Entry<String, String>> it = environment.entrySet().iterator();
-    while (it.hasNext()) {
-      Entry<String, String> entry = it.next();
-      if (entry.getKey().startsWith(SECURITY_VARIABLE_REQUEST_HEADER_PREFIX)) {
-        credentials.put(entry.getKey(), entry.getValue());
-      }
-
-    }
-
-    GemFireCacheImpl instance = GemFireCacheImpl.getInstance();
-    if(instance != null){
-      SystemManagementService service = (SystemManagementService) ManagementService
-          .getExistingManagementService(instance);
-
-      ManagementInterceptor interceptor = service.getManagementAgent().getManagementInterceptor();
-      if(interceptor!=null) {
-        interceptor.authenticate(credentials);
-      }
-      CREDENTIALS.set(credentials);
-    }
-
-
-  }
-
-
-
   @Override
   public void afterCompletion(final HttpServletRequest request,
                               final HttpServletResponse response,
@@ -146,16 +108,6 @@ public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAd
                               final Exception ex)
     throws Exception
   {
-    afterConcurrentHandlingStarted(request, response, handler);
+    ShiroUtil.logout();
   }
-
-  @Override
-  public void afterConcurrentHandlingStarted(final HttpServletRequest request,
-                                             final HttpServletResponse response,
-                                             final Object handler)
-    throws Exception
-  {
-    ENV.remove();
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
new file mode 100644
index 0000000..3028f0b
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
@@ -0,0 +1,173 @@
+/*
+ * 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 com.gemstone.gemfire.security;
+
+import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
+
+import java.lang.reflect.Method;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.Principal;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import javax.management.remote.JMXPrincipal;
+import javax.security.auth.Subject;
+
+import com.gemstone.gemfire.cache.operations.OperationContext;
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.internal.ClassLoadUtil;
+import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+import com.gemstone.gemfire.internal.lang.StringUtils;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+
+public class CustomAuthRealm extends AuthorizingRealm{
+  public static final String REALM_NAME = "CUSTOMAUTHREALM";
+
+  private static final Logger logger = LogManager.getLogger(CustomAuthRealm.class);
+  private String authzFactoryName;
+  private String postAuthzFactoryName;
+  private String authenticatorFactoryName;
+  private Properties securityProps = null;
+  private ConcurrentMap<Principal, AccessControl> cachedAuthZCallback;
+  private ConcurrentMap<Principal, AccessControl> cachedPostAuthZCallback;
+
+  public CustomAuthRealm(Properties securityProps) {
+    this.securityProps = securityProps;
+    this.authzFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME);
+    this.postAuthzFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_PP_NAME);
+    this.authenticatorFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
+    this.cachedAuthZCallback = new ConcurrentHashMap<>();
+    this.cachedPostAuthZCallback = new ConcurrentHashMap<>();
+    logger.info("Started Management interceptor on JMX connector");
+  }
+
+  @Override
+  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+    UsernamePasswordToken authToken = (UsernamePasswordToken) token;
+    String username = authToken.getUsername();
+    String password = new String(authToken.getPassword());
+
+    Properties credentialProps = new Properties();
+    credentialProps.put(ResourceConstants.USER_NAME, username);
+    credentialProps.put(ResourceConstants.PASSWORD, password);
+
+    Principal principal  = getAuthenticator(securityProps).authenticate(credentialProps);
+
+    return new SimpleAuthenticationInfo(principal, authToken.getPassword(), REALM_NAME);
+  }
+
+
+  @Override
+  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
+    // we intercepted the call to this method by overriding the isPermitted call
+    return null;
+  }
+
+  @Override
+  public boolean isPermitted(PrincipalCollection principals, Permission permission) {
+    ResourceOperationContext context =(ResourceOperationContext)permission;
+    Principal principal = (Principal)principals.getPrimaryPrincipal();
+
+    AccessControl accessControl = getAccessControl(principal, false);
+    return accessControl.authorizeOperation(null, context);
+  }
+
+  public AccessControl getAccessControl(Principal principal, boolean isPost) {
+    if (!isPost) {
+      if (cachedAuthZCallback.containsKey(principal)) {
+        return cachedAuthZCallback.get(principal);
+      } else if (!StringUtils.isBlank(authzFactoryName)) {
+        try {
+          Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
+          AccessControl authzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
+          authzCallback.init(principal, null);
+          cachedAuthZCallback.put(principal, authzCallback);
+          return authzCallback;
+        } catch (Exception ex) {
+          throw new AuthenticationFailedException(
+              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+        }
+      }
+    } else {
+      if (cachedPostAuthZCallback.containsKey(principal)) {
+        return cachedPostAuthZCallback.get(principal);
+      } else if (!StringUtils.isBlank(postAuthzFactoryName)) {
+        try {
+          Method authzMethod = ClassLoadUtil.methodFromName(postAuthzFactoryName);
+          AccessControl postAuthzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
+          postAuthzCallback.init(principal, null);
+          cachedPostAuthZCallback.put(principal, postAuthzCallback);
+          return postAuthzCallback;
+        } catch (Exception ex) {
+          throw new AuthenticationFailedException(
+              LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+        }
+      }
+    }
+    return null;
+  }
+
+  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationFailedException {
+    Authenticator auth;
+    try {
+      Method instanceGetter = ClassLoadUtil.methodFromName(this.authenticatorFactoryName);
+      auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
+    } catch (Exception ex) {
+      throw new AuthenticationFailedException(
+          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
+    }
+    if (auth == null) {
+      throw new AuthenticationFailedException(
+          LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
+    }
+    auth.init(gfSecurityProperties);
+    return auth;
+  }
+
+  public void postAuthorize(OperationContext context) {
+    if (StringUtils.isBlank(postAuthzFactoryName)){
+      return ;
+    }
+
+    AccessControlContext acc = AccessController.getContext();
+    Subject subject = Subject.getSubject(acc);
+    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
+    if (principals == null || principals.isEmpty()) {
+      throw new SecurityException(ACCESS_DENIED_MESSAGE);
+    }
+    Principal principal = principals.iterator().next();
+    AccessControl accessControl = getAccessControl(principal, true);
+    if (!accessControl.authorizeOperation(null, context)) {
+      throw new SecurityException(ACCESS_DENIED_MESSAGE);
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
new file mode 100644
index 0000000..7151dc5
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
@@ -0,0 +1,66 @@
+/*
+ * 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 com.gemstone.gemfire.security;
+
+import static com.gemstone.gemfire.management.internal.security.ResourceConstants.*;
+
+import java.util.Properties;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+import javax.management.remote.JMXAuthenticator;
+import javax.management.remote.JMXConnectionNotification;
+import javax.security.auth.Subject;
+
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+
+/**
+ * this will make JMX authentication to use Shiro for Authentication
+ */
+
+public class JMXShiroAuthenticator implements JMXAuthenticator, NotificationListener {
+
+  @Override
+  public Subject authenticate(Object credentials) {
+    String username = null, password = null;
+    if (credentials instanceof String[]) {
+      final String[] aCredentials = (String[]) credentials;
+      username = aCredentials[0];
+      password = aCredentials[1];
+    } else if (credentials instanceof Properties) {
+      username = ((Properties) credentials).getProperty(ResourceConstants.USER_NAME);
+      password = ((Properties) credentials).getProperty(ResourceConstants.PASSWORD);
+    } else {
+      throw new SecurityException(WRONGE_CREDENTIALS_MESSAGE);
+    }
+
+    ShiroUtil.login(username, password);
+
+    // we are not using JMX mechanism to do authentication, therefore, this return value does not matter
+    return null;
+  }
+
+  @Override
+  public void handleNotification(Notification notification, Object handback) {
+    if (notification instanceof JMXConnectionNotification) {
+      JMXConnectionNotification cxNotification = (JMXConnectionNotification) notification;
+      String type = cxNotification.getType();
+      if (JMXConnectionNotification.CLOSED.equals(type)) {
+        ShiroUtil.logout();
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
new file mode 100644
index 0000000..d19ff00
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
@@ -0,0 +1,94 @@
+package com.gemstone.gemfire.security;
+
+import java.util.concurrent.Callable;
+
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.ShiroException;
+import org.apache.shiro.UnavailableSecurityManagerException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.ThreadContext;
+
+public class ShiroUtil {
+
+  public static void login(String username, String password){
+    if(!isShiroConfigured())
+      return;
+
+    Subject currentUser = SecurityUtils.getSubject();
+
+    UsernamePasswordToken token =
+        new UsernamePasswordToken(username, password);
+    try {
+      LogService.getLogger().info("Logging in "+username+"/"+password);
+      currentUser.login(token);
+    } catch (ShiroException e) {
+      throw new AuthenticationFailedException(e.getMessage(), e);
+    }
+  }
+
+  public static void logout(){
+    if(!isShiroConfigured())
+      return;
+
+    Subject currentUser = SecurityUtils.getSubject();
+    try {
+      LogService.getLogger().info("Logging out "+currentUser.getPrincipal());
+      currentUser.logout();
+    }
+    catch(ShiroException e){
+      throw new AuthenticationFailedException(e.getMessage(), e);
+    }
+    // clean out Shiro's thread local content
+    ThreadContext.remove();
+  }
+
+  public static Callable associateWith(Callable callable){
+    if(!isShiroConfigured())
+      return callable;
+
+    Subject currentUser = SecurityUtils.getSubject();
+    return currentUser.associateWith(callable);
+  }
+
+  public static void authorize(ResourceOperationContext context) {
+    authorize(context.getResource().name(), context.getOperationCode().name(), context.getRegionName());
+  }
+
+  public static void authorize(ResourceOperation resourceOperation) {
+    authorize(resourceOperation.resource().name(), resourceOperation.operation().name());
+  }
+
+  public static void authorize(String resource, String operation){
+    authorize(resource, operation, null);
+  }
+
+  public static void authorize(String resource, String operation, String regionName){
+    if(!isShiroConfigured())
+      return;
+
+    ResourceOperationContext permission = new ResourceOperationContext(resource, operation, regionName);
+    Subject currentUser = SecurityUtils.getSubject();
+    try {
+      currentUser.checkPermission(permission);
+    }
+    catch(ShiroException e){
+      throw new GemFireSecurityException(e.getMessage(), e);
+    }
+  }
+
+  private static boolean isShiroConfigured(){
+    try{
+      SecurityUtils.getSecurityManager();
+    }
+    catch(UnavailableSecurityManagerException e){
+      return false;
+    }
+    return true;
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
index a3d5d13..35bb3f2 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/AccessControlMBeanJUnitTest.java
@@ -20,11 +20,12 @@ import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
 import org.junit.Before;
 import org.junit.ClassRule;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.assertj.core.api.Assertions.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 @Category(IntegrationTest.class)
 public class AccessControlMBeanJUnitTest {
@@ -49,6 +50,7 @@ public class AccessControlMBeanJUnitTest {
    * @throws Exception
    */
   @Test
+  @Ignore("No AccessControlMBean")
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   public void testAnyAccess() throws Exception {
     assertThat(bean.authorize("DATA", "READ")).isEqualTo(false);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
index 929032a..baa8393 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
@@ -16,6 +16,8 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.management.CacheServerMXBean;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
@@ -25,8 +27,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
 @Category(IntegrationTest.class)
 public class CacheServerMBeanAuthorizationJUnitTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -49,7 +49,7 @@ public class CacheServerMBeanAuthorizationJUnitTest {
   @JMXConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testDataAdmin() throws Exception {
     bean.removeIndex("foo");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:READ");
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
     bean.fetchLoadProbe();
     bean.getActiveCQCount();
     bean.stopContinuousQuery("bar");
@@ -61,8 +61,8 @@ public class CacheServerMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "cluster-admin", password = "1234567")
   public void testClusterAdmin() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:READ");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
     bean.fetchLoadProbe();
   }
 
@@ -70,21 +70,21 @@ public class CacheServerMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testDataUser() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
     bean.executeContinuousQuery("bar");
-    assertThatThrownBy(() -> bean.fetchLoadProbe()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining("CLUSTER:READ");
   }
 
   @Test
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:READ");
-    assertThatThrownBy(() -> bean.fetchLoadProbe()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getActiveCQCount()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.isRunning()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.isRunning()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).hasMessageContaining("CLUSTER:READ");
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
new file mode 100644
index 0000000..e55623d
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import static org.assertj.core.api.Assertions.*;
+
+import com.gemstone.gemfire.internal.AvailablePort;
+import com.gemstone.gemfire.management.CacheServerMXBean;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(IntegrationTest.class)
+public class CacheServerMBeanShiroJUnitTest {
+  private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+
+  private CacheServerMXBean bean;
+
+  @ClassRule
+  public static ShiroCacheStartRule serverRule = new ShiroCacheStartRule(jmxManagerPort, "shiro.ini");
+
+  @Rule
+  public MBeanServerConnectionRule connectionRule = new MBeanServerConnectionRule(jmxManagerPort);
+
+  @Before
+  public void setUp() throws Exception {
+    bean = connectionRule.getProxyMBean(CacheServerMXBean.class);
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "root", password = "secret")
+  public void testAllAccess() throws Exception {
+    bean.removeIndex("foo");
+    bean.executeContinuousQuery("bar");
+    bean.fetchLoadProbe();
+    bean.getActiveCQCount();
+    bean.stopContinuousQuery("bar");
+    bean.closeAllContinuousQuery("bar");
+    bean.isRunning();
+    bean.showClientQueueDetails("foo");
+  }
+
+
+  @Test
+  @JMXConnectionConfiguration(user = "guest", password = "guest")
+  public void testNoAccess() throws Exception {
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.isRunning()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).hasMessageContaining("CLUSTER:READ");
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
index 10bc7ae..5e49f92 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
@@ -16,7 +16,7 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
-import static org.assertj.core.api.Assertions.*;
+import static org.assertj.core.api.AssertionsForClassTypes.*;
 
 import java.util.List;
 
@@ -62,6 +62,8 @@ public class CliCommandsSecurityTest {
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   // the tests are run in alphabetical order, so the naming of the tests do matter
   public void a_testNoAccess(){
+//    List<TestCommand> clusterReads = new ArrayList<>();
+//    clusterReads.add(new TestCommand("deploy --jar=group1_functions.jar --group=Group1", "CLUSTER:MANAGE"));
     for (TestCommand command:commands) {
       LogService.getLogger().info("processing: "+command.getCommand());
       // for those commands that don't require any permission, any user can execute them
@@ -70,8 +72,7 @@ public class CliCommandsSecurityTest {
       }
       else {
         assertThatThrownBy(() -> bean.processCommand(command.getCommand()))
-            .hasMessageContaining(command.getPermission())
-            .isInstanceOf(SecurityException.class);
+            .hasMessageContaining(command.getPermission());
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
index 085723c..7517f49 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
@@ -16,8 +16,11 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.management.MemberMXBean;
+import com.gemstone.gemfire.security.GemFireSecurityException;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -25,8 +28,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
 @Category(IntegrationTest.class)
 public class DataCommandsSecurityTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -49,11 +50,9 @@ public class DataCommandsSecurityTest {
   @JMXConnectionConfiguration(user = "region1-user", password = "1234567")
   public void testDataUser() throws Exception {
     bean.processCommand("locate entry --key=k1 --region=region1");
-    bean.processCommand("query --query='SELECT * FROM /region1'");
 
     // can't operate on secureRegion
-    assertThatThrownBy(() -> bean.processCommand("locate entry --key=k1 --region=secureRegion")).isInstanceOf(SecurityException.class);
-    assertThatThrownBy(() -> bean.processCommand("query --query='SELECT * FROM /secureRegion")).isInstanceOf(SecurityException.class);
+    assertThatThrownBy(() -> bean.processCommand("locate entry --key=k1 --region=secureRegion")).isInstanceOf(GemFireSecurityException.class);
   }
 
   @JMXConnectionConfiguration(user = "secure-user", password = "1234567")
@@ -61,27 +60,23 @@ public class DataCommandsSecurityTest {
   public void testSecureDataUser(){
     // can do all these on both regions
     bean.processCommand("locate entry --key=k1 --region=region1");
-    bean.processCommand("query --query='SELECT * FROM /region1'");
-
     bean.processCommand("locate entry --key=k1 --region=secureRegion");
-    bean.processCommand("query --query='SELECT * FROM /secureRegion'");
   }
 
   // dataUser has all the permissions granted, but not to region2 (only to region1)
   @JMXConnectionConfiguration(user = "region1-user", password = "1234567")
   @Test
   public void testRegionAcess(){
-    assertThatThrownBy(() -> bean.processCommand("rebalance --include-region=region2")).isInstanceOf(SecurityException.class)
+    assertThatThrownBy(() -> bean.processCommand("rebalance --include-region=region2")).isInstanceOf(GemFireSecurityException.class)
         .hasMessageContaining("DATA:MANAGE");
 
-    assertThatThrownBy(() -> bean.processCommand("export data --region=region2 --file=foo.txt --member=value")).isInstanceOf(SecurityException.class);
-    assertThatThrownBy(() -> bean.processCommand("import data --region=region2 --file=foo.txt --member=value")).isInstanceOf(SecurityException.class);
+    assertThatThrownBy(() -> bean.processCommand("export data --region=region2 --file=foo.txt --member=value")).isInstanceOf(GemFireSecurityException.class);
+    assertThatThrownBy(() -> bean.processCommand("import data --region=region2 --file=foo.txt --member=value")).isInstanceOf(GemFireSecurityException.class);
 
-    assertThatThrownBy(() -> bean.processCommand("put --key=key1 --value=value1 --region=region2")).isInstanceOf(SecurityException.class)
+    assertThatThrownBy(() -> bean.processCommand("put --key=key1 --value=value1 --region=region2")).isInstanceOf(GemFireSecurityException.class)
         .hasMessageContaining("DATA:WRITE");
 
-    assertThatThrownBy(() -> bean.processCommand("get --key=key1 --region=region2")).isInstanceOf(SecurityException.class);
-    assertThatThrownBy(() -> bean.processCommand("query --query='SELECT * FROM /region2'")).isInstanceOf(SecurityException.class);
-  }
+    assertThatThrownBy(() -> bean.processCommand("get --key=key1 --region=region2")).isInstanceOf(GemFireSecurityException.class);
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
index 2fddb39..f248736 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
@@ -16,6 +16,8 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.management.DiskStoreMXBean;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
@@ -26,8 +28,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
 @Category(IntegrationTest.class)
 public class DiskStoreMXBeanSecurityJUnitTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -69,7 +69,7 @@ public class DiskStoreMXBeanSecurityJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.flush()).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.flush()).hasMessageContaining("DATA:MANAGE");
     assertThatThrownBy(() -> bean.forceCompaction()).hasMessageContaining("DATA:MANAGE");
     assertThatThrownBy(() -> bean.forceRoll()).hasMessageContaining("DATA:MANAGE");
     assertThatThrownBy(() -> bean.getCompactionThreshold()).hasMessageContaining("CLUSTER:READ");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
index 33758b7..3a9412d 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
@@ -16,6 +16,11 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import javax.management.ObjectName;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.management.GatewaySenderMXBean;
 import com.gemstone.gemfire.management.ManagementService;
@@ -29,11 +34,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import javax.management.ObjectName;
-
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.Mockito.*;
-
 @Category(IntegrationTest.class)
 public class GatewaySenderMBeanSecurityTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -88,18 +88,18 @@ public class GatewaySenderMBeanSecurityTest {
   @Test
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.getAlertThreshold()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getAverageDistributionTimePerBatch()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getBatchSize()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getMaximumQueueMemory()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getOrderPolicy()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isBatchConflationEnabled()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isManualStart()).hasMessageStartingWith("Access Denied: Not authorized for CLUSTER:READ");
-    assertThatThrownBy(() -> bean.pause()).hasMessageStartingWith("Access Denied: Not authorized for DATA:MANAGE");
-    assertThatThrownBy(() -> bean.rebalance()).hasMessageStartingWith("Access Denied: Not authorized for DATA:MANAGE");
-    assertThatThrownBy(() -> bean.resume()).hasMessageStartingWith("Access Denied: Not authorized for DATA:MANAGE");
-    assertThatThrownBy(() -> bean.start()).hasMessageStartingWith("Access Denied: Not authorized for DATA:MANAGE");
-    assertThatThrownBy(() -> bean.stop()).hasMessageStartingWith("Access Denied: Not authorized for DATA:MANAGE");
+    assertThatThrownBy(() -> bean.getAlertThreshold()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.getAverageDistributionTimePerBatch()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.getBatchSize()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.getMaximumQueueMemory()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.getOrderPolicy()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.isBatchConflationEnabled()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.isManualStart()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.pause()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.rebalance()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.resume()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.start()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.stop()).hasMessageContaining("DATA:MANAGE");
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
index 4184597..5149883 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshCommandsSecurityTest.java
@@ -2,17 +2,28 @@ package com.gemstone.gemfire.management.internal.security;
 
 import static org.junit.Assert.*;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
 import com.gemstone.gemfire.internal.AvailablePortHelper;
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.management.cli.Result;
 import com.gemstone.gemfire.management.internal.cli.HeadlessGfsh;
 import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
+import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 @Category(IntegrationTest.class)
+@RunWith(Parameterized.class)
 public class GfshCommandsSecurityTest {
   private static int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
   private static int jmxPort = ports[0];
@@ -25,7 +36,19 @@ public class GfshCommandsSecurityTest {
       jmxPort, httpPort, "cacheServer.json");
 
   @Rule
-  public GfshShellConnectionRule gfshConnection = new GfshShellConnectionRule(jmxPort, httpPort, true);
+  public GfshShellConnectionRule gfshConnection = null;
+
+  public GfshCommandsSecurityTest(boolean useHttp){
+    gfshConnection = new GfshShellConnectionRule(jmxPort, httpPort, useHttp);
+  }
+
+  @Parameterized.Parameters
+  public static Collection parameters() {
+    return Arrays.asList(new Object[][] {
+        { false},  // useHttp=false,
+        { true } // useHttp=true,
+    });
+  }
 
   @Before
   public void before(){
@@ -46,34 +69,78 @@ public class GfshCommandsSecurityTest {
 
   @Test
   @JMXConnectionConfiguration(user = "cluster-reader", password = "1234567")
-  public void testAuthorized() throws Exception{
-    CommandResult result = null;
-//    List<TestCommand> commands = TestCommand.getCommandsOfPermission("DATA:READ");
-//    for(TestCommand command:commands){
-//      System.out.println("Processing command: "+command.getCommand());
-//      gfsh.executeCommand(command.getCommand());
-//      result = (CommandResult)gfsh.getResult();
-//      System.out.println(result);
-//    }
-//
-//    List<TestCommand> others = TestCommand.getCommands();
-//    others.removeAll(commands);
-//    for(TestCommand command:others){
-//      gfsh.executeCommand(command.getCommand());
-//      result = (CommandResult)gfsh.getResult();
-//      System.out.println(result);
-//    }
-    gfsh.executeCommand("describe config --member=Member1");
-    result = (CommandResult)gfsh.getResult();
-    System.out.println("result is: "+ result);
+  public void testClusterReader() throws Exception{
+    runCommandsWithAndWithout("CLUSTER:READ");
   }
 
   @Test
-  @JMXConnectionConfiguration(user = "cluster-reader", password = "1234567")
-  public void testNotAuthorized() throws Exception{
-    CommandResult result = null;
-    gfsh.executeCommand("alter runtime --member=server1 --log-level=finest --enable-statistics=true");
-    result = (CommandResult)gfsh.getResult();
-    System.out.println("result is: "+ result);
+  @JMXConnectionConfiguration(user = "cluster-writer", password = "1234567")
+  public void testClusterWriter() throws Exception{
+    runCommandsWithAndWithout("CLUSTER:WRITE");
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "cluster-manager", password = "1234567")
+  public void testClusterManager() throws Exception{
+    runCommandsWithAndWithout("CLUSTER:MANAGE");
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "data-reader", password = "1234567")
+  public void testDataReader() throws Exception{
+    runCommandsWithAndWithout("DATA:READ");
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "data-writer", password = "1234567")
+  public void testDataWriter() throws Exception{
+    runCommandsWithAndWithout("DATA:WRITE");
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "data-manager", password = "1234567")
+  public void testDataManager() throws Exception{
+    runCommandsWithAndWithout("DATA:MANAGE");
+  }
+
+
+  private void runCommandsWithAndWithout(String permission) throws Exception{
+    List<TestCommand> permitted = TestCommand.getCommandsOfPermission(permission);
+    for(TestCommand clusterRead:permitted) {
+      LogService.getLogger().info("Processing authorized command: "+clusterRead.getCommand());gfsh.executeCommand(clusterRead.getCommand());
+      CommandResult result = (CommandResult) gfsh.getResult();
+      assertNotNull(result);
+
+      if(result.getResultData() instanceof ErrorResultData) {
+        assertNotEquals(ResultBuilder.ERRORCODE_UNAUTHORIZED, ((ErrorResultData) result.getResultData()).getErrorCode());
+      }
+      else{
+        assertEquals(Result.Status.OK, result.getStatus()) ;
+      }
+    }
+
+    List<TestCommand> others = TestCommand.getCommands();
+    others.removeAll(permitted);
+    for(TestCommand other:others) {
+      // skip no permission commands
+      if(other.getPermission()==null)
+        continue;
+
+      LogService.getLogger().info("Processing unauthorized command: "+other.getCommand());
+      gfsh.executeCommand(other.getCommand());
+      CommandResult result = (CommandResult) gfsh.getResult();
+      int errorCode = ((ErrorResultData) result.getResultData()).getErrorCode();
+
+      // for some commands there are pre execution checks to check for user input error, will skip those commands
+      if(errorCode==ResultBuilder.ERRORCODE_USER_ERROR){
+        LogService.getLogger().info("Skip user error: "+result.getContent());
+        continue;
+      }
+
+      assertEquals(ResultBuilder.ERRORCODE_UNAUTHORIZED, ((ErrorResultData) result.getResultData()).getErrorCode());
+      assertTrue(result.getContent().toString().contains(other.getPermission()));
+    }
   }
+
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
index 5bd5672..17549d5 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
@@ -20,6 +20,8 @@ import com.gemstone.gemfire.management.internal.cli.CliUtil;
 import com.gemstone.gemfire.management.internal.cli.HeadlessGfsh;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
+import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
+import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
 import com.gemstone.gemfire.test.junit.rules.DescribedExternalResource;
 import org.junit.runner.Description;
@@ -55,29 +57,27 @@ public class GfshShellConnectionRule extends DescribedExternalResource {
     String shellId = getClass().getSimpleName() + "_" + description.getMethodName();
     gfsh = new HeadlessGfsh(shellId, 30);
 
-    final CommandStringBuilder command = new CommandStringBuilder(CliStrings.CONNECT);
-    command.addOption(CliStrings.CONNECT__USERNAME, config.user());
-    command.addOption(CliStrings.CONNECT__PASSWORD, config.password());
+    final CommandStringBuilder connectCommand = new CommandStringBuilder(CliStrings.CONNECT);
+    connectCommand.addOption(CliStrings.CONNECT__USERNAME, config.user());
+    connectCommand.addOption(CliStrings.CONNECT__PASSWORD, config.password());
 
     String endpoint;
     if (useHttp) {
       endpoint = "http://localhost:" + httpPort + "/gemfire/v1";
-      command.addOption(CliStrings.CONNECT__USE_HTTP, Boolean.TRUE.toString());
-      command.addOption(CliStrings.CONNECT__URL, endpoint);
+      connectCommand.addOption(CliStrings.CONNECT__USE_HTTP, Boolean.TRUE.toString());
+      connectCommand.addOption(CliStrings.CONNECT__URL, endpoint);
     } else {
       endpoint = "localhost[" + jmxPort + "]";
-      command.addOption(CliStrings.CONNECT__JMX_MANAGER, endpoint);
+      connectCommand.addOption(CliStrings.CONNECT__JMX_MANAGER, endpoint);
     }
     System.out.println(getClass().getSimpleName()+" using endpoint: "+endpoint);
 
-    gfsh.executeCommand(command.toString());
+    gfsh.executeCommand(connectCommand.toString());
 
     CommandResult result = (CommandResult) gfsh.getResult();
-
-    String message = result.getContent().toString();
-    if(message.contains("Authentication Failed Wrong username/password") ||
-        message.contains("The HTTP request failed with: 403 - Access Denied")){
-      this.authenticated = false;
+    if(result.getResultData() instanceof ErrorResultData) {
+      ErrorResultData errorResultData = (ErrorResultData) result.getResultData();
+      this.authenticated = !(errorResultData.getErrorCode() == ResultBuilder.ERRORCODE_CONNECTION_ERROR);
     }
     else{
       this.authenticated = true;
@@ -90,6 +90,7 @@ public class GfshShellConnectionRule extends DescribedExternalResource {
   protected void after(Description description) throws Throwable {
     if (gfsh != null) {
       gfsh.clearEvents();
+      gfsh.executeCommand("disconnect");
       gfsh.executeCommand("exit");
       gfsh.terminate();
       gfsh.setThreadLocalInstance();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
index 9e931ad..48e0a39 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JSONAuthorization.java
@@ -16,10 +16,24 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import javax.management.remote.JMXPrincipal;
+
 import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.operations.OperationContext;
 import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+import com.gemstone.gemfire.cache.operations.OperationContext.Resource;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.security.AccessControl;
@@ -31,22 +45,6 @@ import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import javax.management.remote.JMXPrincipal;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
-
 public class JSONAuthorization implements AccessControl, Authenticator {
 
   static class Permission {
@@ -188,7 +186,7 @@ public class JSONAuthorization implements AccessControl, Authenticator {
   }
 
   @Override
-  public boolean authorizeOperation(String arg0, OperationContext context) {
+  public boolean authorizeOperation(String region, OperationContext context) {
     if (principal == null)
       return false;
 
@@ -204,28 +202,12 @@ public class JSONAuthorization implements AccessControl, Authenticator {
         if (context.getResource() == perm.getResource() && context.getOperationCode() == perm.getOperationCode()) {
           LogService.getLogger().info("Found permission " + perm);
 
-          //if this is only for JMX aurthorization, we've found the permission needed, i.e, this operation is authorized
-          if(!(context instanceof CLIOperationContext)){
+          //no need to further check the rgionName
+          if(context.getRegionName()==null){
             return true;
           }
 
-          // If this is a Command operation context, we need to further check if the region is allowed in this role
-          CLIOperationContext ctx = (CLIOperationContext) context;
-
-          String region = ctx.getCommandOptions().get("region");
-          if(region==null) {
-            region = ctx.getCommandOptions().get("include-region");
-          }
-          if(region==null) {
-            String query = ctx.getCommandOptions().get("query");
-            if(query!=null) {
-              Matcher matcher = Pattern.compile("/\\s*(\\w+)").matcher(query);
-              if (matcher.find())
-                region = matcher.group(1);
-            }
-          }
-
-          if(role.regionNames == null || region == null || role.regionNames.contains(region)){
+          if(role.regionNames == null || role.regionNames.contains(context.getRegionName())){
             // if regionName is null, i.e. all regions are allowed
             return true;
           }
@@ -251,7 +233,6 @@ public class JSONAuthorization implements AccessControl, Authenticator {
     LogService.getLogger().info("User=" + user + " pwd=" + pwd);
     if (user != null && !userObj.pwd.equals(pwd) && !"".equals(user))
       throw new AuthenticationFailedException("Wrong username/password");
-    LogService.getLogger().info("Authentication successful!! for " + user);
     return new JMXPrincipal(user);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JsonAuthorizationCacheStartRule.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JsonAuthorizationCacheStartRule.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JsonAuthorizationCacheStartRule.java
index 1dd865f..e6654d5 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JsonAuthorizationCacheStartRule.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/JsonAuthorizationCacheStartRule.java
@@ -16,13 +16,13 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import java.util.Properties;
+
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.CacheFactory;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import org.junit.rules.ExternalResource;
 
-import java.util.Properties;
-
 public class JsonAuthorizationCacheStartRule extends ExternalResource {
   private Cache cache;
   private int jmxManagerPort = 0;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
index 5fa7012..b4b3f72 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/LockServiceMBeanAuthorizationJUnitTest.java
@@ -16,6 +16,8 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
 import com.gemstone.gemfire.distributed.internal.locks.DLockService;
@@ -30,8 +32,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
 @Category(IntegrationTest.class)
 public class LockServiceMBeanAuthorizationJUnitTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -74,17 +74,17 @@ public class LockServiceMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "cluster-admin", password = "1234567")
   public void testSomeAccess() throws Exception {
-    assertThatThrownBy(() -> lockServiceMBean.becomeLockGrantor()).isInstanceOf(SecurityException.class);
+    assertThatThrownBy(() -> lockServiceMBean.becomeLockGrantor());
     lockServiceMBean.getMemberCount();
   }
 
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> lockServiceMBean.becomeLockGrantor()).isInstanceOf(SecurityException.class).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> lockServiceMBean.fetchGrantorMember()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> lockServiceMBean.getMemberCount()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> lockServiceMBean.isDistributed()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> lockServiceMBean.listThreadsHoldingLock()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> lockServiceMBean.becomeLockGrantor()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> lockServiceMBean.fetchGrantorMember()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> lockServiceMBean.getMemberCount()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> lockServiceMBean.isDistributed()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> lockServiceMBean.listThreadsHoldingLock()).hasMessageContaining("CLUSTER:READ");
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MBeanServerConnectionRule.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MBeanServerConnectionRule.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MBeanServerConnectionRule.java
index 78b3283..51cc6b8 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MBeanServerConnectionRule.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MBeanServerConnectionRule.java
@@ -16,9 +16,12 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
-import com.gemstone.gemfire.test.junit.rules.DescribedExternalResource;
-import org.junit.runner.Description;
+import static org.junit.Assert.*;
 
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 import javax.management.JMX;
 import javax.management.MBeanServerConnection;
 import javax.management.MalformedObjectNameException;
@@ -29,12 +32,9 @@ import javax.management.QueryExp;
 import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
 
-import static org.junit.Assert.assertEquals;
+import com.gemstone.gemfire.test.junit.rules.DescribedExternalResource;
+import org.junit.runner.Description;
 
 /**
  * Class which eases the creation of MBeans for security testing. When combined with {@link JMXConnectionConfiguration}
@@ -123,6 +123,7 @@ public class MBeanServerConnectionRule extends DescribedExternalResource {
       jmxConnector.close();
       jmxConnector = null;
     }
+
     con = null;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
index efbdbc7..2548d21 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ManagerMBeanAuthorizationJUnitTest.java
@@ -16,6 +16,12 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.lang.management.ManagementFactory;
+import javax.management.ObjectName;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.management.ManagerMXBean;
 import com.gemstone.gemfire.management.internal.beans.ManagerMBean;
@@ -27,12 +33,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import javax.management.ObjectName;
-import java.lang.management.ManagementFactory;
-
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.Mockito.mock;
-
 @Category(IntegrationTest.class)
 public class ManagerMBeanAuthorizationJUnitTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -71,8 +71,8 @@ public class ManagerMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testSomeAccess() throws Exception {
-    assertThatThrownBy(() -> managerMXBean.start()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:MANAGE");
-    assertThatThrownBy(() -> managerMXBean.getPulseURL()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:WRITE");
+    assertThatThrownBy(() -> managerMXBean.start()).hasMessageContaining("CLUSTER:MANAGE");
+    assertThatThrownBy(() -> managerMXBean.getPulseURL()).hasMessageContaining("CLUSTER:WRITE");
     managerMXBean.isRunning();
   }
 }


[19/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17-2

Posted by kl...@apache.org.
Merge branch 'develop' into feature/GEODE-17-2


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7927758a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7927758a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7927758a

Branch: refs/heads/feature/GEODE-1255
Commit: 7927758a12a1a6500ac08ef84957547bf33a305f
Parents: adc885d 9fbcb93
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Tue Apr 26 08:23:52 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Tue Apr 26 08:23:52 2016 -0700

----------------------------------------------------------------------
 .../distributed/internal/InternalLocator.java   |   6 +-
 .../membership/InternalDistributedMember.java   |  68 ++++++------
 .../internal/membership/NetMember.java          |   4 +-
 .../internal/membership/gms/GMSMember.java      |  36 +++---
 .../internal/membership/gms/ServiceConfig.java  |  18 +++
 .../membership/gms/locator/GMSLocator.java      |   2 +-
 .../membership/gms/membership/GMSJoinLeave.java |  56 +++-------
 .../gms/messenger/JGroupsMessenger.java         |   7 +-
 .../internal/i18n/ParentLocalizedStrings.java   |   2 +-
 .../gemfire/distributed/LocatorDUnitTest.java   | 110 +++----------------
 .../gms/membership/GMSJoinLeaveTestHelper.java  |   2 +-
 geode-site/website/content/docs/index.html      |   2 +-
 12 files changed, 111 insertions(+), 202 deletions(-)
----------------------------------------------------------------------



[11/50] [abbrv] incubator-geode git commit: GEODE-17: add the desc for shiro.ini configuration.

Posted by kl...@apache.org.
GEODE-17: add the desc for shiro.ini configuration.

* added tests around DistributionConfig
* make sure getSecurityProperties will return the correct settings


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

Branch: refs/heads/feature/GEODE-1255
Commit: adb7208fa27098c29ac086dbec76676ed7b85427
Parents: da0bbfe
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 22 15:48:09 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 22 15:48:09 2016 -0700

----------------------------------------------------------------------
 .../internal/AbstractDistributionConfig.java    | 42 +++++++++++---------
 .../internal/DistributionConfigImpl.java        | 25 +++++++-----
 .../internal/SystemManagementService.java       |  2 +-
 .../internal/DistributionConfigJUnitTest.java   | 36 +++++++++++++++--
 .../cli/commands/CliCommandTestBase.java        |  4 ++
 5 files changed, 76 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adb7208f/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
index c742005..e8dafb8 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java
@@ -16,6 +16,17 @@
  */
 package com.gemstone.gemfire.distributed.internal;
 
+import java.lang.reflect.Method;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
 import com.gemstone.gemfire.InternalGemFireException;
 import com.gemstone.gemfire.InvalidValueException;
 import com.gemstone.gemfire.UnmodifiableException;
@@ -27,11 +38,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.logging.LogWriterImpl;
 import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
 
-import java.lang.reflect.Method;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.*;
-
 /**
  * Provides an implementation of <code>DistributionConfig</code> that
  * knows how to read the configuration file.
@@ -513,6 +519,14 @@ public abstract class AbstractDistributionConfig
       return;
     }
 
+    if (attName.startsWith(SECURITY_PREFIX_NAME)) {
+      this.setSecurity(attName,attValue.toString());
+    }
+
+    if (attName.startsWith(SSL_SYSTEM_PROPS_NAME) || attName.startsWith(SYS_PROP_NAME)) {
+      this.setSSLProperty(attName, attValue.toString());
+    }
+
     // special case: log-level and security-log-level attributes are String type, but the setter accepts int
     if(attName.equalsIgnoreCase(LOG_LEVEL_NAME) || attName.equalsIgnoreCase(SECURITY_LOG_LEVEL_NAME)){
       attValue = LogWriterImpl.levelNameToCode((String)attValue);
@@ -520,17 +534,6 @@ public abstract class AbstractDistributionConfig
 
     Method setter = setters.get(attName);
     if (setter == null) {
-      // if we cann't find the defined setter, look for two more special cases
-      if (attName.startsWith(SECURITY_PREFIX_NAME)) {
-        this.setSecurity(attName,(String)attValue);
-        getAttSourceMap().put(attName, source);
-        return;
-      }
-      if (attName.startsWith(SSL_SYSTEM_PROPS_NAME) || attName.startsWith(SYS_PROP_NAME)) {
-        this.setSSLProperty(attName, (String) attValue);
-        getAttSourceMap().put(attName, source);
-        return;
-      }
       throw new InternalGemFireException(LocalizedStrings.AbstractDistributionConfig_UNHANDLED_ATTRIBUTE_NAME_0.toLocalizedString(attName));
     }
 
@@ -1107,12 +1110,15 @@ public abstract class AbstractDistributionConfig
     
     m.put(HTTP_SERVICE_SSL_TRUSTSTORE_PASSWORD_NAME,"Password to unlock the keystore file (store password) specified by  javax.net.ssl.trustStore.");
     
-    
     m.put(START_DEV_REST_API_NAME, "If true then the developer(API) REST service will be started when the cache is created. Defaults to false.");
     m.put(OFF_HEAP_MEMORY_SIZE_NAME, LocalizedStrings.AbstractDistributionConfig_OFF_HEAP_MEMORY_SIZE_0.toLocalizedString(DEFAULT_OFF_HEAP_MEMORY_SIZE));
-    dcAttDescriptions = Collections.unmodifiableMap(m);
     m.put(LOCK_MEMORY_NAME, LocalizedStrings.AbstractDistributionConfig_LOCK_MEMORY.toLocalizedString(DEFAULT_LOCK_MEMORY));
     m.put(DISTRIBUTED_TRANSACTIONS_NAME, "Flag to indicate whether all transactions including JTA should be distributed transactions.  Default is false, meaning colocated transactions.");
+
+    m.put(SHIRO_INIT_NAME, "The name of the shiro configuration file in the classpath, e.g. shiro.ini");
+
+    dcAttDescriptions = Collections.unmodifiableMap(m);
+
   }
   /**
    * Used by unit tests.

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adb7208f/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
index bac66c6..8b6b632 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
@@ -17,6 +17,21 @@
 
 package com.gemstone.gemfire.distributed.internal;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
 import com.gemstone.gemfire.GemFireConfigException;
 import com.gemstone.gemfire.GemFireIOException;
 import com.gemstone.gemfire.distributed.DistributedSystem;
@@ -26,14 +41,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.process.ProcessLauncherContext;
 import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.InetAddress;
-import java.net.URL;
-import java.net.UnknownHostException;
-import java.util.*;
-
 /**
  * Provides an implementation of <code>DistributionConfig</code> that
  * knows how to read the configuration file.
@@ -1998,7 +2005,6 @@ public class DistributionConfigImpl
   }
 
   public void setSecurity(String attName, String attValue) {
-    checkAttribute(attName, attValue);
     security.setProperty(attName, attValue);
   }
 
@@ -2039,7 +2045,6 @@ public class DistributionConfigImpl
   }
 
   public void setSSLProperty(String attName, String attValue) {
-    checkAttribute(attName, attValue);
     if (attName.startsWith(SYS_PROP_NAME)) {
       attName = attName.substring(SYS_PROP_NAME.length());
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adb7208f/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
index 45ec358..7fec9b7 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
@@ -168,7 +168,7 @@ public final class SystemManagementService extends BaseManagementService {
       SecurityUtils.setSecurityManager(securityManager);
     }
     else if (!StringUtils.isBlank(customAuthenticator)) {
-      Realm realm = new CustomAuthRealm(config.toProperties());
+      Realm realm = new CustomAuthRealm(config.getSecurityProps());
       SecurityManager securityManager = new DefaultSecurityManager(realm);
       SecurityUtils.setSecurityManager(securityManager);
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adb7208f/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
index 7a54040..3e7008d 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionConfigJUnitTest.java
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.*;
 import java.io.File;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -31,6 +32,7 @@ import java.util.Properties;
 import com.gemstone.gemfire.InternalGemFireException;
 import com.gemstone.gemfire.UnmodifiableException;
 import com.gemstone.gemfire.internal.ConfigSource;
+import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 import org.junit.Before;
@@ -38,11 +40,8 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-/**
- * Created by jiliao on 2/2/16.
- */
-@Category(UnitTest.class)
 
+@Category(UnitTest.class)
 public class DistributionConfigJUnitTest {
   static Map<String, ConfigAttribute> attributes;
   static Map<String, Method> setters;
@@ -108,6 +107,21 @@ public class DistributionConfigJUnitTest {
   }
 
   @Test
+  public void testAttributeDesc(){
+    String[] attNames = AbstractDistributionConfig._getAttNames();
+    for(String attName:attNames){
+      assertTrue("Does not contain description for attribute "+ attName, AbstractDistributionConfig.dcAttDescriptions.containsKey(attName));
+    }
+    List<String> attList = Arrays.asList(attNames);
+    for(Object attName:AbstractDistributionConfig.dcAttDescriptions.keySet()){
+      if(!attList.contains(attName)){
+        System.out.println("Has unused description for "+attName.toString());
+      }
+      //assertTrue("Has unused description for "+attName.toString(), attList.contains(attName));
+    }
+  }
+
+  @Test
   public void sameCount() {
     assertEquals(attributes.size(), setters.size());
     assertEquals(setters.size(), getters.size());
@@ -302,6 +316,20 @@ public class DistributionConfigJUnitTest {
     assertTrue(config.isAttributeModifiable("jmx-manager-http-port"));
   }
 
+
+  @Test
+  public void testSecurityProps(){
+    Properties props = new Properties();
+    props.put(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME, JSONAuthorization.class.getName() + ".create");
+    props.put(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME, JSONAuthorization.class.getName() + ".create");
+    props.put(DistributionConfig.SECURITY_LOG_LEVEL_NAME, "config");
+    // add another non-security property to verify it won't get put in the security properties
+    props.put(DistributionConfig.ACK_WAIT_THRESHOLD_NAME, 2);
+
+    DistributionConfig config = new DistributionConfigImpl(props);
+    assertEquals(config.getSecurityProps().size(), 3);
+  }
+
   public final static Map<Class<?>, Class<?>> classMap = new HashMap<Class<?>, Class<?>>();
 
   static {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/adb7208f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
index 9ddfbbb..f2dc80f 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java
@@ -157,6 +157,10 @@ public abstract class CliCommandTestBase extends JUnit4CacheTestCase {
 
       return results;
     });
+
+    this.jmxHost = (String) result[0];
+    this.jmxPort = (Integer) result[1];
+    this.httpPort = (Integer) result[2];
   }
 
   /**


[47/50] [abbrv] incubator-geode git commit: GEODE-1183: keep only one proxy if there're 3 cache servers on one JVM

Posted by kl...@apache.org.
GEODE-1183: keep only one proxy if there're 3 cache servers on one JVM

Current API allows us to create 2 cache servers on the same JVM, then the client
will try to create 2 queues to that JVM, one secondary and one primary.
But the proxy is actually the same (since there's only one client), so the
CCN keeps destroying and recreating the proxy.

To fix, we will keep the first proxy and reject the duplicate creating.
Then the secondary proxy will automatically become primary.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/51e4e71e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/51e4e71e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/51e4e71e

Branch: refs/heads/feature/GEODE-1255
Commit: 51e4e71ef1ffb2fddb3ade42e0ad46fe40886239
Parents: 1aa08cd
Author: zhouxh <gz...@pivotal.io>
Authored: Sun Apr 24 22:51:07 2016 -0700
Committer: zhouxh <gz...@pivotal.io>
Committed: Mon May 2 22:08:58 2016 -0700

----------------------------------------------------------------------
 .../cache/tier/sockets/CacheClientNotifier.java |  36 +++--
 .../cache/wan/CacheClientNotifierDUnitTest.java | 106 ++++++++++---
 .../cache/wan/Simple2CacheServerDUnitTest.java  | 157 +++++++++++++++++++
 3 files changed, 260 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/51e4e71e/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java
index 1ba2294..80d05ba 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java
@@ -505,24 +505,32 @@ public class CacheClientNotifier {
       }
     } else {
       CacheClientProxy staleClientProxy = this.getClientProxy(proxyId);
+      boolean toCreateNewProxy = true;
       if (staleClientProxy != null) {
-        // A proxy exists for this non-durable client. It must be closed.
-        if (logger.isDebugEnabled()) {
-          logger.debug("CacheClientNotifier: A proxy exists for this non-durable client. It must be closed.");
-        }
-        if (staleClientProxy.startRemoval()) {
-          staleClientProxy.waitRemoval();
-        }
-        else {
-          staleClientProxy.close(false, false); // do not check for queue, just close it
-          removeClientProxy(staleClientProxy); // remove old proxy from proxy set
+        if (staleClientProxy.isConnected() && staleClientProxy.getSocket().isConnected()) {
+          successful = false;
+          toCreateNewProxy = false;
+        } else {
+          // A proxy exists for this non-durable client. It must be closed.
+          if (logger.isDebugEnabled()) {
+            logger.debug("CacheClientNotifier: A proxy exists for this non-durable client. It must be closed.");
+          }
+          if (staleClientProxy.startRemoval()) {
+            staleClientProxy.waitRemoval();
+          }
+          else {
+            staleClientProxy.close(false, false); // do not check for queue, just close it
+            removeClientProxy(staleClientProxy); // remove old proxy from proxy set
+          }
         }
       } // non-null stale proxy
 
-      // Create the new proxy for this non-durable client
-      l_proxy = new CacheClientProxy(this, socket, proxyId,
-          isPrimary, clientConflation, clientVersion, acceptorId, notifyBySubscription);
-      successful = this.initializeProxy(l_proxy);
+      if (toCreateNewProxy) {
+        // Create the new proxy for this non-durable client
+        l_proxy = new CacheClientProxy(this, socket, proxyId,
+            isPrimary, clientConflation, clientVersion, acceptorId, notifyBySubscription);
+        successful = this.initializeProxy(l_proxy);
+      }
     }
 
     if (!successful){

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/51e4e71e/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/CacheClientNotifierDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/CacheClientNotifierDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/CacheClientNotifierDUnitTest.java
index 8bf819c..0b1cd11 100755
--- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/CacheClientNotifierDUnitTest.java
+++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/CacheClientNotifierDUnitTest.java
@@ -18,25 +18,40 @@ package com.gemstone.gemfire.internal.cache.wan;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Properties;
 
 import org.junit.experimental.categories.Category;
 
+import com.gemstone.gemfire.cache.AttributesFactory;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.cache.DataPolicy;
 import com.gemstone.gemfire.cache.DiskStore;
 import com.gemstone.gemfire.cache.EvictionAction;
 import com.gemstone.gemfire.cache.EvictionAttributes;
 import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.cache.RegionAttributes;
+import com.gemstone.gemfire.cache.client.Pool;
+import com.gemstone.gemfire.cache.client.PoolManager;
+import com.gemstone.gemfire.cache.client.internal.PoolImpl;
 import com.gemstone.gemfire.cache.server.CacheServer;
 import com.gemstone.gemfire.cache.server.ClientSubscriptionConfig;
+import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+import com.gemstone.gemfire.distributed.internal.ServerLocation;
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.internal.cache.CacheServerImpl;
+import com.gemstone.gemfire.internal.cache.ClientServerObserverAdapter;
+import com.gemstone.gemfire.internal.cache.ClientServerObserverHolder;
 import com.gemstone.gemfire.internal.cache.UserSpecifiedRegionAttributes;
 import com.gemstone.gemfire.internal.cache.ha.HAContainerRegion;
 import com.gemstone.gemfire.internal.cache.ha.HAContainerWrapper;
 import com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientNotifier;
+import com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxy;
+import com.gemstone.gemfire.internal.cache.tier.sockets.CacheServerTestUtil;
 import com.gemstone.gemfire.internal.cache.xmlcache.RegionAttributesCreation;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.test.dunit.IgnoredException;
+import com.gemstone.gemfire.test.dunit.LogWriterUtils;
+import com.gemstone.gemfire.test.dunit.SerializableCallable;
 import com.gemstone.gemfire.test.dunit.SerializableRunnable;
 import com.gemstone.gemfire.test.dunit.VM;
 import com.gemstone.gemfire.test.dunit.Wait;
@@ -121,24 +136,17 @@ public class CacheClientNotifierDUnitTest extends WANTestBase {
     vm.invoke(checkCacheServer);
   }
 
-  private void closeCacheServer(VM vm, final int serverPort) {
-    SerializableRunnable stopCacheServer = new SerializableRunnable() {
-
-      @Override
-      public void run() throws Exception {
-        List<CacheServer> cacheServers = cache.getCacheServers();
-        CacheServerImpl server = null;
-        for (CacheServer cs:cacheServers) {
-          if (cs.getPort() == serverPort) {
-            server = (CacheServerImpl)cs;
-            break;
-          }
-        }
-        assertNotNull(server);
-        server.stop();
+  public static void closeACacheServer(final int serverPort) {
+    List<CacheServer> cacheServers = cache.getCacheServers();
+    CacheServerImpl server = null;
+    for (CacheServer cs:cacheServers) {
+      if (cs.getPort() == serverPort) {
+        server = (CacheServerImpl)cs;
+        break;
       }
-    };
-    vm.invoke(stopCacheServer);
+    }
+    assertNotNull(server);
+    server.stop();
   }
 
   private void verifyRegionSize(VM vm, final int expect) {
@@ -165,8 +173,12 @@ public class CacheClientNotifierDUnitTest extends WANTestBase {
    * The test will start several cache servers, including gateway receivers.
    * Shutdown them and verify the CacheClientNofifier for each server is correct
    */
-  @Category(FlakyTest.class) // GEODE-1183: random ports, failure to start threads, eats exceptions, time sensitive
-  public void testMultipleCacheServer() throws Exception {
+  // GEODE-1183: random ports, failure to start threads, eats exceptions, time sensitive
+  public void testNormalClient2MultipleCacheServer() throws Exception {
+    doMultipleCacheServer(false);
+  }
+
+  public void doMultipleCacheServer(boolean durable) throws Exception {
     /* test senario: */
     /* create 1 GatewaySender on vm0 */
     /* create 1 GatewayReceiver on vm1 */
@@ -199,8 +211,8 @@ public class CacheClientNotifierDUnitTest extends WANTestBase {
     checkCacheServer(vm1, serverPort2, true, 3);
     LogService.getLogger().info("receiverPort="+receiverPort+",serverPort="+serverPort+",serverPort2="+serverPort2);
     
-    vm2.invoke(() -> WANTestBase.createClientWithLocator(nyPort, "localhost", getTestMethodName() + "_PR" ));
-    vm3.invoke(() -> WANTestBase.createClientWithLocator(nyPort, "localhost", getTestMethodName() + "_PR" ));
+    vm2.invoke(() -> createClientWithLocator(nyPort, "localhost", getTestMethodName() + "_PR", "123", durable));
+    vm3.invoke(() -> createClientWithLocator(nyPort, "localhost", getTestMethodName() + "_PR", "124", durable));
 
     vm0.invoke(() -> WANTestBase.createCache( lnPort ));
     vm0.invoke(() -> WANTestBase.createSender( "ln", 2, false, 100, 400, false, false, null, true ));
@@ -211,19 +223,63 @@ public class CacheClientNotifierDUnitTest extends WANTestBase {
     /* verify */
     verifyRegionSize(vm0, NUM_KEYS);
     verifyRegionSize(vm1, NUM_KEYS);
-    verifyRegionSize(vm2, NUM_KEYS);
     verifyRegionSize(vm3, NUM_KEYS);
+    verifyRegionSize(vm2, NUM_KEYS);
 
     // close a cache server, then re-test
-    closeCacheServer(vm1, serverPort2);
+    vm1.invoke(() -> closeACacheServer(serverPort2));
 
     vm0.invoke(() -> WANTestBase.doPuts( getTestMethodName() + "_PR", NUM_KEYS*2 ));
 
     /* verify */
     verifyRegionSize(vm0, NUM_KEYS*2);
     verifyRegionSize(vm1, NUM_KEYS*2);
-    verifyRegionSize(vm2, NUM_KEYS*2);
     verifyRegionSize(vm3, NUM_KEYS*2);
+    verifyRegionSize(vm2, NUM_KEYS*2);
+    
+    disconnectAllFromDS();
+  }
+
+  public static void createClientWithLocator(int port0,String host,
+      String regionName, String clientId, boolean isDurable) {
+    WANTestBase test = new WANTestBase(getTestMethodName());
+    Properties props = test.getDistributedSystemProperties();
+    props.setProperty("mcast-port", "0");
+    props.setProperty("locators", "");
+    if (isDurable) {
+      props.setProperty("durable-client-id", clientId);
+      props.setProperty("durable-client-timeout", "" + 200);
+    }
+
+    InternalDistributedSystem ds = test.getSystem(props);
+    cache = CacheFactory.create(ds);
+
+    assertNotNull(cache);
+    CacheServerTestUtil.disableShufflingOfEndpoints();
+    Pool p;
+    try {
+      p = PoolManager.createFactory().addLocator(host, port0)
+          .setPingInterval(250).setSubscriptionEnabled(true)
+          .setSubscriptionRedundancy(-1).setReadTimeout(2000)
+          .setSocketBufferSize(1000).setMinConnections(6).setMaxConnections(10)
+          .setRetryAttempts(3).create(regionName);
+    } finally {
+      CacheServerTestUtil.enableShufflingOfEndpoints();
+    }
+
+    AttributesFactory factory = new AttributesFactory();
+    factory.setPoolName(p.getName());
+    factory.setDataPolicy(DataPolicy.NORMAL);
+    RegionAttributes attrs = factory.create();
+    region = cache.createRegion(regionName, attrs);
+    region.registerInterest("ALL_KEYS");
+    assertNotNull(region);
+    if (isDurable) {
+      cache.readyForEvents();
+    }
+    LogWriterUtils.getLogWriter().info(
+        "Distributed Region " + regionName + " created Successfully :"
+            + region.toString() + " in a "+(isDurable?"durable":"")+" client");
   }
 
-}
+ }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/51e4e71e/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/Simple2CacheServerDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/Simple2CacheServerDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/Simple2CacheServerDUnitTest.java
new file mode 100755
index 0000000..684660b
--- /dev/null
+++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/Simple2CacheServerDUnitTest.java
@@ -0,0 +1,157 @@
+/*
+ * 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 com.gemstone.gemfire.internal.cache.wan;
+
+import java.util.Iterator;
+
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.cache.client.internal.PoolImpl;
+import com.gemstone.gemfire.distributed.internal.ServerLocation;
+import com.gemstone.gemfire.internal.cache.ClientServerObserverAdapter;
+import com.gemstone.gemfire.internal.cache.ClientServerObserverHolder;
+import com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientNotifier;
+import com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxy;
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.test.dunit.SerializableCallable;
+import com.gemstone.gemfire.test.dunit.VM;
+import com.gemstone.gemfire.test.dunit.Wait;
+import com.gemstone.gemfire.test.dunit.WaitCriterion;
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+import com.gemstone.gemfire.test.junit.categories.FlakyTest;
+
+public class Simple2CacheServerDUnitTest extends WANTestBase {
+  private static final int NUM_KEYS = 10;
+  static int afterPrimaryCount = 0;
+  static int afterProxyReinitialized = 0;
+  
+  public Simple2CacheServerDUnitTest(String name) {
+    super(name);
+  }
+  
+  // GEODE-1183: random ports, failure to start threads, eats exceptions, time sensitive
+  public void testDurableClient2MultipleCacheServer() throws Exception {
+    doMultipleCacheServer(true);
+  }
+
+  public void testNormalClient2MultipleCacheServer() throws Exception {
+    doMultipleCacheServer(false);
+  }
+  
+  public void doMultipleCacheServer(boolean durable) throws Exception {
+    Integer lnPort = (Integer)vm1.invoke(() -> WANTestBase.createFirstLocatorWithDSId( 1 ));
+    vm1.invoke(() -> WANTestBase.createCache( lnPort ));
+    vm1.invoke(() -> WANTestBase.createPersistentPartitionedRegion( getTestMethodName() + "_PR", null, 1, 100, isOffHeap() ));
+    int serverPort = vm1.invoke(() -> WANTestBase.createCacheServer());
+    int serverPort2 = vm1.invoke(() -> WANTestBase.createCacheServer());
+
+    if (durable) {
+      vm1.invoke(() -> setCacheClientProxyTestHook());
+    } else {
+      vm2.invoke(() -> setClientServerObserver());
+    }
+    vm2.invoke(() -> CacheClientNotifierDUnitTest.createClientWithLocator(lnPort, "localhost", getTestMethodName() + "_PR" , "123", durable));
+
+    vm0.invoke(() -> WANTestBase.createCache( lnPort ));
+    vm0.invoke(() -> WANTestBase.createPersistentPartitionedRegion( getTestMethodName() + "_PR", null, 1, 100, isOffHeap() ));
+    int serverPort3 = vm0.invoke(() -> WANTestBase.createCacheServer());
+    
+    if (durable) {
+      vm1.invoke(() -> checkResultAndUnsetCacheClientProxyTestHook());
+    } else {
+      vm2.invoke(() -> checkResultAndUnsetClientServerObserver());
+    }
+    
+    boolean vm0_proxy = checkProxyIsPrimary(vm0);
+    boolean vm1_proxy = checkProxyIsPrimary(vm1);
+    assertTrue(vm1_proxy || vm0_proxy);
+    
+    // close the current primary cache server, then re-test
+    vm1.invoke(()-> CacheClientNotifierDUnitTest.closeACacheServer(serverPort2));
+    vm0_proxy = checkProxyIsPrimary(vm0);
+    vm1_proxy = checkProxyIsPrimary(vm1);
+    assertTrue(vm1_proxy || vm0_proxy);
+    
+    disconnectAllFromDS();
+  }
+
+  public static void setClientServerObserver()
+  {
+    PoolImpl.AFTER_PRIMARY_IDENTIFICATION_FROM_BACKUP_CALLBACK_FLAG = true;
+    ClientServerObserverHolder
+    .setInstance(new ClientServerObserverAdapter() {
+      public void afterPrimaryIdentificationFromBackup(ServerLocation primaryEndpoint)
+      {
+        LogService.getLogger().info("After primary is set");
+        afterPrimaryCount++;
+      }
+    });
+  }
+
+  public static void checkResultAndUnsetClientServerObserver()
+  {
+    PoolImpl.AFTER_PRIMARY_IDENTIFICATION_FROM_BACKUP_CALLBACK_FLAG = false;
+    // setPrimary only happened once
+    assertEquals(1, afterPrimaryCount);
+    afterPrimaryCount = 0;
+  }
+
+  public static void setCacheClientProxyTestHook()
+  {
+    CacheClientProxy.testHook = new CacheClientProxy.TestHook() {
+      @Override
+      public void doTestHook(String spot) {
+        if (spot.equals("CLIENT_RECONNECTED")) {
+          afterProxyReinitialized++;
+        }
+      }
+    };
+  }
+
+  public static void checkResultAndUnsetCacheClientProxyTestHook()
+  {
+    // Reinitialize only happened once
+    CacheClientProxy.testHook = null;
+    assertEquals(1, afterProxyReinitialized);
+    afterProxyReinitialized = 0;
+  }
+  
+  private boolean checkProxyIsPrimary(VM vm) {
+    SerializableCallable checkProxyIsPrimary = new SerializableCallable() {
+      @Override
+      public Object call() throws Exception {
+        final CacheClientNotifier ccn = CacheClientNotifier.getInstance();
+        
+        Wait.waitForCriterion(new WaitCriterion() {
+          public boolean done() {
+            return ccn.getClientProxies().size() == 1; 
+          }
+          public String description() {
+            return null;
+          }
+        }, 20000, 100, false);
+        assertEquals(1, ccn.getClientProxies().size());
+
+        Iterator iter_prox = ccn.getClientProxies().iterator();
+        assertEquals(1, ccn.getClientProxies().size());
+        CacheClientProxy proxy = (CacheClientProxy)iter_prox.next();
+        return proxy.isPrimary();
+      }
+    };
+    return (Boolean)vm.invoke(checkProxyIsPrimary);
+  }
+}


[26/50] [abbrv] incubator-geode git commit: GEODE-17: enhance the GeodeSecurityUtil and review changes

Posted by kl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAbstractTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAbstractTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAbstractTest.java
index 392de4c..09bb7d7 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAbstractTest.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAbstractTest.java
@@ -16,11 +16,24 @@
  * limitations under the License.
  *
  */
+
 package com.vmware.gemfire.tools.pulse.tests;
 
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import junit.framework.Assert;
+
 import com.gemstone.gemfire.management.internal.JettyHelper;
+import com.jayway.awaitility.Awaitility;
 import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
-import junit.framework.Assert;
+
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -35,16 +48,8 @@ import org.openqa.selenium.support.ui.ExpectedCondition;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.DecimalFormat;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-
 public abstract class PulseAbstractTest extends PulseBaseTest {
+
   private static String jmxPropertiesFile;
   private static String path;
 
@@ -107,7 +112,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   private static final String REGION_PERSISTENCE_LABEL = "regionPersistence";
   private static final String DATA_VIEW_USEDMEMORY = "memoryUsed";
   private static final String DATA_VIEW_TOTALMEMORY = "totalMemory";
-  
+
   private static final String DATA_BROWSER_LABEL = "Data Browser";
   private static final String DATA_BROWSER_REGIONName1 = "treeDemo_1_span";
   private static final String DATA_BROWSER_REGIONName2 = "treeDemo_2_span";
@@ -132,11 +137,12 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
 
   public static void setUpServer(String username, String password, String jsonAuthFile) throws Exception {
     ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
     jmxPropertiesFile = classLoader.getResource("test.properties").getPath();
     path = getPulseWarPath();
     server = Server.createServer(9999, jmxPropertiesFile, jsonAuthFile);
 
-    String host = "localhost";// InetAddress.getLocalHost().getHostAddress();
+    String host = "localhost";
     int port = 8080;
     String context = "/pulse";
 
@@ -146,7 +152,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
 
     pulseURL = "http://" + host + ":" + port + context;
 
-    Thread.sleep(5000); // wait till the container settles down
+    Awaitility.await().until(()->jetty.isStarted());
 
     driver = new FirefoxDriver();
     driver.manage().window().maximize();
@@ -160,12 +166,12 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
 
     Thread.sleep(3000);
     WebElement userNameOnPulsePage = (new WebDriverWait(driver, 10))
-        .until(new ExpectedCondition<WebElement>() {
-          @Override
-          public WebElement apply(WebDriver d) {
-            return d.findElement(By.id("userName"));
-          }
-        });
+      .until(new ExpectedCondition<WebElement>() {
+        @Override
+        public WebElement apply(WebDriver d) {
+          return d.findElement(By.id("userName"));
+        }
+      });
     Assert.assertNotNull(userNameOnPulsePage);
     driver.navigate().refresh();
     Thread.sleep(7000);
@@ -215,44 +221,42 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   }
 
   protected void searchByXPathAndClick(String xpath) {
-	WebElement element = driver.findElement(By.xpath(xpath));
-     Assert.assertNotNull(element);
+    WebElement element = driver.findElement(By.xpath(xpath));
+    Assert.assertNotNull(element);
     element.click();
   }
 
   protected void waitForElementByClassName(final String className, int seconds) {
     WebElement linkTextOnPulsePage1 = (new WebDriverWait(driver, seconds))
-        .until(new ExpectedCondition<WebElement>() {
-          @Override
-          public WebElement apply(WebDriver d) {
-            return d.findElement(By.className(className));
-          }
-        });
+      .until(new ExpectedCondition<WebElement>() {
+        @Override
+        public WebElement apply(WebDriver d) {
+          return d.findElement(By.className(className));
+        }
+      });
     Assert.assertNotNull(linkTextOnPulsePage1);
   }
 
   protected void waitForElementById(final String id, int seconds) {
     WebElement element = (new WebDriverWait(driver, 10))
-        .until(new ExpectedCondition<WebElement>() {
-          @Override
-          public WebElement apply(WebDriver d) {
-            return d.findElement(By.id(id));
-          }
-        });
+      .until(new ExpectedCondition<WebElement>() {
+        @Override
+        public WebElement apply(WebDriver d) {
+          return d.findElement(By.id(id));
+        }
+      });
     Assert.assertNotNull(element);
   }
-  
+
   protected void scrollbarVerticalDownScroll() {
     JavascriptExecutor js = (JavascriptExecutor) driver;
     js.executeScript("javascript:window.scrollBy(250,700)");
     WebElement pickerScroll = driver.findElement(By.className("jspDrag"));
     WebElement pickerScrollCorner = driver.findElement(By
-        .className("jspCorner"));
+      .className("jspCorner"));
     Actions builder = new Actions(driver);
-    Actions movePicker = builder.dragAndDrop(pickerScroll, pickerScrollCorner); // pickerscroll
-                                                                                // is
-                                                                                // the
-                                                                                // webelement
+    Actions movePicker = builder.dragAndDrop(pickerScroll, pickerScrollCorner);
+    // pickerscroll is the web element
     movePicker.perform();
   }
 
@@ -260,147 +264,144 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     JavascriptExecutor js = (JavascriptExecutor) driver;
     js.executeScript("javascript:window.scrollBy(250,700)");
     WebElement pickerScroll = driver
-        .findElement(By
-            .xpath("//div[@id='gview_queryStatisticsList']/div[3]/div/div[3]/div[2]/div"));
+      .findElement(By
+        .xpath("//div[@id='gview_queryStatisticsList']/div[3]/div/div[3]/div[2]/div"));
     WebElement pickerScrollCorner = driver.findElement(By
-        .className("jspCorner"));
+      .className("jspCorner"));
     Actions builder = new Actions(driver);
-    Actions movePicker = builder.dragAndDrop(pickerScroll, pickerScrollCorner); // pickerscroll
-                                                                                // is
-                                                                                // the
-                                                                                // webelement
+    Actions movePicker = builder.dragAndDrop(pickerScroll, pickerScrollCorner);
+    // pickerscroll is the web element
     movePicker.perform();
   }
 
-  
-  
+
   @Test
   public void testClusterLocatorCount() throws IOException {
     String clusterLocators = driver
-        .findElement(By.id(CLUSTER_VIEW_LOCATORS_ID)).getText();
-   
-    String totallocators = JMXProperties.getInstance().getProperty("server.S1.locatorCount");  
+      .findElement(By.id(CLUSTER_VIEW_LOCATORS_ID)).getText();
+
+    String totallocators = JMXProperties.getInstance().getProperty("server.S1.locatorCount");
     Assert.assertEquals(totallocators, clusterLocators);
   }
 
- @Test
+  @Test
   public void testClusterRegionCount() {
     String clusterRegions = driver.findElement(By.id(CLUSTER_VIEW_REGIONS_ID))
-        .getText();
+      .getText();
     String totalregions = JMXProperties.getInstance().getProperty(
-        "server.S1.totalRegionCount");
+      "server.S1.totalRegionCount");
     Assert.assertEquals(totalregions, clusterRegions);
   }
 
- @Test
+  @Test
   public void testClusterMemberCount() {
-   String clusterMembers = driver.findElement(By.id(CLUSTER_VIEW_MEMBERS_ID)).getText();
-   String totalMembers = JMXProperties.getInstance().getProperty("server.S1.memberCount");
-   Assert.assertEquals(totalMembers, clusterMembers);
- }
+    String clusterMembers = driver.findElement(By.id(CLUSTER_VIEW_MEMBERS_ID)).getText();
+    String totalMembers = JMXProperties.getInstance().getProperty("server.S1.memberCount");
+    Assert.assertEquals(totalMembers, clusterMembers);
+  }
 
- @Test
+  @Test
   public void testClusterNumClient() {
     String clusterClients = driver.findElement(By.id(CLUSTER_CLIENTS_ID))
-        .getText();
+      .getText();
     String totalclients = JMXProperties.getInstance().getProperty(
-        "server.S1.numClients");
+      "server.S1.numClients");
     Assert.assertEquals(totalclients, clusterClients);
   }
 
   @Test
   public void testClusterNumRunningFunction() {
     String clusterFunctions = driver.findElement(By.id(CLUSTER_FUNCTIONS_ID))
-        .getText();
+      .getText();
     String totalfunctions = JMXProperties.getInstance().getProperty(
-        "server.S1.numRunningFunctions");
+      "server.S1.numRunningFunctions");
     Assert.assertEquals(totalfunctions, clusterFunctions);
   }
 
   @Test
   public void testClusterRegisteredCQCount() {
     String clusterUniqueCQs = driver.findElement(By.id(CLUSTER_UNIQUECQS_ID))
-        .getText();
+      .getText();
     String totaluniqueCQs = JMXProperties.getInstance().getProperty(
-        "server.S1.registeredCQCount");
+      "server.S1.registeredCQCount");
     Assert.assertEquals(totaluniqueCQs, clusterUniqueCQs);
   }
 
- @Test
+  @Test
   public void testClusterNumSubscriptions() {
     String clusterSubscriptions = driver.findElement(
-        By.id(CLUSTER_SUBSCRIPTION_ID)).getText();
+      By.id(CLUSTER_SUBSCRIPTION_ID)).getText();
     String totalSubscriptions = JMXProperties.getInstance().getProperty(
-        "server.S1.numSubscriptions");
+      "server.S1.numSubscriptions");
     Assert.assertEquals(totalSubscriptions, clusterSubscriptions);
   }
 
- @Test
+  @Test
   public void testClusterJVMPausesWidget() {
     String clusterJVMPauses = driver.findElement(By.id(CLUSTER_GCPAUSES_ID))
-        .getText();
+      .getText();
     String totalgcpauses = JMXProperties.getInstance().getProperty(
-        "server.S1.jvmPauses");
+      "server.S1.jvmPauses");
     Assert.assertEquals(totalgcpauses, clusterJVMPauses);
   }
 
   @Test
   public void testClusterAverageWritesWidget() {
     String clusterWritePerSec = driver.findElement(
-        By.id(CLUSTER_WRITEPERSEC_ID)).getText();
+      By.id(CLUSTER_WRITEPERSEC_ID)).getText();
     String totalwritepersec = JMXProperties.getInstance().getProperty(
-        "server.S1.averageWrites");
+      "server.S1.averageWrites");
     Assert.assertEquals(totalwritepersec, clusterWritePerSec);
   }
 
   @Test
   public void testClusterAverageReadsWidget() {
     String clusterReadPerSec = driver.findElement(By.id(CLUSTER_READPERSEC_ID))
-        .getText();
+      .getText();
     String totalreadpersec = JMXProperties.getInstance().getProperty(
-        "server.S1.averageReads");
+      "server.S1.averageReads");
     Assert.assertEquals(totalreadpersec, clusterReadPerSec);
   }
 
   @Test
   public void testClusterQuerRequestRateWidget() {
     String clusterQueriesPerSec = driver.findElement(
-        By.id(CLUSTER_QUERIESPERSEC_ID)).getText();
+      By.id(CLUSTER_QUERIESPERSEC_ID)).getText();
     String totalqueriespersec = JMXProperties.getInstance().getProperty(
-        "server.S1.queryRequestRate");
+      "server.S1.queryRequestRate");
     Assert.assertEquals(totalqueriespersec, clusterQueriesPerSec);
   }
-  
+
   @Test
   public void testClusterGridViewMemberID() throws InterruptedException {
-	 searchByIdAndClick("default_grid_button");
-	 List<WebElement> elements = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr")); //gives me 11 rows
-	 
-	 for(int memberCount = 1; memberCount<elements.size(); memberCount++){		  
-		  String memberId = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (memberCount + 1) + "]/td")).getText();		  
-		  String propertMemeberId= JMXProperties.getInstance().getProperty("member.M" + memberCount + ".id");		  
-		  Assert.assertEquals(memberId, propertMemeberId);
-	  }	 
+    searchByIdAndClick("default_grid_button");
+    List<WebElement> elements = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr")); //gives me 11 rows
+
+    for (int memberCount = 1; memberCount < elements.size(); memberCount++) {
+      String memberId = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (memberCount + 1) + "]/td")).getText();
+      String propertMemeberId = JMXProperties.getInstance().getProperty("member.M" + memberCount + ".id");
+      Assert.assertEquals(memberId, propertMemeberId);
+    }
   }
 
   @Test
   public void testClusterGridViewMemberName() {
-	  searchByIdAndClick("default_grid_button"); 
-	  List<WebElement> elements = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));  	  
-	  for (int memberNameCount = 1; memberNameCount < elements.size(); memberNameCount++) {
-		  String gridMemberName = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (memberNameCount + 1) + "]/td[2]")).getText();
-		  String memberName = JMXProperties.getInstance().getProperty("member.M" + memberNameCount + ".member");
-		  Assert.assertEquals(gridMemberName, memberName);
+    searchByIdAndClick("default_grid_button");
+    List<WebElement> elements = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));
+    for (int memberNameCount = 1; memberNameCount < elements.size(); memberNameCount++) {
+      String gridMemberName = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (memberNameCount + 1) + "]/td[2]")).getText();
+      String memberName = JMXProperties.getInstance().getProperty("member.M" + memberNameCount + ".member");
+      Assert.assertEquals(gridMemberName, memberName);
     }
   }
-  
+
 
   @Test
   public void testClusterGridViewMemberHost() {
-	  searchByIdAndClick("default_grid_button"); 
-	  List<WebElement> elements = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr")); 	  
+    searchByIdAndClick("default_grid_button");
+    List<WebElement> elements = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));
     for (int memberHostCount = 1; memberHostCount < elements.size(); memberHostCount++) {
-      String MemberHost = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (memberHostCount + 1) + "]/td[3]")).getText();     
+      String MemberHost = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (memberHostCount + 1) + "]/td[3]")).getText();
       String gridMemberHost = JMXProperties.getInstance().getProperty("member.M" + memberHostCount + ".host");
       Assert.assertEquals(gridMemberHost, MemberHost);
     }
@@ -408,14 +409,14 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
 
   @Test
   public void testClusterGridViewHeapUsage() {
-	searchByIdAndClick("default_grid_button"); 
+    searchByIdAndClick("default_grid_button");
     for (int i = 1; i <= 3; i++) {
       Float HeapUsage = Float.parseFloat(driver
-          .findElement(
-              By.xpath("//table[@id='memberList']/tbody/tr[" + (i + 1) + "]/td[5]")).getText());
+        .findElement(
+          By.xpath("//table[@id='memberList']/tbody/tr[" + (i + 1) + "]/td[5]")).getText());
       Float gridHeapUsagestring = Float.parseFloat(JMXProperties.getInstance()
-          .getProperty("member.M" + i + ".UsedMemory"));
-     Assert.assertEquals(gridHeapUsagestring, HeapUsage);
+        .getProperty("member.M" + i + ".UsedMemory"));
+      Assert.assertEquals(gridHeapUsagestring, HeapUsage);
     }
   }
 
@@ -424,7 +425,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     searchByIdAndClick("default_grid_button");
     for (int i = 1; i <= 3; i++) {
       String CPUUsage = driver.findElement(By.xpath("//table[@id='memberList']/tbody/tr[" + (i + 1) + "]/td[6]"))
-          .getText();
+        .getText();
       String gridCPUUsage = JMXProperties.getInstance().getProperty("member.M" + i + ".cpuUsage");
       gridCPUUsage = gridCPUUsage.trim();
       Assert.assertEquals(gridCPUUsage, CPUUsage);
@@ -439,19 +440,19 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   }
 
   @Test  // region count in properties file is 2 and UI is 1
-  public void testMemberTotalRegionCount() throws InterruptedException{
-	testRgraphWidget();
-    String RegionCount = driver.findElement(By.id(MEMBER_VIEW_REGION_ID)).getText();  
+  public void testMemberTotalRegionCount() throws InterruptedException {
+    testRgraphWidget();
+    String RegionCount = driver.findElement(By.id(MEMBER_VIEW_REGION_ID)).getText();
     String memberRegionCount = JMXProperties.getInstance().getProperty("member.M1.totalRegionCount");
     Assert.assertEquals(memberRegionCount, RegionCount);
   }
 
   @Test
-  public void testMemberNumThread()throws InterruptedException {
+  public void testMemberNumThread() throws InterruptedException {
     searchByIdAndClick("default_grid_button");
     searchByIdAndClick("M1&M1");
     String ThreadCount = driver.findElement(By.id(MEMBER_VIEW_THREAD_ID)).getText();
-    String memberThreadCount = JMXProperties.getInstance().getProperty("member.M1.numThreads");   
+    String memberThreadCount = JMXProperties.getInstance().getProperty("member.M1.numThreads");
     Assert.assertEquals(memberThreadCount, ThreadCount);
   }
 
@@ -460,69 +461,73 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     searchByIdAndClick("default_grid_button");
     searchByIdAndClick("M1&M1");
     String SocketCount = driver.findElement(By.id(MEMBER_VIEW_SOCKETS_ID))
-        .getText();
+      .getText();
     String memberSocketCount = JMXProperties.getInstance().getProperty(
-        "member.M1.totalFileDescriptorOpen");
+      "member.M1.totalFileDescriptorOpen");
     Assert.assertEquals(memberSocketCount, SocketCount);
   }
 
- @Test
+  @Test
   public void testMemberLoadAverage() throws InterruptedException {
     searchByIdAndClick("default_grid_button");
     searchByIdAndClick("M1&M1");
     String LoadAvg = driver.findElement(By.id(MEMBER_VIEW_LOADAVG_ID))
-        .getText();
+      .getText();
     String memberLoadAvg = JMXProperties.getInstance().getProperty(
-        "member.M1.loadAverage");
+      "member.M1.loadAverage");
     Assert.assertEquals(df2.format(Double.valueOf(memberLoadAvg)), LoadAvg);
   }
 
   @Ignore("WIP") // May be useful in near future
   @Test
-  public void testOffHeapFreeSize(){	  
-	  
+  public void testOffHeapFreeSize() {
+
     String OffHeapFreeSizeString = driver.findElement(
-        By.id(MEMBER_VIEW_OFFHEAPFREESIZE_ID)).getText();
+      By.id(MEMBER_VIEW_OFFHEAPFREESIZE_ID)).getText();
     String OffHeapFreeSizetemp = OffHeapFreeSizeString.replaceAll("[a-zA-Z]",
-        "");
+      "");
     float OffHeapFreeSize = Float.parseFloat(OffHeapFreeSizetemp);
     float memberOffHeapFreeSize = Float.parseFloat(JMXProperties.getInstance()
-        .getProperty("member.M1.OffHeapFreeSize"));
+      .getProperty("member.M1.OffHeapFreeSize"));
     if (memberOffHeapFreeSize < 1048576) {
       memberOffHeapFreeSize = memberOffHeapFreeSize / 1024;
 
-    } else if (memberOffHeapFreeSize < 1073741824) {
+    }
+    else if (memberOffHeapFreeSize < 1073741824) {
       memberOffHeapFreeSize = memberOffHeapFreeSize / 1024 / 1024;
-    } else {
+    }
+    else {
       memberOffHeapFreeSize = memberOffHeapFreeSize / 1024 / 1024 / 1024;
     }
     memberOffHeapFreeSize = Float.parseFloat(new DecimalFormat("##.##")
-        .format(memberOffHeapFreeSize));
-    Assert.assertEquals(memberOffHeapFreeSize, OffHeapFreeSize); 
- 
+      .format(memberOffHeapFreeSize));
+    Assert.assertEquals(memberOffHeapFreeSize, OffHeapFreeSize);
+
   }
 
   @Ignore("WIP") // May be useful in near future
   @Test
   public void testOffHeapUsedSize() throws InterruptedException {
-	 
+
     String OffHeapUsedSizeString = driver.findElement(
-        By.id(MEMBER_VIEW_OFFHEAPUSEDSIZE_ID)).getText();
+      By.id(MEMBER_VIEW_OFFHEAPUSEDSIZE_ID)).getText();
     String OffHeapUsedSizetemp = OffHeapUsedSizeString.replaceAll("[a-zA-Z]",
-        "");
+      "");
     float OffHeapUsedSize = Float.parseFloat(OffHeapUsedSizetemp);
     float memberOffHeapUsedSize = Float.parseFloat(JMXProperties.getInstance()
-        .getProperty("member.M1.OffHeapUsedSize"));
+      .getProperty("member.M1.OffHeapUsedSize"));
     if (memberOffHeapUsedSize < 1048576) {
       memberOffHeapUsedSize = memberOffHeapUsedSize / 1024;
 
-    } else if (memberOffHeapUsedSize < 1073741824) {
+    }
+    else if (memberOffHeapUsedSize < 1073741824) {
       memberOffHeapUsedSize = memberOffHeapUsedSize / 1024 / 1024;
-    } else {
+    }
+    else {
       memberOffHeapUsedSize = memberOffHeapUsedSize / 1024 / 1024 / 1024;
     }
     memberOffHeapUsedSize = Float.parseFloat(new DecimalFormat("##.##")
-        .format(memberOffHeapUsedSize));
+      .format(memberOffHeapUsedSize));
     Assert.assertEquals(memberOffHeapUsedSize, OffHeapUsedSize);
   }
 
@@ -531,9 +536,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     searchByIdAndClick("default_grid_button");
     searchByIdAndClick("M1&M1");
     String JVMPauses = driver.findElement(By.id(MEMBER_VIEW_JVMPAUSES_ID))
-        .getText();
+      .getText();
     String memberGcPausesAvg = JMXProperties.getInstance().getProperty(
-        "member.M1.JVMPauses");
+      "member.M1.JVMPauses");
     Assert.assertEquals(memberGcPausesAvg, JVMPauses);
   }
 
@@ -542,9 +547,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     searchByIdAndClick("default_grid_button");
     searchByIdAndClick("M1&M1");
     String CPUUsagevalue = driver.findElement(By.id(MEMBER_VIEW_CPUUSAGE_ID))
-        .getText();
+      .getText();
     String memberCPUUsage = JMXProperties.getInstance().getProperty(
-        "member.M1.cpuUsage");
+      "member.M1.cpuUsage");
     Assert.assertEquals(memberCPUUsage, CPUUsagevalue);
   }
 
@@ -555,27 +560,27 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     float ReadPerSec = Float.parseFloat(driver.findElement(By.id(MEMBER_VIEW_READPERSEC_ID)).getText());
     float memberReadPerSec = Float.parseFloat(JMXProperties.getInstance().getProperty("member.M1.averageReads"));
     memberReadPerSec = Float.parseFloat(new DecimalFormat("##.##")
-    .format(memberReadPerSec));
+      .format(memberReadPerSec));
     Assert.assertEquals(memberReadPerSec, ReadPerSec);
   }
 
- @Test
+  @Test
   public void testMemberAverageWrites() throws InterruptedException {
     testRgraphWidget();
     String WritePerSec = driver.findElement(By.id(MEMBER_VIEW_WRITEPERSEC_ID))
-        .getText();
+      .getText();
     String memberWritePerSec = JMXProperties.getInstance().getProperty(
-        "member.M1.averageWrites");
+      "member.M1.averageWrites");
     Assert.assertEquals(memberWritePerSec, WritePerSec);
   }
- 
+
 
   @Test
   public void testMemberGridViewData() throws InterruptedException {
     testRgraphWidget();
     searchByXPathAndClick(PulseTestLocators.MemberDetailsView.gridButtonXpath);
     // get the number of rows on the grid
-    List<WebElement> noOfRows = driver.findElements(By.xpath("//table[@id='memberRegionsList']/tbody/tr"));    
+    List<WebElement> noOfRows = driver.findElements(By.xpath("//table[@id='memberRegionsList']/tbody/tr"));
     String MemberRegionName = driver.findElement(By.xpath("//table[@id='memberRegionsList']/tbody/tr[2]/td[1]")).getText();
     String memberRegionName = JMXProperties.getInstance().getProperty("region.R1.name");
     Assert.assertEquals(memberRegionName, MemberRegionName);
@@ -583,7 +588,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
     String MemberRegionType = driver.findElement(By.xpath("//table[@id='memberRegionsList']/tbody/tr[2]/td[2]")).getText();
     String memberRegionType = JMXProperties.getInstance().getProperty("region.R1.regionType");
     Assert.assertEquals(memberRegionType, MemberRegionType);
-    
+
     String MemberRegionEntryCount = driver.findElement(By.xpath("//table[@id='memberRegionsList']/tbody/tr[2]/td[3]")).getText();
     String memberRegionEntryCount = JMXProperties.getInstance().getProperty("regionOnMember./R1.M1.entryCount");
     Assert.assertEquals(memberRegionEntryCount, MemberRegionEntryCount);
@@ -593,7 +598,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   public void testDropDownList() throws InterruptedException {
     searchByIdAndClick("default_grid_button");
     searchByIdAndClick("M1&M1");
-  	searchByIdAndClick("memberName");
+    searchByIdAndClick("memberName");
     searchByLinkAndClick("M3");
     searchByIdAndClick("memberName");
     searchByLinkAndClick("M2");
@@ -615,7 +620,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   public void testDataViewRegionPath() {
     String regionPath = driver.findElement(By.id(REGION_PATH_LABEL)).getText();
     String dataviewregionpath = JMXProperties.getInstance().getProperty(
-        "region.R1.fullPath");
+      "region.R1.fullPath");
     Assert.assertEquals(dataviewregionpath, regionPath);
   }
 
@@ -624,7 +629,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   public void testDataViewRegionType() {
     String regionType = driver.findElement(By.id(REGION_TYPE_LABEL)).getText();
     String dataviewregiontype = JMXProperties.getInstance().getProperty(
-        "region.R1.regionType");
+      "region.R1.regionType");
     Assert.assertEquals(dataviewregiontype, regionType);
   }
 
@@ -632,9 +637,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewEmptyNodes() {
     String regionEmptyNodes = driver.findElement(By.id(DATA_VIEW_EMPTYNODES))
-        .getText();
+      .getText();
     String dataviewEmptyNodes = JMXProperties.getInstance().getProperty(
-        "region.R1.emptyNodes");
+      "region.R1.emptyNodes");
     Assert.assertEquals(dataviewEmptyNodes, regionEmptyNodes);
   }
 
@@ -642,9 +647,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewSystemRegionEntryCount() {
     String regionEntryCount = driver.findElement(By.id(DATA_VIEW_ENTRYCOUNT))
-        .getText();
+      .getText();
     String dataviewEntryCount = JMXProperties.getInstance().getProperty(
-        "region.R1.systemRegionEntryCount");
+      "region.R1.systemRegionEntryCount");
     Assert.assertEquals(dataviewEntryCount, regionEntryCount);
   }
 
@@ -652,9 +657,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewPersistentEnabled() {
     String regionPersistence = driver.findElement(
-        By.id(REGION_PERSISTENCE_LABEL)).getText();
+      By.id(REGION_PERSISTENCE_LABEL)).getText();
     String dataviewregionpersistence = JMXProperties.getInstance().getProperty(
-        "region.R1.persistentEnabled");
+      "region.R1.persistentEnabled");
     Assert.assertEquals(dataviewregionpersistence, regionPersistence);
   }
 
@@ -662,9 +667,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewDiskWritesRate() {
     String regionWrites = driver.findElement(By.id(DATA_VIEW_WRITEPERSEC))
-        .getText();
+      .getText();
     String dataviewRegionWrites = JMXProperties.getInstance().getProperty(
-        "region.R1.diskWritesRate");
+      "region.R1.diskWritesRate");
     Assert.assertEquals(dataviewRegionWrites, regionWrites);
   }
 
@@ -672,9 +677,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewDiskReadsRate() {
     String regionReads = driver.findElement(By.id(DATA_VIEW_READPERSEC))
-        .getText();
+      .getText();
     String dataviewRegionReads = JMXProperties.getInstance().getProperty(
-        "region.R1.diskReadsRate");
+      "region.R1.diskReadsRate");
     Assert.assertEquals(dataviewRegionReads, regionReads);
   }
 
@@ -682,9 +687,9 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewDiskUsage() {
     String regionMemoryUsed = driver.findElement(By.id(DATA_VIEW_USEDMEMORY))
-        .getText();
+      .getText();
     String dataviewMemoryUsed = JMXProperties.getInstance().getProperty(
-        "region.R1.diskUsage");
+      "region.R1.diskUsage");
     Assert.assertEquals(dataviewMemoryUsed, regionMemoryUsed);
     searchByLinkAndClick(QUERY_STATISTICS_LABEL);
   }
@@ -693,351 +698,350 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
   @Test
   public void testDataViewGridValue() {
     String DataViewRegionName = driver.findElement(
-        By.xpath("//*[id('6')/x:td[1]]")).getText();
+      By.xpath("//*[id('6')/x:td[1]]")).getText();
     String dataViewRegionName = JMXProperties.getInstance().getProperty(
-        "region.R1.name");
+      "region.R1.name");
     Assert.assertEquals(dataViewRegionName, DataViewRegionName);
 
     String DataViewRegionType = driver.findElement(
-        By.xpath("//*[id('6')/x:td[2]")).getText();
+      By.xpath("//*[id('6')/x:td[2]")).getText();
     String dataViewRegionType = JMXProperties.getInstance().getProperty(
-        "region.R2.regionType");
+      "region.R2.regionType");
     Assert.assertEquals(dataViewRegionType, DataViewRegionType);
 
     String DataViewEntryCount = driver.findElement(
-        By.xpath("//*[id('6')/x:td[3]")).getText();
+      By.xpath("//*[id('6')/x:td[3]")).getText();
     String dataViewEntryCount = JMXProperties.getInstance().getProperty(
-        "region.R2.systemRegionEntryCount");
+      "region.R2.systemRegionEntryCount");
     Assert.assertEquals(dataViewEntryCount, DataViewEntryCount);
 
     String DataViewEntrySize = driver.findElement(
-        By.xpath("//*[id('6')/x:td[4]")).getText();
+      By.xpath("//*[id('6')/x:td[4]")).getText();
     String dataViewEntrySize = JMXProperties.getInstance().getProperty(
-        "region.R2.entrySize");
+      "region.R2.entrySize");
     Assert.assertEquals(dataViewEntrySize, DataViewEntrySize);
 
   }
-  
-  
+
+
   public void loadDataBrowserpage() {
-	  searchByLinkAndClick(DATA_BROWSER_LABEL);
-	  //Thread.sleep(7000);
+    searchByLinkAndClick(DATA_BROWSER_LABEL);
+    //Thread.sleep(7000);
   }
-  
+
   @Test
   public void testDataBrowserRegionName() throws InterruptedException {
-	  loadDataBrowserpage();
-	  String DataBrowserRegionName1 = driver.findElement(By.id(DATA_BROWSER_REGIONName1))
-			  .getText();
-	  String databrowserRegionNametemp1 = JMXProperties.getInstance().getProperty(
-		        "region.R1.name");
-	  String databrowserRegionName1 = databrowserRegionNametemp1.replaceAll("[\\/]", "");
-	  Assert.assertEquals(databrowserRegionName1, DataBrowserRegionName1);
-	  
-	  String DataBrowserRegionName2 = driver.findElement(By.id(DATA_BROWSER_REGIONName2))
-			  .getText();
-	  String databrowserRegionNametemp2 = JMXProperties.getInstance().getProperty(
-		        "region.R2.name");
-	  String databrowserRegionName2 = databrowserRegionNametemp2.replaceAll("[\\/]", "");
-	  Assert.assertEquals(databrowserRegionName2, DataBrowserRegionName2);
-	  
-	  String DataBrowserRegionName3 = driver.findElement(By.id(DATA_BROWSER_REGIONName3))
-			  .getText();
-	  String databrowserRegionNametemp3 = JMXProperties.getInstance().getProperty(
-		        "region.R3.name");
-	  String databrowserRegionName3 = databrowserRegionNametemp3.replaceAll("[\\/]", "");
-	  Assert.assertEquals(databrowserRegionName3, DataBrowserRegionName3);
-	        
+    loadDataBrowserpage();
+    String DataBrowserRegionName1 = driver.findElement(By.id(DATA_BROWSER_REGIONName1))
+      .getText();
+    String databrowserRegionNametemp1 = JMXProperties.getInstance().getProperty(
+      "region.R1.name");
+    String databrowserRegionName1 = databrowserRegionNametemp1.replaceAll("[\\/]", "");
+    Assert.assertEquals(databrowserRegionName1, DataBrowserRegionName1);
+
+    String DataBrowserRegionName2 = driver.findElement(By.id(DATA_BROWSER_REGIONName2))
+      .getText();
+    String databrowserRegionNametemp2 = JMXProperties.getInstance().getProperty(
+      "region.R2.name");
+    String databrowserRegionName2 = databrowserRegionNametemp2.replaceAll("[\\/]", "");
+    Assert.assertEquals(databrowserRegionName2, DataBrowserRegionName2);
+
+    String DataBrowserRegionName3 = driver.findElement(By.id(DATA_BROWSER_REGIONName3))
+      .getText();
+    String databrowserRegionNametemp3 = JMXProperties.getInstance().getProperty(
+      "region.R3.name");
+    String databrowserRegionName3 = databrowserRegionNametemp3.replaceAll("[\\/]", "");
+    Assert.assertEquals(databrowserRegionName3, DataBrowserRegionName3);
+
   }
-  
+
   @Test
   public void testDataBrowserRegionMembersVerificaition() throws InterruptedException {
-	  loadDataBrowserpage();
-	  searchByIdAndClick(DATA_BROWSER_REGION1_CHECKBOX);
-	  String DataBrowserMember1Name1 = driver.findElement(By.xpath("//label[@for='Member0']"))
-			  .getText();
-	  String DataBrowserMember1Name2 = driver.findElement(By.xpath("//label[@for='Member1']"))
-			  .getText();
-	  String DataBrowserMember1Name3 = driver.findElement(By.xpath("//label[@for='Member2']"))
-			  .getText();
-	  String databrowserMember1Names = JMXProperties.getInstance().getProperty(
-		        "region.R1.members");
-	  
-	  String databrowserMember1Names1 = databrowserMember1Names.substring(0, 2);
-	  Assert.assertEquals(databrowserMember1Names1, DataBrowserMember1Name1);
-	  
-	  String databrowserMember1Names2 = databrowserMember1Names.substring(3, 5);
-	  Assert.assertEquals(databrowserMember1Names2, DataBrowserMember1Name2);
-	  
-	  String databrowserMember1Names3 = databrowserMember1Names.substring(6, 8);
-	  Assert.assertEquals(databrowserMember1Names3, DataBrowserMember1Name3);
-	  searchByIdAndClick(DATA_BROWSER_REGION1_CHECKBOX);
-	  
-	  searchByIdAndClick(DATA_BROWSER_REGION2_CHECKBOX);
-	  String DataBrowserMember2Name1 = driver.findElement(By.xpath("//label[@for='Member0']"))
-			  .getText();
-	  String DataBrowserMember2Name2 = driver.findElement(By.xpath("//label[@for='Member1']"))
-			  .getText();
-	  String databrowserMember2Names = JMXProperties.getInstance().getProperty(
-		        "region.R2.members");
-	  
-	  String databrowserMember2Names1 = databrowserMember2Names.substring(0, 2);
-	  Assert.assertEquals(databrowserMember2Names1, DataBrowserMember2Name1);
-	  
-	  String databrowserMember2Names2 = databrowserMember2Names.substring(3, 5);
-	  Assert.assertEquals(databrowserMember2Names2, DataBrowserMember2Name2);
-	  searchByIdAndClick(DATA_BROWSER_REGION2_CHECKBOX);
-	  
-	  searchByIdAndClick(DATA_BROWSER_REGION3_CHECKBOX);
-	  String DataBrowserMember3Name1 = driver.findElement(By.xpath("//label[@for='Member0']"))
-			  .getText();
-	  String DataBrowserMember3Name2 = driver.findElement(By.xpath("//label[@for='Member1']"))
-			  .getText();
-	  String databrowserMember3Names = JMXProperties.getInstance().getProperty(
-		        "region.R3.members");
-	  
-	  String databrowserMember3Names1 = databrowserMember3Names.substring(0, 2);
-	  Assert.assertEquals(databrowserMember3Names1, DataBrowserMember3Name1);
-	  
-	  String databrowserMember3Names2 = databrowserMember3Names.substring(3, 5);
-	  Assert.assertEquals(databrowserMember3Names2, DataBrowserMember3Name2);
-	  searchByIdAndClick(DATA_BROWSER_REGION3_CHECKBOX);
+    loadDataBrowserpage();
+    searchByIdAndClick(DATA_BROWSER_REGION1_CHECKBOX);
+    String DataBrowserMember1Name1 = driver.findElement(By.xpath("//label[@for='Member0']"))
+      .getText();
+    String DataBrowserMember1Name2 = driver.findElement(By.xpath("//label[@for='Member1']"))
+      .getText();
+    String DataBrowserMember1Name3 = driver.findElement(By.xpath("//label[@for='Member2']"))
+      .getText();
+    String databrowserMember1Names = JMXProperties.getInstance().getProperty(
+      "region.R1.members");
+
+    String databrowserMember1Names1 = databrowserMember1Names.substring(0, 2);
+    Assert.assertEquals(databrowserMember1Names1, DataBrowserMember1Name1);
+
+    String databrowserMember1Names2 = databrowserMember1Names.substring(3, 5);
+    Assert.assertEquals(databrowserMember1Names2, DataBrowserMember1Name2);
+
+    String databrowserMember1Names3 = databrowserMember1Names.substring(6, 8);
+    Assert.assertEquals(databrowserMember1Names3, DataBrowserMember1Name3);
+    searchByIdAndClick(DATA_BROWSER_REGION1_CHECKBOX);
+
+    searchByIdAndClick(DATA_BROWSER_REGION2_CHECKBOX);
+    String DataBrowserMember2Name1 = driver.findElement(By.xpath("//label[@for='Member0']"))
+      .getText();
+    String DataBrowserMember2Name2 = driver.findElement(By.xpath("//label[@for='Member1']"))
+      .getText();
+    String databrowserMember2Names = JMXProperties.getInstance().getProperty(
+      "region.R2.members");
+
+    String databrowserMember2Names1 = databrowserMember2Names.substring(0, 2);
+    Assert.assertEquals(databrowserMember2Names1, DataBrowserMember2Name1);
+
+    String databrowserMember2Names2 = databrowserMember2Names.substring(3, 5);
+    Assert.assertEquals(databrowserMember2Names2, DataBrowserMember2Name2);
+    searchByIdAndClick(DATA_BROWSER_REGION2_CHECKBOX);
+
+    searchByIdAndClick(DATA_BROWSER_REGION3_CHECKBOX);
+    String DataBrowserMember3Name1 = driver.findElement(By.xpath("//label[@for='Member0']"))
+      .getText();
+    String DataBrowserMember3Name2 = driver.findElement(By.xpath("//label[@for='Member1']"))
+      .getText();
+    String databrowserMember3Names = JMXProperties.getInstance().getProperty(
+      "region.R3.members");
+
+    String databrowserMember3Names1 = databrowserMember3Names.substring(0, 2);
+    Assert.assertEquals(databrowserMember3Names1, DataBrowserMember3Name1);
+
+    String databrowserMember3Names2 = databrowserMember3Names.substring(3, 5);
+    Assert.assertEquals(databrowserMember3Names2, DataBrowserMember3Name2);
+    searchByIdAndClick(DATA_BROWSER_REGION3_CHECKBOX);
   }
-  
+
   @Test
   public void testDataBrowserColocatedRegions() throws InterruptedException {
-	  loadDataBrowserpage();
-	  String databrowserMemberNames1 = JMXProperties.getInstance().getProperty(
-		        "region.R1.members");
-	  String databrowserMemberNames2 = JMXProperties.getInstance().getProperty(
-		        "region.R2.members");
-	  String databrowserMemberNames3 = JMXProperties.getInstance().getProperty(
-		        "region.R3.members");
-	  
-	  if((databrowserMemberNames1.matches(databrowserMemberNames2+"(.*)"))) {
-		  if((databrowserMemberNames1.matches(databrowserMemberNames3+"(.*)"))) {
-			  if((databrowserMemberNames2.matches(databrowserMemberNames3+"(.*)"))) {
-				  System.out.println("R1, R2 and R3 are colocated regions");
-			  }   
-		  }
-	  }
-	  searchByIdAndClick(DATA_BROWSER_REGION1_CHECKBOX);
-	  searchByLinkAndClick(DATA_BROWSER_COLOCATED_REGION);
-	  String DataBrowserColocatedRegion1 = driver.findElement(By.id(DATA_BROWSER_COLOCATED_REGION_NAME1))
-			  .getText();
-	  String DataBrowserColocatedRegion2 = driver.findElement(By.id(DATA_BROWSER_COLOCATED_REGION_NAME2))
-			  .getText();
-	  String DataBrowserColocatedRegion3 = driver.findElement(By.id(DATA_BROWSER_COLOCATED_REGION_NAME3))
-			  .getText();
-	  
-	  String databrowserColocatedRegiontemp1 = JMXProperties.getInstance().getProperty(
-		        "region.R1.name");
-	  String databrowserColocatedRegion1 = databrowserColocatedRegiontemp1.replaceAll("[\\/]", "");
-	  
-	  String databrowserColocatedRegiontemp2 = JMXProperties.getInstance().getProperty(
-		        "region.R2.name");
-	  String databrowserColocatedRegion2 = databrowserColocatedRegiontemp2.replaceAll("[\\/]", "");
-	  
-	  String databrowserColocatedRegiontemp3 = JMXProperties.getInstance().getProperty(
-		        "region.R3.name");
-	  String databrowserColocatedRegion3 = databrowserColocatedRegiontemp3.replaceAll("[\\/]", "");
-	  
-	  Assert.assertEquals(databrowserColocatedRegion1, DataBrowserColocatedRegion1);
-	  Assert.assertEquals(databrowserColocatedRegion2, DataBrowserColocatedRegion2);
-	  Assert.assertEquals(databrowserColocatedRegion3, DataBrowserColocatedRegion3);
-	  
+    loadDataBrowserpage();
+    String databrowserMemberNames1 = JMXProperties.getInstance().getProperty(
+      "region.R1.members");
+    String databrowserMemberNames2 = JMXProperties.getInstance().getProperty(
+      "region.R2.members");
+    String databrowserMemberNames3 = JMXProperties.getInstance().getProperty(
+      "region.R3.members");
+
+    if ((databrowserMemberNames1.matches(databrowserMemberNames2 + "(.*)"))) {
+      if ((databrowserMemberNames1.matches(databrowserMemberNames3 + "(.*)"))) {
+        if ((databrowserMemberNames2.matches(databrowserMemberNames3 + "(.*)"))) {
+          System.out.println("R1, R2 and R3 are colocated regions");
+        }
+      }
+    }
+    searchByIdAndClick(DATA_BROWSER_REGION1_CHECKBOX);
+    searchByLinkAndClick(DATA_BROWSER_COLOCATED_REGION);
+    String DataBrowserColocatedRegion1 = driver.findElement(By.id(DATA_BROWSER_COLOCATED_REGION_NAME1))
+      .getText();
+    String DataBrowserColocatedRegion2 = driver.findElement(By.id(DATA_BROWSER_COLOCATED_REGION_NAME2))
+      .getText();
+    String DataBrowserColocatedRegion3 = driver.findElement(By.id(DATA_BROWSER_COLOCATED_REGION_NAME3))
+      .getText();
+
+    String databrowserColocatedRegiontemp1 = JMXProperties.getInstance().getProperty(
+      "region.R1.name");
+    String databrowserColocatedRegion1 = databrowserColocatedRegiontemp1.replaceAll("[\\/]", "");
+
+    String databrowserColocatedRegiontemp2 = JMXProperties.getInstance().getProperty(
+      "region.R2.name");
+    String databrowserColocatedRegion2 = databrowserColocatedRegiontemp2.replaceAll("[\\/]", "");
+
+    String databrowserColocatedRegiontemp3 = JMXProperties.getInstance().getProperty(
+      "region.R3.name");
+    String databrowserColocatedRegion3 = databrowserColocatedRegiontemp3.replaceAll("[\\/]", "");
+
+    Assert.assertEquals(databrowserColocatedRegion1, DataBrowserColocatedRegion1);
+    Assert.assertEquals(databrowserColocatedRegion2, DataBrowserColocatedRegion2);
+    Assert.assertEquals(databrowserColocatedRegion3, DataBrowserColocatedRegion3);
+
   }
 
   @Ignore("WIP") // clusterDetails element not found on Data Browser page. No assertions in test
   @Test
   public void testDataBrowserQueryValidation() throws IOException, InterruptedException {
-	  loadDataBrowserpage();
-	  WebElement textArea = driver.findElement(By.id("dataBrowserQueryText"));
-	  textArea.sendKeys("query1");
-	  WebElement executeButton = driver.findElement(By.id("btnExecuteQuery"));
-	  executeButton.click();
-	  String QueryResultHeader1 = driver.findElement(By.xpath("//div[@id='clusterDetails']/div/div/span[@class='n-title']")).getText();
-	  double count = 0,countBuffer=0,countLine=0;
-	  String lineNumber = "";
-	  String filePath = "E:\\springsource\\springsourceWS\\Pulse-Cedar\\src\\main\\resources\\testQueryResultSmall.txt";
-	  BufferedReader br;
-	  String line = "";
-	  br = new BufferedReader(new FileReader(filePath));
-	  while((line = br.readLine()) != null)
-	  {
-		  countLine++;
-          String[] words = line.split(" ");
-
-          for (String word : words) {
-            if (word.equals(QueryResultHeader1)) {
-              count++;
-              countBuffer++;
-            }
-          }
-	  }  
+    loadDataBrowserpage();
+    WebElement textArea = driver.findElement(By.id("dataBrowserQueryText"));
+    textArea.sendKeys("query1");
+    WebElement executeButton = driver.findElement(By.id("btnExecuteQuery"));
+    executeButton.click();
+    String QueryResultHeader1 = driver.findElement(By.xpath("//div[@id='clusterDetails']/div/div/span[@class='n-title']")).getText();
+    double count = 0, countBuffer = 0, countLine = 0;
+    String lineNumber = "";
+    String filePath = "E:\\springsource\\springsourceWS\\Pulse-Cedar\\src\\main\\resources\\testQueryResultSmall.txt";
+    BufferedReader br;
+    String line = "";
+    br = new BufferedReader(new FileReader(filePath));
+    while ((line = br.readLine()) != null) {
+      countLine++;
+      String[] words = line.split(" ");
+
+      for (String word : words) {
+        if (word.equals(QueryResultHeader1)) {
+          count++;
+          countBuffer++;
+        }
+      }
+    }
   }
-  
- public void testTreeMapPopUpData(String S1, String gridIcon) {
-	  for (int i = 1; i <=3; i++) {
-		  searchByLinkAndClick(CLUSTER_VIEW_LABEL);
-		  if (gridIcon.equals(SERVER_GROUP_GRID_ID)) {
-			  WebElement ServerGroupRadio = driver.findElement(By.xpath("//label[@for='radio-servergroups']"));
-			  ServerGroupRadio.click();
-		  }
-		  if (gridIcon.equals(REDUNDANCY_GRID_ID)) {
-			  WebElement ServerGroupRadio = driver.findElement(By.xpath("//label[@for='radio-redundancyzones']"));
-			  ServerGroupRadio.click();
-		  }
-		  searchByIdAndClick(gridIcon);
-		  WebElement TreeMapMember = driver.findElement(By.xpath("//div[@id='" + S1 + "M"+ (i) + "']/div"));
-		  Actions builder = new Actions(driver);
-		  builder.clickAndHold(TreeMapMember).perform();
-		  int j = 1;
-		  String CPUUsageM1temp = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div/div[2]/div"))
-				  .getText();
-		  String CPUUsageM1 = CPUUsageM1temp.replaceAll("[\\%]", "");
-		  String cpuUsageM1 = JMXProperties.getInstance().getProperty(
-			        "member.M" + (i) + ".cpuUsage");
-		  Assert.assertEquals(cpuUsageM1, CPUUsageM1);
-			  
-		  String MemoryUsageM1temp = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 1) + "]/div[2]/div"))
-				  .getText();
-		  String MemoryUsageM1 = MemoryUsageM1temp.replaceAll("MB", "");
-		  String memoryUsageM1 = JMXProperties.getInstance().getProperty(
-				  "member.M" + (i) + ".UsedMemory");
-		  Assert.assertEquals(memoryUsageM1, MemoryUsageM1);
-		  
-		  String LoadAvgM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 2) + "]/div[2]/div"))
-				  .getText();
-		  String loadAvgM1 = JMXProperties.getInstance().getProperty(
-				  "member.M" + (i) + ".loadAverage");
-		  Assert.assertEquals(df2.format(Double.valueOf(loadAvgM1)), LoadAvgM1);
-		  
-		  
-		  String ThreadsM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 3) + "]/div[2]/div"))
-				  .getText();
-		  String threadsM1 = JMXProperties.getInstance().getProperty(
-				  "member.M" + (i) + ".numThreads");
-		  Assert.assertEquals(threadsM1, ThreadsM1);
-		  
-		  String SocketsM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 4) + "]/div[2]/div"))
-				  .getText();
-		  String socketsM1 = JMXProperties.getInstance().getProperty(
-				  "member.M" + (i) + ".totalFileDescriptorOpen");
-		  Assert.assertEquals(socketsM1, SocketsM1);
-          builder.moveToElement(TreeMapMember).release().perform();
-		  }
-	  }
-  
+
+  public void testTreeMapPopUpData(String S1, String gridIcon) {
+    for (int i = 1; i <= 3; i++) {
+      searchByLinkAndClick(CLUSTER_VIEW_LABEL);
+      if (gridIcon.equals(SERVER_GROUP_GRID_ID)) {
+        WebElement ServerGroupRadio = driver.findElement(By.xpath("//label[@for='radio-servergroups']"));
+        ServerGroupRadio.click();
+      }
+      if (gridIcon.equals(REDUNDANCY_GRID_ID)) {
+        WebElement ServerGroupRadio = driver.findElement(By.xpath("//label[@for='radio-redundancyzones']"));
+        ServerGroupRadio.click();
+      }
+      searchByIdAndClick(gridIcon);
+      WebElement TreeMapMember = driver.findElement(By.xpath("//div[@id='" + S1 + "M" + (i) + "']/div"));
+      Actions builder = new Actions(driver);
+      builder.clickAndHold(TreeMapMember).perform();
+      int j = 1;
+      String CPUUsageM1temp = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div/div[2]/div"))
+        .getText();
+      String CPUUsageM1 = CPUUsageM1temp.replaceAll("[\\%]", "");
+      String cpuUsageM1 = JMXProperties.getInstance().getProperty(
+        "member.M" + (i) + ".cpuUsage");
+      Assert.assertEquals(cpuUsageM1, CPUUsageM1);
+
+      String MemoryUsageM1temp = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 1) + "]/div[2]/div"))
+        .getText();
+      String MemoryUsageM1 = MemoryUsageM1temp.replaceAll("MB", "");
+      String memoryUsageM1 = JMXProperties.getInstance().getProperty(
+        "member.M" + (i) + ".UsedMemory");
+      Assert.assertEquals(memoryUsageM1, MemoryUsageM1);
+
+      String LoadAvgM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 2) + "]/div[2]/div"))
+        .getText();
+      String loadAvgM1 = JMXProperties.getInstance().getProperty(
+        "member.M" + (i) + ".loadAverage");
+      Assert.assertEquals(df2.format(Double.valueOf(loadAvgM1)), LoadAvgM1);
+
+
+      String ThreadsM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 3) + "]/div[2]/div"))
+        .getText();
+      String threadsM1 = JMXProperties.getInstance().getProperty(
+        "member.M" + (i) + ".numThreads");
+      Assert.assertEquals(threadsM1, ThreadsM1);
+
+      String SocketsM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 4) + "]/div[2]/div"))
+        .getText();
+      String socketsM1 = JMXProperties.getInstance().getProperty(
+        "member.M" + (i) + ".totalFileDescriptorOpen");
+      Assert.assertEquals(socketsM1, SocketsM1);
+      builder.moveToElement(TreeMapMember).release().perform();
+    }
+  }
+
   @Test
   public void testTopologyPopUpData() {
-	  testTreeMapPopUpData("", CLUSTER_VIEW_GRID_ID); 
+    testTreeMapPopUpData("", CLUSTER_VIEW_GRID_ID);
   }
-  
+
   @Test
   public void testServerGroupTreeMapPopUpData() {
-	  testTreeMapPopUpData("SG1(!)", SERVER_GROUP_GRID_ID);
+    testTreeMapPopUpData("SG1(!)", SERVER_GROUP_GRID_ID);
   }
-  
+
   @Test
   public void testDataViewTreeMapPopUpData() {
-	  searchByLinkAndClick(CLUSTER_VIEW_LABEL);
-	  searchByLinkAndClick(DATA_DROPDOWN_ID);
-	  WebElement TreeMapMember = driver.findElement(By.id("GraphTreeMapClusterData-canvas"));
-	  Actions builder = new Actions(driver);
-	  builder.clickAndHold(TreeMapMember).perform();
-	  String RegionType = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div/div[2]/div"))
-			  .getText();
-	  String regionType = JMXProperties.getInstance().getProperty(
-			  "region.R2.regionType");
-	  Assert.assertEquals(regionType, RegionType);
-	  
-	  String EntryCount = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[2]/div[2]/div"))
-			  .getText();
-	  String entryCount = JMXProperties.getInstance().getProperty(
-			  "region.R2.systemRegionEntryCount");
-	  Assert.assertEquals(entryCount, EntryCount);
-	  
-	  String EntrySizetemp = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[3]/div[2]/div"))
-			  .getText();
-	  float EntrySize = Float.parseFloat(EntrySizetemp);
-	  float entrySize = Float.parseFloat(JMXProperties.getInstance().getProperty(
-			  "region.R2.entrySize"));
-	  entrySize = entrySize / 1024 / 1024;
-	  entrySize = Float.parseFloat(new DecimalFormat("##.####")
+    searchByLinkAndClick(CLUSTER_VIEW_LABEL);
+    searchByLinkAndClick(DATA_DROPDOWN_ID);
+    WebElement TreeMapMember = driver.findElement(By.id("GraphTreeMapClusterData-canvas"));
+    Actions builder = new Actions(driver);
+    builder.clickAndHold(TreeMapMember).perform();
+    String RegionType = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div/div[2]/div"))
+      .getText();
+    String regionType = JMXProperties.getInstance().getProperty(
+      "region.R2.regionType");
+    Assert.assertEquals(regionType, RegionType);
+
+    String EntryCount = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[2]/div[2]/div"))
+      .getText();
+    String entryCount = JMXProperties.getInstance().getProperty(
+      "region.R2.systemRegionEntryCount");
+    Assert.assertEquals(entryCount, EntryCount);
+
+    String EntrySizetemp = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[3]/div[2]/div"))
+      .getText();
+    float EntrySize = Float.parseFloat(EntrySizetemp);
+    float entrySize = Float.parseFloat(JMXProperties.getInstance().getProperty(
+      "region.R2.entrySize"));
+    entrySize = entrySize / 1024 / 1024;
+    entrySize = Float.parseFloat(new DecimalFormat("##.####")
       .format(entrySize));
-	  Assert.assertEquals(entrySize, EntrySize);  
-	  builder.moveToElement(TreeMapMember).release().perform();
+    Assert.assertEquals(entrySize, EntrySize);
+    builder.moveToElement(TreeMapMember).release().perform();
   }
-  
+
   @Test
   public void testRegionViewTreeMapPopUpData() {
-	  searchByLinkAndClick(CLUSTER_VIEW_LABEL);
-	  searchByLinkAndClick(DATA_DROPDOWN_ID);
-	  WebElement TreeMapMember = driver.findElement(By.id("GraphTreeMapClusterData-canvas"));
-	  TreeMapMember.click();
+    searchByLinkAndClick(CLUSTER_VIEW_LABEL);
+    searchByLinkAndClick(DATA_DROPDOWN_ID);
+    WebElement TreeMapMember = driver.findElement(By.id("GraphTreeMapClusterData-canvas"));
+    TreeMapMember.click();
   }
 
   @Ignore("WIP")
   @Test
-  public void testNumberOfRegions() throws InterruptedException{
-	  
-		driver.findElement(By.xpath("//a[text()='Data Browser']")).click();
-		
-		 Thread.sleep(1000);
-		 List<WebElement> regionList = driver.findElements(By.xpath("//ul[@id='treeDemo']/li"));		 
-		 String regions = JMXProperties.getInstance().getProperty("regions");
-		 String []regionName = regions.split(" ");
-		 for (String string : regionName) {
-		}
-		 //JMXProperties.getInstance().getProperty("region.R1.regionType");
-		int i=1; 
-		for (WebElement webElement : regionList) {
-			//webElement.getAttribute(arg0)
-			i++;
-		}
-		
-		driver.findElement(By.id("treeDemo_1_check")).click();		
-		
-		List<WebElement> memeberList = driver.findElements(By.xpath("//ul[@id='membersList']/li"));
-		int j=0;
-		for (WebElement webElement : memeberList) {
-			j++;
-		}  
+  public void testNumberOfRegions() throws InterruptedException {
+
+    driver.findElement(By.xpath("//a[text()='Data Browser']")).click();
+
+    Thread.sleep(1000);
+    List<WebElement> regionList = driver.findElements(By.xpath("//ul[@id='treeDemo']/li"));
+    String regions = JMXProperties.getInstance().getProperty("regions");
+    String[] regionName = regions.split(" ");
+    for (String string : regionName) {
+    }
+    //JMXProperties.getInstance().getProperty("region.R1.regionType");
+    int i = 1;
+    for (WebElement webElement : regionList) {
+      //webElement.getAttribute(arg0)
+      i++;
+    }
+
+    driver.findElement(By.id("treeDemo_1_check")).click();
+
+    List<WebElement> memeberList = driver.findElements(By.xpath("//ul[@id='membersList']/li"));
+    int j = 0;
+    for (WebElement webElement : memeberList) {
+      j++;
+    }
   }
 
   @Ignore("WIP")
   @Test
-  public void testDataBrowser(){
-	  
-	  driver.findElement(By.linkText("Data Browser")).click();
-	 // WebElement dataBrowserLabel = driver.findElement(By.xpath(""));
-	  WebDriverWait wait = new WebDriverWait(driver, 20);
-	  wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//label[text()='Data Browser']"))));
-	  
-	
-	// Verify all elements must be displayed on data browser screen 
-	  Assert.assertTrue(driver.findElement(By.xpath("//a[text()='Data Regions']")).isDisplayed());	
-	  Assert.assertTrue(driver.findElement(By.id("linkColocatedRegions")).isDisplayed());	  
-	  Assert.assertTrue(driver.findElement(By.linkText("All Regions")).isDisplayed());
-	  
-	  Assert.assertTrue(driver.findElement(By.xpath("//a[text()='Region Members']")).isDisplayed());
-	  
-	  Assert.assertTrue(driver.findElement(By.xpath("//a[text()='Queries']")).isDisplayed());
-	  Assert.assertTrue(driver.findElement(By.xpath("//label[text()='Query Editor']")).isDisplayed());
-	  Assert.assertTrue(driver.findElement(By.xpath("//label[text()='Result']")).isDisplayed());
-	  Assert.assertTrue(driver.findElement(By.xpath("//input[@value='Export Result']")).isDisplayed());
-	  Assert.assertTrue(driver.findElement(By.id("btnExecuteQuery")).isDisplayed());
-	  Assert.assertTrue(driver.findElement(By.xpath("//input[@value='Clear']")).isDisplayed());
-	  Assert.assertTrue(driver.findElement(By.id("dataBrowserQueryText")).isDisplayed());
-	  
-	  Assert.assertTrue(driver.findElement(By.id("historyIcon")).isDisplayed());
-	  
-	  //Actual query execution
-	  
-	  driver.findElement(By.id("dataBrowserQueryText")).sendKeys("Query1");
-
-	  // Assert data regions are displayed 
-	  Assert.assertTrue(driver.findElement(By.id("treeDemo_1")).isDisplayed());
+  public void testDataBrowser() {
+
+    driver.findElement(By.linkText("Data Browser")).click();
+    // WebElement dataBrowserLabel = driver.findElement(By.xpath(""));
+    WebDriverWait wait = new WebDriverWait(driver, 20);
+    wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//label[text()='Data Browser']"))));
+
+
+    // Verify all elements must be displayed on data browser screen
+    Assert.assertTrue(driver.findElement(By.xpath("//a[text()='Data Regions']")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.id("linkColocatedRegions")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.linkText("All Regions")).isDisplayed());
+
+    Assert.assertTrue(driver.findElement(By.xpath("//a[text()='Region Members']")).isDisplayed());
+
+    Assert.assertTrue(driver.findElement(By.xpath("//a[text()='Queries']")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.xpath("//label[text()='Query Editor']")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.xpath("//label[text()='Result']")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.xpath("//input[@value='Export Result']")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.id("btnExecuteQuery")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.xpath("//input[@value='Clear']")).isDisplayed());
+    Assert.assertTrue(driver.findElement(By.id("dataBrowserQueryText")).isDisplayed());
+
+    Assert.assertTrue(driver.findElement(By.id("historyIcon")).isDisplayed());
+
+    //Actual query execution
+
+    driver.findElement(By.id("dataBrowserQueryText")).sendKeys("Query1");
+
+    // Assert data regions are displayed
+    Assert.assertTrue(driver.findElement(By.id("treeDemo_1")).isDisplayed());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
index 1770dd5..ae8cc92 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Region.java
@@ -38,7 +38,7 @@ public class Region extends JMXBaseBean implements RegionMBean {
     "enableOffHeapMemory", "scope", "diskStoreName",
     "diskSynchronous" };
   private static OpenType[] regAttItemTypes = { SimpleType.STRING,
-    SimpleType.BOOLEAN, SimpleType.BOOLEAN, SimpleType.STRING, 
+    SimpleType.BOOLEAN, SimpleType.STRING,
     SimpleType.STRING, SimpleType.BOOLEAN };
   private static CompositeType listRegionAttributesCompData = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-web/src/main/webapp/WEB-INF/gemfire-servlet.xml
----------------------------------------------------------------------
diff --git a/geode-web/src/main/webapp/WEB-INF/gemfire-servlet.xml b/geode-web/src/main/webapp/WEB-INF/gemfire-servlet.xml
index eb1a533..ce65933 100644
--- a/geode-web/src/main/webapp/WEB-INF/gemfire-servlet.xml
+++ b/geode-web/src/main/webapp/WEB-INF/gemfire-servlet.xml
@@ -53,7 +53,7 @@ limitations under the License.
   </mvc:annotation-driven>
 
   <mvc:interceptors>
-    <bean class="com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor"/>
+    <bean class="com.gemstone.gemfire.management.internal.web.controllers.support.LoginHandlerInterceptor"/>
   </mvc:interceptors>
 
 </beans>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java
deleted file mode 100644
index 4b9e303..0000000
--- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.management.internal.web.controllers.support;
-
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-import edu.umd.cs.mtc.MultithreadedTestCase;
-import edu.umd.cs.mtc.TestFramework;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.lib.concurrent.Synchroniser;
-import org.jmock.lib.legacy.ClassImposteriser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
-/**
- * The EnvironmentVariablesHandlerInterceptorJUnitTest class is a test suite of test cases to test the contract
- * and functionality of the Spring HandlerInterceptor, EnvironmentVariablesHandlerInterceptor class.
- * 
- * @see org.jmock.Mockery
- * @see org.junit.Assert
- * @see org.junit.Test
- * @since 8.0
- */
-@Category(UnitTest.class)
-public class EnvironmentVariablesHandlerInterceptorJUnitTest {
-
-  private Mockery mockContext;
-
-  @Before
-  public void setUp() {
-    mockContext = new Mockery();
-    mockContext.setImposteriser(ClassImposteriser.INSTANCE);
-    mockContext.setThreadingPolicy(new Synchroniser());
-  }
-
-  @After
-  public void tearDown() {
-    mockContext.assertIsSatisfied();
-    mockContext = null;
-  }
-
-  protected String createEnvironmentVariable(final String name) {
-    return (EnvironmentVariablesHandlerInterceptor.ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX + name);
-  }
-
-  protected <T> Enumeration<T> enumeration(final Iterator<T> iterator) {
-    return new Enumeration<T>() {
-      public boolean hasMoreElements() {
-        return iterator.hasNext();
-      }
-      public T nextElement() {
-        return iterator.next();
-      }
-    };
-  }
-
-  @Test
-  public void testPreHandleAfterCompletion() throws Exception {
-    final Map<String, String> requestParameters = new HashMap<>(2);
-    final Map<String, String> requestHeaders = new HashMap<>();
-
-    requestParameters.put("parameter", "one");
-    requestParameters.put(createEnvironmentVariable("variable"), "two");
-
-    final HttpServletRequest mockHttpRequest = mockContext.mock(HttpServletRequest.class, "testPreHandleAfterCompletion.HttpServletRequest");
-
-    mockContext.checking(new Expectations() {{
-      oneOf(mockHttpRequest).getParameterNames();
-      will(returnValue(enumeration(requestParameters.keySet().iterator())));
-      oneOf(mockHttpRequest).getHeaderNames();
-      will(returnValue(enumeration(requestHeaders.keySet().iterator())));
-      oneOf(mockHttpRequest).getParameter(with(equal(createEnvironmentVariable("variable"))));
-      will(returnValue(requestParameters.get(createEnvironmentVariable("variable"))));
-    }});
-
-    EnvironmentVariablesHandlerInterceptor handlerInterceptor = new EnvironmentVariablesHandlerInterceptor();
-
-    Map<String, String> envBefore = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-    assertNotNull(envBefore);
-    assertTrue(envBefore.isEmpty());
-    assertTrue(handlerInterceptor.preHandle(mockHttpRequest, null, null));
-
-    Map<String, String> envSet = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-    assertNotNull(envSet);
-    assertNotSame(envBefore, envSet);
-    assertEquals(1, envSet.size());
-    assertTrue(envSet.containsKey("variable"));
-    assertEquals("two", envSet.get("variable"));
-
-    handlerInterceptor.afterCompletion(mockHttpRequest, null, null, null);
-
-    Map<String, String> envAfter = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-    assertNotNull(envAfter);
-    assertTrue(envAfter.isEmpty());
-  }
-
-  @Test
-  public void testHandlerInterceptorThreadSafety() throws Throwable {
-    TestFramework.runOnce(new HandlerInterceptorThreadSafetyMultiThreadedTestCase());
-  }
-
-  protected final class HandlerInterceptorThreadSafetyMultiThreadedTestCase extends MultithreadedTestCase {
-
-    private EnvironmentVariablesHandlerInterceptor handlerInterceptor;
-
-    private HttpServletRequest mockHttpRequestOne;
-    private HttpServletRequest mockHttpRequestTwo;
-
-    @Override
-    public void initialize() {
-      super.initialize();
-
-      final Map<String, String> requestParametersOne = new HashMap<>(3);
-      final Map<String, String> requestHeaders = new HashMap<>();
-
-      requestParametersOne.put("param", "one");
-      requestParametersOne.put(createEnvironmentVariable("STAGE"), "test");
-      requestParametersOne.put(createEnvironmentVariable("GEMFIRE"), "/path/to/gemfire/700");
-
-      mockHttpRequestOne = mockContext.mock(HttpServletRequest.class, "testHandlerInterceptorThreadSafety.HttpServletRequest.1");
-
-      mockContext.checking(new Expectations() {{
-        oneOf(mockHttpRequestOne).getParameterNames();
-        will(returnValue(enumeration(requestParametersOne.keySet().iterator())));
-        oneOf(mockHttpRequestOne).getHeaderNames();
-        will(returnValue(enumeration(requestHeaders.keySet().iterator())));
-        oneOf(mockHttpRequestOne).getParameter(with(equal(createEnvironmentVariable("STAGE"))));
-        will(returnValue(requestParametersOne.get(createEnvironmentVariable("STAGE"))));
-        oneOf(mockHttpRequestOne).getParameter(with(equal(createEnvironmentVariable("GEMFIRE"))));
-        will(returnValue(requestParametersOne.get(createEnvironmentVariable("GEMFIRE"))));
-      }});
-
-      mockHttpRequestTwo = mockContext.mock(HttpServletRequest.class, "testHandlerInterceptorThreadSafety.HttpServletRequest.2");
-
-      final Map<String, String> requestParametersTwo = new HashMap<>(3);
-
-      requestParametersTwo.put("parameter", "two");
-      requestParametersTwo.put(createEnvironmentVariable("HOST"), "localhost");
-      requestParametersTwo.put(createEnvironmentVariable("GEMFIRE"), "/path/to/gemfire/75");
-
-      mockContext.checking(new Expectations() {{
-        oneOf(mockHttpRequestTwo).getParameterNames();
-        will(returnValue(enumeration(requestParametersTwo.keySet().iterator())));
-        oneOf(mockHttpRequestTwo).getHeaderNames();
-        will(returnValue(enumeration(requestHeaders.keySet().iterator())));
-        oneOf(mockHttpRequestTwo).getParameter(with(equal(createEnvironmentVariable("HOST"))));
-        will(returnValue(requestParametersTwo.get(createEnvironmentVariable("HOST"))));
-        oneOf(mockHttpRequestTwo).getParameter(with(equal(createEnvironmentVariable("GEMFIRE"))));
-        will(returnValue(requestParametersTwo.get(createEnvironmentVariable("GEMFIRE"))));
-      }});
-
-      handlerInterceptor =  new EnvironmentVariablesHandlerInterceptor();
-    }
-
-    public void thread1() throws Exception {
-      assertTick(0);
-      Thread.currentThread().setName("HTTP Request Processing Thread 1");
-
-      Map<String, String> env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertTrue(env.isEmpty());
-      assertTrue(handlerInterceptor.preHandle(mockHttpRequestOne, null, null));
-
-      env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertEquals(2, env.size());
-      assertFalse(env.containsKey("param"));
-      assertFalse(env.containsKey("parameter"));
-      assertFalse(env.containsKey("HOST"));
-      assertEquals("test", env.get("STAGE"));
-      assertEquals("/path/to/gemfire/700", env.get("GEMFIRE"));
-
-      waitForTick(2);
-
-      env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertEquals(2, env.size());
-      assertFalse(env.containsKey("param"));
-      assertFalse(env.containsKey("parameter"));
-      assertFalse(env.containsKey("HOST"));
-      assertEquals("test", env.get("STAGE"));
-      assertEquals("/path/to/gemfire/700", env.get("GEMFIRE"));
-
-      waitForTick(4);
-
-      env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertEquals(2, env.size());
-      assertFalse(env.containsKey("param"));
-      assertFalse(env.containsKey("parameter"));
-      assertFalse(env.containsKey("HOST"));
-      assertEquals("test", env.get("STAGE"));
-      assertEquals("/path/to/gemfire/700", env.get("GEMFIRE"));
-
-      handlerInterceptor.afterCompletion(mockHttpRequestOne, null, null, null);
-
-      env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertTrue(env.isEmpty());
-    }
-
-    public void thread2() throws Exception {
-      assertTick(0);
-      Thread.currentThread().setName("HTTP Request Processing Thread 2");
-      waitForTick(1);
-
-      Map<String, String> env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertTrue(env.isEmpty());
-      assertTrue(handlerInterceptor.preHandle(mockHttpRequestTwo, null, null));
-
-      env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertEquals(2, env.size());
-      assertFalse(env.containsKey("parameter"));
-      assertFalse(env.containsKey("param"));
-      assertFalse(env.containsKey("STAGE"));
-      assertEquals("localhost", env.get("HOST"));
-      assertEquals("/path/to/gemfire/75", env.get("GEMFIRE"));
-
-      waitForTick(3);
-
-      handlerInterceptor.afterCompletion(mockHttpRequestTwo, null, null, null);
-
-      env = EnvironmentVariablesHandlerInterceptor.getEnvironment();
-
-      assertNotNull(env);
-      assertTrue(env.isEmpty());
-    }
-
-    @Override
-    public void finish() {
-      super.finish();
-      handlerInterceptor = null;
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptorJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptorJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptorJUnitTest.java
new file mode 100644
index 0000000..ef405db
--- /dev/null
+++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptorJUnitTest.java
@@ -0,0 +1,274 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.web.controllers.support;
+
+import static org.junit.Assert.*;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+import edu.umd.cs.mtc.MultithreadedTestCase;
+import edu.umd.cs.mtc.TestFramework;
+
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.lib.concurrent.Synchroniser;
+import org.jmock.lib.legacy.ClassImposteriser;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+/**
+ * The LoginHandlerInterceptorJUnitTest class is a test suite of test cases to test the contract
+ * and functionality of the Spring HandlerInterceptor, LoginHandlerInterceptor class.
+ * 
+ * @see org.jmock.Mockery
+ * @see org.junit.Assert
+ * @see org.junit.Test
+ * @since 8.0
+ */
+@Category(UnitTest.class)
+public class LoginHandlerInterceptorJUnitTest {
+
+  private Mockery mockContext;
+
+  @Before
+  public void setUp() {
+    mockContext = new Mockery();
+    mockContext.setImposteriser(ClassImposteriser.INSTANCE);
+    mockContext.setThreadingPolicy(new Synchroniser());
+  }
+
+  @After
+  public void tearDown() {
+    mockContext.assertIsSatisfied();
+    mockContext = null;
+  }
+
+  protected String createEnvironmentVariable(final String name) {
+    return (LoginHandlerInterceptor.ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX + name);
+  }
+
+  protected <T> Enumeration<T> enumeration(final Iterator<T> iterator) {
+    return new Enumeration<T>() {
+      public boolean hasMoreElements() {
+        return iterator.hasNext();
+      }
+      public T nextElement() {
+        return iterator.next();
+      }
+    };
+  }
+
+  @Test
+  public void testPreHandleAfterCompletion() throws Exception {
+    final Map<String, String> requestParameters = new HashMap<>(2);
+    final Map<String, String> requestHeaders = new HashMap<>();
+
+    requestParameters.put("parameter", "one");
+    requestParameters.put(createEnvironmentVariable("variable"), "two");
+
+    final HttpServletRequest mockHttpRequest = mockContext.mock(HttpServletRequest.class, "testPreHandleAfterCompletion.HttpServletRequest");
+
+    mockContext.checking(new Expectations() {{
+      oneOf(mockHttpRequest).getParameterNames();
+      will(returnValue(enumeration(requestParameters.keySet().iterator())));
+      oneOf(mockHttpRequest).getHeaderNames();
+      will(returnValue(enumeration(requestHeaders.keySet().iterator())));
+      oneOf(mockHttpRequest).getParameter(with(equal(createEnvironmentVariable("variable"))));
+      will(returnValue(requestParameters.get(createEnvironmentVariable("variable"))));
+    }});
+
+    LoginHandlerInterceptor handlerInterceptor = new LoginHandlerInterceptor();
+
+    Map<String, String> envBefore = LoginHandlerInterceptor.getEnvironment();
+
+    assertNotNull(envBefore);
+    assertTrue(envBefore.isEmpty());
+    assertTrue(handlerInterceptor.preHandle(mockHttpRequest, null, null));
+
+    Map<String, String> envSet = LoginHandlerInterceptor.getEnvironment();
+
+    assertNotNull(envSet);
+    assertNotSame(envBefore, envSet);
+    assertEquals(1, envSet.size());
+    assertTrue(envSet.containsKey("variable"));
+    assertEquals("two", envSet.get("variable"));
+
+    handlerInterceptor.afterCompletion(mockHttpRequest, null, null, null);
+
+    Map<String, String> envAfter = LoginHandlerInterceptor.getEnvironment();
+
+    assertNotNull(envAfter);
+    assertTrue(envAfter.isEmpty());
+  }
+
+  @Test
+  public void testHandlerInterceptorThreadSafety() throws Throwable {
+    TestFramework.runOnce(new HandlerInterceptorThreadSafetyMultiThreadedTestCase());
+  }
+
+  protected final class HandlerInterceptorThreadSafetyMultiThreadedTestCase extends MultithreadedTestCase {
+
+    private LoginHandlerInterceptor handlerInterceptor;
+
+    private HttpServletRequest mockHttpRequestOne;
+    private HttpServletRequest mockHttpRequestTwo;
+
+    @Override
+    public void initialize() {
+      super.initialize();
+
+      final Map<String, String> requestParametersOne = new HashMap<>(3);
+      final Map<String, String> requestHeaders = new HashMap<>();
+
+      requestParametersOne.put("param", "one");
+      requestParametersOne.put(createEnvironmentVariable("STAGE"), "test");
+      requestParametersOne.put(createEnvironmentVariable("GEMFIRE"), "/path/to/gemfire/700");
+
+      mockHttpRequestOne = mockContext.mock(HttpServletRequest.class, "testHandlerInterceptorThreadSafety.HttpServletRequest.1");
+
+      mockContext.checking(new Expectations() {{
+        oneOf(mockHttpRequestOne).getParameterNames();
+        will(returnValue(enumeration(requestParametersOne.keySet().iterator())));
+        oneOf(mockHttpRequestOne).getHeaderNames();
+        will(returnValue(enumeration(requestHeaders.keySet().iterator())));
+        oneOf(mockHttpRequestOne).getParameter(with(equal(createEnvironmentVariable("STAGE"))));
+        will(returnValue(requestParametersOne.get(createEnvironmentVariable("STAGE"))));
+        oneOf(mockHttpRequestOne).getParameter(with(equal(createEnvironmentVariable("GEMFIRE"))));
+        will(returnValue(requestParametersOne.get(createEnvironmentVariable("GEMFIRE"))));
+      }});
+
+      mockHttpRequestTwo = mockContext.mock(HttpServletRequest.class, "testHandlerInterceptorThreadSafety.HttpServletRequest.2");
+
+      final Map<String, String> requestParametersTwo = new HashMap<>(3);
+
+      requestParametersTwo.put("parameter", "two");
+      requestParametersTwo.put(createEnvironmentVariable("HOST"), "localhost");
+      requestParametersTwo.put(createEnvironmentVariable("GEMFIRE"), "/path/to/gemfire/75");
+
+      mockContext.checking(new Expectations() {{
+        oneOf(mockHttpRequestTwo).getParameterNames();
+        will(returnValue(enumeration(requestParametersTwo.keySet().iterator())));
+        oneOf(mockHttpRequestTwo).getHeaderNames();
+        will(returnValue(enumeration(requestHeaders.keySet().iterator())));
+        oneOf(mockHttpRequestTwo).getParameter(with(equal(createEnvironmentVariable("HOST"))));
+        will(returnValue(requestParametersTwo.get(createEnvironmentVariable("HOST"))));
+        oneOf(mockHttpRequestTwo).getParameter(with(equal(createEnvironmentVariable("GEMFIRE"))));
+        will(returnValue(requestParametersTwo.get(createEnvironmentVariable("GEMFIRE"))));
+      }});
+
+      handlerInterceptor =  new LoginHandlerInterceptor();
+    }
+
+    public void thread1() throws Exception {
+      assertTick(0);
+      Thread.currentThread().setName("HTTP Request Processing Thread 1");
+
+      Map<String, String> env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertTrue(env.isEmpty());
+      assertTrue(handlerInterceptor.preHandle(mockHttpRequestOne, null, null));
+
+      env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertEquals(2, env.size());
+      assertFalse(env.containsKey("param"));
+      assertFalse(env.containsKey("parameter"));
+      assertFalse(env.containsKey("HOST"));
+      assertEquals("test", env.get("STAGE"));
+      assertEquals("/path/to/gemfire/700", env.get("GEMFIRE"));
+
+      waitForTick(2);
+
+      env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertEquals(2, env.size());
+      assertFalse(env.containsKey("param"));
+      assertFalse(env.containsKey("parameter"));
+      assertFalse(env.containsKey("HOST"));
+      assertEquals("test", env.get("STAGE"));
+      assertEquals("/path/to/gemfire/700", env.get("GEMFIRE"));
+
+      waitForTick(4);
+
+      env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertEquals(2, env.size());
+      assertFalse(env.containsKey("param"));
+      assertFalse(env.containsKey("parameter"));
+      assertFalse(env.containsKey("HOST"));
+      assertEquals("test", env.get("STAGE"));
+      assertEquals("/path/to/gemfire/700", env.get("GEMFIRE"));
+
+      handlerInterceptor.afterCompletion(mockHttpRequestOne, null, null, null);
+
+      env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertTrue(env.isEmpty());
+    }
+
+    public void thread2() throws Exception {
+      assertTick(0);
+      Thread.currentThread().setName("HTTP Request Processing Thread 2");
+      waitForTick(1);
+
+      Map<String, String> env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertTrue(env.isEmpty());
+      assertTrue(handlerInterceptor.preHandle(mockHttpRequestTwo, null, null));
+
+      env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertEquals(2, env.size());
+      assertFalse(env.containsKey("parameter"));
+      assertFalse(env.containsKey("param"));
+      assertFalse(env.containsKey("STAGE"));
+      assertEquals("localhost", env.get("HOST"));
+      assertEquals("/path/to/gemfire/75", env.get("GEMFIRE"));
+
+      waitForTick(3);
+
+      handlerInterceptor.afterCompletion(mockHttpRequestTwo, null, null, null);
+
+      env = LoginHandlerInterceptor.getEnvironment();
+
+      assertNotNull(env);
+      assertTrue(env.isEmpty());
+    }
+
+    @Override
+    public void finish() {
+      super.finish();
+      handlerInterceptor = null;
+    }
+  }
+
+}


[03/50] [abbrv] incubator-geode git commit: GEODE-17: Shiro Integration

Posted by kl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
index fb36aca..c5ff369 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/MemberMBeanSecurityJUnitTest.java
@@ -58,7 +58,7 @@ public class MemberMBeanSecurityJUnitTest {
     bean.isCacheServer();
     bean.isServer();
     bean.listConnectedGatewayReceivers();
-    bean.processCommand("create region --name=Region_A");
+    //bean.processCommand("create region --name=Region_A");
     bean.showJVMMetrics();
     bean.status();
   }
@@ -84,7 +84,7 @@ public class MemberMBeanSecurityJUnitTest {
   @JMXConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testDataAdmin() throws Exception {
     bean.compactAllDiskStores();
-    assertThatThrownBy(() -> bean.shutDownMember()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:MANAGE");
+    assertThatThrownBy(() -> bean.shutDownMember()).hasMessageContaining("CLUSTER:MANAGE");
     assertThatThrownBy(() -> bean.createManager()).hasMessageContaining("CLUSTER:MANAGE");
     bean.showJVMMetrics();
     bean.status();
@@ -93,7 +93,7 @@ public class MemberMBeanSecurityJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testDataUser() throws Exception {
-    assertThatThrownBy(() -> bean.shutDownMember()).isInstanceOf(SecurityException.class).hasMessageContaining("CLUSTER:MANAGE");
+    assertThatThrownBy(() -> bean.shutDownMember()).hasMessageContaining("CLUSTER:MANAGE");
     assertThatThrownBy(() -> bean.createManager()).hasMessageContaining("CLUSTER:MANAGE");
     assertThatThrownBy(() -> bean.compactAllDiskStores()).hasMessageContaining("DATA:MANAGE");
     assertThatThrownBy(() -> bean.fetchJvmThreads()).hasMessageContaining("CLUSTER:READ");
@@ -103,7 +103,7 @@ public class MemberMBeanSecurityJUnitTest {
     assertThatThrownBy(() -> bean.isCacheServer()).hasMessageContaining("CLUSTER:READ");
     assertThatThrownBy(() -> bean.isServer()).hasMessageContaining("CLUSTER:READ");
     assertThatThrownBy(() -> bean.listConnectedGatewayReceivers()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.processCommand("create region --name=Region_A")).hasMessageContaining("DATA:MANAGE");
+    //assertThatThrownBy(() -> bean.processCommand("create region --name=Region_A")).hasMessageContaining("DATA:MANAGE");
     assertThatThrownBy(() -> bean.showJVMMetrics()).hasMessageContaining("CLUSTER:READ");
     assertThatThrownBy(() -> bean.status()).hasMessageContaining("CLUSTER:READ");
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ShiroCacheStartRule.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ShiroCacheStartRule.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ShiroCacheStartRule.java
new file mode 100644
index 0000000..7d683f3
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/ShiroCacheStartRule.java
@@ -0,0 +1,63 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.security;
+
+import java.util.Properties;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import org.junit.rules.ExternalResource;
+
+public class ShiroCacheStartRule extends ExternalResource {
+  private Cache cache;
+  private int jmxManagerPort;
+  private String shiroFile;
+
+  public ShiroCacheStartRule(int jmxManagerPort, String shiroFile) {
+    this.jmxManagerPort = jmxManagerPort;
+    this.shiroFile = shiroFile;
+  }
+
+
+  protected void before() throws Throwable {
+    Properties properties = new Properties();
+    properties.put(DistributionConfig.NAME_NAME, ShiroCacheStartRule.class.getSimpleName());
+    properties.put(DistributionConfig.LOCATORS_NAME, "");
+    properties.put(DistributionConfig.MCAST_PORT_NAME, "0");
+    properties.put(DistributionConfig.JMX_MANAGER_NAME, "true");
+    properties.put(DistributionConfig.JMX_MANAGER_START_NAME, "true");
+    properties.put(DistributionConfig.JMX_MANAGER_PORT_NAME, String.valueOf(jmxManagerPort));
+    properties.put(DistributionConfig.HTTP_SERVICE_PORT_NAME, "0");
+    properties.put(DistributionConfig.SHIRO_INIT_NAME, shiroFile);
+
+    cache = new CacheFactory(properties).create();
+    cache.addCacheServer().start();
+  }
+
+  public Cache getCache(){
+    return cache;
+  }
+
+  /**
+   * Override to tear down your specific external resource.
+   */
+  protected void after() {
+    cache.close();
+    cache = null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
index f777f69..c42e510 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/TestCommand.java
@@ -14,7 +14,7 @@ public class TestCommand {
   private final String command;
   private final String permission;
   
-  private TestCommand(String command, String permission) {
+  public TestCommand(String command, String permission) {
     this.command = command;
     this.permission = permission;
   }
@@ -39,7 +39,8 @@ public class TestCommand {
   public static List<TestCommand> getCommandsOfPermission(String permission){
     List<TestCommand> result = new ArrayList<>();
     for(TestCommand testCommand:testCommands){
-      if(permission.equals(testCommand.permission)){
+      String cPerm = testCommand.getPermission();
+      if(cPerm!=null && cPerm.startsWith(permission)){
         result.add(testCommand);
       }
     }
@@ -47,6 +48,7 @@ public class TestCommand {
   }
 
   private static void init() {
+    // ClientCommands
     createTestCommand("list clients", "CLUSTER:READ");
     createTestCommand("describe client --clientID=172.16.196.144", "CLUSTER:READ");
 
@@ -57,21 +59,21 @@ public class TestCommand {
 
     //CreateAlterDestroyRegionCommands
     createTestCommand("alter region --name=region1 --eviction-max=5000", "DATA:MANAGE");
-    createTestCommand("create region --name=region12", "DATA:MANAGE");
+    createTestCommand("create region --name=region12 --type=REPLICATE", "DATA:MANAGE");
     createTestCommand("destroy region --name=value", "DATA:MANAGE");
 
     //Data Commands
     createTestCommand("rebalance --include-region=region1", "DATA:MANAGE");
-    createTestCommand("export data --region=region1 --file=foo.txt --member=value", "DATA:READ");
-    createTestCommand("import data --region=region1 --file=foo.txt --member=value", "DATA:WRITE");
+    createTestCommand("export data --region=region1 --file=export.txt --member=exportMember", "DATA:READ");
+    createTestCommand("import data --region=region1 --file=import.txt --member=importMember", "DATA:WRITE");
     createTestCommand("put --key=key1 --value=value1 --region=region1", "DATA:WRITE");
     createTestCommand("get --key=key1 --region=region1", "DATA:READ");
     createTestCommand("remove --region=region1", "DATA:MANAGE");
     createTestCommand("query --query='SELECT * FROM /region1'", "DATA:READ");
+    createTestCommand("locate entry --key=k1 --region=secureRegion", "DATA:READ");
 
     // Deploy commands
-    createTestCommand("deploy --jar=group1_functions.jar --group=Group1", "DATA:MANAGE");
-    createTestCommand("list deployed", "CLUSTER:READ");
+    //createTestCommand("deploy --jar=group1_functions.jar --group=Group1", "DATA:MANAGE"); // TODO: this command will fail in GfshCommandsSecurityTest at interceptor for jar file checking
     createTestCommand("undeploy --group=Group1", "DATA:MANAGE");
 
     // Diskstore Commands
@@ -87,7 +89,7 @@ public class TestCommand {
     createTestCommand("describe offline-disk-store --name=foo --disk-dirs=bar", null);
     createTestCommand("export offline-disk-store --name=foo --disk-dirs=bar --dir=baz", null);
     createTestCommand("validate offline-disk-store --name=foo --disk-dirs=bar", null);
-    createTestCommand("alter disk-store --name=foo --region=xyz --disk-dirs=bar", null); // alteroffline
+    createTestCommand("alter disk-store --name=foo --region=xyz --disk-dirs=bar", null);
     createTestCommand("destroy disk-store --name=foo", "DATA:MANAGE");
 
     // DurableClientCommands
@@ -98,10 +100,10 @@ public class TestCommand {
 
     //ExportIMportSharedConfigurationCommands
     createTestCommand("export cluster-configuration --zip-file-name=mySharedConfig.zip", "CLUSTER:READ");
-    createTestCommand("import cluster-configuration --zip-file-name=value", "CLUSTER:MANAGE");
+    createTestCommand("import cluster-configuration --zip-file-name=value.zip", "CLUSTER:MANAGE");
 
     //FunctionCommands
-    createTestCommand("destroy function --id=InterestCalculations", "DATA:MANAGE");
+    //createTestCommand("destroy function --id=InterestCalculations", "DATA:MANAGE");
     createTestCommand("execute function --id=InterestCalculations --group=Group1", "DATA:WRITE");
     createTestCommand("list functions", "CLUSTER:READ");
 
@@ -126,8 +128,8 @@ public class TestCommand {
     createTestCommand("start vsd", null);
     createTestCommand("status locator", null);
     createTestCommand("status server", null);
-    createTestCommand("stop locator --name=locator1", "CLUSTER:MANAGE");
-    createTestCommand("stop server --name=server1", "CLUSTER:MANAGE");
+    //createTestCommand("stop locator --name=locator1", "CLUSTER:MANAGE");
+    //createTestCommand("stop server --name=server1", "CLUSTER:MANAGE");
 
     //MemberCommands
     createTestCommand("describe member --name=server1", "CLUSTER:READ");
@@ -146,7 +148,7 @@ public class TestCommand {
 
     // PDX Commands
     createTestCommand("configure pdx --read-serialized=true", "DATA:MANAGE");
-    createTestCommand("pdx rename --old=com.gemstone --new=com.pivotal --disk-store=ds1 --disk-dirs=/diskDir1", "DATA:MANAGE");
+    //createTestCommand("pdx rename --old=com.gemstone --new=com.pivotal --disk-store=ds1 --disk-dirs=/diskDir1", "DATA:MANAGE");
 
     // Queue Commands
     createTestCommand("create async-event-queue --id=myAEQ --listener=myApp.myListener", "DATA:MANAGE");
@@ -187,6 +189,6 @@ public class TestCommand {
     //ShellCommand
     createTestCommand("disconnect", null);
     //Misc commands
-    createTestCommand("shutdown", "CLUSTER:MANAGE");
+    //createTestCommand("shutdown", "CLUSTER:MANAGE");
   };
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
index 53879e1..01c9fd6 100644
--- a/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
+++ b/geode-core/src/test/resources/com/gemstone/gemfire/management/internal/security/cacheServer.json
@@ -76,14 +76,14 @@
     {
       "name": "region1-use",
       "operationsAllowed": [
-        "DATA:READ"
+        "DATA"
       ],
       "region": "region1"
     },
     {
       "name": "secure-use",
       "operationsAllowed": [
-        "DATA:READ"
+        "DATA"
       ],
       "regions": ["region1", "secureRegion"]
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/test/resources/shiro.ini
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/shiro.ini b/geode-core/src/test/resources/shiro.ini
new file mode 100644
index 0000000..5785782
--- /dev/null
+++ b/geode-core/src/test/resources/shiro.ini
@@ -0,0 +1,16 @@
+# -----------------------------------------------------------------------------
+# Users and their (optional) assigned roles
+# username = password, role1, role2, ..., roleN
+# -----------------------------------------------------------------------------
+[users]
+root = secret, admin
+guest = guest, guest
+stranger = 12345, none
+
+# -----------------------------------------------------------------------------
+# Roles with assigned permissions
+# roleName = perm1, perm2, ..., permN
+# -----------------------------------------------------------------------------
+[roles]
+admin = *
+guest = none
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
index ede7706..bd34820 100644
--- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
+++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/Server.java
@@ -18,22 +18,6 @@
  */
 package com.vmware.gemfire.tools.pulse.tests;
 
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
-import com.gemstone.gemfire.management.internal.security.ManagementInterceptor;
-import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
-import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
-import org.json.JSONException;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXConnectorServerFactory;
-import javax.management.remote.JMXServiceURL;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.net.Inet4Address;
@@ -43,6 +27,22 @@ import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.remote.JMXConnectorServer;
+import javax.management.remote.JMXConnectorServerFactory;
+import javax.management.remote.JMXServiceURL;
+
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+import com.gemstone.gemfire.management.internal.security.JSONAuthorization;
+import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
+import com.gemstone.gemfire.security.JMXShiroAuthenticator;
+import com.vmware.gemfire.tools.pulse.internal.data.PulseConstants;
+import org.json.JSONException;
 
 public class Server {
   private static final String DEFAULT_HOST = "127.0.0.1"; //"localhost"
@@ -68,10 +68,10 @@ public class Server {
       JSONAuthorization.setUpWithJsonFile(jsonAuthFile);
       Map<String, Object> env = new HashMap<String, Object>();
 
-      ManagementInterceptor interceptor = new ManagementInterceptor(props);
+      JMXShiroAuthenticator interceptor = new JMXShiroAuthenticator();
       env.put(JMXConnectorServer.AUTHENTICATOR, interceptor);
       cs = JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);
-      cs.setMBeanServerForwarder(new MBeanServerWrapper(interceptor));
+      cs.setMBeanServerForwarder(new MBeanServerWrapper());
     } else {
       System.setProperty("spring.profiles.active", "pulse.authentication.default");
       cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/gradle/dependency-versions.properties
----------------------------------------------------------------------
diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties
index f89f281..b3e004e 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -102,3 +102,4 @@ tomcat7.version = 7.0.30
 mortbay-jetty-servlet-api.version=2.5-20081211
 selenium.version=2.52.0
 google-gson.version=2.3.1
+shiro.version=1.2.4


[42/50] [abbrv] incubator-geode git commit: GEODE-1259: Upgrade gradle version to 2.12

Posted by kl...@apache.org.
GEODE-1259: Upgrade gradle version to 2.12

This also addresses GEODE-1085 and GEODE-1261


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/8e744982
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/8e744982
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/8e744982

Branch: refs/heads/feature/GEODE-1255
Commit: 8e744982a1cc5da50d4eb5640a2dae8ed87dfd24
Parents: 152ef59
Author: Jason Huynh <hu...@gmail.com>
Authored: Mon Apr 25 11:00:16 2016 -0700
Committer: Jason Huynh <hu...@gmail.com>
Committed: Mon May 2 10:33:49 2016 -0700

----------------------------------------------------------------------
 BUILDING.md                              |   2 +-
 build.gradle                             |   4 ++++
 gradle.properties                        |   1 +
 gradle/wrapper/gradle-wrapper.jar        | Bin 53637 -> 53639 bytes
 gradle/wrapper/gradle-wrapper.properties |   2 +-
 settings.gradle                          |   1 -
 6 files changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8e744982/BUILDING.md
----------------------------------------------------------------------
diff --git a/BUILDING.md b/BUILDING.md
index ababe2b..f2eeb62 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -39,7 +39,7 @@ or the `gfsh` script can be found in
     ```
     $ set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_60"
     ```
-2. Install Gradle, version 2.3 or a more recent version.
+2. Install Gradle, version 2.12 or a more recent version.
 3. Download the project source from the Releases page at [Apache Geode (incubating)] (http://geode.incubator.apache.org), and unpack the source code.
 4. Within the folder containing the unpacked source code, build without the tests:
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8e744982/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index 4f79eae..9a3ff10 100755
--- a/build.gradle
+++ b/build.gradle
@@ -29,6 +29,10 @@ buildscript {
 
 apply plugin: 'wrapper'
 
+wrapper {
+  gradleVersion = minimumGradleVersion
+}
+
 // Load all properties in dependency-version.properties as project properties, so all projects can read them
 Properties dependencyVersions = new Properties()
 dependencyVersions.load(new FileInputStream("${project.projectDir}/gradle/dependency-versions.properties"))

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8e744982/gradle.properties
----------------------------------------------------------------------
diff --git a/gradle.properties b/gradle.properties
index 669baed..ad39dc6 100755
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,6 +23,7 @@ releaseType = .M3-SNAPSHOT
 org.gradle.daemon = true
 org.gradle.jvmargs = -Xmx2048m
 
+minimumGradleVersion = 2.12
 # Set this on the command line with -P or in ~/.gradle/gradle.properties
 # to change the buildDir location.  Use an absolute path.
 buildRoot=

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8e744982/gradle/wrapper/gradle-wrapper.jar
----------------------------------------------------------------------
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 05ef575..2c6137b 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8e744982/gradle/wrapper/gradle-wrapper.properties
----------------------------------------------------------------------
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7b0d17a..72f7318 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8e744982/settings.gradle
----------------------------------------------------------------------
diff --git a/settings.gradle b/settings.gradle
index c579dce..188faa4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -35,7 +35,6 @@ include 'extensions/geode-modules-hibernate'
 include 'extensions/geode-modules-session'
 include 'extensions/geode-modules-assembly'
 
-def minimumGradleVersion = '2.3'
 if (GradleVersion.current() < GradleVersion.version(minimumGradleVersion)) {
   throw new GradleException('Running with unsupported Gradle Version. Use Gradle Wrapper or with Gradle version >= ' + minimumGradleVersion)
 }


[05/50] [abbrv] incubator-geode git commit: GEODE-17: Shiro Integration

Posted by kl...@apache.org.
GEODE-17: Shiro Integration

GEODE-17: associate async request with correct shiro user

GEODE-17

GEODE-17: fix shiro dependency


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

Branch: refs/heads/feature/GEODE-1255
Commit: c733f0c2da856103652a383b8611330b57ed8fc4
Parents: def78f1
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon Feb 29 07:47:47 2016 -0800
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Thu Apr 21 10:17:18 2016 -0700

----------------------------------------------------------------------
 geode-assembly/build.gradle                     |   1 +
 geode-core/build.gradle                         |   4 +-
 .../cache/operations/OperationContext.java      |   8 +-
 .../internal/DistributionConfig.java            |   7 +
 .../internal/DistributionConfigImpl.java        |  13 +
 .../management/DistributedSystemMXBean.java     |  15 +-
 .../management/internal/AuthManager.java        | 305 -------------------
 .../management/internal/ManagementAgent.java    |  73 ++---
 .../internal/SystemManagementService.java       |  44 ++-
 .../internal/beans/MemberMBeanBridge.java       |  17 +-
 .../management/internal/cli/CommandManager.java |   3 -
 .../CreateAlterDestroyRegionCommands.java       |  43 +--
 .../internal/cli/commands/DataCommands.java     |  42 +--
 .../internal/cli/commands/RegionCommands.java   |  25 +-
 .../internal/cli/remote/CommandProcessor.java   |  25 +-
 .../internal/cli/result/ErrorResultData.java    |  10 +-
 .../internal/cli/result/ResultBuilder.java      |   7 +-
 .../internal/cli/shell/JmxOperationInvoker.java |   5 +-
 .../internal/security/AccessControlMBean.java   |  58 ----
 .../internal/security/CLIOperationContext.java  | 102 -------
 .../internal/security/MBeanServerWrapper.java   |  24 +-
 .../security/ManagementInterceptor.java         | 243 ---------------
 .../security/ResourceOperationContext.java      |  28 +-
 .../controllers/AbstractCommandsController.java |  37 +--
 .../controllers/ConfigCommandsController.java   |  28 +-
 .../web/controllers/DataCommandsController.java |  36 +--
 .../DiskStoreCommandsController.java            |  20 +-
 .../controllers/FunctionCommandsController.java |  14 +-
 .../MiscellaneousCommandsController.java        |  12 +-
 .../EnvironmentVariablesHandlerInterceptor.java |  74 +----
 .../gemfire/security/CustomAuthRealm.java       | 173 +++++++++++
 .../gemfire/security/JMXShiroAuthenticator.java |  66 ++++
 .../gemstone/gemfire/security/ShiroUtil.java    |  94 ++++++
 .../security/AccessControlMBeanJUnitTest.java   |   4 +-
 .../CacheServerMBeanAuthorizationJUnitTest.java |  30 +-
 .../CacheServerMBeanShiroJUnitTest.java         |  73 +++++
 .../security/CliCommandsSecurityTest.java       |   7 +-
 .../security/DataCommandsSecurityTest.java      |  25 +-
 .../DiskStoreMXBeanSecurityJUnitTest.java       |   6 +-
 .../GatewaySenderMBeanSecurityTest.java         |  34 +--
 .../security/GfshCommandsSecurityTest.java      | 121 ++++++--
 .../security/GfshShellConnectionRule.java       |  25 +-
 .../internal/security/JSONAuthorization.java    |  55 ++--
 .../JsonAuthorizationCacheStartRule.java        |   4 +-
 .../LockServiceMBeanAuthorizationJUnitTest.java |  16 +-
 .../security/MBeanServerConnectionRule.java     |  15 +-
 .../ManagerMBeanAuthorizationJUnitTest.java     |  16 +-
 .../security/MemberMBeanSecurityJUnitTest.java  |   8 +-
 .../internal/security/ShiroCacheStartRule.java  |  63 ++++
 .../internal/security/TestCommand.java          |  30 +-
 .../internal/security/cacheServer.json          |   4 +-
 geode-core/src/test/resources/shiro.ini         |  16 +
 .../gemfire/tools/pulse/tests/Server.java       |  36 +--
 gradle/dependency-versions.properties           |   1 +
 54 files changed, 1005 insertions(+), 1240 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-assembly/build.gradle
----------------------------------------------------------------------
diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle
index b7d05e2..7faac14 100755
--- a/geode-assembly/build.gradle
+++ b/geode-assembly/build.gradle
@@ -152,6 +152,7 @@ def cp = {
       it.contains('log4j-jcl') ||
       it.contains('log4j-jul') ||
       it.contains('log4j-slf4j-impl') ||
+      it.contains('shiro') ||
       it.contains('slf4j-api') ||
       it.contains('spring-core') ||
       it.contains('spring-shell') ||

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/build.gradle
----------------------------------------------------------------------
diff --git a/geode-core/build.gradle b/geode-core/build.gradle
index 2206018..2c0e871 100755
--- a/geode-core/build.gradle
+++ b/geode-core/build.gradle
@@ -58,7 +58,7 @@ dependencies {
   compile ('mx4j:mx4j-remote:' + project.'mx4j.version') {
     ext.optional = true;
   }
-  compile ('mx4j:mx4j-tools:' + project.'mx4j.version') { 
+  compile ('mx4j:mx4j-tools:' + project.'mx4j.version') {
     ext.optional = true;
   }
   compile ('net.java.dev.jna:jna:' + project.'jna.version')
@@ -118,6 +118,8 @@ dependencies {
   compile ('org.xerial.snappy:snappy-java:' + project.'snappy-java.version') {
     ext.optional = true
   }
+
+  compile 'org.apache.shiro:shiro-core:' + project.'shiro.version'
  
   compile project(':geode-common')
   compile project(':geode-joptsimple')

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
index 1a41e83..dd290c5 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
@@ -17,6 +17,8 @@
 
 package com.gemstone.gemfire.cache.operations;
 
+import org.apache.shiro.authz.permission.WildcardPermission;
+
 /**
  * Encapsulates a cache operation and the data associated with it for both the
  * pre-operation and post-operation cases. Implementations for specific
@@ -28,7 +30,7 @@ package com.gemstone.gemfire.cache.operations;
  *
  * @since 5.5
  */
-public abstract class OperationContext {
+public abstract class OperationContext extends WildcardPermission{
 
   public enum Resource {
     CLUSTER,
@@ -299,6 +301,10 @@ public abstract class OperationContext {
     return Resource.DATA;
   }
 
+  public String getRegionName(){
+    return null;
+  }
+
   /**
    * True if the context is for post-operation.
    *

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
index c1a96ea..c0e560c 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java
@@ -3738,6 +3738,13 @@ public interface DistributionConfig extends Config, LogConfig {
   @ConfigAttributeSetter(name=LOCK_MEMORY_NAME)
   public void setLockMemory(boolean value);
 
+  @ConfigAttribute(type=String.class)
+  public String SHIRO_INIT_NAME="shiro-init";
+
+  @ConfigAttributeSetter(name=SHIRO_INIT_NAME)
+  public void setShiroInit(String value);
+  @ConfigAttributeGetter(name=SHIRO_INIT_NAME)
+  public String getShiroInit();
 
 
   //*************** Initializers to gather all the annotations in this class ************************

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
index 2f0e1d9..bac66c6 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java
@@ -387,6 +387,8 @@ public class DistributionConfigImpl
   
   /** Whether pages should be locked into memory or allowed to swap to disk */
   private boolean lockMemory = DEFAULT_LOCK_MEMORY;
+
+  private String shiroInit = "";
   
   //////////////////////  Constructors  //////////////////////
 
@@ -566,6 +568,7 @@ public class DistributionConfigImpl
     
     this.lockMemory = other.getLockMemory();
     this.distributedTransactions = other.getDistributedTransactions();
+    this.shiroInit = other.getShiroInit();
   }
 
   /**
@@ -2268,6 +2271,16 @@ public class DistributionConfigImpl
     this.lockMemory = value;
   }
 
+  @Override
+  public void setShiroInit(String value) {
+    this.shiroInit = value;
+  }
+
+  @Override
+  public String getShiroInit() {
+    return this.shiroInit;
+  }
+
   ///////////////////////  Utility Methods  ///////////////////////
   /**
    * Two instances of <code>DistributedConfigImpl</code> are equal if all of 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
index 5232aed..de60e33 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
@@ -16,18 +16,17 @@
  */
 package com.gemstone.gemfire.management;
 
+import static com.gemstone.gemfire.cache.operations.OperationContext.*;
+
+import java.util.Map;
+import javax.management.ObjectName;
+
 import com.gemstone.gemfire.cache.DiskStore;
 import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.DistributedSystem;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
 
-import javax.management.ObjectName;
-import java.util.Map;
-
-import static com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
-
 /**
  * MBean that provides access to information and management operations for a
  * {@link DistributedSystem}.
@@ -73,7 +72,7 @@ import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
  * @since 7.0
  *
  */
-@ResourceOperation(resource = Resource.CLUSTER, operation = OperationCode.READ)
+//@ResourceOperation(resource = Resource.CLUSTER, operation = OperationCode.READ)
 public interface DistributedSystemMXBean {
 
   /**
@@ -101,7 +100,7 @@ public interface DistributedSystemMXBean {
    *          members.
    * @return a list of names for locator members.
    */
-  
+
   public String[] listLocatorMembers(boolean onlyStandAloneLocators);
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/AuthManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/AuthManager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/AuthManager.java
deleted file mode 100644
index 31a5ab3..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/AuthManager.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.management.internal;
-
-import static com.gemstone.gemfire.management.internal.security.ResourceConstants.ACCESS_DENIED_MESSAGE;
-
-import java.lang.reflect.Method;
-import java.security.Principal;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.gemstone.gemfire.GemFireConfigException;
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.operations.OperationContext;
-import com.gemstone.gemfire.distributed.DistributedMember;
-import com.gemstone.gemfire.distributed.DistributedSystem;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.i18n.LogWriterI18n;
-import com.gemstone.gemfire.internal.ClassLoadUtil;
-import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
-import com.gemstone.gemfire.internal.logging.InternalLogWriter;
-import com.gemstone.gemfire.security.AccessControl;
-import com.gemstone.gemfire.security.AuthenticationFailedException;
-import com.gemstone.gemfire.security.AuthenticationRequiredException;
-import com.gemstone.gemfire.security.Authenticator;
-import com.gemstone.gemfire.internal.lang.StringUtils;
-
-
-/**
- * This class acts as a single gateway to authorize and authenticate REST ADMIN
- * APIS. This stores credentials against CommandAuthZRequest object which is
- * used to identify a particular client. As REST requests are state less we need
- * to store this map to avoid re-authenticating same client on subsequent
- * requests. However this map needs to be purged and cleaned up on some expiry
- * policy.
- *
- *
- * @author rishim
- *
- */
-public class AuthManager {
-
-  private Map<Properties, CommandAuthZRequest> authMap = new ConcurrentHashMap<Properties, CommandAuthZRequest>();
-
-  private Cache cache;
-
-  private final LogWriterI18n logger;
-
-  private long DEFAULT_EXPIRY_TIME = 30; // in minutes
-
-  private long EXPIRY_TIME ;
-
-  String authzFactoryName;
-
-  String postAuthzFactoryName;
-
-  public static String EXPIRY_TIME_FOR_REST_ADMIN_AUTH = "gemfire.expriyTimeForRESTAdminAuth";
-
-  public AuthManager(Cache cache) {
-    this.cache = cache;
-    this.logger = cache.getSecurityLoggerI18n();
-    this.EXPIRY_TIME = Long.getLong(EXPIRY_TIME_FOR_REST_ADMIN_AUTH, DEFAULT_EXPIRY_TIME);
-    DistributedSystem system = cache.getDistributedSystem();
-    Properties sysProps = system.getProperties();
-    this.authzFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME);
-    this.postAuthzFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_PP_NAME);
-  }
-
-  private Authenticator getAuthenticator(String authenticatorMethod, Properties securityProperties,
-      InternalLogWriter logWriter, InternalLogWriter securityLogWriter) throws AuthenticationFailedException {
-    Authenticator auth;
-    try {
-
-      Method instanceGetter = ClassLoadUtil.methodFromName(authenticatorMethod);
-      auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
-    } catch (Exception ex) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-    }
-    if (auth == null) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
-    }
-    auth.init(securityProperties, logWriter, securityLogWriter);
-    return auth;
-
-  }
-
-  public void verifyCredentials(Properties credentials) {
-
-    DistributedSystem system = this.cache.getDistributedSystem();
-    Properties sysProps = system.getProperties();
-    String authenticator = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
-
-    if (authenticator != null && authenticator.length() > 0) {
-
-      CommandAuthZRequest authZRequest = authMap.get(credentials);
-
-      if (authZRequest != null && !authZRequest.hasExpired()) {
-        return; //Already existing credentials . Return from here
-
-      } else {
-        Principal principal = verifyCredentials(authenticator, credentials, system.getSecurityProperties(),
-            (InternalLogWriter) this.cache.getLogger(), (InternalLogWriter) this.cache.getSecurityLogger(), cache
-                .getDistributedSystem().getDistributedMember());
-
-        if(authZRequest != null){ //i.e its an expired credential
-          CommandAuthZRequest expiredAuth = authMap.remove(credentials);
-          try{
-            expiredAuth.close();
-          }catch(Exception e){
-            logger.error(e);//Don't throw an exception , just logs it
-          }
-        }
-
-        authZRequest = new CommandAuthZRequest(principal).init();
-        authMap.put(credentials, authZRequest);
-      }
-    }
-
-  }
-
-  public void expireAllAuthZ() {
-    for (CommandAuthZRequest auth : authMap.values()) {
-      try {
-        auth.close();
-
-      } catch (Exception e) {
-        logger.error(e);// Don't throw an exception , just log it, as it depends on the user code.
-      }finally{
-        authMap.clear();
-      }
-    }
-  }
-
-  public void authorize(Properties credentials, OperationContext context) {
-
-    if (!StringUtils.isBlank(authzFactoryName)) {
-      CommandAuthZRequest authZRequest = authMap.get(credentials);
-      boolean authorized = authZRequest.authorize(context);
-      if (!authorized)
-        throw new SecurityException(ACCESS_DENIED_MESSAGE);
-    }
-  }
-
-  public void postAuthorize(Properties credentials, OperationContext context) {
-    if (!StringUtils.isBlank(postAuthzFactoryName)) {
-      CommandAuthZRequest authZRequest = authMap.get(credentials);
-      boolean authorized = authZRequest.postAuthorize(context);
-      if (!authorized)
-        throw new SecurityException(ACCESS_DENIED_MESSAGE);
-    }
-
-  }
-
-  private Principal verifyCredentials(String authenticatorMethod, Properties credentials,
-      Properties securityProperties, InternalLogWriter logWriter, InternalLogWriter securityLogWriter,
-      DistributedMember member) throws AuthenticationRequiredException, AuthenticationFailedException {
-
-    Authenticator authenticator = getAuthenticator(authenticatorMethod, securityProperties, logWriter,
-        securityLogWriter);
-    Principal principal;
-
-    try {
-      principal = authenticator.authenticate(credentials, member);
-    } finally {
-      authenticator.close();
-    }
-
-    return principal;
-
-  }
-
-  public class CommandAuthZRequest {
-
-    private Principal principal;
-
-    private AccessControl authzCallback;
-
-    private AccessControl postAuthzCallback;
-
-    private long initTime = System.currentTimeMillis();
-
-    public CommandAuthZRequest(Principal principal) {
-      this.principal = principal;
-    }
-
-    public boolean authorize(OperationContext context) {
-      if (authzCallback != null) {
-        return authzCallback.authorizeOperation(null, context);
-      }
-      return true; // If no AccessControl is set then always return true
-    }
-
-    public boolean postAuthorize(OperationContext context) {
-      if (postAuthzCallback != null) {
-        return postAuthzCallback.authorizeOperation(null, context);
-      }
-      return true; // If no AccessControl is set then always return true
-    }
-
-    public boolean hasExpired(){
-      if(System.currentTimeMillis() - initTime >= EXPIRY_TIME * 60 * 1000){
-        return true;
-      }
-      return false;
-    }
-
-    public void close() {
-      if (authzCallback != null) {
-        authzCallback.close();
-      }
-      if (postAuthzCallback != null) {
-        postAuthzCallback.close();
-      }
-    }
-
-    private CommandAuthZRequest init() {
-      try {
-        if (!StringUtils.isBlank(authzFactoryName)) {
-          Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
-          this.authzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
-          this.authzCallback.init(principal, null, cache);
-        }
-        if (!StringUtils.isBlank(postAuthzFactoryName)) {
-          Method postAuthzMethod = ClassLoadUtil.methodFromName(postAuthzFactoryName);
-          this.postAuthzCallback = (AccessControl) postAuthzMethod.invoke(null, (Object[]) null);
-          this.postAuthzCallback.init(principal, null, cache);
-        }
-      } catch (IllegalAccessException e) {
-        logger.error(e);
-        throw new GemFireConfigException("Error while configuring accesscontrol for rest resource", e);
-      } catch (Exception e) {
-        logger.error(e);
-        throw new GemFireConfigException("Error while configuring accesscontrol for rest resource", e);
-      }
-      return this;
-    }
-
-    public AccessControl getAuthzCallback() {
-      return authzCallback;
-    }
-
-    public AccessControl getPostAuthzCallback() {
-      return postAuthzCallback;
-    }
-
-    @Override
-    public int hashCode() {
-      final int prime = 31;
-      int result = 1;
-      result = prime * result + getOuterType().hashCode();
-      result = prime * result + (int) (initTime ^ (initTime >>> 32));
-      result = prime * result + ((principal == null) ? 0 : principal.hashCode());
-      return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      if (this == obj)
-        return true;
-      if (obj == null)
-        return false;
-      if (getClass() != obj.getClass())
-        return false;
-      CommandAuthZRequest other = (CommandAuthZRequest) obj;
-      if (!getOuterType().equals(other.getOuterType()))
-        return false;
-      if (initTime != other.initTime)
-        return false;
-      if (principal == null) {
-        if (other.principal != null)
-          return false;
-      } else if (!principal.equals(other.principal))
-        return false;
-      return true;
-    }
-
-    private AuthManager getOuterType() {
-      return AuthManager.this;
-    }
-
-  }
-
-  public Map<Properties, CommandAuthZRequest> getAuthMap() {
-    return this.authMap;
-  }
-
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
index 5dd2f80..0ba62e7 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java
@@ -38,7 +38,6 @@ import javax.management.remote.rmi.RMIJRMPServerImpl;
 import javax.management.remote.rmi.RMIServerImpl;
 import javax.rmi.ssl.SslRMIClientSocketFactory;
 
-import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.CacheFactory;
 import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.distributed.internal.DistributionManager;
@@ -52,8 +51,8 @@ import com.gemstone.gemfire.management.ManagementException;
 import com.gemstone.gemfire.management.ManagementService;
 import com.gemstone.gemfire.management.ManagerMXBean;
 import com.gemstone.gemfire.management.internal.security.MBeanServerWrapper;
-import com.gemstone.gemfire.management.internal.security.ManagementInterceptor;
 import com.gemstone.gemfire.management.internal.unsafe.ReadOpFileAccessController;
+import com.gemstone.gemfire.security.JMXShiroAuthenticator;
 import org.apache.logging.log4j.Logger;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
@@ -80,10 +79,9 @@ public class ManagementAgent {
   private boolean running = false;
   private Registry registry;
   private JMXConnectorServer cs;
+  private JMXShiroAuthenticator shiroAuthenticator;
   private final DistributionConfig config;
   private boolean isHttpServiceRunning = false;
-  private ManagementInterceptor managementInterceptor = null;
-  private MBeanServerWrapper mBeanServerWrapper = null;
 
   /**
    * This system property is set to true when the embedded HTTP server is
@@ -100,14 +98,6 @@ public class ManagementAgent {
     return this.running;
   }
 
-  public ManagementInterceptor getManagementInterceptor() {
-    return managementInterceptor;
-  }
-
-  public MBeanServerWrapper getMBeanServerWrapper() {
-    return mBeanServerWrapper;
-  }
-
   public synchronized boolean isHttpServiceRunning() {
     return isHttpServiceRunning;
   }
@@ -307,10 +297,6 @@ public class ManagementAgent {
     }
   }
 
-  private boolean isRunningInTomcat() {
-    return (System.getProperty("catalina.base") != null || System.getProperty("catalina.home") != null);
-  }
-
   private void setStatusMessage(ManagerMXBean mBean, String message) {
     mBean.setPulseURL("");
     mBean.setStatusMessage(message);
@@ -398,29 +384,6 @@ public class ManagementAgent {
     // Environment map. KIRK: why is this declared as HashMap?
     final HashMap<String, Object> env = new HashMap<String, Object>();
 
-    Cache cache = CacheFactory.getAnyInstance();
-    if (isCustomAuthenticator()) {
-      managementInterceptor = new ManagementInterceptor(cache.getDistributedSystem().getProperties());
-      env.put(JMXConnectorServer.AUTHENTICATOR, managementInterceptor);
-    }
-    else {
-      /* Disable the old authenticator mechanism */
-      String pwFile = this.config.getJmxManagerPasswordFile();
-      if (pwFile != null && pwFile.length() > 0) {
-        env.put("jmx.remote.x.password.file", pwFile);
-      }
-
-      String accessFile = this.config.getJmxManagerAccessFile();
-      if (accessFile != null && accessFile.length() > 0) {
-        // Lets not use default connector based authorization
-        // env.put("jmx.remote.x.access.file", accessFile);
-        // Rewire the mbs hierarchy to set accessController
-        ReadOpFileAccessController controller = new ReadOpFileAccessController(accessFile);
-        controller.setMBeanServer(mbs);
-        mbs = controller;
-      }
-    }
-
     // Manually creates and binds a JMX RMI Connector Server stub with the
     // registry created above: the port we pass here is the port that can
     // be specified in "service:jmx:rmi://"+hostname+":"+port - where the
@@ -474,13 +437,33 @@ public class ManagementAgent {
       }
     };
 
-    if (isCustomAuthorizer()) {
-      if(managementInterceptor==null){
-        managementInterceptor = new ManagementInterceptor(cache.getDistributedSystem().getProperties());
+    String shiroConfig = this.config.getShiroInit();
+    if (! StringUtils.isBlank(shiroConfig) || isCustomAuthenticator()) {
+      shiroAuthenticator = new JMXShiroAuthenticator();
+      env.put(JMXConnectorServer.AUTHENTICATOR, shiroAuthenticator);
+      cs.addNotificationListener(shiroAuthenticator, null, cs.getAttributes());
+      if(! StringUtils.isBlank(shiroConfig) || isCustomAuthorizer()) {
+        MBeanServerWrapper mBeanServerWrapper = new MBeanServerWrapper();
+        cs.setMBeanServerForwarder(mBeanServerWrapper);
+      }
+    }
+
+    else {
+      /* Disable the old authenticator mechanism */
+      String pwFile = this.config.getJmxManagerPasswordFile();
+      if (pwFile != null && pwFile.length() > 0) {
+        env.put("jmx.remote.x.password.file", pwFile);
+      }
+
+      String accessFile = this.config.getJmxManagerAccessFile();
+      if (accessFile != null && accessFile.length() > 0) {
+        // Lets not use default connector based authorization
+        // env.put("jmx.remote.x.access.file", accessFile);
+        // Rewire the mbs hierarchy to set accessController
+        ReadOpFileAccessController controller = new ReadOpFileAccessController(accessFile);
+        controller.setMBeanServer(mbs);
+        mbs = controller;
       }
-      mBeanServerWrapper = new MBeanServerWrapper(managementInterceptor);
-      cs.setMBeanServerForwarder(mBeanServerWrapper);
-      logger.info("Starting RMI Connector with Security Interceptor");
     }
 
     cs.start();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
index 4a48430..45ec358 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
@@ -20,22 +20,21 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
-
 import javax.management.Notification;
 import javax.management.ObjectName;
 
-import org.apache.logging.log4j.Logger;
-
 import com.gemstone.gemfire.CancelException;
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.execute.FunctionService;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException;
+import com.gemstone.gemfire.distributed.internal.DistributionConfig;
 import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
 import com.gemstone.gemfire.distributed.internal.ResourceEvent;
 import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
 import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.management.AlreadyRunningException;
 import com.gemstone.gemfire.management.AsyncEventQueueMXBean;
@@ -55,7 +54,14 @@ import com.gemstone.gemfire.management.RegionMXBean;
 import com.gemstone.gemfire.management.internal.beans.ManagementAdapter;
 import com.gemstone.gemfire.management.membership.MembershipEvent;
 import com.gemstone.gemfire.management.membership.MembershipListener;
-
+import com.gemstone.gemfire.security.CustomAuthRealm;
+import org.apache.logging.log4j.Logger;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.config.IniSecurityManagerFactory;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.realm.Realm;
+import org.apache.shiro.util.ThreadContext;
 
 /**
  * This is the concrete implementation of ManagementService
@@ -130,9 +136,6 @@ public final class SystemManagementService extends BaseManagementService {
    */
   private List<ProxyListener> proxyListeners;
 
-  private AuthManager authManager;
-
-
   private UniversalListenerContainer universalListenerContainer = new UniversalListenerContainer();
   
   public static BaseManagementService newSystemManagementService(Cache cache) {
@@ -154,6 +157,21 @@ public final class SystemManagementService extends BaseManagementService {
     this.jmxAdapter = new MBeanJMXAdapter();      
     this.repo = new ManagementResourceRepo();
 
+    DistributionConfig config = system.getConfig();
+
+    // setup shiro for authentication and authorization if it's desired
+    String shiroConfig = config.getShiroInit();
+    String customAuthenticator = config.getSecurityClientAuthenticator();
+    if (!StringUtils.isBlank(shiroConfig)) {
+      IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:"+shiroConfig);
+      SecurityManager securityManager = factory.getInstance();
+      SecurityUtils.setSecurityManager(securityManager);
+    }
+    else if (!StringUtils.isBlank(customAuthenticator)) {
+      Realm realm = new CustomAuthRealm(config.toProperties());
+      SecurityManager securityManager = new DefaultSecurityManager(realm);
+      SecurityUtils.setSecurityManager(securityManager);
+    }
 
     this.notificationHub = new NotificationHub(repo);
     if (system.getConfig().getJmxManager()) {
@@ -181,7 +199,6 @@ public final class SystemManagementService extends BaseManagementService {
       this.listener = new ManagementMembershipListener(this);
       system.getDistributionManager().addMembershipListener(listener);
       isStarted = true;
-      this.authManager = new AuthManager(cache);
       return this;
     } catch (CancelException e) {
       // Rethrow all CancelExceptions (fix for defect 46339)
@@ -273,8 +290,11 @@ public final class SystemManagementService extends BaseManagementService {
       }
       if (this.agent != null && this.agent.isRunning()) {
         this.agent.stopAgent();
-      }     
-      this.authManager.expireAllAuthZ();
+      }
+
+      // clean out Shiro's thread local content
+      ThreadContext.remove();
+
       getGemFireCacheImpl().getJmxManagerAdvisor().broadcastChange();
       instances.remove(cache);
       localManager  = null;
@@ -837,8 +857,4 @@ public final class SystemManagementService extends BaseManagementService {
   public void removeMembershipListener(MembershipListener listener) {
     universalListenerContainer.removeMembershipListener(listener);    
   }
-
-  public AuthManager getAuthManager(){
-    return this.authManager;
-  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java
index 1425572..cb69a80 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java
@@ -32,17 +32,13 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
-
 import javax.management.JMRuntimeException;
 import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
-import org.apache.logging.log4j.Logger;
-
 import com.gemstone.gemfire.Statistics;
 import com.gemstone.gemfire.StatisticsType;
 import com.gemstone.gemfire.cache.CacheClosedException;
@@ -92,7 +88,6 @@ import com.gemstone.gemfire.internal.cache.lru.LRUStatistics;
 import com.gemstone.gemfire.internal.cache.persistence.BackupManager;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.internal.logging.ManagerLogWriter;
 import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage;
 import com.gemstone.gemfire.internal.logging.log4j.LogMarker;
 import com.gemstone.gemfire.internal.logging.log4j.LogWriterAppender;
@@ -129,8 +124,11 @@ import com.gemstone.gemfire.management.internal.cli.CommandResponseBuilder;
 import com.gemstone.gemfire.management.internal.cli.remote.CommandExecutionContext;
 import com.gemstone.gemfire.management.internal.cli.remote.MemberCommandService;
 import com.gemstone.gemfire.management.internal.cli.result.CommandResult;
+import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
 import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
+import com.gemstone.gemfire.security.GemFireSecurityException;
+import org.apache.logging.log4j.Logger;
 
 /**
  * This class acts as an Bridge between MemberMBean and GemFire Cache and
@@ -1758,7 +1756,6 @@ public class MemberMBeanBridge {
     if (isGfshRequest) {
       CommandExecutionContext.setShellRequest();
     }
-//    System.out.println("isGfshRequest :: "+isGfshRequest);
     
     Result result = ((MemberCommandService)commandService).processCommand(commandString, env);
     if (!(result instanceof CommandResult)) {// TODO - Abhishek - Shouldn't be needed
@@ -1766,11 +1763,19 @@ public class MemberMBeanBridge {
         result = ResultBuilder.createInfoResult(result.nextLine());
       }
     }
+
     if (isGfshRequest) {
       String responseJson = CommandResponseBuilder.createCommandResponseJson(getMember(), (CommandResult) result);
   //    System.out.println("responseJson :: "+responseJson);
       return responseJson;
     } else {
+      // throw GemFireSecurityException is the returned error code is 415
+      if(((CommandResult) result).getResultData() instanceof ErrorResultData){
+        ErrorResultData resultData = (ErrorResultData) ((CommandResult)result).getResultData();
+        if(resultData.getErrorCode()==ResultBuilder.ERRORCODE_UNAUTHORIZED){
+          throw new GemFireSecurityException(resultData.getGfJsonObject().toString());
+        }
+      }
       return ResultBuilder.resultAsString(result);
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
index 42539db..46a8226 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
@@ -54,7 +54,6 @@ import com.gemstone.gemfire.management.internal.cli.parser.GfshOptionParser;
 import com.gemstone.gemfire.management.internal.cli.parser.Option;
 import com.gemstone.gemfire.management.internal.cli.parser.jopt.JoptOptionParser;
 import com.gemstone.gemfire.management.internal.cli.util.ClasspathScanLoadHelper;
-import com.gemstone.gemfire.management.internal.security.CLIOperationContext;
 
 /**
  * 
@@ -457,8 +456,6 @@ public class CommandManager {
           }
         }
         
-        CLIOperationContext.registerCommand(this, method, commandTarget);
-        
       } else if (method.getAnnotation(CliAvailabilityIndicator.class) != null) {
         // Now add this availability Indicator to the list of
         // availability Indicators

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
index 5977c10..cdbd3db 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
@@ -16,6 +16,24 @@
  */
 package com.gemstone.gemfire.management.internal.cli.commands;
 
+import static com.gemstone.gemfire.cache.operations.OperationContext.*;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.regex.Pattern;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
 import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.CacheFactory;
@@ -61,29 +79,11 @@ import com.gemstone.gemfire.management.internal.cli.util.RegionPath;
 import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
 import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.security.ShiroUtil;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-import static com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
-
 /**
  *
  * @since 7.0
@@ -528,6 +528,9 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
                   specifiedDefaultValue = "0",
                   help = CliStrings.ALTER_REGION__EVICTIONMAX__HELP)
       Integer evictionMax) {
+
+    ShiroUtil.authorize("DATA", "MANAGE", regionPath);
+
     Result result = null;
     XmlEntity xmlEntity = null;
 
@@ -1004,6 +1007,8 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
           help = CliStrings.DESTROY_REGION__REGION__HELP)
       String regionPath) {
 
+    ShiroUtil.authorize("DATA", "MANAGE", regionPath);
+
     if (regionPath == null) {
       return ResultBuilder.createInfoResult(CliStrings.DESTROY_REGION__MSG__SPECIFY_REGIONPATH_TO_DESTROY);
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
index 18fcc16..c1c04a3 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
@@ -16,6 +16,22 @@
  */
 package com.gemstone.gemfire.management.internal.cli.commands;
 
+import static com.gemstone.gemfire.cache.operations.OperationContext.*;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
 import com.gemstone.gemfire.LogWriter;
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.CacheClosedException;
@@ -57,28 +73,12 @@ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.security.ShiroUtil;
 import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import static com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
-
 /**
  * 
  * @since 7.0
@@ -102,6 +102,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = CliStrings.REBALANCE__EXCLUDEREGION, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.REBALANCE__EXCLUDEREGION__HELP) String[] excludeRegions,
       @CliOption(key = CliStrings.REBALANCE__TIMEOUT, unspecifiedDefaultValue = "-1", help = CliStrings.REBALANCE__TIMEOUT__HELP) long timeout,
       @CliOption(key = CliStrings.REBALANCE__SIMULATE, specifiedDefaultValue = "true", unspecifiedDefaultValue = "false", help = CliStrings.REBALANCE__SIMULATE__HELP) boolean simulate) {
+
     ExecutorService commandExecutors = Executors.newSingleThreadExecutor();
     List<Future<Result>> commandResult = new ArrayList<Future<Result>>();
     Result result = null;
@@ -839,6 +840,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = CliStrings.EXPORT_DATA__FILE, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, mandatory = true, help = CliStrings.EXPORT_DATA__FILE__HELP) String filePath,
       @CliOption(key = CliStrings.EXPORT_DATA__MEMBER, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERIDNAME, mandatory = true, help = CliStrings.EXPORT_DATA__MEMBER__HELP) String memberNameOrId) {
 
+    ShiroUtil.authorize("DATA", "READ", regionName);
     final Cache cache = CacheFactory.getAnyInstance();
     final DistributedMember targetMember = CliUtil
         .getDistributedMemberByNameOrId(memberNameOrId);
@@ -895,6 +897,8 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = CliStrings.IMPORT_DATA__FILE, mandatory = true, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.IMPORT_DATA__FILE__HELP) String filePath,
       @CliOption(key = CliStrings.IMPORT_DATA__MEMBER, mandatory = true, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.IMPORT_DATA__MEMBER__HELP) String memberNameOrId) {
 
+    ShiroUtil.authorize("DATA", "WRITE", regionName);
+
     Result result = null;
 
     try {
@@ -954,6 +958,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = { CliStrings.PUT__VALUEKLASS }, help = CliStrings.PUT__VALUEKLASS__HELP) String valueClass,
       @CliOption(key = { CliStrings.PUT__PUTIFABSENT }, help = CliStrings.PUT__PUTIFABSENT__HELP, unspecifiedDefaultValue = "false") boolean putIfAbsent) {
 
+    ShiroUtil.authorize("DATA", "WRITE", regionPath);
     Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
     if (regionPath == null || regionPath.isEmpty()) {
@@ -1021,6 +1026,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = { CliStrings.GET__VALUEKLASS }, help = CliStrings.GET__VALUEKLASS__HELP) String valueClass,
       @CliOption(key = CliStrings.GET__LOAD, unspecifiedDefaultValue = "true", specifiedDefaultValue = "true", help = CliStrings.GET__LOAD__HELP) Boolean loadOnCacheMiss)
   {
+    ShiroUtil.authorize("DATA", "READ", regionPath);
 
     Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
@@ -1075,7 +1081,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = { CliStrings.LOCATE_ENTRY__KEYCLASS }, help = CliStrings.LOCATE_ENTRY__KEYCLASS__HELP) String keyClass,
       @CliOption(key = { CliStrings.LOCATE_ENTRY__VALUEKLASS }, help = CliStrings.LOCATE_ENTRY__VALUEKLASS__HELP) String valueClass,
       @CliOption(key = { CliStrings.LOCATE_ENTRY__RECURSIVE }, help = CliStrings.LOCATE_ENTRY__RECURSIVE__HELP, unspecifiedDefaultValue = "false") boolean recursive) {
-
+    ShiroUtil.authorize("DATA", "READ", regionPath);
     // Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
index fed5dbd..ac69d32 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
@@ -16,6 +16,16 @@
  */
 package com.gemstone.gemfire.management.internal.cli.commands;
 
+import static com.gemstone.gemfire.cache.operations.OperationContext.*;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.CacheFactory;
 import com.gemstone.gemfire.cache.Region;
@@ -42,22 +52,12 @@ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.cli.util.RegionAttributesNames;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.security.ShiroUtil;
 import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-import static com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
-
 /***
  * Class containing implementation of commands based on region:
  * <ul>
@@ -87,8 +87,6 @@ public class RegionCommands implements CommandMarker {
       optionContext = ConverterHint.MEMBERIDNAME,
       help = CliStrings.LIST_REGION__MEMBER__HELP)
       String memberNameOrId) {
-    
-    
     Result result = null;
     try {
       Set<RegionInformation> regionInfoSet = new LinkedHashSet<RegionInformation>();
@@ -165,6 +163,7 @@ public class RegionCommands implements CommandMarker {
       mandatory = true)
       String regionName) {
 
+    ShiroUtil.authorize("CLUSTER", "READ", regionName);
     Result result = null;
     try {
       

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
index a8d1839..87053cc 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
@@ -17,12 +17,10 @@
 package com.gemstone.gemfire.management.internal.cli.remote;
 
 import java.io.IOException;
+import java.lang.reflect.Method;
 import java.util.Map;
 import java.util.Properties;
 
-import org.springframework.shell.core.Parser;
-import org.springframework.shell.event.ParseResult;
-
 import com.gemstone.gemfire.management.cli.CommandProcessingException;
 import com.gemstone.gemfire.management.cli.CommandStatement;
 import com.gemstone.gemfire.management.cli.Result;
@@ -31,6 +29,11 @@ import com.gemstone.gemfire.management.internal.cli.GfshParser;
 import com.gemstone.gemfire.management.internal.cli.LogWrapper;
 import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.util.CommentSkipHelper;
+import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.security.GemFireSecurityException;
+import com.gemstone.gemfire.security.ShiroUtil;
+import org.springframework.shell.core.Parser;
+import org.springframework.shell.event.ParseResult;
 
 /**
  * 
@@ -101,6 +104,14 @@ public class CommandProcessor {
           }
           ((CommandStatementImpl)cmdStmt).setParseResult(parseResult);
         }
+
+        //do general authorization check here
+        Method method = parseResult.getMethod();
+        ResourceOperation resourceOperation = method.getAnnotation(ResourceOperation.class);
+        if(resourceOperation!=null){
+          ShiroUtil.authorize(resourceOperation);
+        }
+
         result = executionStrategy.execute(parseResult);
         if (result instanceof Result) {
           commandResult = (Result) result;
@@ -116,7 +127,13 @@ public class CommandProcessor {
           logWrapper.info("Could not parse \""+cmdStmt.getCommandString()+"\".", e);
         }
         return ResultBuilder.createParsingErrorResult(e.getMessage());
-      } catch (RuntimeException e) {
+      } catch (GemFireSecurityException e) {
+        setLastExecutionStatus(1);
+        if (logWrapper.infoEnabled()) {
+          logWrapper.info("Could not execute \""+cmdStmt.getCommandString()+"\".", e);
+        }
+        return ResultBuilder.createGemFireUnAuthorizedErrorResult("Unauthorized while processing command <" +cmdStmt.getCommandString()+"> Reason : " + e.getMessage());
+      }catch (RuntimeException e) {
         setLastExecutionStatus(1);
         if (logWrapper.infoEnabled()) {
           logWrapper.info("Could not execute \""+cmdStmt.getCommandString()+"\".", e);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java
index f8db1d3..b324c8e 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java
@@ -37,8 +37,12 @@ public class ErrorResultData extends InfoResultData {
     super(gfJsonObject);
   }
   
-  public int getErrorCode(int errorCode) {
-    return (Integer) contentObject.get(ERROR_CODE);
+  public int getErrorCode() {
+    Integer code = (Integer) contentObject.get(ERROR_CODE);
+    if(code==null){
+      return ResultBuilder.ERRORCODE_DEFAULT;
+    }
+    return code;
   }
   
   /**
@@ -57,7 +61,7 @@ public class ErrorResultData extends InfoResultData {
     
     return this;
   }
-  
+
   /**
    * 
    * @param headerText

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java
index 16d3f70..6b435d3 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java
@@ -38,7 +38,7 @@ public class ResultBuilder {
   public static final int ERRORCODE_DEFAULT           = 400;
   public static final int ERRORCODE_CONNECTION_ERROR  = 405;
   public static final int ERRORCODE_SHELLCLIENT_ERROR = 410;
-  //Error code for auth-error??
+  public static final int ERRORCODE_UNAUTHORIZED      = 415;
   
   // errors on member
   public static final int ERRORCODE_PARSING_ERROR     = 501;
@@ -115,6 +115,11 @@ public class ResultBuilder {
                   "Could not process command due to GemFire error. " + message);
   }
 
+  public static Result createGemFireUnAuthorizedErrorResult(String message) {
+    return createErrorResult(ERRORCODE_UNAUTHORIZED,
+        "Could not process command due to GemFire error. " + message);
+  }
+
   public static Result createUserErrorResult(String message) {
     return createErrorResult(ERRORCODE_USER_ERROR, message);
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
index 20f4ce8..3804111 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java
@@ -151,19 +151,16 @@ public class JmxOperationInvoker implements OperationInvoker {
       this.connector = JMXConnectorFactory.connect(url, env);
       this.mbsc = connector.getMBeanServerConnection();
       this.connector.addConnectionNotificationListener(new JMXConnectionListener(this), null, null);
-      this.connector.connect(); // TODO this call to connect is not needed
       this.distributedSystemMXBeanProxy = JMX.newMXBeanProxy(mbsc, MBeanJMXAdapter.getDistributedSystemName(), DistributedSystemMXBean.class);
 
-      if (this.distributedSystemMXBeanProxy == null || !JMX.isMXBeanInterface(DistributedSystemMXBean.class)) {
+      if (this.distributedSystemMXBeanProxy == null ) {
         LogWrapper.getInstance().info("DistributedSystemMXBean is not present on member with endpoints : "+this.endpoints);
-        connector.close();
         throw new JMXConnectionException(JMXConnectionException.MANAGER_NOT_FOUND_EXCEPTION);
       }
       else {
         this.managerMemberObjectName = this.distributedSystemMXBeanProxy.getMemberObjectName();
         if (this.managerMemberObjectName == null || !JMX.isMXBeanInterface(MemberMXBean.class)) {
           LogWrapper.getInstance().info("MemberMXBean with ObjectName "+this.managerMemberObjectName+" is not present on member with endpoints : "+endpoints);
-          this.connector.close();
           throw new JMXConnectionException(JMXConnectionException.MANAGER_NOT_FOUND_EXCEPTION);
         }
         else {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
deleted file mode 100644
index ea83771..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.management.internal.security;
-
-import com.gemstone.gemfire.security.AccessControl;
-
-import javax.management.remote.JMXPrincipal;
-import javax.security.auth.Subject;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Principal;
-import java.util.Set;
-
-/**
- * AccessControlMBean Implementation. This retrieves JMXPrincipal from AccessController
- * and performs authorization for given role using gemfire AccessControl Plugin
- *
- * @author tushark
- * @since 9.0
- */
-public class AccessControlMBean implements AccessControlMXBean {
-
-  private ManagementInterceptor interceptor;
-
-  public AccessControlMBean(ManagementInterceptor interceptor) {
-    this.interceptor = interceptor;
-  }
-
-  @Override
-  public boolean authorize(String resource, String permission) {
-    AccessControlContext acc = AccessController.getContext();
-    Subject subject = Subject.getSubject(acc);
-    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
-    if (principals == null || principals.isEmpty()) {
-      throw new SecurityException("Access denied");
-    }
-    Principal principal = principals.iterator().next();
-    AccessControl gemAccControl = interceptor.getAccessControl(principal, false);
-    boolean authorized = gemAccControl.authorizeOperation(null,
-        new ResourceOperationContext(resource, permission));
-    return authorized;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
deleted file mode 100644
index ad6be59..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/CLIOperationContext.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.management.internal.security;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.gemstone.gemfire.management.cli.CommandProcessingException;
-import com.gemstone.gemfire.management.internal.cli.CommandManager;
-import com.gemstone.gemfire.management.internal.cli.GfshParseResult;
-import com.gemstone.gemfire.management.internal.cli.GfshParser;
-import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
-import org.springframework.shell.event.ParseResult;
-
-/**
- * It represents command being executed and all passed options and option-values.
- * ResourceOpCode returned by CLIOperationContext is retrieved from ResourceOperation
- * annotation on the target command
- *
- * @author tushark
- * @since 9.0
- */
-public class CLIOperationContext extends ResourceOperationContext {
-
-	private Map<String,String> commandOptions = null;
-	private String command = null;
-	
-	private static Map<String,ResourceOperation> commandToCodeMapping = new HashMap<String,ResourceOperation>();
-	private static CommandManager commandManager = null;
-	private static GfshParser parser = null;	
-	
-	private CLIOperationContext(String commandName, Map<String,String> commandOptions, ResourceOperation op) throws CommandProcessingException, IllegalStateException{
-		this.command = commandName;
-		this.commandOptions = commandOptions;
-		setResourceOperation(op);
-  }
-
-	public static CLIOperationContext getOperationContext(String commandString){
-		GfshParseResult parseResult = (GfshParseResult) parseCommand(commandString);
-		ResourceOperation op = findResourceCode(parseResult.getCommandName());
-		if(op==null)
-			return null;
-
-		return new CLIOperationContext(parseResult.getCommandName(), parseResult.getParamValueStrings(), op);
-	}
-	
-	private static ParseResult parseCommand(String commentLessLine) throws CommandProcessingException, IllegalStateException {
-    if (commentLessLine != null) {
-      return parser.parse(commentLessLine);
-    }
-    throw new IllegalStateException("Command String should not be null.");
-  }
-	
-	public static void registerCommand(CommandManager cmdManager, Method method, CommandTarget commandTarget){
-	  if(commandManager==null){
-	    commandManager = cmdManager;
-	    parser = new GfshParser(cmdManager);
-	  }
-		Annotation ans[] = method.getDeclaredAnnotations();
-		for(Annotation an : ans){
-			if(an instanceof ResourceOperation) {
-				commandToCodeMapping.put(commandTarget.getCommandName(), (ResourceOperation)an);
-			}
-		}
-	}
-
-	private static void cache(String commandName, ResourceOperation op) {
-		commandToCodeMapping.put(commandName, op);
-	}
-
-	public Map<String, String> getCommandOptions() {
-		return commandOptions;
-	}
-
-	public String getCommand(){
-		return command;
-	}
-
-	private static ResourceOperation findResourceCode(String commandName) {
-		return commandToCodeMapping.get(commandName);
-	}
-	
-	public String toString(){
-	  return super.toString() + " commmand=" + command + " options=" + commandOptions;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
index e1c84a5..c7cb058 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
@@ -46,6 +46,7 @@ import javax.management.remote.MBeanServerForwarder;
 
 import com.gemstone.gemfire.management.internal.ManagementConstants;
 import com.gemstone.gemfire.security.GemFireSecurityException;
+import com.gemstone.gemfire.security.ShiroUtil;
 
 /**
  * This class intercepts all MBean requests for GemFire MBeans and passed it to
@@ -55,11 +56,8 @@ import com.gemstone.gemfire.security.GemFireSecurityException;
  */
 public class MBeanServerWrapper implements MBeanServerForwarder {
   private MBeanServer mbs;
-  private ManagementInterceptor interceptor;
-
   
-  public MBeanServerWrapper(ManagementInterceptor interceptor){
-    this.interceptor = interceptor;
+  public MBeanServerWrapper(){
   }
 
   private void doAuthorization(ResourceOperationContext context){
@@ -67,14 +65,14 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
     if(context == null)
       return;
 
-    interceptor.authorize(context);
+    ShiroUtil.authorize(context);
   }
 
   private void doAuthorizationPost(ResourceOperationContext context){
     if(context == null)
       return;
 
-    interceptor.postAuthorize(context);
+    //interceptor.postAuthorize(context);
   }
 
   private void checkDomain(ObjectName name){
@@ -218,14 +216,12 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
   @Override
   public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature)
       throws InstanceNotFoundException, MBeanException, ReflectionException {
+    // skip authorization check if operation is "processCommand" since we will check authorization in the command itself
     ResourceOperationContext ctx = null;
-    if("processCommand".equals(operationName) && params.length>=1){
-      ctx = CLIOperationContext.getOperationContext((String)params[0]);
-    }
-    else {
+    if(!"processCommand".equals(operationName)) {
       ctx = getOperationContext(name, operationName, true);
+      doAuthorization(ctx);
     }
-    doAuthorization(ctx);
 
     Object result = mbs.invoke(name, operationName, params, signature);
     if(ctx!=null)
@@ -271,7 +267,7 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
     String resource = (String)descriptor.getFieldValue("resource");
     String operationCode = (String)descriptor.getFieldValue("operation");
     if(resource!=null && operationCode!=null){
-      return new ResourceOperationContext(resource, operationCode);
+      return new ResourceOperationContext(resource, operationCode, null);
     }
     return defaultValue;
   }
@@ -397,10 +393,6 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
     return mbs;
   }
 
-  public ManagementInterceptor getInterceptor() {
-    return interceptor;
-  }
-
   @Override
   public void setMBeanServer(MBeanServer mbs) {
     this.mbs = mbs;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
deleted file mode 100644
index 6ee9da5..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ManagementInterceptor.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.management.internal.security;
-
-import com.gemstone.gemfire.GemFireConfigException;
-import com.gemstone.gemfire.distributed.internal.DistributionConfig;
-import com.gemstone.gemfire.internal.ClassLoadUtil;
-import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
-import com.gemstone.gemfire.internal.lang.StringUtils;
-import com.gemstone.gemfire.security.AccessControl;
-import com.gemstone.gemfire.security.AuthenticationFailedException;
-import com.gemstone.gemfire.security.Authenticator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.remote.JMXAuthenticator;
-import javax.management.remote.JMXPrincipal;
-import javax.security.auth.Subject;
-import java.lang.management.ManagementFactory;
-import java.lang.reflect.Method;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.Principal;
-import java.util.Collections;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import static com.gemstone.gemfire.management.internal.security.ResourceConstants.ACCESS_DENIED_MESSAGE;
-import static com.gemstone.gemfire.management.internal.security.ResourceConstants.WRONGE_CREDENTIALS_MESSAGE;
-
-/**
- * ManagementInterceptor is central go-to place for all M&M Clients Authentication and Authorization
- * requests
- *
- * @since 9.0
- */
-public class ManagementInterceptor implements JMXAuthenticator {
-
-  // FIXME: Merged from GEODE-17. Are they necessary?
-  public static final String USER_NAME = "security-username";
-  public static final String PASSWORD = "security-password";
-  public static final String OBJECT_NAME_ACCESSCONTROL = "GemFire:service=AccessControl,type=Distributed";
-
-  private static final Logger logger = LogManager.getLogger(ManagementInterceptor.class);
-  //  private Cache cache;
-  private String authzFactoryName;
-  private String postAuthzFactoryName;
-  private String authenticatorFactoryName;
-  private ConcurrentMap<Principal, AccessControl> cachedAuthZCallback;
-  private ConcurrentMap<Principal, AccessControl> cachedPostAuthZCallback;
-  private Properties sysProps = null;
-
-  public ManagementInterceptor(Properties sysProps) {
-    this.sysProps = sysProps;
-    this.authzFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_NAME);
-    this.postAuthzFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_ACCESSOR_PP_NAME);
-    this.authenticatorFactoryName = sysProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
-    this.cachedAuthZCallback = new ConcurrentHashMap<>();
-    this.cachedPostAuthZCallback = new ConcurrentHashMap<>();
-    registerAccessControlMBean();
-    logger.info("Started Management interceptor on JMX connector");
-  }
-
-  /**
-   * This method registers an AccessControlMBean which allows any remote JMX Client (for example Pulse) to check for
-   * access allowed for given Operation Code.
-   */
-  private void registerAccessControlMBean() {
-    try {
-      AccessControlMBean acc = new AccessControlMBean(this);
-      ObjectName accessControlMBeanON = new ObjectName(ResourceConstants.OBJECT_NAME_ACCESSCONTROL);
-      MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
-
-      Set<ObjectName> names = platformMBeanServer.queryNames(accessControlMBeanON, null);
-      if (names.isEmpty()) {
-        try {
-          platformMBeanServer.registerMBean(acc, accessControlMBeanON);
-          logger.info("Registered AccessContorlMBean on " + accessControlMBeanON);
-        } catch (InstanceAlreadyExistsException e) {
-          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
-        } catch (MBeanRegistrationException e) {
-          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
-        } catch (NotCompliantMBeanException e) {
-          throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
-        }
-      }
-    } catch (MalformedObjectNameException e) {
-      throw new GemFireConfigException("Error while configuring accesscontrol for jmx resource", e);
-    }
-  }
-
-  /**
-   * Delegates authentication to GemFire Authenticator
-   *
-   * @throws SecurityException if authentication fails
-   */
-  @Override
-  public Subject authenticate(Object credentials) {
-    String username = null, password = null;
-    Properties pr = new Properties();
-    if (credentials instanceof String[]) {
-      final String[] aCredentials = (String[]) credentials;
-      username = aCredentials[0];
-      password = aCredentials[1];
-      pr.put(USER_NAME, username);
-      pr.put(PASSWORD, password);
-    } else if (credentials instanceof Properties) {
-      pr = (Properties) credentials;
-    } else {
-      throw new SecurityException(WRONGE_CREDENTIALS_MESSAGE);
-    }
-
-    try {
-      Principal principal = getAuthenticator(sysProps).authenticate(pr);
-      return new Subject(true, Collections.singleton(new JMXPrincipal(principal.getName())), Collections.EMPTY_SET,
-          Collections.EMPTY_SET);
-    } catch (AuthenticationFailedException e) {
-      //wrap inside Security exception. AuthenticationFailedException is gemfire class
-      //which generic JMX client can't serialize
-      throw new SecurityException("Authentication Failed " + e.getMessage());
-    }
-
-  }
-
-  /**
-   * Builds ResourceOperationContext for the given JMX MBean Request for delegates Authorization to
-   * gemfire AccessControl plugin with context as parameter
-   *
-   * @throws SecurityException if access is not granted
-   */
-  public void authorize(ResourceOperationContext context) {
-    if (StringUtils.isBlank(authzFactoryName)) {
-      return;
-    }
-
-    AccessControlContext acc = AccessController.getContext();
-    Subject subject = Subject.getSubject(acc);
-    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
-
-    if (principals == null || principals.isEmpty()) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE + ": No principal found.");
-    }
-
-    Principal principal = principals.iterator().next();
-
-    AccessControl accessControl = getAccessControl(principal, false);
-
-    if (!accessControl.authorizeOperation(null, context)) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE + ": Not authorized for " + context);
-    }
-  }
-
-  public AccessControl getAccessControl(Principal principal, boolean isPost) {
-    if (!isPost) {
-      if (cachedAuthZCallback.containsKey(principal)) {
-        return cachedAuthZCallback.get(principal);
-      } else if (!StringUtils.isBlank(authzFactoryName)) {
-        try {
-          Method authzMethod = ClassLoadUtil.methodFromName(authzFactoryName);
-          AccessControl authzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
-          authzCallback.init(principal);
-          cachedAuthZCallback.put(principal, authzCallback);
-          return authzCallback;
-        } catch (Exception ex) {
-          throw new AuthenticationFailedException(LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-        }
-      }
-    } else {
-      if (cachedPostAuthZCallback.containsKey(principal)) {
-        return cachedPostAuthZCallback.get(principal);
-      } else if (!StringUtils.isBlank(postAuthzFactoryName)) {
-        try {
-          Method authzMethod = ClassLoadUtil.methodFromName(postAuthzFactoryName);
-          AccessControl postAuthzCallback = (AccessControl) authzMethod.invoke(null, (Object[]) null);
-          postAuthzCallback.init(principal);
-          cachedPostAuthZCallback.put(principal, postAuthzCallback);
-          return postAuthzCallback;
-        } catch (Exception ex) {
-          throw new AuthenticationFailedException(LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-        }
-      }
-    }
-    return null;
-  }
-
-  private Authenticator getAuthenticator(Properties gfSecurityProperties) throws AuthenticationFailedException {
-    Authenticator auth;
-    try {
-      Method instanceGetter = ClassLoadUtil.methodFromName(this.authenticatorFactoryName);
-      auth = (Authenticator) instanceGetter.invoke(null, (Object[]) null);
-    } catch (Exception ex) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_FAILED_TO_ACQUIRE_AUTHENTICATOR_OBJECT.toLocalizedString(), ex);
-    }
-    if (auth == null) {
-      throw new AuthenticationFailedException(
-          LocalizedStrings.HandShake_AUTHENTICATOR_INSTANCE_COULD_NOT_BE_OBTAINED.toLocalizedString());
-    }
-    auth.init(gfSecurityProperties);
-    return auth;
-  }
-
-  public void postAuthorize(ResourceOperationContext context) {
-    if (StringUtils.isBlank(postAuthzFactoryName)) {
-      return;
-    }
-
-    AccessControlContext acc = AccessController.getContext();
-    Subject subject = Subject.getSubject(acc);
-    Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
-    if (principals == null || principals.isEmpty()) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE);
-    }
-    Principal principal = principals.iterator().next();
-    AccessControl accessControl = getAccessControl(principal, true);
-    if (!accessControl.authorizeOperation(null, context)) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE);
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c733f0c2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
index 9ef458d..396cdac 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
@@ -27,24 +27,29 @@ public class ResourceOperationContext extends OperationContext {
   private Object opResult = null;
   private Resource resource = null;
   private OperationCode operation = null;
+  private String regionName = null;
 
   public ResourceOperationContext() {
   }
 
   public ResourceOperationContext(Resource resource, OperationCode operation) {
+    setParts(resource.name()+":"+operation.name(), false);
     this.resource = resource;
     this.operation = operation;
   }
 
-  public ResourceOperationContext(String resource, String operation) {
+  public ResourceOperationContext(String resource, String operation, String regionName) {
+    setParts(resource+":"+operation+":"+regionName, false);
     if (resource != null) this.resource = Resource.valueOf(resource);
     if (operation != null) this.operation = OperationCode.valueOf(operation);
+    this.regionName = regionName;
   }
 
   public void setResourceOperation(ResourceOperation op) {
     if (op != null) {
       resource = op.resource();
       operation = op.operation();
+      setParts(resource.name()+":"+operation.name(), false);
     }
   }
 
@@ -64,6 +69,11 @@ public class ResourceOperationContext extends OperationContext {
   }
 
   @Override
+  public String getRegionName(){
+    return this.regionName;
+  }
+
+  @Override
   public boolean isPostOperation() {
     return isPostOperation;
   }
@@ -77,4 +87,20 @@ public class ResourceOperationContext extends OperationContext {
     return this.opResult;
   }
 
+  public String toString(){
+    if(this.regionName==null)
+      return getResource() + ":"+ getOperationCode();
+    else
+      return getResource() + ":"+ getOperationCode()+ ":" +this.regionName;
+  }
+
+  public boolean equals(Object o){
+    if(! (o instanceof ResourceOperationContext))
+      return false;
+
+    ResourceOperationContext other = (ResourceOperationContext)o;
+    return (this.resource==other.getResource() && this.operation==other.getOperationCode());
+  }
+
+
 }
\ No newline at end of file


[40/50] [abbrv] incubator-geode git commit: GEODE-17 - fix the nightly build error by clearing out security manager if not configured.

Posted by kl...@apache.org.
GEODE-17 - fix the nightly build error by clearing out security manager if not configured.


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/9681329d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/9681329d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/9681329d

Branch: refs/heads/feature/GEODE-1255
Commit: 9681329d8dbcec8d70011db13381c1dcf23ee9a5
Parents: 15b1e70
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Mon May 2 08:56:20 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Mon May 2 08:56:20 2016 -0700

----------------------------------------------------------------------
 .../gemfire/management/internal/SystemManagementService.java      | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9681329d/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
index dac016e..fd2a834 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java
@@ -172,6 +172,9 @@ public final class SystemManagementService extends BaseManagementService {
       SecurityManager securityManager = new DefaultSecurityManager(realm);
       SecurityUtils.setSecurityManager(securityManager);
     }
+    else{
+      SecurityUtils.setSecurityManager(null);
+    }
 
     this.notificationHub = new NotificationHub(repo);
     if (system.getConfig().getJmxManager()) {


[32/50] [abbrv] incubator-geode git commit: GEODE-1324: Convert SessionReplicationIntegrationJUnitTest to use TemporaryFolder

Posted by kl...@apache.org.
GEODE-1324: Convert SessionReplicationIntegrationJUnitTest to use TemporaryFolder


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

Branch: refs/heads/feature/GEODE-1255
Commit: b2f8e594cab721755c7c47cf1e609775a81c3340
Parents: a20efb9
Author: Jens Deppe <jd...@pivotal.io>
Authored: Fri Apr 29 09:34:07 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Fri Apr 29 10:47:20 2016 -0700

----------------------------------------------------------------------
 .../SessionReplicationIntegrationJUnitTest.java | 30 +++++++-------------
 1 file changed, 10 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b2f8e594/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/SessionReplicationIntegrationJUnitTest.java
----------------------------------------------------------------------
diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/SessionReplicationIntegrationJUnitTest.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/SessionReplicationIntegrationJUnitTest.java
index 004f9fe..ef89a37 100644
--- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/SessionReplicationIntegrationJUnitTest.java
+++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/SessionReplicationIntegrationJUnitTest.java
@@ -41,8 +41,12 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
 import org.apache.jasper.servlet.JspServlet;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
 import org.junit.runner.RunWith;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -68,23 +72,13 @@ public class SessionReplicationIntegrationJUnitTest {
 
   private FilterHolder filterHolder;
 
-  private static final File tmpdir;
-
-  private static final String gemfire_log;
-
-  static {
-    // Create a per-user scratch directory
-    tmpdir = new File(System.getProperty("java.io.tmpdir"), // TODO: use junit rule TemporaryFolder
-        "gemfire_modules-" + System.getProperty("user.name"));
-    tmpdir.mkdirs();
-    tmpdir.deleteOnExit();
-
-    gemfire_log = tmpdir.getPath() +
-        System.getProperty("file.separator") + "gemfire_modules.log";
-  }
+  @Rule
+  public TemporaryFolder tmpdir = new TemporaryFolder();
 
   @Before
   public void setUp() throws Exception {
+    File gemfireLogFile = new File(tmpdir.newFolder(), "gemfire_modules.log");
+
     request = HttpTester.newRequest();
 
     tester = new MyServletTester();
@@ -92,7 +86,7 @@ public class SessionReplicationIntegrationJUnitTest {
 
     filterHolder = tester.addFilter(SessionCachingFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
     filterHolder.setInitParameter("gemfire.property.mcast-port", "0");
-    filterHolder.setInitParameter("gemfire.property.log-file", gemfire_log);
+    filterHolder.setInitParameter("gemfire.property.log-file", gemfireLogFile.getAbsolutePath());
     filterHolder.setInitParameter("cache-type", "peer-to-peer");
 
     servletHolder = tester.addServlet(BasicServlet.class, "/hello");
@@ -107,10 +101,6 @@ public class SessionReplicationIntegrationJUnitTest {
 
   @After
   public void tearDown() throws Exception {
-//    if (tester.isStarted()) {
-//      ContextManager.getInstance().removeContext(
-//          servletHolder.getServlet().getServletConfig().getServletContext());
-//    }
     tester.stop();
   }
 
@@ -1467,7 +1457,7 @@ public class SessionReplicationIntegrationJUnitTest {
     ServletHolder jspHolder = tester.addServlet(JspServlet.class, "/test/*");
     jspHolder.setInitOrder(1);
 
-    jspHolder.setInitParameter("scratchdir", tmpdir.getPath());
+    jspHolder.setInitParameter("scratchdir", tmpdir.toString());
 
     Callback c_1 = new Callback() {
       @Override


[37/50] [abbrv] incubator-geode git commit: Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/incubator-geode into develop

Posted by kl...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/incubator-geode into develop


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

Branch: refs/heads/feature/GEODE-1255
Commit: a3f308af174996cb964853ec1787cbe3a353dd8a
Parents: c06a795 ce43082
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Fri Apr 29 14:26:18 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 14:26:18 2016 -0700

----------------------------------------------------------------------
 .../cli/commands/FunctionCommandsDUnitTest.java | 72 +++++++++++++++++++-
 .../cli/commands/ToUpperResultCollector.java    | 65 ++++++++++++++++++
 2 files changed, 135 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[50/50] [abbrv] incubator-geode git commit: Fix dependency versions

Posted by kl...@apache.org.
Fix dependency versions


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/2e309351
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/2e309351
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/2e309351

Branch: refs/heads/feature/GEODE-1255
Commit: 2e3093512dfbcf507ce971a2ce8dc44e17e75d03
Parents: f6334f2
Author: Kirk Lund <kl...@apache.org>
Authored: Tue May 3 14:51:23 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Tue May 3 14:51:23 2016 -0700

----------------------------------------------------------------------
 .../CustomConfigWithCacheIntegrationTest.java   |  6 ------
 .../security/GfshShellConnectionRule.java       |  8 ++++----
 .../pulse/internal/data/JMXDataUpdater.java     |  3 ---
 gradle/dependency-versions.properties           | 20 ++++++++++----------
 4 files changed, 14 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2e309351/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/custom/CustomConfigWithCacheIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/custom/CustomConfigWithCacheIntegrationTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/custom/CustomConfigWithCacheIntegrationTest.java
index 18faed1..632b69c 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/custom/CustomConfigWithCacheIntegrationTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/custom/CustomConfigWithCacheIntegrationTest.java
@@ -20,13 +20,9 @@ import static com.gemstone.gemfire.internal.logging.log4j.custom.CustomConfigura
 import static org.assertj.core.api.Assertions.*;
 
 import java.io.File;
-import java.io.FileOutputStream;
-import java.net.URL;
 import java.util.Properties;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.status.StatusLogger;
@@ -34,11 +30,9 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.contrib.java.lang.system.RestoreSystemProperties;
 import org.junit.contrib.java.lang.system.SystemErrRule;
 import org.junit.contrib.java.lang.system.SystemOutRule;
 import org.junit.experimental.categories.Category;
-import org.junit.rules.ExternalResource;
 import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2e309351/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
index 17549d5..d0f33d9 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GfshShellConnectionRule.java
@@ -16,6 +16,8 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import org.junit.runner.Description;
+
 import com.gemstone.gemfire.management.internal.cli.CliUtil;
 import com.gemstone.gemfire.management.internal.cli.HeadlessGfsh;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
@@ -24,12 +26,10 @@ import com.gemstone.gemfire.management.internal.cli.result.ErrorResultData;
 import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
 import com.gemstone.gemfire.test.junit.rules.DescribedExternalResource;
-import org.junit.runner.Description;
 
 /**
  * Class which eases the creation of MBeans for security testing. When combined with {@link JMXConnectionConfiguration}
  * it allows for the creation of per-test connections with different user/password combinations.
- *
  */
 public class GfshShellConnectionRule extends DescribedExternalResource {
 
@@ -38,9 +38,9 @@ public class GfshShellConnectionRule extends DescribedExternalResource {
   private boolean useHttp = false;
   private HeadlessGfsh gfsh;
   private boolean authenticated;
+
   /**
    * Rule constructor
-   *
    */
   public GfshShellConnectionRule(int jmxPort, int httpPort, boolean useHttp) {
     this.jmxPort = jmxPort;
@@ -55,7 +55,7 @@ public class GfshShellConnectionRule extends DescribedExternalResource {
 
     CliUtil.isGfshVM = true;
     String shellId = getClass().getSimpleName() + "_" + description.getMethodName();
-    gfsh = new HeadlessGfsh(shellId, 30);
+    gfsh = new HeadlessGfsh(shellId, 30, "gfsh_files"); // TODO: move to TemporaryFolder
 
     final CommandStringBuilder connectCommand = new CommandStringBuilder(CliStrings.CONNECT);
     connectCommand.addOption(CliStrings.CONNECT__USERNAME, config.user());

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2e309351/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
index 47ff69e..4a95c91 100644
--- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
+++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java
@@ -200,7 +200,6 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
 
   /**
    * Default connection is Pulse which uses configured userName and password
-   * @return
    */
   public JMXConnector getJMXConnection() {
     return getJMXConnection(true);
@@ -209,8 +208,6 @@ public class JMXDataUpdater implements IClusterUpdater, NotificationListener {
   /**
    * Get connection for given userName and password. This is used for DataBrowser
    * queries which has to be fired using credentials provided at pulse login page
-   *
-   * @return
    */
   public JMXConnector getJMXConnection(final boolean registerURL) {
     JMXConnector connection = null;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/2e309351/gradle/dependency-versions.properties
----------------------------------------------------------------------
diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties
index b3e004e..f4e7aad 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -17,14 +17,14 @@
 activation.version = 1.1.1
 annotations.version = 3.0.0
 antlr.version = 2.7.7
-asm.version = 5.0.3
-assertj-core.version = 3.2.0
+asm.version = 5.1
+assertj-core.version = 3.4.1
 awaitility.version = 1.7.0
 bcel.version = 5.2
 catch-exception.version = 1.4.4
 catch-throwable.version = 1.4.4
 cdi-api.version = 1.2
-cglib.version = 3.1
+cglib.version = 3.2.2
 classmate.version = 0.9.0
 commons-collections.version = 3.2.2
 commons-configuration.version = 1.6
@@ -39,6 +39,7 @@ commons-exec.version=1.3
 derby.version = 10.2.2.0
 dom4j.version = 1.6.1
 fastutil.version = 7.0.2
+google-gson.version=2.3.1
 guava.version = 15.0
 hadoop.version = 2.4.1
 hamcrest-all.version = 1.3
@@ -63,17 +64,18 @@ javax.transaction-api.version = 1.2
 jedis.version = 2.7.2
 jetty.version = 9.3.6.v20151106
 jline.version = 2.12
-jmock.version = 2.8.1
+jmock.version = 2.8.2
 jna.version = 4.0.0
 json-path.version = 1.2.0
 json4s.version = 3.2.4
 jsr305.version = 3.0.1
 junit.version = 4.12
-JUnitParams.version = 1.0.4
+JUnitParams.version = 1.0.5
 log4j.version = 2.5
 lucene.version = 6.0.0
 mockito-core.version = 1.10.19
 mockrunner.version = 1.0.8
+mortbay-jetty-servlet-api.version=2.5-20081211
 multithreadedtc.version = 1.01
 mx4j.version = 3.0.1
 mx4j-remote.version = 3.0.1
@@ -83,6 +85,8 @@ paranamer.version = 2.3
 powermock.version = 1.6.4
 quartz.version = 2.2.1
 scala.version = 2.10.0
+selenium.version=2.52.0
+shiro.version=1.2.4
 slf4j-api.version = 1.7.7
 snappy-java.version = 1.1.1.6
 spring-hateos.version = 0.16.0.RELEASE
@@ -95,11 +99,7 @@ stephenc-findbugs.version = 1.3.9-1
 spymemcached.version = 2.9.0
 swagger.version = 1.3.2
 swagger-springmvc.version = 0.8.2
-system-rules.version = 1.15.0
+system-rules.version = 1.16.0
 tempus-fugit.version = 1.1
 tomcat6.version = 6.0.37
 tomcat7.version = 7.0.30
-mortbay-jetty-servlet-api.version=2.5-20081211
-selenium.version=2.52.0
-google-gson.version=2.3.1
-shiro.version=1.2.4


[35/50] [abbrv] incubator-geode git commit: GEODE-1326: Add test for gfsh function execution with ResultCollector

Posted by kl...@apache.org.
GEODE-1326: Add test for gfsh function execution with ResultCollector


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

Branch: refs/heads/feature/GEODE-1255
Commit: ce43082f9cf0cd1702bd0de5e6be6b314e063396
Parents: 72be65f
Author: Jens Deppe <jd...@pivotal.io>
Authored: Fri Apr 29 09:23:09 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Fri Apr 29 14:13:36 2016 -0700

----------------------------------------------------------------------
 .../cli/commands/FunctionCommandsDUnitTest.java | 72 +++++++++++++++++++-
 .../cli/commands/ToUpperResultCollector.java    | 65 ++++++++++++++++++
 2 files changed, 135 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ce43082f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
index b4a2cef..86c0273 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java
@@ -163,7 +163,38 @@ public class FunctionCommandsDUnitTest extends CliCommandTestBase {
       getLogWriter().info("testExecuteFunctionOnRegion cmdResult=" + cmdResult);
       String stringResult = commandResultToString(cmdResult);
       getLogWriter().info("testExecuteFunctionOnRegion stringResult=" + stringResult);
-      assert (stringResult.contains("Execution summary"));
+      assertTrue(stringResult.contains("Execution summary"));
+    } else {
+      fail("testExecuteFunctionOnRegion did not return CommandResult");
+    }
+  }
+
+  @Test
+  public void testExecuteFunctionOnRegionWithCustomResultCollector() {
+    createDefaultSetup(null);
+
+    final Function function = new TestFunction(true, TestFunction.TEST_FUNCTION_RETURN_ARGS);
+    Host.getHost(0).getVM(0).invoke(new SerializableRunnable() {
+      public void run() {
+        RegionFactory<Integer, Integer> dataRegionFactory = getCache().createRegionFactory(RegionShortcut.REPLICATE);
+        Region region = dataRegionFactory.create(REGION_NAME);
+        assertNotNull(region);
+        FunctionService.registerFunction(function);
+      }
+    });
+
+    String command = "execute function --id=" + function.getId() + " --region=" + REGION_NAME +
+        " --arguments=arg1,arg2" +
+        " --result-collector=" + ToUpperResultCollector.class.getName();
+    getLogWriter().info("testExecuteFunctionOnRegion command=" + command);
+    CommandResult cmdResult = executeCommand(command);
+    if (cmdResult != null) {
+      assertEquals(Result.Status.OK, cmdResult.getStatus());
+      getLogWriter().info("testExecuteFunctionOnRegion cmdResult=" + cmdResult);
+      String stringResult = commandResultToString(cmdResult);
+      getLogWriter().info("testExecuteFunctionOnRegion stringResult=" + stringResult);
+      assertTrue(stringResult.contains("Execution summary"));
+      assertTrue(stringResult.contains("ARG1"));
     } else {
       fail("testExecuteFunctionOnRegion did not return CommandResult");
     }
@@ -240,7 +271,7 @@ public class FunctionCommandsDUnitTest extends CliCommandTestBase {
       assertEquals(Result.Status.OK, cmdResult.getStatus());
       String stringResult = commandResultToString(cmdResult);
       getLogWriter().info("testExecuteFunctionOnRegionBug51480 stringResult=" + stringResult);
-      assert (stringResult.contains("Execution summary"));
+      assertTrue(stringResult.contains("Execution summary"));
     } else {
       fail("testExecuteFunctionOnRegionBug51480 did not return CommandResult");
 
@@ -349,6 +380,43 @@ public class FunctionCommandsDUnitTest extends CliCommandTestBase {
   }
 
   @Test
+  public void testExecuteFunctionOnMembersWithArgsAndCustomResultCollector() {
+    Properties localProps = new Properties();
+    localProps.setProperty(DistributionConfig.NAME_NAME, "Manager");
+    localProps.setProperty(DistributionConfig.GROUPS_NAME, "Group1");
+    createDefaultSetup(localProps);
+    Function function = new TestFunction(true, TestFunction.TEST_FUNCTION_RETURN_ARGS);
+    FunctionService.registerFunction(function);
+
+
+    Host.getHost(0).getVM(0).invoke(new SerializableRunnable() {
+      public void run() {
+        RegionFactory<Integer, Integer> dataRegionFactory = getCache().createRegionFactory(RegionShortcut.REPLICATE);
+        Region region = dataRegionFactory.create(REGION_NAME);
+        Function function = new TestFunction(true, TestFunction.TEST_FUNCTION_RETURN_ARGS);
+        assertNotNull(region);
+        FunctionService.registerFunction(function);
+      }
+    });
+
+    String command = "execute function --id=" + function.getId() + " --arguments=\"arg1,arg2\"" +
+        " --result-collector=" + ToUpperResultCollector.class.getName();
+
+    getLogWriter().info("testExecuteFunctionOnMembersWithArgs command=" + command);
+    CommandResult cmdResult = executeCommand(command);
+    if (cmdResult != null) {
+      assertEquals(Result.Status.OK, cmdResult.getStatus());
+      getLogWriter().info("testExecuteFunctionOnMembersWithArgs cmdResult:" + cmdResult);
+      String stringResult = commandResultToString(cmdResult);
+      getLogWriter().info("testExecuteFunctionOnMembersWithArgs stringResult:" + stringResult);
+      assertTrue(stringResult.contains("Execution summary"));
+      assertTrue(stringResult.contains("ARG1"));
+    } else {
+      fail("testExecuteFunctionOnMembersWithArgs did not return CommandResult");
+    }
+  }
+
+  @Test
   public void testExecuteFunctionOnGroups() {
     Properties localProps = new Properties();
     localProps.setProperty(DistributionConfig.NAME_NAME, "Manager");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ce43082f/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ToUpperResultCollector.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ToUpperResultCollector.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ToUpperResultCollector.java
new file mode 100644
index 0000000..613463a
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ToUpperResultCollector.java
@@ -0,0 +1,65 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.cli.commands;
+
+import com.gemstone.gemfire.cache.execute.FunctionException;
+import com.gemstone.gemfire.cache.execute.ResultCollector;
+import com.gemstone.gemfire.distributed.DistributedMember;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class ToUpperResultCollector implements ResultCollector {
+
+  private List<Object> results = new ArrayList<>();
+
+  private CountDownLatch latch = new CountDownLatch(1);
+
+  @Override
+  public Object getResult() throws FunctionException {
+    try {
+      latch.await();
+    } catch (InterruptedException e) {
+      throw new FunctionException("Interrupted waiting for results", e);
+    }
+    return results;
+  }
+
+  @Override
+  public Object getResult(long timeout, TimeUnit unit) throws FunctionException, InterruptedException {
+    latch.await(timeout, unit);
+    return results;
+  }
+
+  @Override
+  public void addResult(DistributedMember memberID, Object resultOfSingleExecution) {
+    results.add(resultOfSingleExecution.toString().toUpperCase());
+  }
+
+  @Override
+  public void endResults() {
+    latch.countDown();
+  }
+
+  @Override
+  public void clearResults() {
+    results.clear();
+    latch = new CountDownLatch(1);
+  }
+}


[28/50] [abbrv] incubator-geode git commit: GEODE-17: enhance the GeodeSecurityUtil and review changes

Posted by kl...@apache.org.
GEODE-17: enhance the GeodeSecurityUtil and review changes

* allow operations that does not require any authorizations
* put/get, import/export and locate entry will check region access
* rename EnvronmentVariablesHandlerInterceptor
* rename ShiroUtil to GeodeSecurityUtil
* reformat code and review changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7c38f0d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7c38f0d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7c38f0d8

Branch: refs/heads/feature/GEODE-1255
Commit: 7c38f0d8811874509ae93dbd9a4a9f7b05ce0d01
Parents: 0c0825a
Author: Jinmei Liao <ji...@pivotal.io>
Authored: Tue Apr 26 07:30:27 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Fri Apr 29 08:29:28 2016 -0700

----------------------------------------------------------------------
 .../cache/operations/OperationContext.java      |  13 +-
 .../management/DistributedSystemMXBean.java     |   6 +-
 .../gemfire/management/MemberMXBean.java        |  10 +-
 .../CreateAlterDestroyRegionCommands.java       |  12 +-
 .../internal/cli/commands/DataCommands.java     |  22 +-
 .../internal/cli/commands/RegionCommands.java   |   3 +-
 .../internal/cli/remote/CommandProcessor.java   |   7 +-
 .../internal/security/AccessControlMBean.java   |   4 +-
 .../internal/security/MBeanServerWrapper.java   |  23 +-
 .../internal/security/ResourceOperation.java    |  13 +-
 .../security/ResourceOperationContext.java      |  45 +-
 .../controllers/AbstractCommandsController.java |  17 +-
 .../EnvironmentVariablesHandlerInterceptor.java | 121 ---
 .../support/LoginHandlerInterceptor.java        | 122 +++
 .../web/shell/RestHttpOperationInvoker.java     |   4 -
 .../gemfire/security/CustomAuthRealm.java       |   7 +-
 .../gemfire/security/GeodeSecurityUtil.java     | 163 ++++
 .../gemfire/security/JMXShiroAuthenticator.java |   4 +-
 .../gemstone/gemfire/security/ShiroUtil.java    | 116 ---
 .../CacheServerMBeanAuthorizationJUnitTest.java |  26 +-
 .../CacheServerMBeanShiroJUnitTest.java         |  36 +-
 .../security/CliCommandsSecurityTest.java       |  17 +-
 .../security/DataCommandsSecurityTest.java      |   7 +-
 .../DiskStoreMXBeanSecurityJUnitTest.java       |  20 +-
 .../GatewayReceiverMBeanSecurityTest.java       |  17 +-
 .../GatewaySenderMBeanSecurityTest.java         |  24 +-
 .../GeodeSecurityUtilCustomRealmJUnitTest.java  |  52 ++
 .../GeodeSecurityUtilWithIniFileJUnitTest.java  | 147 +++
 .../security/GfshCommandsSecurityTest.java      |   6 +-
 .../internal/security/JSONAuthorization.java    |  77 +-
 .../LockServiceMBeanAuthorizationJUnitTest.java |  10 +-
 .../ManagerMBeanAuthorizationJUnitTest.java     |   4 +-
 .../security/MemberMBeanSecurityJUnitTest.java  |  30 +-
 .../ResourceOperationContextJUnitTest.java      |  88 ++
 .../internal/security/TestCommand.java          | 178 ++--
 .../management/internal/security/auth3.json     |   2 +-
 .../internal/security/cacheServer.json          |  10 +-
 .../management/internal/security/shiro-ini.json |  87 ++
 .../internal/security/testInheritRole.json      |  40 -
 .../security/testSimpleUserAndRole.json         |  18 -
 .../testUserAndRoleRegionServerGroup.json       |  20 -
 .../internal/security/testUserMultipleRole.json |  26 -
 geode-core/src/test/resources/shiro.ini         |  13 +-
 .../junit/rules/DescribedExternalResource.java  |  11 +-
 .../security/GemFireAuthentication.java         | 114 +--
 .../security/GemFireAuthenticationProvider.java |   9 +-
 .../pulse/internal/security/LogoutHandler.java  |  12 +-
 .../tools/pulse/tests/PulseAbstractTest.java    | 904 ++++++++++---------
 .../gemfire/tools/pulse/tests/Region.java       |   2 +-
 .../src/main/webapp/WEB-INF/gemfire-servlet.xml |   2 +-
 ...entVariablesHandlerInterceptorJUnitTest.java | 272 ------
 .../LoginHandlerInterceptorJUnitTest.java       | 274 ++++++
 52 files changed, 1758 insertions(+), 1509 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
index dd290c5..b632edb 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java
@@ -33,6 +33,7 @@ import org.apache.shiro.authz.permission.WildcardPermission;
 public abstract class OperationContext extends WildcardPermission{
 
   public enum Resource {
+    NULL,
     CLUSTER,
     DATA
   };
@@ -76,6 +77,7 @@ public abstract class OperationContext extends WildcardPermission{
     EXECUTE_FUNCTION,
     @Deprecated
     GET_DURABLE_CQS,
+    NULL,
     MANAGE,
     WRITE,
     READ;
@@ -298,11 +300,15 @@ public abstract class OperationContext extends WildcardPermission{
   public abstract OperationCode getOperationCode();
 
   public Resource getResource(){
-    return Resource.DATA;
+    return Resource.NULL;
   }
 
+  /**
+   *
+   * @return
+   */
   public String getRegionName(){
-    return null;
+    return "NULL";
   }
 
   /**
@@ -356,7 +362,4 @@ public abstract class OperationContext extends WildcardPermission{
         || opCode.isRegionDestroy() || opCode.isRegionClear());
   }
 
-  public String toString(){
-    return getResource() + ":"+ getOperationCode();
-  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
index a27d92f..6dac6af 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java
@@ -72,14 +72,16 @@ import com.gemstone.gemfire.management.internal.security.ResourceOperation;
  * @since 7.0
  *
  */
-//@ResourceOperation(resource = Resource.CLUSTER, operation = OperationCode.READ)
+@ResourceOperation(resource = Resource.CLUSTER, operation = OperationCode.READ)
 public interface DistributedSystemMXBean {
 
   /**
    * Returns the ID of thie DistributedSystem.
+   * allow anyone to access this method
    *
    * @return The DistributedSystem ID or -1 if not set.
    */
+  @ResourceOperation()
   public int getDistributedSystemId();
 
   /**
@@ -351,7 +353,9 @@ public interface DistributedSystemMXBean {
   /**
    * Returns the object name for a {@link MemberMXBean} used to access
    * this distributed member.
+   * allow anyone to access this method
    */
+  @ResourceOperation()
   public ObjectName getMemberObjectName();
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
index 5f656a9..c5d9933 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java
@@ -16,13 +16,12 @@
  */
 package com.gemstone.gemfire.management;
 
-import com.gemstone.gemfire.distributed.DistributedMember;
-import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import static com.gemstone.gemfire.cache.operations.OperationContext.*;
 
 import java.util.Map;
 
-import static com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
+import com.gemstone.gemfire.distributed.DistributedMember;
+import com.gemstone.gemfire.management.internal.security.ResourceOperation;
 
 /**
  * MBean that provides access to information and management functionality for a
@@ -199,6 +198,7 @@ public interface MemberMXBean {
    * 
    * @return Result of the execution in JSON format.
    */
+  @ResourceOperation()
   String processCommand(String commandString);
   
   /**
@@ -210,6 +210,7 @@ public interface MemberMXBean {
    *          Environmental properties to use during command execution.
    * @return Result of the execution in JSON format.
    */
+  @ResourceOperation()
   String processCommand(String commandString, Map<String, String> env);
   
   /**
@@ -223,6 +224,7 @@ public interface MemberMXBean {
    *          Binary data specific to the command being executed.
    * @return Result of the execution in JSON format.
    */
+  @ResourceOperation()
   String processCommand(String commandString, Map<String, String> env, Byte[][] binaryData);
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
index cdbd3db..06c096f 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java
@@ -79,7 +79,7 @@ import com.gemstone.gemfire.management.internal.cli.util.RegionPath;
 import com.gemstone.gemfire.management.internal.configuration.SharedConfigurationWriter;
 import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
-import com.gemstone.gemfire.security.ShiroUtil;
+
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
@@ -437,7 +437,7 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
   
   @CliCommand (value = CliStrings.ALTER_REGION, help = CliStrings.ALTER_REGION__HELP)
   @CliMetaData (relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION, writesToSharedConfiguration = true)
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.MANAGE)
+  @ResourceOperation(resource=Resource.DATA, operation = OperationCode.MANAGE)
   public Result alterRegion(
       @CliOption (key = CliStrings.ALTER_REGION__REGION,
                   mandatory = true,
@@ -528,9 +528,6 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
                   specifiedDefaultValue = "0",
                   help = CliStrings.ALTER_REGION__EVICTIONMAX__HELP)
       Integer evictionMax) {
-
-    ShiroUtil.authorize("DATA", "MANAGE", regionPath);
-
     Result result = null;
     XmlEntity xmlEntity = null;
 
@@ -999,16 +996,13 @@ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport {
 
   @CliCommand(value = { CliStrings.DESTROY_REGION }, help = CliStrings.DESTROY_REGION__HELP)
   @CliMetaData(shellOnly = false, relatedTopic = CliStrings.TOPIC_GEMFIRE_REGION, writesToSharedConfiguration = true)
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.MANAGE)
+  @ResourceOperation(resource=Resource.DATA, operation = OperationCode.MANAGE)
   public Result destroyRegion(
       @CliOption(key = CliStrings.DESTROY_REGION__REGION,
           optionContext = ConverterHint.REGIONPATH,
           mandatory = true,
           help = CliStrings.DESTROY_REGION__REGION__HELP)
       String regionPath) {
-
-    ShiroUtil.authorize("DATA", "MANAGE", regionPath);
-
     if (regionPath == null) {
       return ResultBuilder.createInfoResult(CliStrings.DESTROY_REGION__MSG__SPECIFY_REGIONPATH_TO_DESTROY);
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
index c1c04a3..61803fe 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java
@@ -73,7 +73,8 @@ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
-import com.gemstone.gemfire.security.ShiroUtil;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
+
 import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
@@ -834,13 +835,12 @@ public class DataCommands implements CommandMarker {
   @CliCommand(value = CliStrings.EXPORT_DATA, help = CliStrings.EXPORT_DATA__HELP)
   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DATA,
       CliStrings.TOPIC_GEMFIRE_REGION })
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.READ)
   public Result exportData(
       @CliOption(key = CliStrings.EXPORT_DATA__REGION, mandatory = true, optionContext = ConverterHint.REGIONPATH, help = CliStrings.EXPORT_DATA__REGION__HELP) String regionName,
       @CliOption(key = CliStrings.EXPORT_DATA__FILE, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, mandatory = true, help = CliStrings.EXPORT_DATA__FILE__HELP) String filePath,
       @CliOption(key = CliStrings.EXPORT_DATA__MEMBER, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERIDNAME, mandatory = true, help = CliStrings.EXPORT_DATA__MEMBER__HELP) String memberNameOrId) {
 
-    ShiroUtil.authorize("DATA", "READ", regionName);
+    GeodeSecurityUtil.authorizeRegionRead(regionName);
     final Cache cache = CacheFactory.getAnyInstance();
     final DistributedMember targetMember = CliUtil
         .getDistributedMemberByNameOrId(memberNameOrId);
@@ -891,13 +891,12 @@ public class DataCommands implements CommandMarker {
   @CliCommand(value = CliStrings.IMPORT_DATA, help = CliStrings.IMPORT_DATA__HELP)
   @CliMetaData(relatedTopic = { CliStrings.TOPIC_GEMFIRE_DATA,
       CliStrings.TOPIC_GEMFIRE_REGION })
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.WRITE)
   public Result importData(
       @CliOption(key = CliStrings.IMPORT_DATA__REGION, optionContext = ConverterHint.REGIONPATH, mandatory = true, help = CliStrings.IMPORT_DATA__REGION__HELP) String regionName,
       @CliOption(key = CliStrings.IMPORT_DATA__FILE, mandatory = true, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.IMPORT_DATA__FILE__HELP) String filePath,
       @CliOption(key = CliStrings.IMPORT_DATA__MEMBER, mandatory = true, unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.IMPORT_DATA__MEMBER__HELP) String memberNameOrId) {
 
-    ShiroUtil.authorize("DATA", "WRITE", regionName);
+    GeodeSecurityUtil.authorizeRegionWrite(regionName);
 
     Result result = null;
 
@@ -949,7 +948,6 @@ public class DataCommands implements CommandMarker {
   @CliMetaData(shellOnly = false, relatedTopic = {
       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
   @CliCommand(value = { CliStrings.PUT }, help = CliStrings.PUT__HELP)
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.WRITE)
   public Result put(
       @CliOption(key = { CliStrings.PUT__KEY }, mandatory = true, help = CliStrings.PUT__KEY__HELP) String key,
       @CliOption(key = { CliStrings.PUT__VALUE }, mandatory = true, help = CliStrings.PUT__VALUE__HELP) String value,
@@ -958,7 +956,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = { CliStrings.PUT__VALUEKLASS }, help = CliStrings.PUT__VALUEKLASS__HELP) String valueClass,
       @CliOption(key = { CliStrings.PUT__PUTIFABSENT }, help = CliStrings.PUT__PUTIFABSENT__HELP, unspecifiedDefaultValue = "false") boolean putIfAbsent) {
 
-    ShiroUtil.authorize("DATA", "WRITE", regionPath);
+    GeodeSecurityUtil.authorizeRegionWrite(regionPath);
     Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
     if (regionPath == null || regionPath.isEmpty()) {
@@ -1018,7 +1016,6 @@ public class DataCommands implements CommandMarker {
   @CliMetaData(shellOnly = false, relatedTopic = {
       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
   @CliCommand(value = { CliStrings.GET }, help = CliStrings.GET__HELP)
-  @ResourceOperation(resource = Resource.DATA, operation= OperationCode.READ)
   public Result get(
       @CliOption(key = { CliStrings.GET__KEY }, mandatory = true, help = CliStrings.GET__KEY__HELP) String key,
       @CliOption(key = { CliStrings.GET__REGIONNAME }, mandatory = true, help = CliStrings.GET__REGIONNAME__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
@@ -1026,7 +1023,7 @@ public class DataCommands implements CommandMarker {
       @CliOption(key = { CliStrings.GET__VALUEKLASS }, help = CliStrings.GET__VALUEKLASS__HELP) String valueClass,
       @CliOption(key = CliStrings.GET__LOAD, unspecifiedDefaultValue = "true", specifiedDefaultValue = "true", help = CliStrings.GET__LOAD__HELP) Boolean loadOnCacheMiss)
   {
-    ShiroUtil.authorize("DATA", "READ", regionPath);
+    GeodeSecurityUtil.authorizeRegionRead(regionPath);
 
     Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
@@ -1074,14 +1071,14 @@ public class DataCommands implements CommandMarker {
   @CliMetaData(shellOnly = false, relatedTopic = {
       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
   @CliCommand(value = { CliStrings.LOCATE_ENTRY }, help = CliStrings.LOCATE_ENTRY__HELP)
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.READ)
   public Result locateEntry(
       @CliOption(key = { CliStrings.LOCATE_ENTRY__KEY }, mandatory = true, help = CliStrings.LOCATE_ENTRY__KEY__HELP) String key,
       @CliOption(key = { CliStrings.LOCATE_ENTRY__REGIONNAME }, mandatory = true, help = CliStrings.LOCATE_ENTRY__REGIONNAME__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
       @CliOption(key = { CliStrings.LOCATE_ENTRY__KEYCLASS }, help = CliStrings.LOCATE_ENTRY__KEYCLASS__HELP) String keyClass,
       @CliOption(key = { CliStrings.LOCATE_ENTRY__VALUEKLASS }, help = CliStrings.LOCATE_ENTRY__VALUEKLASS__HELP) String valueClass,
       @CliOption(key = { CliStrings.LOCATE_ENTRY__RECURSIVE }, help = CliStrings.LOCATE_ENTRY__RECURSIVE__HELP, unspecifiedDefaultValue = "false") boolean recursive) {
-    ShiroUtil.authorize("DATA", "READ", regionPath);
+
+    GeodeSecurityUtil.authorizeRegionRead(regionPath);
     // Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
 
@@ -1122,13 +1119,12 @@ public class DataCommands implements CommandMarker {
   @CliMetaData(shellOnly = false, relatedTopic = {
       CliStrings.TOPIC_GEMFIRE_DATA, CliStrings.TOPIC_GEMFIRE_REGION })
   @CliCommand(value = { CliStrings.REMOVE }, help = CliStrings.REMOVE__HELP)
-  @ResourceOperation(resource = Resource.DATA, operation = OperationCode.MANAGE)
+  @ResourceOperation(resource=Resource.DATA, operation = OperationCode.MANAGE)
   public Result remove(
       @CliOption(key = { CliStrings.REMOVE__KEY }, help = CliStrings.REMOVE__KEY__HELP) String key,
       @CliOption(key = { CliStrings.REMOVE__REGION }, mandatory = true, help = CliStrings.REMOVE__REGION__HELP, optionContext = ConverterHint.REGIONPATH) String regionPath,
       @CliOption(key = CliStrings.REMOVE__ALL, help = CliStrings.REMOVE__ALL__HELP, specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean removeAllKeys,
       @CliOption(key = { CliStrings.REMOVE__KEYCLASS }, help = CliStrings.REMOVE__KEYCLASS__HELP) String keyClass) {
-
     Cache cache = CacheFactory.getAnyInstance();
     DataCommandResult dataResult = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
index ac69d32..0408675 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java
@@ -52,7 +52,7 @@ import com.gemstone.gemfire.management.internal.cli.result.TabularResultData;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.cli.util.RegionAttributesNames;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
-import com.gemstone.gemfire.security.ShiroUtil;
+
 import org.springframework.shell.core.CommandMarker;
 import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
 import org.springframework.shell.core.annotation.CliCommand;
@@ -163,7 +163,6 @@ public class RegionCommands implements CommandMarker {
       mandatory = true)
       String regionName) {
 
-    ShiroUtil.authorize("CLUSTER", "READ", regionName);
     Result result = null;
     try {
       

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
index 87053cc..c3b0b7f 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java
@@ -31,7 +31,8 @@ import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder;
 import com.gemstone.gemfire.management.internal.cli.util.CommentSkipHelper;
 import com.gemstone.gemfire.management.internal.security.ResourceOperation;
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.ShiroUtil;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
+
 import org.springframework.shell.core.Parser;
 import org.springframework.shell.event.ParseResult;
 
@@ -108,9 +109,7 @@ public class CommandProcessor {
         //do general authorization check here
         Method method = parseResult.getMethod();
         ResourceOperation resourceOperation = method.getAnnotation(ResourceOperation.class);
-        if(resourceOperation!=null){
-          ShiroUtil.authorize(resourceOperation);
-        }
+        GeodeSecurityUtil.authorize(resourceOperation);
 
         result = executionStrategy.execute(parseResult);
         if (result instanceof Result) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
index 9921538..33b80e2 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/AccessControlMBean.java
@@ -17,7 +17,7 @@
 package com.gemstone.gemfire.management.internal.security;
 
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.ShiroUtil;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
 
 /**
  * AccessControlMBean Implementation. This retrieves JMXPrincipal from AccessController
@@ -30,7 +30,7 @@ public class AccessControlMBean implements AccessControlMXBean {
   @Override
   public boolean authorize(String resource, String permission) {
     try {
-      ShiroUtil.authorize(resource, permission);
+      GeodeSecurityUtil.authorize(resource, permission);
       return true;
     }
     catch (GemFireSecurityException e){

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
index bbc0442..8d1031a 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/MBeanServerWrapper.java
@@ -46,7 +46,7 @@ import javax.management.remote.MBeanServerForwarder;
 
 import com.gemstone.gemfire.management.internal.ManagementConstants;
 import com.gemstone.gemfire.security.GemFireSecurityException;
-import com.gemstone.gemfire.security.ShiroUtil;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
 
 /**
  * This class intercepts all MBean requests for GemFire MBeans and passed it to
@@ -60,14 +60,6 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
   public MBeanServerWrapper(){
   }
 
-  private void doAuthorization(ResourceOperationContext context){
-    // allow operations which requires no permissions
-    if(context == null)
-      return;
-
-    ShiroUtil.authorize(context);
-  }
-
   private void doAuthorizationPost(ResourceOperationContext context){
     if(context == null)
       return;
@@ -161,7 +153,7 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
   public Object getAttribute(ObjectName name, String attribute) throws MBeanException, InstanceNotFoundException,
       ReflectionException {
     ResourceOperationContext ctx = getOperationContext(name, attribute, false);
-    doAuthorization(ctx);
+    GeodeSecurityUtil.authorize(ctx);
     Object result;
     try {
       result = mbs.getAttribute(name, attribute);
@@ -195,7 +187,7 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
   public void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException,
       AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
     ResourceOperationContext ctx = getOperationContext(name, attribute.getName(), false);
-    doAuthorization(ctx);
+    GeodeSecurityUtil.authorize(ctx);
     mbs.setAttribute(name, attribute);
   }
 
@@ -216,12 +208,9 @@ public class MBeanServerWrapper implements MBeanServerForwarder {
   @Override
   public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature)
       throws InstanceNotFoundException, MBeanException, ReflectionException {
-    // skip authorization check if operation is "processCommand" since we will check authorization in the command itself
-    ResourceOperationContext ctx = null;
-    if(!"processCommand".equals(operationName)) {
-      ctx = getOperationContext(name, operationName, true);
-      doAuthorization(ctx);
-    }
+
+    ResourceOperationContext ctx = getOperationContext(name, operationName, true);
+    GeodeSecurityUtil.authorize(ctx);
 
     Object result = mbs.invoke(name, operationName, params, signature);
     if(ctx!=null)

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
index f72a835..8b50183 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperation.java
@@ -16,25 +16,22 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
-import javax.management.DescriptorKey;
+import static com.gemstone.gemfire.cache.operations.OperationContext.*;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Inherited;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-
-import static com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
-import static com.gemstone.gemfire.cache.operations.OperationContext.Resource;
+import javax.management.DescriptorKey;
 
 @Target({ElementType.METHOD, ElementType.TYPE})
 @Retention(RetentionPolicy.RUNTIME)
 @Inherited
 public @interface ResourceOperation {
   @DescriptorKey("resource")
-  Resource resource();
-
-  String label() default ResourceConstants.DEFAULT_LABEL;
+  Resource resource() default Resource.NULL;
 
   @DescriptorKey("operation")
-  OperationCode operation();
+  OperationCode operation() default OperationCode.NULL;
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
index 396cdac..50f9b78 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceOperationContext.java
@@ -18,6 +18,8 @@ package com.gemstone.gemfire.management.internal.security;
 
 import com.gemstone.gemfire.cache.operations.OperationContext;
 
+import org.apache.shiro.authz.Permission;
+
 /**
  * This is base class for OperationContext for resource (JMX and CLI) operations
  */
@@ -25,32 +27,25 @@ public class ResourceOperationContext extends OperationContext {
 
   private boolean isPostOperation = false;
   private Object opResult = null;
-  private Resource resource = null;
-  private OperationCode operation = null;
-  private String regionName = null;
+  private Resource resource = Resource.NULL;
+  private OperationCode operation = OperationCode.NULL;
+
+  private String regionName = "NULL";
 
   public ResourceOperationContext() {
+    this(null, null, null);
   }
 
-  public ResourceOperationContext(Resource resource, OperationCode operation) {
-    setParts(resource.name()+":"+operation.name(), false);
-    this.resource = resource;
-    this.operation = operation;
+  public ResourceOperationContext(String resource, String operation) {
+    this(resource, operation, null);
   }
 
   public ResourceOperationContext(String resource, String operation, String regionName) {
-    setParts(resource+":"+operation+":"+regionName, false);
     if (resource != null) this.resource = Resource.valueOf(resource);
     if (operation != null) this.operation = OperationCode.valueOf(operation);
-    this.regionName = regionName;
-  }
+    if (regionName !=null ) this.regionName = regionName;
 
-  public void setResourceOperation(ResourceOperation op) {
-    if (op != null) {
-      resource = op.resource();
-      operation = op.operation();
-      setParts(resource.name()+":"+operation.name(), false);
-    }
+    setParts(this.resource.name()+":"+this.operation.name()+":"+regionName);
   }
 
   @Override
@@ -87,20 +82,8 @@ public class ResourceOperationContext extends OperationContext {
     return this.opResult;
   }
 
-  public String toString(){
-    if(this.regionName==null)
-      return getResource() + ":"+ getOperationCode();
-    else
-      return getResource() + ":"+ getOperationCode()+ ":" +this.regionName;
-  }
-
-  public boolean equals(Object o){
-    if(! (o instanceof ResourceOperationContext))
-      return false;
-
-    ResourceOperationContext other = (ResourceOperationContext)o;
-    return (this.resource==other.getResource() && this.operation==other.getOperationCode());
+  @Override
+  public boolean implies(Permission p){
+    return super.implies(p);
   }
-
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
index 211d0b1..08865b4 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java
@@ -47,10 +47,11 @@ import com.gemstone.gemfire.management.internal.ManagementConstants;
 import com.gemstone.gemfire.management.internal.SystemManagementService;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
 import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder;
-import com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor;
+import com.gemstone.gemfire.management.internal.web.controllers.support.LoginHandlerInterceptor;
 import com.gemstone.gemfire.management.internal.web.controllers.support.MemberMXBeanAdapter;
 import com.gemstone.gemfire.management.internal.web.util.UriUtils;
-import com.gemstone.gemfire.security.ShiroUtil;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
+
 import org.apache.logging.log4j.Logger;
 import org.springframework.beans.propertyeditors.StringArrayPropertyEditor;
 import org.springframework.http.HttpStatus;
@@ -488,12 +489,12 @@ public abstract class AbstractCommandsController {
    * Gets the environment setup during this HTTP/command request for the current command process execution.
    * 
    * @return a mapping of environment variables to values.
-   * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+   * @see LoginHandlerInterceptor#getEnvironment()
    */
   protected Map<String, String> getEnvironment() {
     final Map<String, String> environment = new HashMap<String, String>();
 
-    environment.putAll(EnvironmentVariablesHandlerInterceptor.getEnvironment());
+    environment.putAll(LoginHandlerInterceptor.getEnvironment());
     environment.put(Gfsh.ENV_APP_NAME, Gfsh.GFSH_APP_NAME);
 
     return environment;
@@ -541,7 +542,7 @@ public abstract class AbstractCommandsController {
    * @param command a String value containing a valid command String as would be entered by the user in Gfsh.
    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
-   * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+   * @see LoginHandlerInterceptor#getEnvironment()
    * @see #getEnvironment()
    * @see #processCommand(String, java.util.Map, byte[][])
    */
@@ -558,7 +559,7 @@ public abstract class AbstractCommandsController {
         return new ResponseEntity<String>(processCommand(command, fileData), HttpStatus.OK);
       }
     };
-    return ShiroUtil.associateWith(callable);
+    return GeodeSecurityUtil.associateWith(callable);
   }
 
 
@@ -571,7 +572,7 @@ public abstract class AbstractCommandsController {
    * the Manager, usually for the 'deploy' Gfsh command.
    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
-   * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+   * @see LoginHandlerInterceptor#getEnvironment()
    * @see #getEnvironment()
    * @see #processCommand(String, java.util.Map, byte[][])
    */
@@ -590,7 +591,7 @@ public abstract class AbstractCommandsController {
    * between Gfsh and the Manager, and thus need to specify this key/value pair mapping.
    * @return a result of the command execution as a String, typically marshalled in JSON to be serialized back to Gfsh.
    * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh
-   * @see com.gemstone.gemfire.management.internal.web.controllers.support.EnvironmentVariablesHandlerInterceptor#getEnvironment()
+   * @see LoginHandlerInterceptor#getEnvironment()
    * @see #processCommand(String, java.util.Map, byte[][])
    */
   protected String processCommand(final String command, final Map<String, String> environment) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
deleted file mode 100644
index bb7a27d..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.management.internal.web.controllers.support;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.management.internal.security.ResourceConstants;
-import com.gemstone.gemfire.security.Authenticator;
-import com.gemstone.gemfire.security.ShiroUtil;
-import org.apache.logging.log4j.Logger;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-/**
- * The GetEnvironmentHandlerInterceptor class handles extracting Gfsh environment variables encoded in the HTTP request
- * message as request parameters.
- * <p/>
- * @see javax.servlet.http.HttpServletRequest
- * @see javax.servlet.http.HttpServletResponse
- * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter
- * @since 8.0
- */
-@SuppressWarnings("unused")
-public class EnvironmentVariablesHandlerInterceptor extends HandlerInterceptorAdapter {
-
-  private static final Logger logger = LogService.getLogger();
-
-  private Cache cache;
-
-  private Authenticator auth = null;
-
-  private static final ThreadLocal<Map<String, String>> ENV = new ThreadLocal<Map<String, String>>() {
-    @Override
-    protected Map<String, String> initialValue() {
-      return Collections.emptyMap();
-    }
-  };
-
-  protected static final String ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX = "vf.gf.env.";
-
-  protected static final String SECURITY_VARIABLE_REQUEST_HEADER_PREFIX = "security-";
-
-  public static Map<String, String> getEnvironment() {
-    return ENV.get();
-  }
-
-  @Override
-  public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler)
-    throws Exception
-  {
-    final Map<String, String> requestParameterValues = new HashMap<String, String>();
-
-    for (Enumeration<String> requestParameters = request.getParameterNames(); requestParameters.hasMoreElements(); ) {
-      final String requestParameter = requestParameters.nextElement();
-
-      if (requestParameter.startsWith(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX)) {
-        requestParameterValues.put(requestParameter.substring(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX.length()),
-          request.getParameter(requestParameter));
-      }
-    }
-
-
-
-    for (Enumeration<String> requestHeaders = request.getHeaderNames(); requestHeaders.hasMoreElements();) {
-
-      final String requestHeader = requestHeaders.nextElement();
-
-      if (requestHeader.startsWith(SECURITY_VARIABLE_REQUEST_HEADER_PREFIX)) {
-        requestParameterValues.put(requestHeader, request.getHeader(requestHeader));
-      }
-
-    }
-
-    String username = requestParameterValues.get(ResourceConstants.USER_NAME);
-    String password = requestParameterValues.get(ResourceConstants.PASSWORD);
-    ShiroUtil.login(username, password);
-
-    ENV.set(requestParameterValues);
-
-    return true;
-  }
-
-
-  @Override
-  public void afterCompletion(final HttpServletRequest request,
-                              final HttpServletResponse response,
-                              final Object handler,
-                              final Exception ex)
-    throws Exception
-  {
-    afterConcurrentHandlingStarted(request, response, handler);
-    ShiroUtil.logout();
-  }
-
-  @Override
-  public void afterConcurrentHandlingStarted(
-    HttpServletRequest request, HttpServletResponse response, Object handler)
-    throws Exception {
-    ENV.remove();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
new file mode 100644
index 0000000..5465ea3
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/LoginHandlerInterceptor.java
@@ -0,0 +1,122 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.web.controllers.support;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.management.internal.security.ResourceConstants;
+import com.gemstone.gemfire.security.Authenticator;
+import com.gemstone.gemfire.security.GeodeSecurityUtil;
+
+import org.apache.logging.log4j.Logger;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+/**
+ * The GetEnvironmentHandlerInterceptor class handles extracting Gfsh environment variables encoded in the HTTP request
+ * message as request parameters.
+ * <p/>
+ * @see javax.servlet.http.HttpServletRequest
+ * @see javax.servlet.http.HttpServletResponse
+ * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter
+ * @since 8.0
+ */
+@SuppressWarnings("unused")
+public class LoginHandlerInterceptor extends HandlerInterceptorAdapter {
+
+  private static final Logger logger = LogService.getLogger();
+
+  private Cache cache;
+
+  private Authenticator auth = null;
+
+  private static final ThreadLocal<Map<String, String>> ENV = new ThreadLocal<Map<String, String>>() {
+    @Override
+    protected Map<String, String> initialValue() {
+      return Collections.emptyMap();
+    }
+  };
+
+  protected static final String ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX = "vf.gf.env.";
+
+  protected static final String SECURITY_VARIABLE_REQUEST_HEADER_PREFIX = "security-";
+
+  public static Map<String, String> getEnvironment() {
+    return ENV.get();
+  }
+
+  @Override
+  public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler)
+    throws Exception
+  {
+    final Map<String, String> requestParameterValues = new HashMap<String, String>();
+
+    for (Enumeration<String> requestParameters = request.getParameterNames(); requestParameters.hasMoreElements(); ) {
+      final String requestParameter = requestParameters.nextElement();
+
+      if (requestParameter.startsWith(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX)) {
+        requestParameterValues.put(requestParameter.substring(ENVIRONMENT_VARIABLE_REQUEST_PARAMETER_PREFIX.length()),
+          request.getParameter(requestParameter));
+      }
+    }
+
+
+
+    for (Enumeration<String> requestHeaders = request.getHeaderNames(); requestHeaders.hasMoreElements();) {
+
+      final String requestHeader = requestHeaders.nextElement();
+
+      if (requestHeader.startsWith(SECURITY_VARIABLE_REQUEST_HEADER_PREFIX)) {
+        requestParameterValues.put(requestHeader, request.getHeader(requestHeader));
+      }
+
+    }
+
+    String username = requestParameterValues.get(ResourceConstants.USER_NAME);
+    String password = requestParameterValues.get(ResourceConstants.PASSWORD);
+    GeodeSecurityUtil.login(username, password);
+
+    ENV.set(requestParameterValues);
+
+    return true;
+  }
+
+
+  @Override
+  public void afterCompletion(final HttpServletRequest request,
+                              final HttpServletResponse response,
+                              final Object handler,
+                              final Exception ex)
+    throws Exception
+  {
+    afterConcurrentHandlingStarted(request, response, handler);
+    GeodeSecurityUtil.logout();
+  }
+
+  @Override
+  public void afterConcurrentHandlingStarted(
+    HttpServletRequest request, HttpServletResponse response, Object handler)
+    throws Exception {
+    ENV.remove();
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
index 439e2b4..0ead2d7 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java
@@ -33,7 +33,6 @@ import com.gemstone.gemfire.internal.util.CollectionUtils;
 import com.gemstone.gemfire.management.internal.cli.CommandRequest;
 import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings;
 import com.gemstone.gemfire.management.internal.cli.shell.Gfsh;
-import com.gemstone.gemfire.management.internal.security.ResourceConstants;
 import com.gemstone.gemfire.management.internal.web.domain.Link;
 import com.gemstone.gemfire.management.internal.web.domain.LinkIndex;
 import com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest;
@@ -230,9 +229,6 @@ public class RestHttpOperationInvoker extends AbstractHttpOperationInvoker imple
   protected ClientHttpRequest createHttpRequest(final CommandRequest command) {
     ClientHttpRequest request = createHttpRequest(findLink(command));
 
-    //request.getParameters().setAll(new HashMap<String, Object>(CollectionUtils.removeKeys(
-    //  new HashMap<String, String>(command.getParameters()), ExcludeNoValueFilter.INSTANCE)));
-
     Map<String, String> commandParameters = command.getParameters();
 
     for (Map.Entry<String, String> entry : commandParameters.entrySet()) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
index 76fc852..706a7cc 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/CustomAuthRealm.java
@@ -35,7 +35,7 @@ import com.gemstone.gemfire.internal.ClassLoadUtil;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.lang.StringUtils;
 import com.gemstone.gemfire.management.internal.security.ResourceConstants;
-import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.shiro.authc.AuthenticationException;
@@ -66,7 +66,6 @@ public class CustomAuthRealm extends AuthorizingRealm{
     this.authenticatorFactoryName = securityProps.getProperty(DistributionConfig.SECURITY_CLIENT_AUTHENTICATOR_NAME);
     this.cachedAuthZCallback = new ConcurrentHashMap<>();
     this.cachedPostAuthZCallback = new ConcurrentHashMap<>();
-    logger.info("Started Management interceptor on JMX connector");
   }
 
   @Override
@@ -93,13 +92,13 @@ public class CustomAuthRealm extends AuthorizingRealm{
 
   @Override
   public boolean isPermitted(PrincipalCollection principals, Permission permission) {
-    ResourceOperationContext context =(ResourceOperationContext)permission;
+    OperationContext context =(OperationContext)permission;
     Principal principal = (Principal)principals.getPrimaryPrincipal();
     // if no access control is specified, then we allow all
     if(StringUtils.isBlank(authzFactoryName))
       return true;
     AccessControl accessControl = getAccessControl(principal, false);
-    return accessControl.authorizeOperation(null, context);
+    return accessControl.authorizeOperation(context.getRegionName(), context);
   }
 
   public AccessControl getAccessControl(Principal principal, boolean isPost) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java
new file mode 100644
index 0000000..148a963
--- /dev/null
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/GeodeSecurityUtil.java
@@ -0,0 +1,163 @@
+/*
+ * 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 com.gemstone.gemfire.security;
+
+import java.util.concurrent.Callable;
+
+import com.gemstone.gemfire.cache.operations.OperationContext;
+import com.gemstone.gemfire.cache.operations.OperationContext.OperationCode;
+import com.gemstone.gemfire.cache.operations.OperationContext.Resource;
+import com.gemstone.gemfire.internal.logging.LogService;
+import com.gemstone.gemfire.management.internal.security.ResourceOperation;
+import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.Logger;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.ShiroException;
+import org.apache.shiro.UnavailableSecurityManagerException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.ThreadContext;
+
+public class GeodeSecurityUtil {
+
+  private static Logger logger = LogService.getLogger();
+
+  public static void login(String username, String password){
+    if(!isShiroConfigured())
+      return;
+
+    Subject currentUser = SecurityUtils.getSubject();
+
+    UsernamePasswordToken token =
+        new UsernamePasswordToken(username, password);
+    try {
+      logger.info("Logging in "+username+"/"+password);
+      currentUser.login(token);
+    } catch (ShiroException e) {
+      throw new AuthenticationFailedException(e.getMessage(), e);
+    }
+  }
+
+  public static void logout(){
+    if(!isShiroConfigured())
+      return;
+
+    Subject currentUser = SecurityUtils.getSubject();
+    try {
+      logger.info("Logging out "+currentUser.getPrincipal());
+      currentUser.logout();
+    }
+    catch(ShiroException e){
+      throw new AuthenticationFailedException(e.getMessage(), e);
+    }
+    // clean out Shiro's thread local content
+    ThreadContext.remove();
+  }
+
+  public static Callable associateWith(Callable callable){
+    if(!isShiroConfigured())
+      return callable;
+
+    Subject currentUser = SecurityUtils.getSubject();
+    return currentUser.associateWith(callable);
+  }
+
+  public static void authorize(ResourceOperation resourceOperation) {
+    if(resourceOperation==null)
+      return;
+
+    authorize(resourceOperation.resource().name(),
+      resourceOperation.operation().name(),
+      null);
+  }
+
+  public static void authorizeClusterManage(){
+    authorize("CLUSTER", "MANAGE");
+  }
+
+  public static void authorizeClusterWrite(){
+    authorize("CLUSTER", "WRITE");
+  }
+
+  public static void authorizeClusterRead(){
+    authorize("CLUSTER", "READ");
+  }
+
+  public static void authorizeDataManage(){
+    authorize("DATA", "MANAGE");
+  }
+
+  public static void authorizeDataWrite(){
+    authorize("DATA", "WRITE");
+  }
+
+  public static void authorizeDataRead(){
+    authorize("DATA", "READ");
+  }
+
+  public static void authorizeRegionWrite(String regionName){
+    authorize("DATA", "WRITE", regionName);
+  }
+
+  public static void authorizeRegionRead(String regionName){
+    authorize("DATA", "READ", regionName);
+  }
+
+  public static void authorize(String resource, String operation){
+    authorize(resource, operation, null);
+  }
+
+  private static void authorize(String resource, String operation, String regionName){
+    regionName = StringUtils.stripStart(regionName, "/");
+    authorize(new ResourceOperationContext(resource, operation, regionName));
+  }
+
+  public static void authorize(OperationContext context) {
+    if(context==null)
+      return;
+
+    if(context.getResource()== Resource.NULL && context.getOperationCode()== OperationCode.NULL)
+      return;
+
+    if(!isShiroConfigured())
+      return;
+
+
+    Subject currentUser = SecurityUtils.getSubject();
+    try {
+      currentUser.checkPermission(context);
+    }
+    catch(ShiroException e){
+      logger.info(currentUser.getPrincipal() + " not authorized for " + context);
+      throw new GemFireSecurityException(e.getMessage(), e);
+    }
+  }
+
+  private static boolean isShiroConfigured(){
+    try{
+      SecurityUtils.getSecurityManager();
+    }
+    catch(UnavailableSecurityManagerException e){
+      return false;
+    }
+    return true;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
index 8f86c38..c55e700 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/JMXShiroAuthenticator.java
@@ -49,7 +49,7 @@ public class JMXShiroAuthenticator implements JMXAuthenticator, NotificationList
       throw new SecurityException(WRONGE_CREDENTIALS_MESSAGE);
     }
 
-    ShiroUtil.login(username, password);
+    GeodeSecurityUtil.login(username, password);
 
     return new Subject(true, Collections.singleton(new JMXPrincipal(username)), Collections.EMPTY_SET,
       Collections.EMPTY_SET);
@@ -61,7 +61,7 @@ public class JMXShiroAuthenticator implements JMXAuthenticator, NotificationList
       JMXConnectionNotification cxNotification = (JMXConnectionNotification) notification;
       String type = cxNotification.getType();
       if (JMXConnectionNotification.CLOSED.equals(type)) {
-        ShiroUtil.logout();
+        GeodeSecurityUtil.logout();
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
deleted file mode 100644
index 01914e4..0000000
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/ShiroUtil.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.security;
-
-import java.util.concurrent.Callable;
-
-import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.management.internal.security.ResourceOperation;
-import com.gemstone.gemfire.management.internal.security.ResourceOperationContext;
-
-import org.apache.logging.log4j.Logger;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.ShiroException;
-import org.apache.shiro.UnavailableSecurityManagerException;
-import org.apache.shiro.authc.UsernamePasswordToken;
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.util.ThreadContext;
-
-public class ShiroUtil {
-
-  private static Logger logger = LogService.getLogger();
-
-  public static void login(String username, String password){
-    if(!isShiroConfigured())
-      return;
-
-    Subject currentUser = SecurityUtils.getSubject();
-
-    UsernamePasswordToken token =
-        new UsernamePasswordToken(username, password);
-    try {
-      logger.info("Logging in "+username+"/"+password);
-      currentUser.login(token);
-    } catch (ShiroException e) {
-      throw new AuthenticationFailedException(e.getMessage(), e);
-    }
-  }
-
-  public static void logout(){
-    if(!isShiroConfigured())
-      return;
-
-    Subject currentUser = SecurityUtils.getSubject();
-    try {
-      logger.info("Logging out "+currentUser.getPrincipal());
-      currentUser.logout();
-    }
-    catch(ShiroException e){
-      throw new AuthenticationFailedException(e.getMessage(), e);
-    }
-    // clean out Shiro's thread local content
-    ThreadContext.remove();
-  }
-
-  public static Callable associateWith(Callable callable){
-    if(!isShiroConfigured())
-      return callable;
-
-    Subject currentUser = SecurityUtils.getSubject();
-    return currentUser.associateWith(callable);
-  }
-
-  public static void authorize(ResourceOperationContext context) {
-    authorize(context.getResource().name(), context.getOperationCode().name(), context.getRegionName());
-  }
-
-  public static void authorize(ResourceOperation resourceOperation) {
-    authorize(resourceOperation.resource().name(), resourceOperation.operation().name());
-  }
-
-  public static void authorize(String resource, String operation){
-    authorize(resource, operation, null);
-  }
-
-  public static void authorize(String resource, String operation, String regionName){
-    if(!isShiroConfigured())
-      return;
-
-    ResourceOperationContext permission = new ResourceOperationContext(resource, operation, regionName);
-    Subject currentUser = SecurityUtils.getSubject();
-    try {
-      currentUser.checkPermission(permission);
-    }
-    catch(ShiroException e){
-      logger.info(currentUser.getPrincipal() + " not authorized for "+resource+":"+operation+":"+regionName);
-      throw new GemFireSecurityException(e.getMessage(), e);
-    }
-  }
-
-  private static boolean isShiroConfigured(){
-    try{
-      SecurityUtils.getSecurityManager();
-    }
-    catch(UnavailableSecurityManagerException e){
-      return false;
-    }
-    return true;
-  }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
index baa8393..3ded1dc 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanAuthorizationJUnitTest.java
@@ -49,7 +49,7 @@ public class CacheServerMBeanAuthorizationJUnitTest {
   @JMXConnectionConfiguration(user = "data-admin", password = "1234567")
   public void testDataAdmin() throws Exception {
     bean.removeIndex("foo");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining(TestCommand.dataRead.toString());
     bean.fetchLoadProbe();
     bean.getActiveCQCount();
     bean.stopContinuousQuery("bar");
@@ -61,8 +61,8 @@ public class CacheServerMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "cluster-admin", password = "1234567")
   public void testClusterAdmin() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining(TestCommand.dataRead.toString());
     bean.fetchLoadProbe();
   }
 
@@ -70,21 +70,21 @@ public class CacheServerMBeanAuthorizationJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testDataUser() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining(TestCommand.dataManage.toString());
     bean.executeContinuousQuery("bar");
-    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining(TestCommand.clusterRead.toString());
   }
 
   @Test
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
-    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.isRunning()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining(TestCommand.dataRead.toString());
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.isRunning()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).hasMessageContaining(TestCommand.clusterRead.toString());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
index e55623d..85a55a7 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CacheServerMBeanShiroJUnitTest.java
@@ -61,13 +61,33 @@ public class CacheServerMBeanShiroJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "guest", password = "guest")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining("DATA:READ");
-    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.isRunning()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).hasMessageContaining("CLUSTER:READ");
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining(TestCommand.dataRead.toString());
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.stopContinuousQuery("bar")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.closeAllContinuousQuery("bar")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.isRunning()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.showClientQueueDetails("bar")).hasMessageContaining(TestCommand.clusterRead.toString());
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "regionAReader", password = "password")
+  public void testRegionAccess() throws Exception{
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining(TestCommand.clusterRead.toString());
+
+    assertThatThrownBy(() -> bean.executeContinuousQuery("bar")).hasMessageContaining(TestCommand.dataRead.toString());
+  }
+
+  @Test
+  @JMXConnectionConfiguration(user = "dataReader", password = "12345")
+  public void testDataRead() throws Exception{
+    assertThatThrownBy(() -> bean.removeIndex("foo")).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.fetchLoadProbe()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getActiveCQCount()).hasMessageContaining(TestCommand.clusterRead.toString());
+
+    bean.executeContinuousQuery("bar");
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
index 5e49f92..0864e52 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/CliCommandsSecurityTest.java
@@ -24,21 +24,17 @@ import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.internal.logging.LogService;
 import com.gemstone.gemfire.management.MemberMXBean;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
 import org.junit.Before;
 import org.junit.ClassRule;
-import org.junit.FixMethodOrder;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
-import org.junit.runners.MethodSorters;
 
 /**
- * tests will be run alphabetically, in this test class, we run non-admin test first,
- * since we don't want to have the server stopped for the rest of the tests.
  */
 
 @Category(IntegrationTest.class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class CliCommandsSecurityTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
 
@@ -60,11 +56,8 @@ public class CliCommandsSecurityTest {
 
   @Test
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
-  // the tests are run in alphabetical order, so the naming of the tests do matter
-  public void a_testNoAccess(){
-//    List<TestCommand> clusterReads = new ArrayList<>();
-//    clusterReads.add(new TestCommand("deploy --jar=group1_functions.jar --group=Group1", "CLUSTER:MANAGE"));
-    for (TestCommand command:commands) {
+  public void testNoAccess(){
+   for (TestCommand command:commands) {
       LogService.getLogger().info("processing: "+command.getCommand());
       // for those commands that don't require any permission, any user can execute them
       if(command.getPermission()==null){
@@ -72,14 +65,14 @@ public class CliCommandsSecurityTest {
       }
       else {
         assertThatThrownBy(() -> bean.processCommand(command.getCommand()))
-            .hasMessageContaining(command.getPermission());
+            .hasMessageContaining(command.getPermission().toString());
       }
     }
   }
 
   @Test
   @JMXConnectionConfiguration(user = "super-user", password = "1234567")
-  public void b_testAdminUser() throws Exception {
+  public void testAdminUser() throws Exception {
     for (TestCommand command:commands) {
       LogService.getLogger().info("processing: "+command.getCommand());
       bean.processCommand(command.getCommand());

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
index 7517f49..97260d8 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DataCommandsSecurityTest.java
@@ -68,15 +68,16 @@ public class DataCommandsSecurityTest {
   @Test
   public void testRegionAcess(){
     assertThatThrownBy(() -> bean.processCommand("rebalance --include-region=region2")).isInstanceOf(GemFireSecurityException.class)
-        .hasMessageContaining("DATA:MANAGE");
+        .hasMessageContaining(TestCommand.dataManage.toString());
 
     assertThatThrownBy(() -> bean.processCommand("export data --region=region2 --file=foo.txt --member=value")).isInstanceOf(GemFireSecurityException.class);
     assertThatThrownBy(() -> bean.processCommand("import data --region=region2 --file=foo.txt --member=value")).isInstanceOf(GemFireSecurityException.class);
 
     assertThatThrownBy(() -> bean.processCommand("put --key=key1 --value=value1 --region=region2")).isInstanceOf(GemFireSecurityException.class)
-        .hasMessageContaining("DATA:WRITE");
+        .hasMessageContaining("[data]:[write]:[region2]");
 
-    assertThatThrownBy(() -> bean.processCommand("get --key=key1 --region=region2")).isInstanceOf(GemFireSecurityException.class);
+    assertThatThrownBy(() -> bean.processCommand("get --key=key1 --region=region2")).isInstanceOf(GemFireSecurityException.class)
+        .hasMessageContaining("[data]:[read]:[region2]");
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
index f248736..05d3e3d 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/DiskStoreMXBeanSecurityJUnitTest.java
@@ -69,15 +69,15 @@ public class DiskStoreMXBeanSecurityJUnitTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.flush()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.forceCompaction()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.forceRoll()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.getCompactionThreshold()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getDiskDirectories()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getDiskReadsRate()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isAutoCompact()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isForceCompactionAllowed()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.setDiskUsageCriticalPercentage(0.5f)).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.setDiskUsageWarningPercentage(0.5f)).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.flush()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.forceCompaction()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.forceRoll()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.getCompactionThreshold()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getDiskDirectories()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getDiskReadsRate()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.isAutoCompact()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.isForceCompactionAllowed()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.setDiskUsageCriticalPercentage(0.5f)).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.setDiskUsageWarningPercentage(0.5f)).hasMessageContaining(TestCommand.dataManage.toString());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewayReceiverMBeanSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewayReceiverMBeanSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewayReceiverMBeanSecurityTest.java
index b28069f..6c97694 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewayReceiverMBeanSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewayReceiverMBeanSecurityTest.java
@@ -16,10 +16,16 @@
  */
 package com.gemstone.gemfire.management.internal.security;
 
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import javax.management.ObjectName;
+
 import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.management.GatewayReceiverMXBean;
 import com.gemstone.gemfire.management.ManagementService;
 import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -28,11 +34,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import javax.management.ObjectName;
-
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.Mockito.mock;
-
 @Category(IntegrationTest.class)
 public class GatewayReceiverMBeanSecurityTest {
   private static int jmxManagerPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
@@ -81,9 +82,9 @@ public class GatewayReceiverMBeanSecurityTest {
   @Test
   @JMXConnectionConfiguration(user = "data-user", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.getTotalConnectionsTimedOut()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.start()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.stop()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.getTotalConnectionsTimedOut()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.start()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.stop()).hasMessageContaining(TestCommand.dataManage.toString());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7c38f0d8/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
index 3a9412d..4806464 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/security/GatewaySenderMBeanSecurityTest.java
@@ -88,18 +88,18 @@ public class GatewaySenderMBeanSecurityTest {
   @Test
   @JMXConnectionConfiguration(user = "stranger", password = "1234567")
   public void testNoAccess() throws Exception {
-    assertThatThrownBy(() -> bean.getAlertThreshold()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getAverageDistributionTimePerBatch()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getBatchSize()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getMaximumQueueMemory()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.getOrderPolicy()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isBatchConflationEnabled()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.isManualStart()).hasMessageContaining("CLUSTER:READ");
-    assertThatThrownBy(() -> bean.pause()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.rebalance()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.resume()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.start()).hasMessageContaining("DATA:MANAGE");
-    assertThatThrownBy(() -> bean.stop()).hasMessageContaining("DATA:MANAGE");
+    assertThatThrownBy(() -> bean.getAlertThreshold()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getAverageDistributionTimePerBatch()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getBatchSize()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getMaximumQueueMemory()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.getOrderPolicy()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.isBatchConflationEnabled()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.isManualStart()).hasMessageContaining(TestCommand.clusterRead.toString());
+    assertThatThrownBy(() -> bean.pause()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.rebalance()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.resume()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.start()).hasMessageContaining(TestCommand.dataManage.toString());
+    assertThatThrownBy(() -> bean.stop()).hasMessageContaining(TestCommand.dataManage.toString());
   }
 
 }


[31/50] [abbrv] incubator-geode git commit: GEODE-1323: Extend PerTestClassLoaderRunner to work with Rules

Posted by kl...@apache.org.
GEODE-1323: Extend PerTestClassLoaderRunner to work with Rules


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

Branch: refs/heads/feature/GEODE-1255
Commit: a20efb927f29512677d4191094aa3d8445549225
Parents: bcae906
Author: Jens Deppe <jd...@pivotal.io>
Authored: Fri Apr 29 09:26:53 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Fri Apr 29 10:41:49 2016 -0700

----------------------------------------------------------------------
 .../session/junit/PerTestClassLoaderRunner.java | 136 ++++---------------
 1 file changed, 28 insertions(+), 108 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a20efb92/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
----------------------------------------------------------------------
diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
index 3e5c998..dda5307 100644
--- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
+++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/PerTestClassLoaderRunner.java
@@ -36,9 +36,12 @@ package com.gemstone.gemfire.modules.session.junit;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.internal.runners.statements.Fail;
 import org.junit.internal.runners.statements.RunAfters;
 import org.junit.internal.runners.statements.RunBefores;
+import org.junit.rules.MethodRule;
+import org.junit.rules.TestRule;
 import org.junit.runners.model.FrameworkMethod;
 import org.junit.runners.model.InitializationError;
 import org.junit.runners.model.Statement;
@@ -65,6 +68,9 @@ public class PerTestClassLoaderRunner extends NamedRunner {
   private TestClass testClassFromClassLoader;
   private Object beforeFromClassLoader;
   private Object afterFromClassLoader;
+  private Object ruleFromClassLoader;
+  private Object testRuleFromClassLoader;
+  private Object methodRuleFromClassLoader;
 
   /**
    * Instantiates a new test per class loader runner.
@@ -117,6 +123,9 @@ public class PerTestClassLoaderRunner extends NamedRunner {
     // See withAfters and withBefores for the reason.
     beforeFromClassLoader = classLoader.loadClass(Before.class.getName());
     afterFromClassLoader = classLoader.loadClass(After.class.getName());
+    ruleFromClassLoader = classLoader.loadClass(Rule.class.getName());
+    testRuleFromClassLoader = classLoader.loadClass(TestRule.class.getName());
+    methodRuleFromClassLoader = classLoader.loadClass(MethodRule.class.getName());
   }
 
   @Override
@@ -170,114 +179,25 @@ public class PerTestClassLoaderRunner extends NamedRunner {
     return new RunBefores(statement, befores, target);
   }
 
-//    /**
-//     * Gets the class path. This value is cached in a static variable for performance reasons.
-//     *
-//     * @return the class path
-//     */
-//    private static String getClassPath()
-//    {
-//        if (classPathDetermined)
-//        {
-//            return classPath;
-//        }
-//
-//        classPathDetermined = true;
-//        // running from maven, we have the classpath in this property.
-//        classPath = System.getProperty("surefire.test.class.path");
-//        if (classPath != null)
-//        {
-//            return classPath;
-//        }
-//
-//        // For a multi module project, running it from the top we have to find it using another way.
-//        // We also need to set useSystemClassLoader=true in the POM so that we gets a jar with the classpath in it.
-//        String booterClassPath = System.getProperty("java.class.path");
-//        Vector<String> pathItems = null;
-//        if (booterClassPath != null)
-//        {
-//            pathItems = scanPath(booterClassPath);
-//        }
-//        // Do we have just 1 entry as classpath which is a jar?
-//        if (pathItems != null && pathItems.size() == 1
-//                && isJar((String) pathItems.get(0)))
-//        {
-//            classPath = loadJarManifestClassPath((String) pathItems.get(0),
-//                    "META-INF/MANIFEST.MF");
-//        }
-//        return classPath;
-//
-//    }
+  @Override
+  protected List<MethodRule> rules(Object target) {
+    List<MethodRule> result = testClassFromClassLoader.getAnnotatedMethodValues(target,
+        (Class<? extends Annotation>) ruleFromClassLoader, (Class) methodRuleFromClassLoader);
+
+    result.addAll(testClassFromClassLoader.getAnnotatedFieldValues(target,
+        (Class<? extends Annotation>) ruleFromClassLoader, (Class) methodRuleFromClassLoader));
 
-//    /**
-//     * Load jar manifest class path.
-//     *
-//     * @param path the path
-//     * @param fileName the file name
-//     *
-//     * @return the string
-//     */
-//    private static String loadJarManifestClassPath(String path, String fileName)
-//    {
-//        File archive = new File(path);
-//        if (!archive.exists()) {
-//            return null;
-//        }
-//        ZipFile zipFile = null;
-//
-//        try {
-//            zipFile = new ZipFile(archive);
-//        } catch (IOException io) {
-//            return null;
-//        }
-//
-//        ZipEntry entry = zipFile.getEntry(fileName);
-//        if (entry == null) {
-//            return null;
-//        } try {
-//            Manifest mf = new Manifest();
-//            mf.read(zipFile.getInputStream(entry));
-//
-//            return mf.getMainAttributes().getValue(Attributes.Name.CLASS_PATH)
-//                    .replaceAll(" ", System.getProperty("path.separator"))
-//                    .replaceAll("file:/", "");
-//        } catch (MalformedURLException e) {
-//            LOGGER.throwing("ClassLoaderTestSuite", "loadJarManifestClassPath", e);
-//        } catch (IOException e) {
-//            LOGGER.throwing("ClassLoaderTestSuite", "loadJarManifestClassPath", e);
-//        }
-//        return null;
-//    }
-//
-//    /**
-//     * Checks if is jar.
-//     *
-//     * @param pathEntry the path entry
-//     *
-//     * @return true, if is jar
-//     */
-//    private static boolean isJar(String pathEntry)
-//    {
-//        return pathEntry.endsWith(".jar") || pathEntry.endsWith(".zip");
-//    }
-//
-//    /**
-//     * Scan path for all directories.
-//     *
-//     * @param classPath the class path
-//     *
-//     * @return the vector< string>
-//     */
-//    private static Vector<String> scanPath(String classPath)
-//    {
-//        String separator = System.getProperty("path.separator");
-//        Vector<String> pathItems = new Vector<String>(10);
-//        StringTokenizer st = new StringTokenizer(classPath, separator);
-//        while (st.hasMoreTokens())
-//        {
-//            pathItems.addElement(st.nextToken());
-//        }
-//        return pathItems;
-//    }
+    return result;
+  }
 
+  @Override
+  protected List<TestRule> getTestRules(Object target) {
+    List<TestRule> result = testClassFromClassLoader.getAnnotatedMethodValues(target,
+        (Class<? extends Annotation>) ruleFromClassLoader, (Class) testRuleFromClassLoader);
+
+    result.addAll(testClassFromClassLoader.getAnnotatedFieldValues(target,
+        (Class<? extends Annotation>) ruleFromClassLoader, (Class) testRuleFromClassLoader));
+
+    return result;
+  }
 }