You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/03/21 21:40:25 UTC
[54/54] [abbrv] incubator-geode git commit: GEODE-17: WIP integrating
Pulse with new security
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 <jd...@pivotal.io>
Authored: Mon Mar 21 13:37:34 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
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);
+ }
+}