GEODE-17: WIP integrating Pulse with new security

- After refactoring some Pulse test code, various tests are broken as
  they seem to depend on prior test state.


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

Branch: refs/heads/feature/GEODE-17-2
Commit: fed950025ed1008bb0d65f433a94bf39360746bb
Parents: da7a76d
Author: Jens Deppe <[email protected]>
Authored: Mon Mar 21 13:37:34 2016 -0700
Committer: Jens Deppe <[email protected]>
Committed: Mon Mar 21 13:37:34 2016 -0700

----------------------------------------------------------------------
 .../cache/operations/OperationContext.java      |    2 +
 .../internal/security/MBeanServerWrapper.java   |   13 +-
 .../security/ManagementInterceptor.java         |    4 +-
 .../management/internal/security/Resource.java  |    1 +
 .../internal/security/ResourceConstants.java    |    2 -
 .../gemfire/security/AccessControl.java         |   12 +-
 .../gemfire/security/Authenticator.java         |   17 +-
 geode-pulse/build.gradle                        |    1 +
 .../tools/pulse/internal/data/Cluster.java      |    4 +-
 .../pulse/internal/data/JMXDataUpdater.java     |   53 +-
 .../pulse/internal/data/PulseConstants.java     |    5 +-
 .../pulse/internal/log/PulseLogWriter.java      |    4 -
 .../security/GemFireAuthentication.java         |    9 +-
 .../security/GemFireAuthenticationProvider.java |   82 +-
 .../tools/pulse/testbed/driver/PulseUITest.java |    2 +-
 .../pulse/tests/DataBrowserResultLoader.java    |   14 +-
 .../tools/pulse/tests/PulseAbstractTest.java    | 1038 ++++++++++++++++++
 .../tools/pulse/tests/PulseAuthTest.java        |   33 +
 .../tools/pulse/tests/PulseAutomatedTest.java   |   16 +-
 .../tools/pulse/tests/PulseBaseTest.java        |    4 +-
 .../tools/pulse/tests/PulseNoAuthTest.java      |   33 +
 .../gemfire/tools/pulse/tests/PulseTest.java    | 1038 ------------------
 .../gemfire/tools/pulse/tests/Server.java       |  130 +--
 geode-pulse/src/test/resources/pulse-auth.json  |   21 +
 24 files changed, 1293 insertions(+), 1245 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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 f900796..3bd9bf6 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
@@ -82,6 +82,8 @@ public abstract class OperationContext {
     NETSTAT,
     PAUSE,
     PROCESS_COMMAND,
+    PULSE_DASHBOARD,
+    PULSE_DATABROWSER,
     PUT,
     PUTALL,
     QUERY,

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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 bbf81d1..dfcae22 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
@@ -160,12 +160,17 @@ public class MBeanServerWrapper implements 
MBeanServerForwarder {
   }
 
   @Override
-  public Object getAttribute(ObjectName name, String attribute) throws 
MBeanException, AttributeNotFoundException,
-      InstanceNotFoundException, ReflectionException {
+  public Object getAttribute(ObjectName name, String attribute) throws 
MBeanException, InstanceNotFoundException,
+      ReflectionException {
     ResourceOperationContext ctx = getOperationContext(name, attribute, false);
     doAuthorization(ctx);
-    Object result = mbs.getAttribute(name, attribute);
-    if(ctx != null) {
+    Object result;
+    try {
+      result = mbs.getAttribute(name, attribute);
+    } catch (AttributeNotFoundException nex) {
+      return null;
+    }
+    if (ctx != null) {
       ctx.setPostOperationResult(result);
     }
     doAuthorizationPost(ctx);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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
index 446ec10..639677b 100644
--- 
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
@@ -57,7 +57,7 @@ import static 
com.gemstone.gemfire.management.internal.security.ResourceConstant
  * @since 9.0
  *
  */
-public class ManagementInterceptor implements JMXAuthenticator{
+public class ManagementInterceptor implements JMXAuthenticator {
 
   // FIXME: Merged from GEODE-17. Are they necessary?
        public static final String USER_NAME = "security-username";
@@ -163,7 +163,7 @@ public class ManagementInterceptor implements 
JMXAuthenticator{
     Set<JMXPrincipal> principals = subject.getPrincipals(JMXPrincipal.class);
 
     if (principals == null || principals.isEmpty()) {
-      throw new SecurityException(ACCESS_DENIED_MESSAGE + ": No princial 
found.");
+      throw new SecurityException(ACCESS_DENIED_MESSAGE + ": No principal 
found.");
                }
 
                Principal principal = principals.iterator().next();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
index 51018cd..4c47e64 100644
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/Resource.java
@@ -35,6 +35,7 @@ public enum Resource {
   MANAGER,
   MEMBER,
   PDX,
+  PULSE,
   QUERY,
   REGION
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
 
b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
index bfd8d11..5e072d9 100644
--- 
a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
+++ 
b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/security/ResourceConstants.java
@@ -109,8 +109,6 @@ public class ResourceConstants {
 
   public static final String PULSE_DASHBOARD = "PULSE_DASHBOARD";
   public static final String PULSE_DATABROWSER = "PULSE_DATABROWSER";
-  public static final String PULSE_ADMIN_V1 = "PULSE_ADMIN_V1";
-  public static final String PULSE_WEBGFSH = "PULSE_WEBGFSH";
 
   public static final String DATA_READ = "DATA_READ";
   public static final String DATA_WRITE = "DATA_WRITE";

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java 
b/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java
index 349ba76..8ecc9c8 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java
@@ -67,11 +67,15 @@ public interface AccessControl extends CacheCallback {
    *                 operations on that connection will throw
    *                 <code>NotAuthorizedException</code>
    */
-  public void init(Principal principal, DistributedMember remoteMember,
+  void init(Principal principal, DistributedMember remoteMember,
       Cache cache) throws NotAuthorizedException;
 
-  default public void init(Principal principal, DistributedMember 
remoteMember) throws NotAuthorizedException {
-    init(principal, remoteMember, CacheFactory.getAnyInstance());
+  default void init(Principal principal, DistributedMember remoteMember) 
throws NotAuthorizedException {
+    init(principal, remoteMember, null);
+  }
+
+  default void init(Principal principal) throws NotAuthorizedException {
+    init(principal, null, null);
   }
 
   /**
@@ -96,6 +100,6 @@ public interface AccessControl extends CacheCallback {
    * @return true if the operation is authorized and false otherwise
    * 
    */
-  public boolean authorizeOperation(String regionName, OperationContext 
context);
+  boolean authorizeOperation(String regionName, OperationContext context);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java
----------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java 
b/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java
index 4f9b6f2..796733f 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java
@@ -18,9 +18,7 @@
 package com.gemstone.gemfire.security;
 
 import com.gemstone.gemfire.LogWriter;
-import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.CacheCallback;
-import com.gemstone.gemfire.cache.CacheFactory;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.DistributedSystem;
 
@@ -62,12 +60,11 @@ public interface Authenticator extends CacheCallback {
    * @throws AuthenticationFailedException
    *                 if some exception occurs during the initialization
    */
-  public void init(Properties securityProps, LogWriter systemLogger,
+  void init(Properties securityProps, LogWriter systemLogger,
       LogWriter securityLogger) throws AuthenticationFailedException;
 
-  default public void init(Properties securityProps)  throws 
AuthenticationFailedException{
-    Cache cache = CacheFactory.getAnyInstance();
-    init(securityProps, cache.getLogger(), cache.getSecurityLogger());
+  default void init(Properties securityProps)  throws 
AuthenticationFailedException{
+    init(securityProps, null, null);
   }
 
   /**
@@ -88,13 +85,11 @@ public interface Authenticator extends CacheCallback {
    * @throws AuthenticationFailedException
    *                 If the authentication of the client/peer fails.
    */
-  public Principal authenticate(Properties props, DistributedMember member)
+  Principal authenticate(Properties props, DistributedMember member)
       throws AuthenticationFailedException;
 
-  default public Principal authenticate(Properties props)
-      throws AuthenticationFailedException{
-    DistributedMember member = 
CacheFactory.getAnyInstance().getDistributedSystem().getDistributedMember();
-    return authenticate(props, member);
+  default Principal authenticate(Properties props) throws 
AuthenticationFailedException{
+    return authenticate(props, null);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index 6dc7b02..b6c397a 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -59,6 +59,7 @@ dependencies {
 
   testCompile project(':geode-junit')
   testCompile project(':geode-core')
+  testCompile project(path: ':geode-core', configuration: 'testOutput')
 
   testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:' + 
project.'selenium.version'
   testCompile 'org.seleniumhq.selenium:selenium-api:' + 
project.'selenium.version'

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
 
b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
index ce075bd..49ec7b3 100644
--- 
a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
+++ 
b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java
@@ -2386,7 +2386,7 @@ public class Cluster extends Thread {
         }
       } catch (Exception e) {
         if (LOGGER.infoEnabled()) {
-          LOGGER.info("Exception Occured while updating cluster data : " + 
e.getMessage());
+          LOGGER.info("Exception Occurred while updating cluster data : " + 
e.getMessage());
         }
       }
 
@@ -2394,7 +2394,7 @@ public class Cluster extends Thread {
         Thread.sleep(POLL_INTERVAL);
       } catch (InterruptedException e) {
         if (LOGGER.infoEnabled()) {
-          LOGGER.info("InterruptedException Occured : " + e.getMessage());
+          LOGGER.info("InterruptedException Occurred : " + e.getMessage());
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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 bcd48ed..87b6e9c 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
@@ -1928,31 +1928,16 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
     }
   }
 
-  // /**
-  // * function used for creating member key with a combination
-  // * of member id and and member name
-  // * in key we are replacing ":" with "-" for both member id and name
-  // * @param id
-  // * @param name
-  // * @return
-  // */
-  // private String getMemberNameOrId(String id, String name){
-  // String key;
-  // if (id != null) {
-  // id = id.replace(":", "-");
-  // }
-  // if (name != null) {
-  // name = name.replace(":", "-");
-  // }
-  // key = id+name;
-  // return key;
-  // }
   /**
    * function used to handle Float data type if the value for mbean for an
    * attribute is null then return 0.0 as default value else return the
    * attribute value
    */
   private Float getFloatAttribute(Object object, String name) {
+    if (object == null) {
+      return Float.valueOf(0.0f);
+    }
+
     try {
       if (!(object.getClass().equals(Float.class))) {
         if (LOGGER.infoEnabled()) {
@@ -1967,7 +1952,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       }
     } catch (Exception e) {
       if (LOGGER.infoEnabled()) {
-        LOGGER.info("Exception Occured: " + e.getMessage());
+        LOGGER.info("Exception occurred: " + e.getMessage());
       }
       return Float.valueOf(0.0f);
     }
@@ -1979,6 +1964,10 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
    * value
    */
   private Integer getIntegerAttribute(Object object, String name) {
+    if (object == null) {
+      return Integer.valueOf(0);
+    }
+
     try {
       if (!(object.getClass().equals(Integer.class))) {
         if (LOGGER.infoEnabled()) {
@@ -1993,7 +1982,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       }
     } catch (Exception e) {
       if (LOGGER.infoEnabled()) {
-        LOGGER.info("Exception Occured: " + e.getMessage());
+        LOGGER.info("Exception occurred: " + e.getMessage());
       }
       return Integer.valueOf(0);
     }
@@ -2005,6 +1994,10 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
    * value
    */
   private Long getLongAttribute(Object object, String name) {
+    if (object == null) {
+      return Long.valueOf(0);
+    }
+
     try {
       if (!(object.getClass().equals(Long.class))) {
         if (LOGGER.infoEnabled()) {
@@ -2019,7 +2012,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       }
     } catch (Exception e) {
       if (LOGGER.infoEnabled()) {
-        LOGGER.info("Exception Occured: " + e.getMessage());
+        LOGGER.info("Exception occurred: " + e.getMessage());
       }
       return Long.valueOf(0);
     }
@@ -2032,6 +2025,10 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
    * the attribute value
    */
   private String getStringAttribute(Object object, String name) {
+    if (object == null) {
+      return "";
+    }
+
     try {
       if (!(object.getClass().equals(String.class))) {
         if (LOGGER.infoEnabled()) {
@@ -2046,7 +2043,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       }
     } catch (Exception e) {
       if (LOGGER.infoEnabled()) {
-        LOGGER.info("Exception Occured: " + e.getMessage());
+        LOGGER.info("Exception occurred: " + e.getMessage());
       }
       return "";
     }
@@ -2058,6 +2055,10 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
    * attribute value
    */
   private Boolean getBooleanAttribute(Object object, String name) {
+    if (object == null) {
+      return Boolean.FALSE;
+    }
+
     try {
       if (!(object.getClass().equals(Boolean.class))) {
         if (LOGGER.infoEnabled()) {
@@ -2084,6 +2085,10 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
    * attribute value
    */
   private Double getDoubleAttribute(Object object, String name) {
+    if (object == null) {
+      return Double.valueOf(0);
+    }
+
     try {
       if (!(object.getClass().equals(Double.class))) {
         if (LOGGER.infoEnabled()) {
@@ -2098,7 +2103,7 @@ public class JMXDataUpdater implements IClusterUpdater, 
NotificationListener {
       }
     } catch (Exception e) {
       if (LOGGER.infoEnabled()) {
-        LOGGER.info("Exception Occured: " + e.getMessage());
+        LOGGER.info("Exception occurred: " + e.getMessage());
       }
       return Double.valueOf(0);
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConstants.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConstants.java
 
b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConstants.java
index b06d2e5..e5e3b66 100644
--- 
a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConstants.java
+++ 
b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConstants.java
@@ -415,10 +415,7 @@ public class PulseConstants {
   
   public static final String PULSE_ROLES[] = {
     "PULSE_DASHBOARD", 
-    "PULSE_DATABROWSER", 
-    "PULSE_WEBGFSH", 
-    "PULSE_ADMIN_V1",
-    "PULSE_ADMIN_V2"
+    "PULSE_DATABROWSER"
   };
 
   // SSL Related attributes

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
 
b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
index 9c7358a..ee1dd86 100644
--- 
a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
+++ 
b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java
@@ -74,10 +74,6 @@ public class PulseLogWriter implements LogWriter {
         fileHandler.setFormatter(messageformatter);
       }
 
-      // Remove any existing handlers
-      // e.g. consoleHandler
-      logger.setUseParentHandlers(false);
-
       // Add File Handler to logger object
       logger.addHandler(fileHandler);
     } catch (SecurityException e) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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 99dcc15..308776b 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
@@ -34,6 +34,7 @@ import javax.management.remote.JMXConnector;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Set;
 
 /**
  * Spring security authentication object for GemFire
@@ -121,12 +122,12 @@ public class GemFireAuthentication extends 
UsernamePasswordAuthenticationToken {
                ObjectName name;
                try {
                        name = new 
ObjectName(PulseConstants.OBJECT_NAME_ACCESSCONTROL_MBEAN);
-                       MBeanServerConnection mbeanServer = 
jmxc.getMBeanServerConnection();                    
-                       ArrayList<GrantedAuthority> authorities = new 
ArrayList<GrantedAuthority>();
+                       MBeanServerConnection mbeanServer = 
jmxc.getMBeanServerConnection();
+                       ArrayList<GrantedAuthority> authorities = new 
ArrayList<>();
                        authorities.add(new 
SimpleGrantedAuthority("ROLE_USER"));
                        for(String role : PulseConstants.PULSE_ROLES){
-                               Object[] params = new Object[] {role};
-                               String[] signature = new String[] 
{String.class.getCanonicalName()};
+                               Object[] params = new Object[] {"PULSE", role};
+                               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

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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 d98bba8..723f093 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
@@ -30,56 +30,52 @@ 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
+ * 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 {
-       
-  private final static PulseLogWriter LOGGER = PulseLogWriter.getLogger();     
 
-       public GemFireAuthenticationProvider(){
-               System.out.println("here");
-       }
-       
-       @Override
-       public Authentication authenticate(Authentication authentication)
-                       throws AuthenticationException {
-                         
-               if (authentication instanceof GemFireAuthentication) {
-                       GemFireAuthentication gemAuth = (GemFireAuthentication) 
authentication;
-                       LOGGER.fine("GemAuthentication is connected? = "
-                                       + gemAuth.getJmxc());
-                       if(gemAuth.getJmxc()!=null && gemAuth.isAuthenticated())
-                               return gemAuth;
-               }
-               
-               String name = authentication.getName();
-               String password = authentication.getCredentials().toString();
+  private final static PulseLogWriter LOGGER = PulseLogWriter.getLogger();
 
-               try {
-                 LOGGER.fine("Connecting to GemFire with user=" + name);
-                 JMXConnector jmxc = 
Repository.get().getCluster().connectToGemFire(name, password);
-                 if(jmxc!=null) {
-                       Collection<GrantedAuthority> list = 
GemFireAuthentication.populateAuthorities(jmxc);
-                       GemFireAuthentication auth = new GemFireAuthentication(
-                                       authentication.getPrincipal(),
-                                       authentication.getCredentials(), list, 
jmxc);
-                       LOGGER.fine("For user " + name + " authList="+ list);
-                       return auth;
-                 } else 
-                   throw new AuthenticationServiceException("JMX Connection 
unavailable");
-               } catch (Exception e) {
-                 throw new BadCredentialsException("Error connecting to 
GemFire JMX Server", e);                       
-               }
-       }
+  public GemFireAuthenticationProvider() {
+    System.out.println("here");
+  }
 
-       @Override
-       public boolean supports(Class<?> authentication) {
-               return 
authentication.equals(UsernamePasswordAuthenticationToken.class);
-       }       
+  @Override
+  public Authentication authenticate(Authentication authentication) throws 
AuthenticationException {
+
+    if (authentication instanceof GemFireAuthentication) {
+      GemFireAuthentication gemAuth = (GemFireAuthentication) authentication;
+      LOGGER.fine("GemAuthentication is connected? = " + gemAuth.getJmxc());
+      if (gemAuth.getJmxc() != null && gemAuth.isAuthenticated()) return 
gemAuth;
+    }
+
+    String name = authentication.getName();
+    String password = authentication.getCredentials().toString();
+
+    try {
+      LOGGER.fine("Connecting to GemFire with user=" + name);
+      JMXConnector jmxc = Repository.get().getCluster().connectToGemFire(name, 
password);
+      if (jmxc != null) {
+        Collection<GrantedAuthority> list = 
GemFireAuthentication.populateAuthorities(jmxc);
+        GemFireAuthentication auth = new 
GemFireAuthentication(authentication.getPrincipal(),
+            authentication.getCredentials(), list, jmxc);
+        LOGGER.fine("For user " + name + " authList=" + list);
+        return auth;
+      } else {
+        throw new AuthenticationServiceException("JMX Connection unavailable");
+      }
+    } catch (Exception e) {
+      throw new BadCredentialsException("Error connecting to GemFire JMX 
Server", e);
+    }
+  }
+
+  @Override
+  public boolean supports(Class<?> authentication) {
+    return authentication.equals(UsernamePasswordAuthenticationToken.class);
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
index 452a536..645629f 100644
--- 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java
@@ -40,7 +40,7 @@ import org.openqa.selenium.support.ui.WebDriverWait;
 import java.net.InetAddress;
 import java.util.List;
 
-import static com.vmware.gemfire.tools.pulse.tests.PulseTest.getPulseWarPath;
+import static 
com.vmware.gemfire.tools.pulse.tests.PulseAbstractTest.getPulseWarPath;
 
 /**
  * @author Sushant Rawal

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/DataBrowserResultLoader.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/DataBrowserResultLoader.java
 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/DataBrowserResultLoader.java
index 3583bba..e595ef2 100644
--- 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/DataBrowserResultLoader.java
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/DataBrowserResultLoader.java
@@ -44,19 +44,19 @@ public class DataBrowserResultLoader {
     try {
       ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
 
-      if (queryString.equals(PulseTest.QUERY_TYPE_ONE)) {
+      if (queryString.equals(PulseAbstractTest.QUERY_TYPE_ONE)) {
         url = classLoader.getResource("testQueryResultClusterSmall.txt");
-      } else if (queryString.equals(PulseTest.QUERY_TYPE_TWO)) {
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_TWO)) {
         url = classLoader.getResource("testQueryResultSmall.txt");
-      } else if (queryString.equals(PulseTest.QUERY_TYPE_THREE)) {
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_THREE)) {
         url = classLoader.getResource("testQueryResult.txt");
-      } else if (queryString.equals(PulseTest.QUERY_TYPE_FOUR)) {
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_FOUR)) {
         url = classLoader.getResource("testQueryResultWithStructSmall.txt");
-      } else if (queryString.equals(PulseTest.QUERY_TYPE_FIVE)) {
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_FIVE)) {
         url = classLoader.getResource("testQueryResultClusterWithStruct.txt");
-      } else if (queryString.equals(PulseTest.QUERY_TYPE_SIX)) {
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_SIX)) {
         url = classLoader.getResource("testQueryResultHashMapSmall.txt");
-      } else if (queryString.equals(PulseTest.QUERY_TYPE_SEVENE)) {
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_SEVENE)) {
         url = classLoader.getResource("testQueryResult1000.txt");
       } else {
         url = classLoader.getResource("testQueryResult.txt");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/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
new file mode 100644
index 0000000..3c0f866
--- /dev/null
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAbstractTest.java
@@ -0,0 +1,1038 @@
+/*
+ *
+ * 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.vmware.gemfire.tools.pulse.tests;
+
+import com.gemstone.gemfire.management.internal.JettyHelper;
+import com.gemstone.gemfire.test.junit.categories.UITest;
+import junit.framework.Assert;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runners.MethodSorters;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.interactions.Actions;
+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;
+
+//@Category(UITest.class)
+//@FixMethodOrder(MethodSorters.JVM)
+public abstract class PulseAbstractTest extends PulseBaseTest {
+  private static String jmxPropertiesFile;
+  private static String path;
+
+  private static org.eclipse.jetty.server.Server jetty = null;
+  private static Server server = null;
+  private static String pulseURL = null;
+  public static WebDriver driver;
+  private static final String userName = "admin";
+  private static final String pasword = "admin";
+
+  /* Constants for executing Data Browser queries */
+  public static final String QUERY_TYPE_ONE = "query1";
+  public static final String QUERY_TYPE_TWO = "query2";
+  public static final String QUERY_TYPE_THREE = "query3";
+  public static final String QUERY_TYPE_FOUR = "query4";
+  public static final String QUERY_TYPE_FIVE = "query5";
+  public static final String QUERY_TYPE_SIX = "query6";
+  public static final String QUERY_TYPE_SEVENE = "query7";
+
+  private static final String DATA_VIEW_LABEL = "Data View";
+  private static final String CLUSTER_VIEW_MEMBERS_ID = 
"clusterTotalMembersText";
+  private static final String CLUSTER_VIEW_SERVERS_ID = "clusterServersText";
+  private static final String CLUSTER_VIEW_LOCATORS_ID = "clusterLocatorsText";
+  private static final String CLUSTER_VIEW_REGIONS_ID = 
"clusterTotalRegionsText";
+  private static final String CLUSTER_CLIENTS_ID = "clusterClientsText";
+  private static final String CLUSTER_FUNCTIONS_ID = "clusterFunctions";
+  private static final String CLUSTER_UNIQUECQS_ID = "clusterUniqueCQs";
+  private static final String CLUSTER_SUBSCRIPTION_ID = 
"clusterSubscriptionsText";
+  private static final String CLUSTER_MEMORY_USAGE_ID = "currentMemoryUsage";
+  private static final String CLUSTER_THROUGHPUT_WRITES_ID = 
"currentThroughputWrites";
+  private static final String CLUSTER_GCPAUSES_ID = "currentGCPauses";
+  private static final String CLUSTER_WRITEPERSEC_ID = "writePerSec";
+  private static final String CLUSTER_READPERSEC_ID = "readPerSec";
+  private static final String CLUSTER_QUERIESPERSEC_ID = "queriesPerSec";
+  private static final String CLUSTER_PROCEDURE_ID = "clusterTxnCommittedText";
+  private static final String CLUSTER_TXNCOMMITTED_ID = 
"clusterTxnCommittedText";
+  private static final String CLUSTER_TXNROLLBACK_ID = 
"clusterTxnRollbackText";
+  private static final String MEMBER_VIEW_MEMBERNAME_ID = "memberName";
+  private static final String MEMBER_VIEW_REGION_ID = "memberRegionsCount";
+  private static final String MEMBER_VIEW_THREAD_ID = "threads";
+  private static final String MEMBER_VIEW_SOCKETS_ID = "sockets";
+  private static final String MEMBER_VIEW_LOADAVG_ID = "loadAverage";
+  private static final String MEMBER_VIEW_LISTENINGPORT_ID = 
"receiverListeningPort";
+  private static final String MEMBER_VIEW_LINKTHROUGHPUT_ID = 
"receiverLinkThroughput";
+  private static final String MEMBER_VIEW_AVGBATCHLATENCY_ID = 
"receiverAvgBatchLatency";
+  private static final String MEMBER_VIEW_HEAPUSAGE_ID = "memberHeapUsageAvg";
+  private static final String MEMBER_VIEW_JVMPAUSES_ID = "memberGcPausesAvg";
+  private static final String MEMBER_VIEW_CPUUSAGE_ID = "memberCPUUsageValue";
+  private static final String MEMBER_VIEW_READPERSEC_ID = 
"memberGetsPerSecValue";
+  private static final String MEMBER_VIEW_WRITEPERSEC_ID = 
"memberPutsPerSecValue";
+  private static final String MEMBER_VIEW_OFFHEAPFREESIZE_ID = 
"offHeapFreeSize";
+  private static final String MEMBER_VIEW_OFFHEAPUSEDSIZE_ID = 
"offHeapUsedSize";
+  private static final String MEMBER_VIEW_CLIENTS_ID = "clusterClientsText";
+
+  private static final String REGION_NAME_LABEL = "regionName";
+  private static final String REGION_PATH_LABEL = "regionPath";
+  private static final String REGION_TYPE_LABEL = "regionType";
+  private static final String DATA_VIEW_WRITEPERSEC = "regionWrites";
+  private static final String DATA_VIEW_READPERSEC = "regionReads";
+  private static final String DATA_VIEW_EMPTYNODES = "regionEmptyNodes";
+  private static final String DATA_VIEW_ENTRYCOUNT = "regionEntryCount";
+  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";
+  private static final String DATA_BROWSER_REGIONName3 = "treeDemo_3_span";
+  private static final String DATA_BROWSER_REGION1_CHECKBOX = 
"treeDemo_1_check";
+  private static final String DATA_BROWSER_REGION2_CHECKBOX = 
"treeDemo_2_check";
+  private static final String DATA_BROWSER_REGION3_CHECKBOX = 
"treeDemo_3_check";
+  private static final String DATA_BROWSER_COLOCATED_REGION = "Colocated 
Regions";
+  private static final String DATA_BROWSER_COLOCATED_REGION_NAME1 = 
"treeDemo_1_span";
+  private static final String DATA_BROWSER_COLOCATED_REGION_NAME2 = 
"treeDemo_2_span";
+  private static final String DATA_BROWSER_COLOCATED_REGION_NAME3 = 
"treeDemo_3_span";
+
+  private static final String QUERY_STATISTICS_LABEL = "Query Statistics";
+  private static final String CLUSTER_VIEW_LABEL = "Cluster View";
+  private static final String CLUSTER_VIEW_GRID_ID = "default_treemap_button";
+  private static final String SERVER_GROUP_GRID_ID = 
"servergroups_treemap_button";
+  private static final String REDUNDANCY_GRID_ID = 
"redundancyzones_treemap_button";
+  private static final String MEMBER_DROPDOWN_ID = "Members";
+  private static final String DATA_DROPDOWN_ID = "Data";
+
+  public static void setUpServer(String jsonAuthFile) throws Exception {
+    System.setProperty("spring.profiles.active", 
"pulse.authentication.gemfire");
+
+    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();
+    int port = 8080;
+    String context = "/pulse";
+
+    jetty = JettyHelper.initJetty(host, port, false, false, null, null, null);
+    JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
+    jetty.start();
+
+    pulseURL = "http://"; + host + ":" + port + context;
+
+    Thread.sleep(5000); // wait till the container settles down
+
+    driver = new FirefoxDriver();
+    driver.manage().window().maximize();
+    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
+    driver.get(pulseURL);
+    WebElement userNameElement = driver.findElement(By.id("user_name"));
+    WebElement passwordElement = driver.findElement(By.id("user_password"));
+    userNameElement.sendKeys(userName);
+    passwordElement.sendKeys(pasword);
+    passwordElement.submit();
+
+    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"));
+          }
+        });
+    Assert.assertNotNull(userNameOnPulsePage);
+    driver.navigate().refresh();
+    Thread.sleep(7000);
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception {
+    driver.close();
+    jetty.stop();
+  }
+
+  public static String getPulseWarPath() throws Exception {
+    String warPath = null;
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    InputStream inputStream = 
classLoader.getResourceAsStream("GemFireVersion.properties");
+    Properties properties = new Properties();
+    properties.load(inputStream);
+    String version = properties.getProperty("Product-Version");
+    warPath = "geode-pulse-" + version + ".war";
+    String propFilePath = 
classLoader.getResource("GemFireVersion.properties").getPath();
+    warPath = propFilePath.substring(0, 
propFilePath.indexOf("generated-resources")) + "libs/" + warPath;
+    return warPath;
+  }
+
+  protected void searchByLinkAndClick(String linkText) {
+    WebElement element = By.linkText(linkText).findElement(driver);
+    Assert.assertNotNull(element);
+    element.click();
+  }
+
+  protected void searchByIdAndClick(String id) {
+    WebElement element = driver.findElement(By.id(id));
+    Assert.assertNotNull(element);
+    element.click();
+  }
+
+  protected void searchByClassAndClick(String Class) {
+    WebElement element = driver.findElement(By.className(Class));
+    Assert.assertNotNull(element);
+    element.click();
+  }
+
+  protected void searchByXPathAndClick(String xpath) {
+       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));
+          }
+        });
+    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));
+          }
+        });
+    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"));
+    Actions builder = new Actions(driver);
+    Actions movePicker = builder.dragAndDrop(pickerScroll, 
pickerScrollCorner); // pickerscroll
+                                                                               
 // is
+                                                                               
 // the
+                                                                               
 // webelement
+    movePicker.perform();
+  }
+
+  protected void scrollbarHorizontalRightScroll() {
+    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"));
+    WebElement pickerScrollCorner = driver.findElement(By
+        .className("jspCorner"));
+    Actions builder = new Actions(driver);
+    Actions movePicker = builder.dragAndDrop(pickerScroll, 
pickerScrollCorner); // pickerscroll
+                                                                               
 // is
+                                                                               
 // the
+                                                                               
 // webelement
+    movePicker.perform();
+  }
+
+  
+  
+  @Test
+  public void testClusterLocatorCount() throws IOException {
+       
searchByXPathAndClick(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+    String clusterLocators = driver
+        .findElement(By.id(CLUSTER_VIEW_LOCATORS_ID)).getText();
+   
+    String totallocators = 
JMXProperties.getInstance().getProperty("server.S1.locatorCount");  
+    Assert.assertEquals(totallocators, clusterLocators);
+  }
+
+ @Test
+  public void testClusterRegionCount() {
+    String clusterRegions = driver.findElement(By.id(CLUSTER_VIEW_REGIONS_ID))
+        .getText();
+    String totalregions = JMXProperties.getInstance().getProperty(
+        "server.S1.totalRegionCount");
+    Assert.assertEquals(totalregions, clusterRegions);
+  }
+
+ @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);
+  }
+
+ @Test
+  public void testClusterNumClient() {
+    String clusterClients = driver.findElement(By.id(CLUSTER_CLIENTS_ID))
+        .getText();
+    String totalclients = JMXProperties.getInstance().getProperty(
+        "server.S1.numClients");
+    Assert.assertEquals(totalclients, clusterClients);
+  }
+
+  @Test
+  public void testClusterNumRunningFunction() {
+    String clusterFunctions = driver.findElement(By.id(CLUSTER_FUNCTIONS_ID))
+        .getText();
+    String totalfunctions = JMXProperties.getInstance().getProperty(
+        "server.S1.numRunningFunctions");
+    Assert.assertEquals(totalfunctions, clusterFunctions);
+  }
+
+@Test
+  public void testClusterRegisteredCQCount() {
+    String clusterUniqueCQs = driver.findElement(By.id(CLUSTER_UNIQUECQS_ID))
+        .getText();
+    String totaluniqueCQs = JMXProperties.getInstance().getProperty(
+        "server.S1.registeredCQCount");
+    Assert.assertEquals(totaluniqueCQs, clusterUniqueCQs);
+  }
+
+ @Test
+  public void testClusterNumSubscriptions() {
+    String clusterSubscriptions = driver.findElement(
+        By.id(CLUSTER_SUBSCRIPTION_ID)).getText();
+    String totalSubscriptions = JMXProperties.getInstance().getProperty(
+        "server.S1.numSubscriptions");
+    Assert.assertEquals(totalSubscriptions, clusterSubscriptions);
+  }
+
+ @Test
+  public void testClusterJVMPausesWidget() {
+    String clusterJVMPauses = driver.findElement(By.id(CLUSTER_GCPAUSES_ID))
+        .getText();
+    String totalgcpauses = JMXProperties.getInstance().getProperty(
+        "server.S1.jvmPauses");
+    Assert.assertEquals(totalgcpauses, clusterJVMPauses);
+  }
+
+  @Test
+  public void testClusterAverageWritesWidget() {
+    String clusterWritePerSec = driver.findElement(
+        By.id(CLUSTER_WRITEPERSEC_ID)).getText();
+    String totalwritepersec = JMXProperties.getInstance().getProperty(
+        "server.S1.averageWrites");
+    Assert.assertEquals(totalwritepersec, clusterWritePerSec);
+  }
+
+  @Test
+  public void testClusterAverageReadsWidget() {
+    String clusterReadPerSec = driver.findElement(By.id(CLUSTER_READPERSEC_ID))
+        .getText();
+    String totalreadpersec = JMXProperties.getInstance().getProperty(
+        "server.S1.averageReads");
+    Assert.assertEquals(totalreadpersec, clusterReadPerSec);
+  }
+
+  @Test
+  public void testClusterQuerRequestRateWidget() {
+    String clusterQueriesPerSec = driver.findElement(
+        By.id(CLUSTER_QUERIESPERSEC_ID)).getText();
+    String totalqueriespersec = JMXProperties.getInstance().getProperty(
+        "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);
+         }      
+  }
+
+  @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);
+    }
+  }
+  
+
+  @Test
+  public void testClusterGridViewMemberHost() {
+         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 gridMemberHost = 
JMXProperties.getInstance().getProperty("member.M" + memberHostCount + ".host");
+      Assert.assertEquals(gridMemberHost, MemberHost);
+    }
+  }
+
+  @Test
+  public void testClusterGridViewHeapUsage() {
+       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());
+      Float gridHeapUsagestring = Float.parseFloat(JMXProperties.getInstance()
+          .getProperty("member.M" + i + ".UsedMemory"));
+     Assert.assertEquals(gridHeapUsagestring, HeapUsage);
+    }
+  }
+   
+  @Test
+  public void testClusterGridViewCPUUsage() {
+       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();
+      String gridCPUUsage = JMXProperties.getInstance().getProperty("member.M" 
+ i + ".cpuUsage");
+      gridCPUUsage = gridCPUUsage.trim();
+      Assert.assertEquals(gridCPUUsage, CPUUsage);
+    }
+  }
+
+
+  public void testRgraphWidget() throws InterruptedException {
+    searchByIdAndClick("default_rgraph_button");
+    Thread.sleep(7000);
+    searchByIdAndClick("h1");
+    Thread.sleep(500);
+    searchByIdAndClick("M1");
+    Thread.sleep(7000);
+  }
+
+  @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();  
+    String memberRegionCount = 
JMXProperties.getInstance().getProperty("member.M1.totalRegionCount");
+    Assert.assertEquals(memberRegionCount, RegionCount);
+  }
+
+  @Test
+  public void testMemberNumThread()throws InterruptedException {
+    String ThreadCount = 
driver.findElement(By.id(MEMBER_VIEW_THREAD_ID)).getText();    
+    String memberThreadCount = 
JMXProperties.getInstance().getProperty("member.M1.numThreads");   
+    Assert.assertEquals(memberThreadCount, ThreadCount);
+  }
+
+  @Test
+  public void testMemberTotalFileDescriptorOpen() throws InterruptedException {
+    String SocketCount = driver.findElement(By.id(MEMBER_VIEW_SOCKETS_ID))
+        .getText();
+    String memberSocketCount = JMXProperties.getInstance().getProperty(
+        "member.M1.totalFileDescriptorOpen");
+    Assert.assertEquals(memberSocketCount, SocketCount);
+  }
+
+ @Test
+  public void testMemberLoadAverage() throws InterruptedException {    
+    String LoadAvg = driver.findElement(By.id(MEMBER_VIEW_LOADAVG_ID))
+        .getText();
+    String memberLoadAvg = JMXProperties.getInstance().getProperty(
+        "member.M1.loadAverage");
+    Assert.assertEquals(memberLoadAvg, LoadAvg);
+  }
+
+  @Ignore("WIP") // May be useful in near future
+  @Test
+  public void testOffHeapFreeSize(){     
+         
+    String OffHeapFreeSizeString = driver.findElement(
+        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"));
+    if (memberOffHeapFreeSize < 1048576) {
+      memberOffHeapFreeSize = memberOffHeapFreeSize / 1024;
+
+    } else if (memberOffHeapFreeSize < 1073741824) {
+      memberOffHeapFreeSize = memberOffHeapFreeSize / 1024 / 1024;
+    } else {
+      memberOffHeapFreeSize = memberOffHeapFreeSize / 1024 / 1024 / 1024;
+    }
+    memberOffHeapFreeSize = Float.parseFloat(new DecimalFormat("##.##")
+        .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();
+    String OffHeapUsedSizetemp = OffHeapUsedSizeString.replaceAll("[a-zA-Z]",
+        "");
+    float OffHeapUsedSize = Float.parseFloat(OffHeapUsedSizetemp);
+    float memberOffHeapUsedSize = Float.parseFloat(JMXProperties.getInstance()
+        .getProperty("member.M1.OffHeapUsedSize"));
+    if (memberOffHeapUsedSize < 1048576) {
+      memberOffHeapUsedSize = memberOffHeapUsedSize / 1024;
+
+    } else if (memberOffHeapUsedSize < 1073741824) {
+      memberOffHeapUsedSize = memberOffHeapUsedSize / 1024 / 1024;
+    } else {
+      memberOffHeapUsedSize = memberOffHeapUsedSize / 1024 / 1024 / 1024;
+    }
+    memberOffHeapUsedSize = Float.parseFloat(new DecimalFormat("##.##")
+        .format(memberOffHeapUsedSize));
+    Assert.assertEquals(memberOffHeapUsedSize, OffHeapUsedSize);
+  }
+
+  @Test
+  public void testMemberJVMPauses(){
+   
+    String JVMPauses = driver.findElement(By.id(MEMBER_VIEW_JVMPAUSES_ID))
+        .getText();
+    String memberGcPausesAvg = JMXProperties.getInstance().getProperty(
+        "member.M1.JVMPauses");
+    Assert.assertEquals(memberGcPausesAvg, JVMPauses);
+  }
+
+  @Test
+  public void testMemberCPUUsage() {  
+    String CPUUsagevalue = driver.findElement(By.id(MEMBER_VIEW_CPUUSAGE_ID))
+        .getText();
+    String memberCPUUsage = JMXProperties.getInstance().getProperty(
+        "member.M1.cpuUsage");
+    Assert.assertEquals(memberCPUUsage, CPUUsagevalue);
+  }
+
+  @Test  // difference between UI and properties file
+  public void testMemberAverageReads() {         
+    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));
+    Assert.assertEquals(memberReadPerSec, ReadPerSec);
+  }
+
+ @Test
+  public void testMemberAverageWrites() throws InterruptedException {
+    navigateToTopologyGridView();
+    String WritePerSec = driver.findElement(By.id(MEMBER_VIEW_WRITEPERSEC_ID))
+        .getText();
+    String memberWritePerSec = JMXProperties.getInstance().getProperty(
+        "member.M1.averageWrites");
+    Assert.assertEquals(memberWritePerSec, WritePerSec);
+  }
+ 
+
+ @Test
+  public void testMemberGridViewData() throws InterruptedException {
+   searchByXPathAndClick(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+   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"));    
+    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);
+
+    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);
+  }
+
+@Test
+  public void testDropDownList() throws InterruptedException {
+       searchByIdAndClick("memberName");
+    searchByLinkAndClick("M3");
+    searchByIdAndClick("memberName");
+    searchByLinkAndClick("M2");
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewRegionName() throws InterruptedException {
+    searchByLinkAndClick(DATA_VIEW_LABEL);
+    Thread.sleep(7000);
+    searchByIdAndClick("default_grid_button");
+    String regionName = driver.findElement(By.id(REGION_NAME_LABEL)).getText();
+    String dataviewregionname = 
JMXProperties.getInstance().getProperty("region.R1.name");
+    Assert.assertEquals(dataviewregionname, regionName);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewRegionPath() {
+    String regionPath = driver.findElement(By.id(REGION_PATH_LABEL)).getText();
+    String dataviewregionpath = JMXProperties.getInstance().getProperty(
+        "region.R1.fullPath");
+    Assert.assertEquals(dataviewregionpath, regionPath);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewRegionType() {
+    String regionType = driver.findElement(By.id(REGION_TYPE_LABEL)).getText();
+    String dataviewregiontype = JMXProperties.getInstance().getProperty(
+        "region.R1.regionType");
+    Assert.assertEquals(dataviewregiontype, regionType);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewEmptyNodes() {
+    String regionEmptyNodes = driver.findElement(By.id(DATA_VIEW_EMPTYNODES))
+        .getText();
+    String dataviewEmptyNodes = JMXProperties.getInstance().getProperty(
+        "region.R1.emptyNodes");
+    Assert.assertEquals(dataviewEmptyNodes, regionEmptyNodes);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewSystemRegionEntryCount() {
+    String regionEntryCount = driver.findElement(By.id(DATA_VIEW_ENTRYCOUNT))
+        .getText();
+    String dataviewEntryCount = JMXProperties.getInstance().getProperty(
+        "region.R1.systemRegionEntryCount");
+    Assert.assertEquals(dataviewEntryCount, regionEntryCount);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewPersistentEnabled() {
+    String regionPersistence = driver.findElement(
+        By.id(REGION_PERSISTENCE_LABEL)).getText();
+    String dataviewregionpersistence = JMXProperties.getInstance().getProperty(
+        "region.R1.persistentEnabled");
+    Assert.assertEquals(dataviewregionpersistence, regionPersistence);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewDiskWritesRate() {
+    String regionWrites = driver.findElement(By.id(DATA_VIEW_WRITEPERSEC))
+        .getText();
+    String dataviewRegionWrites = JMXProperties.getInstance().getProperty(
+        "region.R1.diskWritesRate");
+    Assert.assertEquals(dataviewRegionWrites, regionWrites);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewDiskReadsRate() {
+    String regionReads = driver.findElement(By.id(DATA_VIEW_READPERSEC))
+        .getText();
+    String dataviewRegionReads = JMXProperties.getInstance().getProperty(
+        "region.R1.diskReadsRate");
+    Assert.assertEquals(dataviewRegionReads, regionReads);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewDiskUsage() {
+    String regionMemoryUsed = driver.findElement(By.id(DATA_VIEW_USEDMEMORY))
+        .getText();
+    String dataviewMemoryUsed = JMXProperties.getInstance().getProperty(
+        "region.R1.diskUsage");
+    Assert.assertEquals(dataviewMemoryUsed, regionMemoryUsed);
+    searchByLinkAndClick(QUERY_STATISTICS_LABEL);
+  }
+
+  @Ignore("WIP")
+  @Test
+  public void testDataViewGridValue() {
+    String DataViewRegionName = driver.findElement(
+        By.xpath("//*[id('6')/x:td[1]]")).getText();
+    String dataViewRegionName = JMXProperties.getInstance().getProperty(
+        "region.R1.name");
+    Assert.assertEquals(dataViewRegionName, DataViewRegionName);
+
+    String DataViewRegionType = driver.findElement(
+        By.xpath("//*[id('6')/x:td[2]")).getText();
+    String dataViewRegionType = JMXProperties.getInstance().getProperty(
+        "region.R2.regionType");
+    Assert.assertEquals(dataViewRegionType, DataViewRegionType);
+
+    String DataViewEntryCount = driver.findElement(
+        By.xpath("//*[id('6')/x:td[3]")).getText();
+    String dataViewEntryCount = JMXProperties.getInstance().getProperty(
+        "region.R2.systemRegionEntryCount");
+    Assert.assertEquals(dataViewEntryCount, DataViewEntryCount);
+
+    String DataViewEntrySize = driver.findElement(
+        By.xpath("//*[id('6')/x:td[4]")).getText();
+    String dataViewEntrySize = JMXProperties.getInstance().getProperty(
+        "region.R2.entrySize");
+    Assert.assertEquals(dataViewEntrySize, DataViewEntrySize);
+
+  }
+  
+  
+  public void loadDataBrowserpage() {
+         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);
+               
+  }
+  
+  @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);
+  }
+  
+  @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);
+         
+  }
+
+  @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++;
+            }
+          }
+         }  
+  }
+  
+ 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(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); 
+  }
+  
+  @Test
+  public void testServerGroupTreeMapPopUpData() {
+         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("##.####")
+      .format(entrySize));
+         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();
+  }
+
+  @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++;
+               }  
+  }
+
+  @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());
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java
 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java
new file mode 100644
index 0000000..e6bfc1c
--- /dev/null
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAuthTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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.vmware.gemfire.tools.pulse.tests;
+
+import com.gemstone.gemfire.test.junit.categories.UITest;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.experimental.categories.Category;
+import org.junit.runners.MethodSorters;
+
+@Category(UITest.class)
+@FixMethodOrder(MethodSorters.JVM)
+public class PulseAuthTest extends PulseAbstractTest {
+
+  @BeforeClass
+  public static void beforeClassSetup() throws Exception {
+    setUpServer("/pulse-auth.json");
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
index 1ecb7d6..4e82e6f 100644
--- 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java
@@ -30,9 +30,12 @@
 
 package com.vmware.gemfire.tools.pulse.tests;
 
+import com.gemstone.gemfire.test.junit.categories.UITest;
 import junit.framework.Assert;
+import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 
@@ -40,9 +43,14 @@ import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.List;
 
-public class PulseAutomatedTest extends PulseBaseTest {
+@Category(UITest.class)
+public class PulseAutomatedTest extends PulseAbstractTest {
+
+       @BeforeClass
+       public static void beforeClassSetup() throws Exception {
+               setUpServer("/pulse-auth.json");
+       }
 
-               
        @Test
        public void serverGroupGridDataValidation() {
                navigateToServerGroupGridView();
@@ -749,7 +757,7 @@ public class PulseAutomatedTest extends PulseBaseTest {
                }
            }   
                
-               
sendKeysUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId, 
PulseTest.QUERY_TYPE_ONE);
+               
sendKeysUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId, 
PulseAbstractTest.QUERY_TYPE_ONE);
                
clickElementUsingId(PulseTestLocators.DataBrowser.btnExecuteQueryId);
                        
                //Get required datetime format and extract date and hours from 
date time.
@@ -768,7 +776,7 @@ public class PulseAutomatedTest extends PulseBaseTest {
          System.out.println("Query Text from History Table: " + queryText);
                System.out.println("Query Time from History Table: " + 
historyDateTime);
            //verify the query text, query datetime in history panel
-           Assert.assertTrue(PulseTest.QUERY_TYPE_ONE.equals(queryText));
+           
Assert.assertTrue(PulseAbstractTest.QUERY_TYPE_ONE.equals(queryText));
            Assert.assertTrue(historyDateTime.contains(queryTime[0]));
           
        }       

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
index 9f5523a..b3bcfe6 100644
--- 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseBaseTest.java
@@ -33,7 +33,9 @@ import java.util.Map;
 import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 
-public class PulseBaseTest extends PulseTest {
+import static com.vmware.gemfire.tools.pulse.tests.PulseAbstractTest.driver;
+
+public class PulseBaseTest {
        WebElement element = null;
        public static int maxWaitTime = 20;
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/fed95002/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseNoAuthTest.java
----------------------------------------------------------------------
diff --git 
a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseNoAuthTest.java
 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseNoAuthTest.java
new file mode 100644
index 0000000..cf08fd7
--- /dev/null
+++ 
b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseNoAuthTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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.vmware.gemfire.tools.pulse.tests;
+
+import com.gemstone.gemfire.test.junit.categories.UITest;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.experimental.categories.Category;
+import org.junit.runners.MethodSorters;
+
+@Category(UITest.class)
+@FixMethodOrder(MethodSorters.JVM)
+public class PulseNoAuthTest extends PulseAbstractTest {
+
+  @BeforeClass
+  public static void beforeClassSetup() throws Exception {
+    setUpServer(null);
+  }
+}

Reply via email to