You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by hi...@apache.org on 2016/09/20 22:34:23 UTC

[06/35] incubator-geode git commit: GEODE-37 renamed pulse package to geode

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java
new file mode 100644
index 0000000..c2d55c3
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/testbed/driver/PulseUITest.java
@@ -0,0 +1,279 @@
+/*
+ * 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.geode.tools.pulse.testbed.driver;
+
+import static com.vmware.geode.tools.pulse.tests.PulseAbstractTest.*;
+import static org.junit.Assert.*;
+
+import java.net.InetAddress;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.AfterClass;
+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.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import org.apache.geode.internal.net.SSLConfigurationFactory;
+import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.management.internal.JettyHelper;
+import org.apache.geode.test.junit.categories.UITest;
+import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Locator;
+import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Peer;
+import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Region;
+import com.vmware.geode.tools.pulse.testbed.GemFireDistributedSystem.Server;
+import com.vmware.geode.tools.pulse.testbed.TestBed;
+
+@Ignore("TODO: test is ignored")
+@Category(UITest.class)
+public class PulseUITest {
+
+  private static WebDriver driver;
+  private static TestBed testBed;
+  private static String pulseURL;
+  private static String path;
+  private static org.eclipse.jetty.server.Server jetty = null;
+
+  private static final String userName = "admin";
+  private static final String pasword = "admin";
+  
+  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";
+
+  @BeforeClass
+  public static void setUpJetty() throws Exception {
+    String host = InetAddress.getLocalHost().getHostAddress();
+    int port = 8080;
+    String context = "/pulse";
+    path = getPulseWarPath();
+    //System.setProperty("pulse.propMockDataUpdaterClass", "com.vmware.geode.tools.pulse.testbed.PropMockDataUpdater");
+
+    jetty = JettyHelper.initJetty(host, port, SSLConfigurationFactory.getSSLConfigForComponent(SecurableCommunicationChannel.WEB));
+    JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
+    jetty.start();
+
+    pulseURL = "http://" + host + ":" + port + context;
+    Thread.sleep(1000); //wait till tomcat settles down
+    driver = new FirefoxDriver();
+    driver.manage().window().maximize();//required to make all elements visible
+
+    Thread.sleep(5000); //wait till pulse starts polling threads...
+    testBed = new TestBed();
+    loginToPulse(driver, userName, pasword);
+  }
+
+  @AfterClass
+  public static void stopJetty() throws Exception {
+    jetty.stop();
+  }
+
+  @After
+  public void closeSession() {
+    driver.close();
+  }
+
+  private static void loginToPulse(WebDriver driver, String userName,String password){
+    driver.get(pulseURL);    
+    WebElement userNameElement = driver.findElement(By.id("user_name"));
+    WebElement passwordElement = driver.findElement(By.id("user_password"));
+    userNameElement.sendKeys(userName);
+    passwordElement.sendKeys(password);
+    passwordElement.submit();
+    WebElement userNameOnPulsePage = (new WebDriverWait(driver, 10))
+        .until(new ExpectedCondition<WebElement>() {
+          @Override
+          public WebElement apply(WebDriver d) {
+            return d.findElement(By.id("userName"));
+          }
+        });
+    assertNotNull(userNameOnPulsePage);
+  }
+  
+  
+  private void searchByLinkAndClick(String linkText){
+    WebElement  dataViewButton= By.linkText(linkText).findElement(driver);
+    assertNotNull(dataViewButton);   
+    dataViewButton.click();
+  }
+  
+  private void searchByIdAndClick(String id){
+    WebElement  element = driver.findElement(By.id(id));
+    assertNotNull(element);
+    element.click();    
+  }
+  
+  private void searchByXPathAndClick(String xpath){    
+    WebElement  element = driver.findElement(By.xpath(xpath));
+    assertNotNull(element);
+    element.click();    
+  }
+  
+  private 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));
+      }
+    });
+    assertNotNull(linkTextOnPulsePage1);
+  }
+  
+  private 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));
+      }
+    });
+    assertNotNull(element);
+  }
+  
+  @Test
+  public void testClusterViewTopRibbon() {
+    List<Server> servers = testBed.getRootDs().getServers();
+    List<Locator> locators = testBed.getRootDs().getLocators();
+    List<Peer> peers = testBed.getRootDs().getPeers();
+    List<Region> regions = testBed.getRootDs().getRegions();
+    int totalMembers = servers.size() + locators.size() + peers.size();
+    int clusterMembers = Integer.parseInt(driver.findElement(
+        By.id(CLUSTER_VIEW_MEMBERS_ID)).getText());
+    int clusterServers = Integer.parseInt(driver.findElement(
+        By.id(CLUSTER_VIEW_SERVERS_ID)).getText());
+    int clusterLocators = Integer.parseInt(driver.findElement(
+        By.id(CLUSTER_VIEW_LOCATORS_ID)).getText());
+    int clusterRegions = Integer.parseInt(driver.findElement(
+        By.id(CLUSTER_VIEW_REGIONS_ID)).getText());
+    assertEquals(totalMembers, clusterMembers);
+    assertEquals(servers.size(), clusterServers);
+    assertEquals(locators.size(), clusterLocators);
+    assertEquals(regions.size(), clusterRegions);
+  }  
+
+
+  @Test
+  public void testDataViewRegionProperties() {
+    searchByLinkAndClick(DATA_VIEW_LABEL);
+    waitForElementByClassName("pointDetailsPadding",10);    
+    searchByIdAndClick("btngridIcon");
+    
+    for(int i=1;i<testBed.getRootDs().getRegions().size();i++){
+      searchByIdAndClick(""+i);
+      String regionName1 = driver.findElement(By.id("regionName")).getText();
+      @SuppressWarnings("rawtypes")
+      List regionMemberscount1 = testBed.getRootDs().getRegion(regionName1)
+          .getMembers();
+      int regionEntCount1 = testBed.getRootDs().getRegion(regionName1)
+          .getEntryCount();
+      int regionMembers1 = Integer.parseInt(driver.findElement(
+          By.id("regionMembers")).getText());
+      int regionEntryCount1 = Integer.parseInt(driver.findElement(
+          By.id("regionEntryCount")).getText());
+      assertEquals(regionMemberscount1.size(), regionMembers1);
+      assertEquals(regionEntCount1, regionEntryCount1);
+    }
+  }
+
+  
+  @Test
+  public void testMemberViewRegions() {
+    
+    searchByLinkAndClick(DATA_VIEW_LABEL);
+    waitForElementByClassName("pointDetailsPadding",10);    
+    searchByXPathAndClick("//div[@title='peer1']");    
+    waitForElementById("memberRegionsCount",10);    
+    
+    List<Server> servers = testBed.getRootDs().getServers();
+    List<Locator> locators = testBed.getRootDs().getLocators();
+    List<Peer> peers = testBed.getRootDs().getPeers();    
+
+    String prevSelectedMember = "peer1";
+    
+    for (Peer p : peers) {
+      String peer = p.getName();
+      System.out.println("Checking regions mapping for member " + peer);
+      WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember));
+      comboBox.click();                 
+      WebElement comboList = driver.findElement(By.id("clusterMembersContainer"));     
+      WebElement selectedMember = comboList.findElement(By.linkText(peer));
+      selectedMember.click();
+      timeout();
+      String peername = driver.findElement(By.id("memberName")).getText();      
+      List<Region> peerRegionscount = testBed.getRootDs().getRegions(peer);
+      int peerRegions = Integer.parseInt(driver.findElement(
+          By.id("memberRegionsCount")).getText());
+      assertEquals(peerRegionscount.size(), peerRegions);
+      prevSelectedMember = peername;
+    }
+    
+    for (Server s : servers) {
+      String server = s.getName();
+      System.out.println("Checking regions mapping for server " + server);
+      WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember));
+      comboBox.click();                 
+      WebElement comboList = driver.findElement(By.id("clusterMembersContainer"));     
+      WebElement selectedMember = comboList.findElement(By.linkText(server));
+      selectedMember.click();
+      timeout();
+      String peername = driver.findElement(By.id("memberName")).getText();      
+      List<Region> serverRegionscount = testBed.getRootDs().getRegions(server);
+      int serverRegions = Integer.parseInt(driver.findElement(
+          By.id("memberRegionsCount")).getText());
+      assertEquals(serverRegionscount.size(), serverRegions);
+      prevSelectedMember = peername;            
+    }
+    /*
+    for (Locator l : locators) {      
+      String locator = l.getName();
+      System.out.println("Checking regions mapping for locator " + locator);
+      WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember));
+      comboBox.click();                 
+      WebElement comboList = driver.findElement(By.id("clusterMembersContainer"));     
+      WebElement selectedMember = comboList.findElement(By.linkText(locator));
+      selectedMember.click();
+      timeout();
+      String peername = driver.findElement(By.id("memberName")).getText();      
+      List<Region> locatorRegionscount = testBed.getRootDs().getRegions(locator);
+      int locatorRegions = Integer.parseInt(driver.findElement(
+          By.id("memberRegionsCount")).getText());
+      assertIndexDetailsEquals(locatorRegionscount.size(), locatorRegions);
+      prevSelectedMember = peername;
+    }*/
+  }
+
+  public void timeout() {
+    WebElement memberNameOnPulsePage = (new WebDriverWait(driver, 10))
+        .until(new ExpectedCondition<WebElement>() {
+          @Override
+          public WebElement apply(WebDriver d) {
+            return d.findElement(By.id("memberName"));
+          }
+        });
+    assertNotNull(memberNameOnPulsePage);    
+  }  
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java
new file mode 100644
index 0000000..ebd310d
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatement.java
@@ -0,0 +1,217 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+public class AggregateStatement extends JMXBaseBean implements AggregateStatementMBean {
+  private String name = null;
+
+  public AggregateStatement(String name) {
+    this.name = name;
+  }
+
+  protected String getKey(String propName) {
+    return "aggregatestatement." + name + "." + propName;
+  }
+  
+  /**
+   * Query definition
+   * 
+   * @return
+   */
+  public String getQueryDefinition(){
+    return getString("queryDefinition");
+  }
+
+  /**
+   * Number of times this statement is compiled (including re compilations)
+   * 
+   * @return
+   */
+  @Override
+  public long getNumTimesCompiled(){
+    return getLong("numTimesCompiled");
+  }
+
+  /**
+   * Number of times this statement is executed
+   * 
+   * @return
+   */
+  @Override
+  public long getNumExecution(){
+    return getLong("numExecution");
+  }
+
+  /**
+   * Statements that are actively being processed during the statistics snapshot
+   * 
+   * @return
+   */
+  public long getNumExecutionsInProgress(){
+    return getLong("numExecutionsInProgress");
+  }
+
+  /**
+   * Number of times global index lookup message exchanges occurred
+   * 
+   * @return
+   */
+  public long getNumTimesGlobalIndexLookup(){
+    return getLong("numTimesGlobalIndexLookup");
+  }
+
+  /**
+   * Number of rows modified by DML operation of insert/delete/update
+   * 
+   * @return
+   */
+  public long getNumRowsModified(){
+    return getLong("numRowsModified");
+  }
+
+  /**
+   * Time spent(in milliseconds) in parsing the query string
+   * 
+   * @return
+   */
+  public long getParseTime(){
+    return getLong("parseTime");
+  }
+
+  /**
+   * Time spent (in milliseconds) mapping this statement with database object's metadata (bind)
+   * 
+   * @return
+   */
+  public long getBindTime(){
+    return getLong("bindTime");
+  }
+
+  /**
+   * Time spent (in milliseconds) determining the best execution path for this statement
+   * (optimize)
+   * 
+   * @return
+   */
+  public long getOptimizeTime(){
+    return getLong("optimizeTime");
+  }
+
+  /**
+   * Time spent (in milliseconds) compiling details about routing information of query strings to
+   * data node(s) (processQueryInfo)
+   * 
+   * @return
+   */
+  public long getRoutingInfoTime(){
+    return getLong("routingInfoTime");
+  }
+
+  /**
+   * Time spent (in milliseconds) to generate query execution plan definition (activation class)
+   * 
+   * @return
+   */
+  public long getGenerateTime(){
+    return getLong("generateTime");
+  }
+
+  /**
+   * Total compilation time (in milliseconds) of the statement on this node (prepMinion)
+   * 
+   * @return
+   */
+  public long getTotalCompilationTime(){
+    return getLong("totalCompilationTime");
+  }
+
+  /**
+   * Time spent (in nanoseconds) in creation of all the layers of query processing (ac.execute)
+   * 
+   * @return
+   */
+  public long getExecutionTime(){
+    return getLong("executionTime");
+  }
+
+  /**
+   * Time to apply (in nanoseconds) the projection and additional filters. (projectrestrict)
+   * 
+   * @return
+   */
+  public long getProjectionTime(){
+    return getLong("projectionTime");
+  }
+
+  /**
+   * Total execution time (in nanoseconds) taken to process the statement on this node
+   * (execute/open/next/close)
+   * 
+   * @return
+   */
+  public long getTotalExecutionTime(){
+    return getLong("totalExecutionTime");
+  }
+
+  /**
+   * Time taken (in nanoseconds) to modify rows by DML operation of insert/delete/update
+   * 
+   * @return
+   */
+  public long getRowsModificationTime(){
+    return getLong("rowsModificationTime");
+  }
+
+  /**
+   * Number of rows returned from remote nodes (ResultHolder/Get convertibles)
+   * 
+   * @return
+   */
+  public long getQNNumRowsSeen(){
+    return getLong("qnNumRowsSeen");
+  }
+
+  /**
+   * TCP send time (in nanoseconds) of all the messages including serialization time and queue
+   * wait time
+   * 
+   * @return
+   */
+  public long getQNMsgSendTime(){
+    return getLong("qnMsgSendTime");
+  }
+
+  /**
+   * Serialization time (in nanoseconds) for all the messages while sending to remote node(s)
+   * 
+   * @return
+   */
+  public long getQNMsgSerTime(){
+    return getLong("qnMsgSerTime");
+  }
+  
+  /**
+   * 
+   * 
+   * @return
+   */
+  public long getQNRespDeSerTime(){
+    return getLong("qnRespDeSerTime");
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java
new file mode 100644
index 0000000..b58b53b
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/AggregateStatementMBean.java
@@ -0,0 +1,168 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+public interface AggregateStatementMBean {
+  String OBJECT_NAME = "GemFireXD:service=Statement,type=Aggregate";
+
+  /**
+   * Query definition
+   *
+   * @return
+   */
+  String getQueryDefinition();
+
+  /**
+   * Number of times this statement is compiled (including re compilations)
+   *
+   * @return
+   */
+  long getNumTimesCompiled();
+
+  /**
+   * Number of times this statement is executed
+   *
+   * @return
+   */
+  long getNumExecution();
+
+  /**
+   * Statements that are actively being processed during the statistics snapshot
+   *
+   * @return
+   */
+  long getNumExecutionsInProgress();
+
+  /**
+   * Number of times global index lookup message exchanges occurred
+   *
+   * @return
+   */
+  long getNumTimesGlobalIndexLookup();
+
+  /**
+   * Number of rows modified by DML operation of insert/delete/update
+   *
+   * @return
+   */
+  long getNumRowsModified();
+
+  /**
+   * Time spent(in milliseconds) in parsing the query string
+   *
+   * @return
+   */
+  long getParseTime();
+
+  /**
+   * Time spent (in milliseconds) mapping this statement with database object's metadata (bind)
+   *
+   * @return
+   */
+  long getBindTime();
+
+  /**
+   * Time spent (in milliseconds) determining the best execution path for this statement
+   * (optimize)
+   *
+   * @return
+   */
+  long getOptimizeTime();
+
+  /**
+   * Time spent (in milliseconds) compiling details about routing information of query strings to
+   * data node(s) (processQueryInfo)
+   *
+   * @return
+   */
+  long getRoutingInfoTime();
+
+  /**
+   * Time spent (in milliseconds) to generate query execution plan definition (activation class)
+   *
+   * @return
+   */
+  long getGenerateTime();
+
+  /**
+   * Total compilation time (in milliseconds) of the statement on this node (prepMinion)
+   *
+   * @return
+   */
+  long getTotalCompilationTime();
+
+  /**
+   * Time spent (in nanoseconds) in creation of all the layers of query processing (ac.execute)
+   *
+   * @return
+   */
+  long getExecutionTime();
+
+  /**
+   * Time to apply (in nanoseconds) the projection and additional filters. (projectrestrict)
+   *
+   * @return
+   */
+  long getProjectionTime();
+
+  /**
+   * Total execution time (in nanoseconds) taken to process the statement on this node
+   * (execute/open/next/close)
+   *
+   * @return
+   */
+  long getTotalExecutionTime();
+
+  /**
+   * Time taken (in nanoseconds) to modify rows by DML operation of insert/delete/update
+   *
+   * @return
+   */
+  long getRowsModificationTime();
+
+  /**
+   * Number of rows returned from remote nodes (ResultHolder/Get convertibles)
+   *
+   * @return
+   */
+  long getQNNumRowsSeen();
+
+  /**
+   * TCP send time (in nanoseconds) of all the messages including serialization time and queue
+   * wait time
+   *
+   * @return
+   */
+  long getQNMsgSendTime();
+
+  /**
+   * Serialization time (in nanoseconds) for all the messages while sending to remote node(s)
+   *
+   * @return
+   */
+  long getQNMsgSerTime();
+
+  /**
+   *
+   *
+   * @return
+   */
+  long getQNRespDeSerTime();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java
new file mode 100644
index 0000000..09fbda3
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/DataBrowserResultLoader.java
@@ -0,0 +1,84 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+public class DataBrowserResultLoader {
+  private static DataBrowserResultLoader dbResultLoader = new DataBrowserResultLoader();
+
+  public static DataBrowserResultLoader getInstance() {
+    return dbResultLoader;
+  }
+
+  public String load(String queryString) throws IOException {
+
+    URL url = null;
+    InputStream inputStream = null;
+    BufferedReader streamReader = null;
+    String inputStr = null;
+    StringBuilder sampleQueryResultResponseStrBuilder = null;
+
+    try {
+      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+      if (queryString.equals(PulseAbstractTest.QUERY_TYPE_ONE)) {
+        url = classLoader.getResource("testQueryResultClusterSmall.txt");
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_TWO)) {
+        url = classLoader.getResource("testQueryResultSmall.txt");
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_THREE)) {
+        url = classLoader.getResource("testQueryResult.txt");
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_FOUR)) {
+        url = classLoader.getResource("testQueryResultWithStructSmall.txt");
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_FIVE)) {
+        url = classLoader.getResource("testQueryResultClusterWithStruct.txt");
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_SIX)) {
+        url = classLoader.getResource("testQueryResultHashMapSmall.txt");
+      } else if (queryString.equals(PulseAbstractTest.QUERY_TYPE_SEVENE)) {
+        url = classLoader.getResource("testQueryResult1000.txt");
+      } else {
+        url = classLoader.getResource("testQueryResult.txt");
+      }
+
+      File sampleQueryResultFile = new File(url.getPath());
+      inputStream = new FileInputStream(sampleQueryResultFile);
+      streamReader = new BufferedReader(new InputStreamReader(inputStream,
+          "UTF-8"));
+      sampleQueryResultResponseStrBuilder = new StringBuilder();
+
+      while ((inputStr = streamReader.readLine()) != null) {
+        sampleQueryResultResponseStrBuilder.append(inputStr);
+      }
+
+      // close stream reader
+      streamReader.close();
+
+    } catch (IOException ex) {
+      ex.printStackTrace();
+    }
+
+    return sampleQueryResultResponseStrBuilder.toString();
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java
new file mode 100644
index 0000000..957d074
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTable.java
@@ -0,0 +1,46 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import javax.management.NotificationBroadcasterSupport;
+
+public class GemFireXDAggregateTable extends NotificationBroadcasterSupport
+    implements GemFireXDAggregateTableMBean {
+  private String name = null;
+
+  public GemFireXDAggregateTable(String name) {
+    this.name = name;
+  }
+
+  private String getKey(String propName) {
+    return "table." + name + "." + propName;
+  }
+
+  @Override
+  public long getEntrySize() {
+    return Long.parseLong(JMXProperties.getInstance().getProperty(
+        getKey("EntrySize")));
+  }
+
+  @Override
+  public int getNumberOfRows() {
+    return Integer.parseInt(JMXProperties.getInstance().getProperty(
+        getKey("NumberOfRows")));
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java
new file mode 100644
index 0000000..db0f45d
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDAggregateTableMBean.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+public interface GemFireXDAggregateTableMBean {
+  public static final String OBJECT_NAME = "GemFireXD:service=Table,type=Aggregate,table=";
+  
+  public long getEntrySize();
+
+  public int getNumberOfRows();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java
new file mode 100644
index 0000000..a2b1edc
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDCluster.java
@@ -0,0 +1,95 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import javax.management.NotificationBroadcasterSupport;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.OpenDataException;
+import javax.management.openmbean.OpenType;
+import javax.management.openmbean.SimpleType;
+
+public class GemFireXDCluster extends NotificationBroadcasterSupport implements
+    GemFireXDClusterMBean {
+  private String name = null;
+
+  private static String[] itemNames = { "connectionsAttempted",
+      "connectionsActive", "connectionsClosed", "connectionsFailed" };;
+  private static String[] itemDescriptions = { "connectionsAttempted",
+      "connectionsActive", "connectionsClosed", "connectionsFailed" };
+  private static OpenType[] itemTypes = { SimpleType.LONG, SimpleType.LONG,
+      SimpleType.LONG, SimpleType.LONG };
+  private static CompositeType networkServerClientConnectionStats = null;
+
+  static {
+    try {
+      networkServerClientConnectionStats = new CompositeType(
+          "NetworkServerClientConnectionStats",
+          "Network Server Client Connection Stats Information", itemNames,
+          itemDescriptions, itemTypes);
+
+    } catch (OpenDataException e) {
+      e.printStackTrace();
+    }
+  }
+
+  public GemFireXDCluster(String name) {
+    this.name = name;
+  }
+
+  private String getKey(String propName) {
+    return "gemfirexd." + name + "." + propName;
+  }
+
+  @Override
+  public int getProcedureCallsCompleted() {
+    return Integer.parseInt(JMXProperties.getInstance().getProperty(
+        getKey("ProcedureCallsCompleted")));
+  }
+
+  @Override
+  public int getProcedureCallsInProgress() {
+    return Integer.parseInt(JMXProperties.getInstance().getProperty(
+        getKey("ProcedureCallsInProgress")));
+  }
+
+  @Override
+  public CompositeData getNetworkServerClientConnectionStats() {
+    String value = JMXProperties.getInstance().getProperty(
+        getKey("NetworkServerClientConnectionStats"), "");
+    String[] values = value.split(",");
+    Long[] itemValues = new Long[values.length];
+    for (int i = 0; i < values.length; i++) {
+      itemValues[i] = Long.parseLong(values[i]);
+    }
+
+    CompositeData nscCompData;
+    try {
+      nscCompData = new CompositeDataSupport(
+          networkServerClientConnectionStats, itemNames, itemValues);
+    } catch (OpenDataException e) {
+      e.printStackTrace();
+      nscCompData = null;
+    }
+    return nscCompData;
+
+  }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java
new file mode 100644
index 0000000..5a42d10
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDClusterMBean.java
@@ -0,0 +1,32 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import javax.management.openmbean.CompositeData;
+
+public interface GemFireXDClusterMBean {
+  public static final String OBJECT_NAME = "GemFireXD:service=Cluster";
+
+  public int getProcedureCallsCompleted();
+
+  public int getProcedureCallsInProgress();
+
+  public CompositeData getNetworkServerClientConnectionStats();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java
new file mode 100644
index 0000000..16da77d
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMember.java
@@ -0,0 +1,80 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.OpenDataException;
+import javax.management.openmbean.OpenType;
+import javax.management.openmbean.SimpleType;
+
+public class GemFireXDMember extends JMXBaseBean implements
+    GemFireXDMemberMBean {
+  private String name = null;
+
+  private static String[] itemNames = { "connectionsAttempted",
+      "connectionsActive", "connectionsClosed", "connectionsFailed" };;
+  private static String[] itemDescriptions = { "connectionsAttempted",
+      "connectionsActive", "connectionsClosed", "connectionsFailed" };
+  private static OpenType[] itemTypes = { SimpleType.LONG, SimpleType.LONG,
+      SimpleType.LONG, SimpleType.LONG };
+  private static CompositeType networkServerClientConnectionStats = null;
+
+  static {
+    try {
+      networkServerClientConnectionStats = new CompositeType(
+          "NetworkServerClientConnectionStats",
+          "Network Server Client Connection Stats Information", itemNames,
+          itemDescriptions, itemTypes);
+
+    } catch (OpenDataException e) {
+      e.printStackTrace();
+    }
+  }
+
+  public GemFireXDMember(String name) {
+    this.name = name;
+  }
+
+  @Override
+  protected String getKey(String propName) {
+    return "gemfirexdmember." + name + "." + propName;
+  }
+
+  @Override
+  public boolean getDataStore() {
+    return getBoolean("DataStore");
+  }
+
+  @Override
+  public CompositeData getNetworkServerClientConnectionStats() {
+    Long[] itemValues = getLongArray("NetworkServerClientConnectionStats");
+    CompositeData nscCompData;
+    try {
+      nscCompData = new CompositeDataSupport(
+          networkServerClientConnectionStats, itemNames, itemValues);
+    } catch (OpenDataException e) {
+      e.printStackTrace();
+      nscCompData = null;
+    }
+    return nscCompData;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java
new file mode 100644
index 0000000..ceda56d
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/GemFireXDMemberMBean.java
@@ -0,0 +1,31 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import javax.management.openmbean.CompositeData;
+
+public interface GemFireXDMemberMBean {
+
+  public static final String OBJECT_NAME = "GemFireXD:group=DEFAULT,type=Member";
+
+  public boolean getDataStore();
+
+  public CompositeData getNetworkServerClientConnectionStats();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java
new file mode 100644
index 0000000..2d1ffad
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXBaseBean.java
@@ -0,0 +1,67 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+public abstract class JMXBaseBean {
+
+  protected abstract String getKey(String propName);
+
+  protected String getString(String key) {
+    return JMXProperties.getInstance().getProperty(getKey(key));
+  }
+
+  protected String[] getStringArray(String key) {
+    return JMXProperties.getInstance().getProperty(getKey(key), "").split(" ");
+  }
+
+  protected boolean getBoolean(String key) {
+    return Boolean.parseBoolean(JMXProperties.getInstance().getProperty(
+        getKey(key)));
+  }
+
+  protected int getInt(String key) {
+    return Integer.parseInt(JMXProperties.getInstance()
+        .getProperty(getKey(key)));
+  }
+
+  protected long getLong(String key) {
+    return Long.parseLong(JMXProperties.getInstance().getProperty(getKey(key)));
+  }
+
+  protected Long[] getLongArray(String key) {
+    String value = JMXProperties.getInstance().getProperty(getKey(key), "");
+    String[] values = value.split(",");
+    Long[] longValues = new Long[values.length];
+    for (int i = 0; i < values.length; i++) {
+      longValues[i] = Long.parseLong(values[i]);
+    }
+    return longValues;
+  }
+
+  protected double getDouble(String key) {
+    return Double.parseDouble(JMXProperties.getInstance().getProperty(
+        getKey(key)));
+  }
+
+  protected float getFloat(String key) {
+    return Float.parseFloat(JMXProperties.getInstance()
+        .getProperty(getKey(key)));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java
new file mode 100644
index 0000000..1562594
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/JMXProperties.java
@@ -0,0 +1,47 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class JMXProperties extends Properties {
+  private static final long serialVersionUID = -6210901350494570026L;
+
+  private static JMXProperties props = new JMXProperties();
+
+  public static JMXProperties getInstance() {
+    return props;
+  }
+
+  public void load(String propFile) throws IOException {
+    if (propFile != null) {
+      FileInputStream fin;
+      fin = new FileInputStream(new File(propFile));
+      if (fin != null) {
+        clear();
+        load(fin);
+      }
+
+      fin.close();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java
new file mode 100644
index 0000000..1192297
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/Member.java
@@ -0,0 +1,193 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+public class Member extends JMXBaseBean implements MemberMBean {
+  private String name = null;
+
+  public Member(String name) {
+    this.name = name;
+  }
+
+  protected String getKey(String propName) {
+    return "member." + name + "." + propName;
+  }
+
+  @Override
+  public boolean getManager() {
+    return getBoolean("manager");
+  }
+
+  @Override
+  public int getTotalRegionCount() {
+// This count is built dynamically in Pulse backend and region count is maintained in Cluster.Member data structure
+//    return getInt("totalRegionCount");
+    return 0;
+  }
+
+  @Override
+  public boolean getLocator() {
+    return getBoolean("locator");
+  }
+
+  @Override
+  public long getTotalDiskUsage() {
+    return getLong("totalDiskUsage");
+  }
+
+  @Override
+  public boolean getServer() {
+    return getBoolean("sever");
+  }
+
+  @Override
+  public String[] getGroups() {
+    return getStringArray("Groups");
+  }
+
+  @Override
+  /*public String[] getRedundancyZone() {
+    return getStringArray("RedundancyZone");
+  }*/
+  public String getRedundancyZone() {
+    return getString("RedundancyZone");
+  }
+
+  @Override
+  public long getTotalFileDescriptorOpen() {
+    return getLong("totalFileDescriptorOpen");
+  }
+
+  @Override
+  public double getLoadAverage() {
+    return getDouble("loadAverage");
+  }
+
+  @Override
+  public double getDiskWritesRate() {
+    return getDouble("diskWritesRate");
+  }
+
+  @Override
+  public long getJVMPauses() {
+    return getLong("JVMPauses");
+  }
+
+  @Override
+  public long getCurrentHeapSize() {
+//    return getLong("currentHeapSize");
+    return getLong("UsedMemory");
+  }
+
+  @Override
+  public long getMaximumHeapSize() {
+//    return getLong("maximumHeapSize");
+    return getLong("MaxMemory");
+  }
+
+  @Override
+  public long getUsedMemory() {
+    return getLong("UsedMemory");
+  }
+
+  @Override
+  public long getMaxMemory() {
+    return getLong("MaxMemory");
+  }
+
+  @Override
+  public int getNumThreads() {
+    return getInt("numThreads");
+  }
+
+  @Override
+  public long getMemberUpTime() {
+    return getLong("memberUpTime");
+  }
+
+  @Override
+  public String getHost() {
+    return getString("host");
+  }
+
+  @Override
+  public long getTotalBytesOnDisk() {
+    return getLong("totalBytesOnDisk");
+  }
+
+  @Override
+  public double getCpuUsage() {
+    return getDouble("cpuUsage");
+  }
+
+  @Override
+  public String getMember() {
+    return getString("member");
+  }
+
+  @Override
+  public String getId() {
+    return getString("id");
+  }
+
+  @Override
+  public double getAverageReads() {
+    return getDouble("averageReads");
+  }
+
+  @Override
+  public double getAverageWrites() {
+    return getDouble("averageWrites");
+  }
+
+  @Override
+  public int getPort() {
+    return getInt("port");
+  }
+
+  @Override
+  public long getFoo() {
+    return getLong("foo");
+  }
+
+  @Override
+  public long getOffHeapFreeSize() {
+    return getLong("OffHeapFreeSize");
+  }
+
+  @Override
+  public long getOffHeapUsedSize() {
+    return getLong("OffHeapUsedSize");
+  }
+
+  @Override
+  public long getOffHeapFreeMemory() {
+    return getLong("OffHeapFreeMemory");
+  }
+
+  @Override
+  public long getOffHeapUsedMemory() {
+    return getLong("OffHeapUsedMemory");
+  }
+
+  @Override
+  public String getVersion() {
+    return getString("Version");
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9a2b5d7b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java
new file mode 100644
index 0000000..6051270
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/MemberMBean.java
@@ -0,0 +1,86 @@
+/*
+ *
+ * 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.geode.tools.pulse.tests;
+
+public interface MemberMBean {
+  String OBJECT_NAME = "GemFire:type=Member";
+
+  boolean getManager();
+
+  int getTotalRegionCount();
+
+  boolean getLocator();
+
+  long getTotalDiskUsage();
+
+  boolean getServer();
+
+  String[] getGroups();
+
+  //public String[] getRedundancyZone();
+  String getRedundancyZone();
+
+  long getTotalFileDescriptorOpen();
+
+  double getLoadAverage();
+
+  double getDiskWritesRate();
+
+  long getJVMPauses();
+
+  long getCurrentHeapSize();
+
+  long getMaximumHeapSize();
+
+  long getUsedMemory();
+
+  long getMaxMemory();
+
+  int getNumThreads();
+
+  long getMemberUpTime();
+
+  String getHost();
+
+  long getTotalBytesOnDisk();
+
+  double getCpuUsage();
+
+  String getMember();
+
+  String getId();
+
+  double getAverageReads();
+
+  double getAverageWrites();
+
+  int getPort();
+
+  long getFoo();
+
+  long getOffHeapFreeSize();
+
+  long getOffHeapUsedSize();
+
+  long getOffHeapFreeMemory();
+
+  long getOffHeapUsedMemory();
+
+  String getVersion();
+}