You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2016/10/12 17:08:03 UTC
[1/6] incubator-geode git commit: GEODE-999: Converted from Firefox
driver to PhantomJS driver to run UITests in headless mode
Repository: incubator-geode
Updated Branches:
refs/heads/develop e15657e9d -> a78fa7537
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseBaseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseBaseTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseBaseTest.java
new file mode 100644
index 0000000..8cfac53
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseBaseTest.java
@@ -0,0 +1,697 @@
+/*
+ * 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 org.apache.geode.tools.pulse.tests.ui;
+
+import static org.junit.Assert.*;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.TimeUnit;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import org.apache.geode.tools.pulse.tests.JMXProperties;
+import org.apache.geode.tools.pulse.tests.Member;
+import org.apache.geode.tools.pulse.tests.PulseTestData;
+import org.apache.geode.tools.pulse.tests.PulseTestLocators;
+import org.apache.geode.tools.pulse.tests.Region;
+
+public class PulseBaseTest {
+
+ public static int maxWaitTime = 20;
+
+ WebElement element = null;
+
+ public WebElement findElementUsingId(String id) {
+ return PulseAbstractTest.driver.findElement(By.id(id));
+ }
+ public WebElement findElementUsingXpath(String xpath) {
+ return PulseAbstractTest.driver.findElement(By.xpath(xpath));
+ }
+
+ public void clickElementUsingId(String id) {
+ findElementUsingId(id).click();
+ }
+
+ public void clickElementUsingXpath(String xpath) {
+ findElementUsingXpath(xpath).click();
+ }
+
+ public void enterTextUsingId(String id, String textToEnter) {
+ findElementUsingId(id).sendKeys(textToEnter);
+
+ }
+
+ public void enterTextUsingXpath(String xpath, String textToEnter) {
+ findElementUsingXpath(xpath).sendKeys(textToEnter);
+ }
+
+ public String getValueFromPropertiesFile(String key) {
+ return JMXProperties.getInstance().getProperty(key);
+ }
+
+ public void sendKeysUsingId(String Id, String textToEnter){
+ findElementById(Id).sendKeys(textToEnter);
+ }
+
+ public void waitForElement(WebElement element) {
+ PulseAbstractTest.driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
+ WebDriverWait wait = new WebDriverWait(PulseAbstractTest.driver, 20);
+ wait.until(ExpectedConditions.visibilityOf(element));
+ }
+
+ public WebElement findElementById(String id) {
+ return PulseAbstractTest.driver.findElement(By.id(id));
+ }
+
+ public WebElement findElementByXpath(String xpath) {
+ return PulseAbstractTest.driver.findElement(By.xpath(xpath));
+ }
+
+ public String getTextUsingXpath(String xpath) {
+ return findElementByXpath(xpath).getText();
+ }
+
+ public String getTextUsingId(String id) {
+ return findElementById(id).getText();
+ }
+
+ public String getPersistanceEnabled(Region r) {
+ String persitance = null;
+
+ if (r.getPersistentEnabled()) {
+ persitance = "ON";
+ } else if (!r.getPersistentEnabled()) {
+ persitance = "OFF";
+ }
+ return persitance;
+ }
+
+ public String getPersistanceEnabled(String trueOrFalse) {
+ String persitance = null;
+
+ if (trueOrFalse.contains("true")) {
+ persitance = "ON";
+ } else if (trueOrFalse.contains("false")) {
+ persitance = "OFF";
+ }
+ return persitance;
+ }
+
+ public String HeapUsage(String valueInKB) {
+
+ return null;
+ }
+
+ // WIP - need to work on this --
+ public HashMap<String, HashMap<String, Region>> getRegionDetailsFromUI(String regionName) {
+
+ String[] regionNames = JMXProperties.getInstance().getProperty("regions").split(" ");
+ HashMap<String, HashMap<String, Region>> regionUiMap = new HashMap<String, HashMap<String, Region>>();
+
+ for (String region : regionNames) {
+ HashMap<String, Region> regionMap = regionUiMap.get(region);
+ }
+
+ return regionUiMap;
+ }
+
+ public void validateServerGroupGridData() {
+ List<WebElement> serverGridRows = PulseAbstractTest.driver.findElements(By.xpath("//table[@id='memberListSG']/tbody/tr"));
+ int rowsCount = serverGridRows.size();
+ String[][] gridDataFromUI = new String[rowsCount][7];
+
+ for (int j = 2, x = 0; j <= serverGridRows.size(); j++, x++) {
+ for (int i = 0; i <= 6; i++) {
+ gridDataFromUI[x][i] = PulseAbstractTest.driver.findElement(
+ By.xpath("//table[@id='memberListSG']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
+ }
+ }
+
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, HashMap<String, Member>> sgMap = new HashMap<String, HashMap<String, Member>>();
+
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ String[] sgs = thisMember.getGroups();
+
+ for (String sgName : sgs) {
+ HashMap<String, Member> sgMembers = sgMap.get(sgName);
+ if (sgMembers == null) {
+ sgMembers = new HashMap<String, Member>();
+ sgMap.put(sgName, sgMembers);
+ }
+ sgMembers.put(thisMember.getMember(), thisMember);
+ }
+ }
+
+ for (int i = 0; i < gridDataFromUI.length - 1; i++) {
+ String sgName = gridDataFromUI[i][0];
+ String memName = gridDataFromUI[i][1];
+ Member m = sgMap.get(sgName).get(memName);
+
+ assertEquals(sgName, gridDataFromUI[i][0]);
+ assertEquals(memName, gridDataFromUI[i][1]);
+ assertEquals(m.getMember(), gridDataFromUI[i][2]);
+ assertEquals(m.getHost(), gridDataFromUI[i][3]);
+ String cupUsage = String.valueOf(m.getCpuUsage());
+ assertEquals(cupUsage, gridDataFromUI[i][5]);
+ }
+
+ }
+
+ public void validateRedundancyZonesGridData() {
+ List<WebElement> rzGridRows = PulseAbstractTest.driver.findElements(By.xpath("//table[@id='memberListRZ']/tbody/tr"));
+ int rowsCount = rzGridRows.size();
+ String[][] gridDataFromUI = new String[rowsCount][7];
+
+ for (int j = 2, x = 0; j <= rzGridRows.size(); j++, x++) {
+ for (int i = 0; i <= 6; i++) {
+ gridDataFromUI[x][i] = PulseAbstractTest.driver.findElement(
+ By.xpath("//table[@id='memberListRZ']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
+ }
+ }
+
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, HashMap<String, Member>> rzMap = new HashMap<String, HashMap<String, Member>>();
+
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ //String[] rz = thisMember.getRedundancyZone();
+ String sgName = thisMember.getRedundancyZone();
+
+ //for (String sgName : rz) {
+ HashMap<String, Member> rzMembers = rzMap.get(sgName);
+
+ if (rzMembers == null) {
+ rzMembers = new HashMap<String, Member>();
+ rzMap.put(sgName, rzMembers);
+ }
+
+ rzMembers.put(thisMember.getMember(), thisMember);
+ //}
+ }
+
+ for (int i = 0; i < gridDataFromUI.length - 1; i++) {
+ String sgName = gridDataFromUI[i][0];
+ String memName = gridDataFromUI[i][1];
+ Member m = rzMap.get(sgName).get(memName);
+
+ assertEquals(sgName, gridDataFromUI[i][0]);
+ assertEquals(memName, gridDataFromUI[i][1]);
+ assertEquals(m.getMember(), gridDataFromUI[i][2]);
+ assertEquals(m.getHost(), gridDataFromUI[i][3]);
+ String cupUsage = String.valueOf(m.getCpuUsage());
+ assertEquals(cupUsage, gridDataFromUI[i][5]);
+ }
+
+ }
+
+ public void validateTopologyGridData() {
+ List<WebElement> rzGridRows = PulseAbstractTest.driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));
+ int rowsCount = rzGridRows.size();
+ String[][] gridDataFromUI = new String[rowsCount][8];
+
+ for (int j = 2, x = 0; j <= rzGridRows.size(); j++, x++) {
+ for (int i = 0; i <= 7; i++) {
+ gridDataFromUI[x][i] = PulseAbstractTest.driver.findElement(
+ By.xpath("//table[@id='memberList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
+ }
+ }
+
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, Member> tpMap = new HashMap<String, Member>();
+
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ tpMap.put(thisMember.getMember(), thisMember);
+
+ }
+
+ for (int i = 0; i < gridDataFromUI.length - 1; i++) {
+
+ String memName = gridDataFromUI[i][0];
+ Member m = tpMap.get(memName);
+
+ assertEquals(m.getMember(), gridDataFromUI[i][0]);
+ assertEquals(m.getMember(), gridDataFromUI[i][1]);
+ assertEquals(m.getHost(), gridDataFromUI[i][2]);
+ String cupUsage = String.valueOf(m.getCpuUsage());
+ assertEquals(cupUsage, gridDataFromUI[i][5]);
+ }
+ }
+
+ public void validateDataPrespectiveGridData() {
+ List<WebElement> serverGridRows = PulseAbstractTest.driver.findElements(By.xpath("//table[@id='regionsList']/tbody/tr"));
+ int rowsCount = serverGridRows.size();
+ String[][] gridDataFromUI = new String[rowsCount][7];
+
+ for (int j = 2, x = 0; j <= serverGridRows.size(); j++, x++) {
+ for (int i = 0; i <= 6; i++) {
+ if (i < 5) {
+ gridDataFromUI[x][i] = PulseAbstractTest.driver.findElement(
+ By.xpath("//table[@id='regionsList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
+ } else if (i == 5) {
+ gridDataFromUI[x][i] = PulseAbstractTest.driver.findElement(
+ By.xpath("//table[@id='regionsList']/tbody/tr[" + j + "]/td[" + (i + 4) + "]")).getText();
+ }
+ }
+ }
+
+ String[] regionNames = JMXProperties.getInstance().getProperty("regions").split(" ");
+ HashMap<String, Region> dataMap = new HashMap<String, Region>();
+
+ for (String region : regionNames) {
+ Region thisRegion = new Region(region);
+ dataMap.put(thisRegion.getName(), thisRegion);
+
+ }
+
+ for (int i = 0; i < gridDataFromUI.length - 1; i++) {
+ String memName = gridDataFromUI[i][0];
+ Region r = dataMap.get(memName);
+
+ assertEquals(r.getName(), gridDataFromUI[i][0]);
+ assertEquals(r.getRegionType(), gridDataFromUI[i][1]);
+
+ assertEquals(String.valueOf(r.getSystemRegionEntryCount()), gridDataFromUI[i][2]);
+ assertEquals(r.getFullPath(), gridDataFromUI[i][4]);
+ assertEquals(getPersistanceEnabled(r), gridDataFromUI[i][5]);
+ }
+ }
+
+ public void validateRegionDetailsGridData() {
+ List<WebElement> serverGridRows = PulseAbstractTest.driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));
+ int rowsCount = serverGridRows.size();
+ String[][] gridDataFromUI = new String[rowsCount][7];
+
+ for (int j = 2, x = 0; j <= serverGridRows.size(); j++, x++) {
+ for (int i = 0; i < 2; i++) {
+ gridDataFromUI[x][i] = PulseAbstractTest.driver.findElement(
+ By.xpath("//table[@id='memberList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
+ }
+ }
+
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, Member> tpMap = new HashMap<String, Member>();
+
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ tpMap.put(thisMember.getMember(), thisMember);
+ }
+
+ for (int i = 0; i < gridDataFromUI.length - 1; i++) {
+
+ String memName = gridDataFromUI[i][0];
+ Member m = tpMap.get(memName);
+ assertEquals(m.getMember(), gridDataFromUI[i][0]);
+ }
+
+ }
+
+ public void navigateToToplogyView(){
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.radioButtonXpath);
+ }
+
+ public void navigateToServerGroupGView(){
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath);
+ }
+
+ public void navigateToRedundancyZoneView(){
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath);
+ }
+
+ // ------ Topology / Server Group / Redundancy Group - Tree View
+
+ public void navigateToTopologyTreeView(){
+ navigateToToplogyView();
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ }
+
+ public void navigateToServerGroupTreeView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath);
+ }
+
+ public void navigateToRedundancyZonesTreeView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath);
+ }
+
+ // ------ Topology / Server Group / Redundancy Group - Grid View
+
+ public void navigateToTopologyGridView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.radioButtonXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ }
+
+ public void navigateToServerGroupGridView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath);
+ clickElementUsingId(PulseTestLocators.ServerGroups.gridButtonId);
+ }
+
+ public void navigateToRedundancyZonesGridView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath);
+ clickElementUsingId(PulseTestLocators.RedundancyZone.gridButtonId);
+ }
+
+ // ----- Data perspective / region details
+
+ public void navigateToDataPrespectiveGridView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.downarrowButtonXpath);
+ clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.dataViewButtonXpath);
+ clickElementUsingId(PulseTestLocators.DataPerspectiveView.gridButtonId);
+ }
+
+ public void navigateToRegionDetailsView() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.downarrowButtonXpath);
+ clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.dataViewButtonXpath);
+ // clickElementUsingXpath(PulseTestLocators.RegionDetailsView.regionNameXpath);
+ // // WIP - region navigation defect needs to fixed
+ clickElementUsingXpath(PulseTestLocators.RegionDetailsView.treeMapCanvasXpath);
+ }
+
+ public void navigateToRegionDetailsGridView() {
+ navigateToRegionDetailsView();
+ clickElementUsingXpath(PulseTestLocators.RegionDetailsView.gridButtonXpath);
+ }
+
+ public String getPropertyValue(String propertyKey) {
+ String propertyValue = JMXProperties.getInstance().getProperty(propertyKey);
+ return propertyValue;
+ }
+
+ public void verifyElementPresentById(String id) {
+ WebDriverWait wait = new WebDriverWait(PulseAbstractTest.driver, maxWaitTime, 500);
+ wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.id(id)));
+ }
+
+ public void verifyElementPresentByLinkText(String lnkText) {
+ WebDriverWait wait = new WebDriverWait(PulseAbstractTest.driver, maxWaitTime, 500);
+ wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.linkText(lnkText)));
+ }
+
+ public void verifyElementPresentByXpath(String xpath) {
+ WebDriverWait wait = new WebDriverWait(PulseAbstractTest.driver, maxWaitTime, 500);
+ wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(xpath)));
+ }
+
+ public void verifyTextPresrntById(String id, String text) {
+ WebDriverWait wait = new WebDriverWait(PulseAbstractTest.driver, maxWaitTime, 500);
+ wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id(id), text));
+ }
+
+ public void verifyTextPresrntByXpath(String xpath, String text) {
+ WebDriverWait wait = new WebDriverWait(PulseAbstractTest.driver, maxWaitTime, 500);
+ wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath(xpath), text));
+ }
+
+ public void verifyElementAttributeById(String id, String attribute, String value) {
+ String actualValue = findElementById(id).getAttribute(attribute);
+ assertTrue(actualValue.equals(value) || actualValue.contains(value));
+ }
+
+
+ public void mouseReleaseById(String id){
+ verifyElementPresentById(id);
+ Actions action = new Actions(PulseAbstractTest.driver);
+ WebElement we = PulseAbstractTest.driver.findElement(By.id(id));
+ action.moveToElement(we).release().perform();
+ }
+ public void mouseClickAndHoldOverElementById(String id) {
+ verifyElementPresentById(id);
+ Actions action = new Actions(PulseAbstractTest.driver);
+ WebElement we = PulseAbstractTest.driver.findElement(By.id(id));
+ action.moveToElement(we).clickAndHold().perform();
+ }
+
+ public void mouseOverElementByXpath(String xpath) {
+ Actions action = new Actions(PulseAbstractTest.driver);
+ WebElement we = PulseAbstractTest.driver.findElement(By.xpath(xpath));
+ action.moveToElement(we).build().perform();
+ }
+
+
+ public float stringToFloat(String stringValue){
+ float floatNum = Float.parseFloat(stringValue);
+ return floatNum;
+ }
+
+ public String floatToString(float floatValue){
+ String stringValue = Float.toString(floatValue);
+ return stringValue;
+ }
+
+
+ public String[] splitString(String stringToSplit, String splitDelimiter){
+ String [] stringArray = stringToSplit.split(splitDelimiter);
+ return stringArray;
+ }
+
+ public void assertMemberSortingByCpuUsage(){
+ Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
+ String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
+ for (String member : membersNames) {
+ Member thisMember = new Member(member);
+ memberMap.put(thisMember.getCpuUsage(), thisMember.getMember());
+ }
+ for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberCPUUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM2;
+ }else{
+ refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM3;
+ }
+ assertTrue(findElementById(entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
+ }
+ }
+
+ public void assertMemberSortingByHeapUsage(){
+ Map<Long, String> memberMap = new TreeMap<Long,String>(Collections.reverseOrder());
+ String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
+ for (String member : membersNames) {
+ Member thisMember = new Member(member);
+ memberMap.put(thisMember.getCurrentHeapSize(), thisMember.getMember());
+ }
+ for(Map.Entry<Long, String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberHeapUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberHeapUsage = PulseTestData.Topology.heapUsagePaintStyleM1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberHeapUsage = PulseTestData.Topology.heapUsagePaintStyleM2;
+ }else{
+ refMemberHeapUsage = PulseTestData.Topology.heapUsagePaintStyleM3;
+ }
+ assertTrue(findElementById(entry.getValue()).getAttribute("style").contains(refMemberHeapUsage));
+ }
+ }
+
+ public void assertMemberSortingBySGCpuUsage(){
+ Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
+ String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
+ for (String member : membersNames) {
+ Member thisMember = new Member(member);
+ memberMap.put(thisMember.getCpuUsage(), thisMember.getMember());
+ }
+ for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberCPUUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM2;
+ }else{
+ refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM3;
+ }
+ assertTrue(findElementById(entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
+ }
+ }
+
+
+ public void assertMemberSortingBySgHeapUsage(){
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, HashMap<String, Member>> sgMap = new HashMap<String, HashMap<String, Member>>();
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ String[] sgs = thisMember.getGroups();
+
+ for (String sgName : sgs) {
+ HashMap<String, Member> sgMembers = sgMap.get(sgName);
+ if (sgMembers == null) {
+ sgMembers = new HashMap<String, Member>();
+ sgMap.put(sgName, sgMembers);
+ }
+ sgMembers.put(thisMember.getMember(), thisMember);
+ }
+ }
+ Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
+
+ for(int sgId=1; sgId<=3; sgId++){
+ String sgName = "SG1";
+ String memName = "M" + sgId;
+ Member m = sgMap.get(sgName).get(memName);
+ memberMap.put((float) m.getCurrentHeapSize(), m.getMember());
+ }
+
+ for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberCPUUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberCPUUsage = PulseTestData.ServerGroups.heapUsagePaintStyleSG1M1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberCPUUsage = PulseTestData.ServerGroups.heapUsagePaintStyleSG1M2;
+ }else{
+ refMemberCPUUsage = PulseTestData.ServerGroups.heapUsagePaintStyleSG1M3;
+ }
+ assertTrue(findElementById("SG1(!)"+entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
+ }
+ }
+
+
+
+ public void assertMemberSortingBySgCpuUsage(){
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, HashMap<String, Member>> sgMap = new HashMap<String, HashMap<String, Member>>();
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ String[] sgs = thisMember.getGroups();
+
+ for (String sgName : sgs) {
+ HashMap<String, Member> sgMembers = sgMap.get(sgName);
+ if (sgMembers == null) {
+ sgMembers = new HashMap<String, Member>();
+ sgMap.put(sgName, sgMembers);
+ }
+ sgMembers.put(thisMember.getMember(), thisMember);
+ }
+ }
+ Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
+ //SG3(!)M3
+ for(int sgId=1; sgId<=3; sgId++){
+ String sgName = "SG1";
+ String memName = "M" + sgId;
+ Member m = sgMap.get(sgName).get(memName);
+ memberMap.put(m.getCpuUsage(), m.getMember());
+ }
+
+ for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberCPUUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberCPUUsage = PulseTestData.ServerGroups.cpuUsagePaintStyleSG1M1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberCPUUsage = PulseTestData.ServerGroups.cpuUsagePaintStyleSG1M2;
+ }else{
+ refMemberCPUUsage = PulseTestData.ServerGroups.cpuUsagePaintStyleSG1M3;
+ }
+ assertTrue(findElementById("SG1(!)"+entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
+ }
+ }
+
+ public void assertMemberSortingByRzHeapUsage(){
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, HashMap<String, Member>> rzMap = new HashMap<String, HashMap<String, Member>>();
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ String sgName = thisMember.getRedundancyZone();
+ HashMap<String, Member> rzMembers = rzMap.get(sgName);
+
+ if (rzMembers == null) {
+ rzMembers = new HashMap<String, Member>();
+ rzMap.put(sgName, rzMembers);
+ }
+
+ rzMembers.put(thisMember.getMember(), thisMember);
+ }
+ Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
+ String rzName = "RZ1 RZ2";
+ String memName = "M1" ;
+ Member m = rzMap.get(rzName).get(memName);
+ memberMap.put((float) m.getCurrentHeapSize(), m.getMember());
+
+ for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberHeapUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberHeapUsage = PulseTestData.RedundancyZone.heapUsagePaintStyleRZ1RZ2M1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberHeapUsage = PulseTestData.RedundancyZone.heapUsagePaintStyleRZ1RZ2M2;
+ }else{
+ refMemberHeapUsage = PulseTestData.RedundancyZone.heapUsagePaintStyleRZ3M3;
+ }
+ assertTrue(findElementById("RZ1 RZ2(!)"+entry.getValue()).getAttribute("style").contains(refMemberHeapUsage));
+ }
+ }
+
+ public void assertMemeberSortingByRzCpuUsage(){
+ String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
+ HashMap<String, HashMap<String, Member>> rzMap = new HashMap<String, HashMap<String, Member>>();
+ for (String member : memberNames) {
+ Member thisMember = new Member(member);
+ String sgName = thisMember.getRedundancyZone();
+ HashMap<String, Member> rzMembers = rzMap.get(sgName);
+
+ if (rzMembers == null) {
+ rzMembers = new HashMap<String, Member>();
+ rzMap.put(sgName, rzMembers);
+ }
+
+ rzMembers.put(thisMember.getMember(), thisMember);
+ }
+ Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
+ String rzName = "RZ1 RZ2";
+ String memName = "M1" ;
+ Member m = rzMap.get(rzName).get(memName);
+ memberMap.put(m.getCpuUsage(), m.getMember());
+
+ for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
+ //here matching painting style to validation that the members are painted according to their cpu usage
+ String refMemberCPUUsage = null;
+ if(entry.getValue().equalsIgnoreCase("M1")){
+ refMemberCPUUsage = PulseTestData.RedundancyZone.cpuUsagePaintStyleRZ1RZ2M1;
+ }else if(entry.getValue().equalsIgnoreCase("M2")){
+ refMemberCPUUsage = PulseTestData.RedundancyZone.cpuUsagePaintStyleRZ1RZ2M2;
+ }
+ assertTrue(findElementById("RZ1 RZ2(!)"+entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
+ }
+ }
+
+ public List<WebElement> getRegionsFromDataBrowser(){
+ List<WebElement> regionList = PulseAbstractTest.driver.findElements(By.xpath("//span[starts-with(@ID,'treeDemo_')][contains(@id,'_span')]"));
+ return regionList;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseNoAuthTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseNoAuthTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseNoAuthTest.java
new file mode 100644
index 0000000..8d62786
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseNoAuthTest.java
@@ -0,0 +1,34 @@
+/*
+ * 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 org.apache.geode.tools.pulse.tests.ui;
+
+import org.apache.geode.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("admin", "admin", null);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/gradle/dependency-versions.properties
----------------------------------------------------------------------
diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties
index 91870e0..50af2aa 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -84,6 +84,7 @@ mx4j-remote.version = 3.0.1
mx4j-tools.version = 3.0.1
netty-all.version = 4.0.4.Final
paranamer.version = 2.3
+phantomjsdriver.version=1.2.1
powermock.version = 1.6.4
quartz.version = 2.2.1
scala.version = 2.10.0
[4/6] incubator-geode git commit: GEODE-999: Converted from Firefox
driver to PhantomJS driver to run UITests in headless mode
Posted by ji...@apache.org.
GEODE-999: Converted from Firefox driver to PhantomJS driver to run UITests in headless mode
* Moved pulse ui tests into their own package.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/dfb87a59
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/dfb87a59
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/dfb87a59
Branch: refs/heads/develop
Commit: dfb87a591ef33e1a0f4e4b5299c21685cef2f25e
Parents: e15657e
Author: Jared Stewart <js...@pivotal.io>
Authored: Mon Oct 3 14:15:59 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Oct 12 09:46:53 2016 -0700
----------------------------------------------------------------------
.gitignore | 3 +
.../test/gemfire-jstewartgeode999-files.tgz | Bin 0 -> 877528 bytes
geode-pulse/build.gradle | 5 +
.../tools/pulse/testbed/driver/PulseUITest.java | 2 +-
.../pulse/tests/DataBrowserResultLoader.java | 2 +
.../tools/pulse/tests/PulseAbstractTest.java | 1048 ------------------
.../geode/tools/pulse/tests/PulseAuthTest.java | 33 -
.../tools/pulse/tests/PulseAutomatedTest.java | 784 -------------
.../geode/tools/pulse/tests/PulseBaseTest.java | 693 ------------
.../tools/pulse/tests/PulseNoAuthTest.java | 33 -
.../tools/pulse/tests/ui/PulseAbstractTest.java | 978 ++++++++++++++++
.../tools/pulse/tests/ui/PulseAuthTest.java | 34 +
.../pulse/tests/ui/PulseAutomatedTest.java | 768 +++++++++++++
.../tools/pulse/tests/ui/PulseBaseTest.java | 697 ++++++++++++
.../tools/pulse/tests/ui/PulseNoAuthTest.java | 34 +
gradle/dependency-versions.properties | 1 +
16 files changed, 2523 insertions(+), 2592 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 825e379..38c8131 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,8 @@ build/
build-eclipse/
/tags
+
+
*.iml
*.ipr
*.iws
@@ -25,3 +27,4 @@ build-eclipse/
*.orig
geode-spark-connector/**/target/
geode-spark-connector/project/project/
+geode-pulse/screenshots/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/artifacts-jstewartgeode999/test/gemfire-jstewartgeode999-files.tgz
----------------------------------------------------------------------
diff --git a/artifacts-jstewartgeode999/test/gemfire-jstewartgeode999-files.tgz b/artifacts-jstewartgeode999/test/gemfire-jstewartgeode999-files.tgz
new file mode 100644
index 0000000..a15d245
Binary files /dev/null and b/artifacts-jstewartgeode999/test/gemfire-jstewartgeode999-files.tgz differ
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index c58da78..ef29ab3 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -68,6 +68,11 @@ dependencies {
testCompile project(':geode-core')
testCompile files(project(':geode-core').sourceSets.test.output)
+ testCompile(group: 'com.codeborne', name: 'phantomjsdriver', version: project.'phantomjsdriver.version') {
+ exclude module: 'selenium-remote-driver' //by artifact name
+ exclude module: 'selenium-java' //by artifact name
+ }
+
testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:' + project.'selenium.version'
testCompile 'org.seleniumhq.selenium:selenium-api:' + project.'selenium.version'
testCompile 'org.seleniumhq.selenium:selenium-remote-driver:' + project.'selenium.version'
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/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
index a4062e5..ced298b 100644
--- 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
@@ -16,7 +16,7 @@
*/
package org.apache.geode.tools.pulse.testbed.driver;
-import static org.apache.geode.tools.pulse.tests.PulseAbstractTest.*;
+import static org.apache.geode.tools.pulse.tests.ui.PulseAbstractTest.*;
import static org.junit.Assert.*;
import java.net.InetAddress;
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/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
index b7895a6..68da68e 100644
--- 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
@@ -26,6 +26,8 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
+import org.apache.geode.tools.pulse.tests.ui.PulseAbstractTest;
+
public class DataBrowserResultLoader {
private static DataBrowserResultLoader dbResultLoader = new DataBrowserResultLoader();
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAbstractTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAbstractTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAbstractTest.java
deleted file mode 100644
index ff70b35..0000000
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAbstractTest.java
+++ /dev/null
@@ -1,1048 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.geode.tools.pulse.tests;
-
-import static org.junit.Assert.*;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.DecimalFormat;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-
-import com.jayway.awaitility.Awaitility;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-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 org.apache.geode.internal.admin.SSLConfig;
-import org.apache.geode.management.internal.JettyHelper;
-import org.apache.geode.tools.pulse.internal.data.PulseConstants;
-
-@SuppressWarnings("deprecated")
-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;
-
- /* 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";
-
- private static final DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
-
- public static void setUpServer(String username, String password, String jsonAuthFile) throws Exception {
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-
- jmxPropertiesFile = classLoader.getResource("test.properties").getPath();
- path = getPulseWarPath();
- server = Server.createServer(9999, jmxPropertiesFile, jsonAuthFile);
-
- String host = "localhost";
- int port = 8080;
- String context = "/pulse";
-
- jetty = JettyHelper.initJetty(host, port, new SSLConfig());
- JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
- jetty.start();
-
- pulseURL = "http://" + host + ":" + port + context;
-
- Awaitility.await().until(()->jetty.isStarted());
-
- driver = new FirefoxDriver();
- driver.manage().window().maximize();
- driver.manage().timeouts().implicitlyWait(5, 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(password);
- 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"));
- }
- });
- assertNotNull(userNameOnPulsePage);
- driver.navigate().refresh();
- Thread.sleep(7000);
- }
-
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- driver.close();
- jetty.stop();
- }
-
- @Before
- public void setup() throws Exception {
- // Make sure we go to the home page first
- searchByXPathAndClick(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- }
-
- 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);
- assertNotNull(element);
- element.click();
- }
-
- protected void searchByIdAndClick(String id) {
- WebElement element = driver.findElement(By.id(id));
- assertNotNull(element);
- element.click();
- }
-
- protected void searchByClassAndClick(String Class) {
- WebElement element = driver.findElement(By.className(Class));
- assertNotNull(element);
- element.click();
- }
-
- protected void searchByXPathAndClick(String xpath) {
- WebElement element = driver.findElement(By.xpath(xpath));
- 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));
- }
- });
- 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));
- }
- });
- 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 web element
- 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 web element
- movePicker.perform();
- }
-
-
- @Test
- public void testClusterLocatorCount() throws IOException {
- String clusterLocators = driver
- .findElement(By.id(CLUSTER_VIEW_LOCATORS_ID)).getText();
-
- String totallocators = JMXProperties.getInstance().getProperty("server.S1.locatorCount");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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"));
- assertEquals(gridHeapUsagestring, HeapUsage);
- }
- }
-
- @Test
- public void testClusterGridViewCPUUsage() throws Exception {
- 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();
- assertEquals(gridCPUUsage, CPUUsage);
- }
- }
-
-
- public void testRgraphWidget() throws InterruptedException {
- searchByIdAndClick("default_rgraph_button");
- searchByIdAndClick("h1");
- searchByIdAndClick("M1");
- }
-
- @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");
- assertEquals(memberRegionCount, RegionCount);
- }
-
- @Test
- public void testMemberNumThread() throws InterruptedException {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- String ThreadCount = driver.findElement(By.id(MEMBER_VIEW_THREAD_ID)).getText();
- String memberThreadCount = JMXProperties.getInstance().getProperty("member.M1.numThreads");
- assertEquals(memberThreadCount, ThreadCount);
- }
-
- @Test
- public void testMemberTotalFileDescriptorOpen() throws InterruptedException {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- String SocketCount = driver.findElement(By.id(MEMBER_VIEW_SOCKETS_ID))
- .getText();
- String memberSocketCount = JMXProperties.getInstance().getProperty(
- "member.M1.totalFileDescriptorOpen");
- assertEquals(memberSocketCount, SocketCount);
- }
-
- @Test
- public void testMemberLoadAverage() throws InterruptedException {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- String LoadAvg = driver.findElement(By.id(MEMBER_VIEW_LOADAVG_ID))
- .getText();
- String memberLoadAvg = JMXProperties.getInstance().getProperty(
- "member.M1.loadAverage");
- assertEquals(df2.format(Double.valueOf(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));
- 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));
- assertEquals(memberOffHeapUsedSize, OffHeapUsedSize);
- }
-
- @Test
- public void testMemberJVMPauses() throws Exception {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- String JVMPauses = driver.findElement(By.id(MEMBER_VIEW_JVMPAUSES_ID))
- .getText();
- String memberGcPausesAvg = JMXProperties.getInstance().getProperty(
- "member.M1.JVMPauses");
- assertEquals(memberGcPausesAvg, JVMPauses);
- }
-
- @Test
- public void testMemberCPUUsage() {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- String CPUUsagevalue = driver.findElement(By.id(MEMBER_VIEW_CPUUSAGE_ID))
- .getText();
- String memberCPUUsage = JMXProperties.getInstance().getProperty(
- "member.M1.cpuUsage");
- assertEquals(memberCPUUsage, CPUUsagevalue);
- }
-
- @Test // difference between UI and properties file
- public void testMemberAverageReads() {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- 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));
- assertEquals(memberReadPerSec, ReadPerSec);
- }
-
- @Test
- public void testMemberAverageWrites() throws InterruptedException {
- testRgraphWidget();
- String WritePerSec = driver.findElement(By.id(MEMBER_VIEW_WRITEPERSEC_ID))
- .getText();
- String memberWritePerSec = JMXProperties.getInstance().getProperty(
- "member.M1.averageWrites");
- assertEquals(memberWritePerSec, WritePerSec);
- }
-
-
- @Test
- public void testMemberGridViewData() throws InterruptedException {
- testRgraphWidget();
- searchByXPathAndClick(PulseTestLocators.MemberDetailsView.gridButtonXpath);
- // get the number of rows on the grid
- List<WebElement> noOfRows = driver.findElements(By.xpath("//table[@id='memberRegionsList']/tbody/tr"));
- String MemberRegionName = driver.findElement(By.xpath("//table[@id='memberRegionsList']/tbody/tr[2]/td[1]")).getText();
- String memberRegionName = JMXProperties.getInstance().getProperty("region.R1.name");
- 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");
- 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");
- assertEquals(memberRegionEntryCount, MemberRegionEntryCount);
- }
-
- @Test
- public void testDropDownList() throws InterruptedException {
- searchByIdAndClick("default_grid_button");
- searchByIdAndClick("M1&M1");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- 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");
- assertEquals(dataViewRegionName, DataViewRegionName);
-
- String DataViewRegionType = driver.findElement(
- By.xpath("//*[id('6')/x:td[2]")).getText();
- String dataViewRegionType = JMXProperties.getInstance().getProperty(
- "region.R2.regionType");
- assertEquals(dataViewRegionType, DataViewRegionType);
-
- String DataViewEntryCount = driver.findElement(
- By.xpath("//*[id('6')/x:td[3]")).getText();
- String dataViewEntryCount = JMXProperties.getInstance().getProperty(
- "region.R2.systemRegionEntryCount");
- assertEquals(dataViewEntryCount, DataViewEntryCount);
-
- String DataViewEntrySize = driver.findElement(
- By.xpath("//*[id('6')/x:td[4]")).getText();
- String dataViewEntrySize = JMXProperties.getInstance().getProperty(
- "region.R2.entrySize");
- 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("[\\/]", "");
- 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("[\\/]", "");
- 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("[\\/]", "");
- 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);
- assertEquals(databrowserMember1Names1, DataBrowserMember1Name1);
-
- String databrowserMember1Names2 = databrowserMember1Names.substring(3, 5);
- assertEquals(databrowserMember1Names2, DataBrowserMember1Name2);
-
- String databrowserMember1Names3 = databrowserMember1Names.substring(6, 8);
- 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);
- assertEquals(databrowserMember2Names1, DataBrowserMember2Name1);
-
- String databrowserMember2Names2 = databrowserMember2Names.substring(3, 5);
- 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);
- assertEquals(databrowserMember3Names1, DataBrowserMember3Name1);
-
- String databrowserMember3Names2 = databrowserMember3Names.substring(3, 5);
- 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("[\\/]", "");
-
- assertEquals(databrowserColocatedRegion1, DataBrowserColocatedRegion1);
- assertEquals(databrowserColocatedRegion2, DataBrowserColocatedRegion2);
- 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");
- 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");
- 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");
- assertEquals(df2.format(Double.valueOf(loadAvgM1)), LoadAvgM1);
-
-
- String ThreadsM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 3) + "]/div[2]/div"))
- .getText();
- String threadsM1 = JMXProperties.getInstance().getProperty(
- "member.M" + (i) + ".numThreads");
- 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");
- 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");
- 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");
- 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));
- 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
- assertTrue(driver.findElement(By.xpath("//a[text()='Data Regions']")).isDisplayed());
- assertTrue(driver.findElement(By.id("linkColocatedRegions")).isDisplayed());
- assertTrue(driver.findElement(By.linkText("All Regions")).isDisplayed());
-
- assertTrue(driver.findElement(By.xpath("//a[text()='Region Members']")).isDisplayed());
-
- assertTrue(driver.findElement(By.xpath("//a[text()='Queries']")).isDisplayed());
- assertTrue(driver.findElement(By.xpath("//label[text()='Query Editor']")).isDisplayed());
- assertTrue(driver.findElement(By.xpath("//label[text()='Result']")).isDisplayed());
- assertTrue(driver.findElement(By.xpath("//input[@value='Export Result']")).isDisplayed());
- assertTrue(driver.findElement(By.id("btnExecuteQuery")).isDisplayed());
- assertTrue(driver.findElement(By.xpath("//input[@value='Clear']")).isDisplayed());
- assertTrue(driver.findElement(By.id("dataBrowserQueryText")).isDisplayed());
-
- assertTrue(driver.findElement(By.id("historyIcon")).isDisplayed());
-
- //Actual query execution
-
- driver.findElement(By.id("dataBrowserQueryText")).sendKeys("Query1");
-
- // Assert data regions are displayed
- assertTrue(driver.findElement(By.id("treeDemo_1")).isDisplayed());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAuthTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAuthTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAuthTest.java
deleted file mode 100644
index b292a2a..0000000
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAuthTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.geode.tools.pulse.tests;
-
-import org.apache.geode.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("pulseUser", "12345", "pulse-auth.json");
- }
-}
[2/6] incubator-geode git commit: GEODE-999: Converted from Firefox
driver to PhantomJS driver to run UITests in headless mode
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
new file mode 100644
index 0000000..709a831
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
@@ -0,0 +1,978 @@
+/*
+ * 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 org.apache.geode.tools.pulse.tests.ui;
+
+import static org.junit.Assert.*;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import com.jayway.awaitility.Awaitility;
+import org.apache.commons.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.phantomjs.PhantomJSDriver;
+import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import org.apache.geode.internal.admin.SSLConfig;
+import org.apache.geode.management.internal.JettyHelper;
+import org.apache.geode.test.junit.rules.RetryRule;
+import org.apache.geode.tools.pulse.internal.data.PulseConstants;
+import org.apache.geode.tools.pulse.tests.JMXProperties;
+import org.apache.geode.tools.pulse.tests.PulseTestLocators;
+import org.apache.geode.tools.pulse.tests.Server;
+
+@SuppressWarnings("deprecated")
+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;
+
+ /* 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";
+
+ private static final DecimalFormat df2 = new DecimalFormat(PulseConstants.DECIMAL_FORMAT_PATTERN);
+
+ @Rule
+ public TestRule testWatcher = new TestWatcher() {
+ @Override
+ public void failed(Throwable t, Description test) {
+ takeScreenshot(test.getDisplayName());
+ }
+ };
+
+ @Rule
+ public RetryRule retryRule = new RetryRule(5);
+
+ public void takeScreenshot(String screenshotName) {
+ if (driver instanceof TakesScreenshot) {
+ File tempFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
+ try {
+ FileUtils.copyFile(tempFile, new File("build/screenshots/" + screenshotName + ".png"));
+ } catch (IOException e) {
+ // TODO handle exception
+ }
+ }
+ }
+
+
+ public static void setUpServer(String username, String password, String jsonAuthFile) throws Exception {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+ jmxPropertiesFile = classLoader.getResource("test.properties").getPath();
+ path = getPulseWarPath();
+ server = Server.createServer(9999, jmxPropertiesFile, jsonAuthFile);
+
+ String host = "localhost";
+ int port = 8080;
+ String context = "/pulse";
+
+ jetty = JettyHelper.initJetty(host, port, new SSLConfig());
+ JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
+ jetty.start();
+
+ pulseURL = "http://" + host + ":" + port + context;
+
+ Awaitility.await().until(() -> jetty.isStarted());
+
+ setUpWebDriver();
+ 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();
+
+ 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"));
+ }
+ });
+ assertNotNull(userNameOnPulsePage);
+ driver.navigate().refresh();
+ Thread.sleep(7000);
+ }
+
+ private static void setUpWebDriver() {
+ DesiredCapabilities capabilities = new DesiredCapabilities();
+ capabilities.setJavascriptEnabled(true);
+ capabilities.setCapability("takesScreenshot", true);
+ capabilities.setCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0) Gecko/20121026 Firefox/16.0");
+
+ driver = new PhantomJSDriver(capabilities);
+ driver.manage().window().maximize();
+ driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ driver.close();
+ jetty.stop();
+ }
+
+ @Before
+ public void setup() throws Exception {
+ // Make sure we go to the home page first
+ searchByXPathAndClick(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ }
+
+ 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);
+ assertNotNull(element);
+ element.click();
+ }
+
+ protected void searchByIdAndClick(String id) {
+ WebElement element = driver.findElement(By.id(id));
+ assertNotNull(element);
+ element.click();
+ }
+
+ protected void searchByClassAndClick(String Class) {
+ WebElement element = driver.findElement(By.className(Class));
+ assertNotNull(element);
+ element.click();
+ }
+
+ protected void searchByXPathAndClick(String xpath) {
+ WebElement element = driver.findElement(By.xpath(xpath));
+ 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));
+ }
+ });
+ 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));
+ }
+ });
+ 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 web element
+ 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 web element
+ movePicker.perform();
+ }
+
+
+ @Test
+ public void testClusterLocatorCount() throws IOException {
+ String clusterLocators = driver.findElement(By.id(CLUSTER_VIEW_LOCATORS_ID)).getText();
+
+ String totallocators = JMXProperties.getInstance().getProperty("server.S1.locatorCount");
+ 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");
+ 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");
+ assertEquals(clusterMembers, totalMembers);
+ }
+
+ @Test
+ public void testClusterNumClient() {
+ String clusterClients = driver.findElement(By.id(CLUSTER_CLIENTS_ID)).getText();
+ String totalclients = JMXProperties.getInstance().getProperty("server.S1.numClients");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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"));
+ assertEquals(gridHeapUsagestring, HeapUsage);
+ }
+ }
+
+ @Test
+ public void testClusterGridViewCPUUsage() throws Exception {
+ 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();
+ assertEquals(gridCPUUsage, CPUUsage);
+ }
+ }
+
+
+ public void testRgraphWidget() throws InterruptedException {
+ searchByIdAndClick("default_rgraph_button");
+ searchByIdAndClick("h1");
+ searchByIdAndClick("M1");
+ }
+
+ @Test
+ @Ignore("ElementNotVisible with phantomJS")
+ 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");
+ assertEquals(memberRegionCount, RegionCount);
+ }
+
+ @Test
+ public void testMemberNumThread() throws InterruptedException {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ String ThreadCount = driver.findElement(By.id(MEMBER_VIEW_THREAD_ID)).getText();
+ String memberThreadCount = JMXProperties.getInstance().getProperty("member.M1.numThreads");
+ assertEquals(memberThreadCount, ThreadCount);
+ }
+
+ @Test
+ public void testMemberTotalFileDescriptorOpen() throws InterruptedException {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ String SocketCount = driver.findElement(By.id(MEMBER_VIEW_SOCKETS_ID)).getText();
+ String memberSocketCount = JMXProperties.getInstance().getProperty("member.M1.totalFileDescriptorOpen");
+ assertEquals(memberSocketCount, SocketCount);
+ }
+
+ @Test
+ public void testMemberLoadAverage() throws InterruptedException {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ String LoadAvg = driver.findElement(By.id(MEMBER_VIEW_LOADAVG_ID)).getText();
+ String memberLoadAvg = JMXProperties.getInstance().getProperty("member.M1.loadAverage");
+ assertEquals(df2.format(Double.valueOf(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));
+ 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));
+ assertEquals(memberOffHeapUsedSize, OffHeapUsedSize);
+ }
+
+ @Test
+ public void testMemberJVMPauses() throws Exception {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ String JVMPauses = driver.findElement(By.id(MEMBER_VIEW_JVMPAUSES_ID)).getText();
+ String memberGcPausesAvg = JMXProperties.getInstance().getProperty("member.M1.JVMPauses");
+ assertEquals(memberGcPausesAvg, JVMPauses);
+ }
+
+ @Test
+ public void testMemberCPUUsage() {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ String CPUUsagevalue = driver.findElement(By.id(MEMBER_VIEW_CPUUSAGE_ID)).getText();
+ String memberCPUUsage = JMXProperties.getInstance().getProperty("member.M1.cpuUsage");
+ assertEquals(memberCPUUsage, CPUUsagevalue);
+ }
+
+ @Test // difference between UI and properties file
+ public void testMemberAverageReads() {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ 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));
+ assertEquals(memberReadPerSec, ReadPerSec, 0.001);
+ }
+
+ @Test
+ @Ignore("ElementNotVisible with phantomJS")
+ public void testMemberAverageWrites() throws InterruptedException {
+ testRgraphWidget();
+ String WritePerSec = driver.findElement(By.id(MEMBER_VIEW_WRITEPERSEC_ID)).getText();
+ String memberWritePerSec = JMXProperties.getInstance().getProperty("member.M1.averageWrites");
+ assertEquals(memberWritePerSec, WritePerSec);
+ }
+
+
+ @Test
+ @Ignore("ElementNotVisible with phantomJS")
+ public void testMemberGridViewData() throws InterruptedException {
+ testRgraphWidget();
+ searchByXPathAndClick(PulseTestLocators.MemberDetailsView.gridButtonXpath);
+ // get the number of rows on the grid
+ List<WebElement> noOfRows = driver.findElements(By.xpath("//table[@id='memberRegionsList']/tbody/tr"));
+ String MemberRegionName = driver.findElement(By.xpath("//table[@id='memberRegionsList']/tbody/tr[2]/td[1]")).getText();
+ String memberRegionName = JMXProperties.getInstance().getProperty("region.R1.name");
+ 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");
+ 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");
+ assertEquals(memberRegionEntryCount, MemberRegionEntryCount);
+ }
+
+ @Test
+ public void testDropDownList() throws InterruptedException {
+ searchByIdAndClick("default_grid_button");
+ searchByIdAndClick("M1&M1");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ 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");
+ assertEquals(dataViewRegionName, DataViewRegionName);
+
+ String DataViewRegionType = driver.findElement(By.xpath("//*[id('6')/x:td[2]")).getText();
+ String dataViewRegionType = JMXProperties.getInstance().getProperty("region.R2.regionType");
+ assertEquals(dataViewRegionType, DataViewRegionType);
+
+ String DataViewEntryCount = driver.findElement(By.xpath("//*[id('6')/x:td[3]")).getText();
+ String dataViewEntryCount = JMXProperties.getInstance().getProperty("region.R2.systemRegionEntryCount");
+ assertEquals(dataViewEntryCount, DataViewEntryCount);
+
+ String DataViewEntrySize = driver.findElement(By.xpath("//*[id('6')/x:td[4]")).getText();
+ String dataViewEntrySize = JMXProperties.getInstance().getProperty("region.R2.entrySize");
+ 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("[\\/]", "");
+ 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("[\\/]", "");
+ 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("[\\/]", "");
+ 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);
+ assertEquals(databrowserMember1Names1, DataBrowserMember1Name1);
+
+ String databrowserMember1Names2 = databrowserMember1Names.substring(3, 5);
+ assertEquals(databrowserMember1Names2, DataBrowserMember1Name2);
+
+ String databrowserMember1Names3 = databrowserMember1Names.substring(6, 8);
+ 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);
+ assertEquals(databrowserMember2Names1, DataBrowserMember2Name1);
+
+ String databrowserMember2Names2 = databrowserMember2Names.substring(3, 5);
+ 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);
+ assertEquals(databrowserMember3Names1, DataBrowserMember3Name1);
+
+ String databrowserMember3Names2 = databrowserMember3Names.substring(3, 5);
+ 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("[\\/]", "");
+
+ assertEquals(databrowserColocatedRegion1, DataBrowserColocatedRegion1);
+ assertEquals(databrowserColocatedRegion2, DataBrowserColocatedRegion2);
+ 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");
+ 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");
+ 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");
+ assertEquals(df2.format(Double.valueOf(loadAvgM1)), LoadAvgM1);
+
+
+ String ThreadsM1 = driver.findElement(By.xpath("//div[@id='_tooltip']/div/div/div[2]/div[" + (j + 3) + "]/div[2]/div")).getText();
+ String threadsM1 = JMXProperties.getInstance().getProperty("member.M" + (i) + ".numThreads");
+ 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");
+ 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");
+ 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");
+ 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));
+ assertEquals(entrySize, EntrySize, 0.001);
+ 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
+ assertTrue(driver.findElement(By.xpath("//a[text()='Data Regions']")).isDisplayed());
+ assertTrue(driver.findElement(By.id("linkColocatedRegions")).isDisplayed());
+ assertTrue(driver.findElement(By.linkText("All Regions")).isDisplayed());
+
+ assertTrue(driver.findElement(By.xpath("//a[text()='Region Members']")).isDisplayed());
+
+ assertTrue(driver.findElement(By.xpath("//a[text()='Queries']")).isDisplayed());
+ assertTrue(driver.findElement(By.xpath("//label[text()='Query Editor']")).isDisplayed());
+ assertTrue(driver.findElement(By.xpath("//label[text()='Result']")).isDisplayed());
+ assertTrue(driver.findElement(By.xpath("//input[@value='Export Result']")).isDisplayed());
+ assertTrue(driver.findElement(By.id("btnExecuteQuery")).isDisplayed());
+ assertTrue(driver.findElement(By.xpath("//input[@value='Clear']")).isDisplayed());
+ assertTrue(driver.findElement(By.id("dataBrowserQueryText")).isDisplayed());
+
+ assertTrue(driver.findElement(By.id("historyIcon")).isDisplayed());
+
+ //Actual query execution
+
+ driver.findElement(By.id("dataBrowserQueryText")).sendKeys("Query1");
+
+ // Assert data regions are displayed
+ assertTrue(driver.findElement(By.id("treeDemo_1")).isDisplayed());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAuthTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAuthTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAuthTest.java
new file mode 100644
index 0000000..15b657f
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAuthTest.java
@@ -0,0 +1,34 @@
+/*
+ * 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 org.apache.geode.tools.pulse.tests.ui;
+
+import org.apache.geode.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("pulseUser", "12345", "pulse-auth.json");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAutomatedTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAutomatedTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAutomatedTest.java
new file mode 100644
index 0000000..ee5e60f
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAutomatedTest.java
@@ -0,0 +1,768 @@
+/*
+ * 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.
+ *
+ */
+/**
+ * This test class contains automated tests for Pulse application related to
+ * 1. Different grid data validations for example - Topology, Server Group, Redundancy Zone
+ * 2. Data Browser
+ * 3.
+ *
+ * @since GemFire 2014-04-02
+ */
+package org.apache.geode.tools.pulse.tests.ui;
+
+import static org.junit.Assert.*;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+import org.junit.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;
+
+import org.apache.geode.test.junit.categories.UITest;
+import org.apache.geode.tools.pulse.tests.PulseTestData;
+import org.apache.geode.tools.pulse.tests.PulseTestLocators;
+
+@Category(UITest.class)
+public class PulseAutomatedTest extends PulseAbstractTest {
+
+ @BeforeClass
+ public static void beforeClassSetup() throws Exception {
+ setUpServer("pulseUser", "12345", "pulse-auth.json");
+ }
+
+ @Test
+ public void serverGroupGridDataValidation() {
+ navigateToServerGroupGridView();
+ validateServerGroupGridData();
+ }
+
+ @Test
+ public void redundancyZonesGridDataValidation() {
+ navigateToRedundancyZonesGridView();
+ validateRedundancyZonesGridData();
+ }
+
+ @Test
+ public void topologyGridDataValidation() {
+ navigateToTopologyGridView();
+ validateTopologyGridData();
+ }
+
+ @Test
+ public void dataViewGridDataValidation() {
+ navigateToDataPrespectiveGridView();
+ validateDataPrespectiveGridData();
+ }
+
+ @Test
+ public void regionDetailsGridDataValidation() {
+ navigateToRegionDetailsGridView();
+ validateRegionDetailsGridData();
+
+ }
+
+ @Test
+ public void regionDetailsNavigationTest() {
+ navigateToRegionDetailsView();
+ assertEquals("/R2", getTextUsingId(PulseTestLocators.RegionDetailsView.regionNameDivId));
+ }
+
+ @Test
+ public void regionName() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.name"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionNameDivId));
+ }
+
+ @Test
+ public void regionPath() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.fullPath"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionPathId));
+ }
+
+ @Test
+ public void regionType() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.regionType"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionTypeId));
+ }
+
+ @Test
+ public void regionMembers() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.memberCount"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionMembersTextId));
+ }
+
+ @Test
+ public void regionEmptyNodes() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.emptyNodes"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionEmptyNodesId));
+ }
+
+ @Test
+ public void regionEntryCount() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.systemRegionEntryCount"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionEntryCountTextId));
+ }
+
+ @Test
+ public void regionDiskUsage() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.diskUsage"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionDiskUsageId));
+ }
+
+ @Test
+ public void regionPersistence() {
+ navigateToRegionDetailsView();
+ assertEquals(getPersistanceEnabled(getPropertyValue("region.R2.persistentEnabled")), getTextUsingId(PulseTestLocators.RegionDetailsView.regionPersistenceId));
+ }
+
+ @Ignore("WIP")
+ @Test
+ public void regionMemoryUsage() {
+ navigateToRegionDetailsView();
+ // need to check the respective property values
+ }
+
+ @Test
+ public void regionInMemoryRead() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.getsRate"), getTextUsingId(PulseTestLocators.RegionDetailsView.inMemoryReadsId));
+
+ }
+
+ @Test
+ public void regionInMemoryWrites() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.putsRate"), getTextUsingId(PulseTestLocators.RegionDetailsView.inMemoryWritesId));
+ }
+
+ @Test
+ public void regionDiskRead() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.diskReadsRate"), getTextUsingId(PulseTestLocators.RegionDetailsView.diskReadsId));
+ }
+
+ @Test
+ public void regionDiskWrites() {
+ navigateToRegionDetailsView();
+ assertEquals(getPropertyValue("region.R2.diskWritesRate"), getTextUsingId(PulseTestLocators.RegionDetailsView.diskWritesId));
+ }
+
+ @Test
+ public void clickHostShowsMemberTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH1Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH2Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH3Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
+ }
+
+ @Test
+ @Ignore("Issue with highlighting")
+ public void verifyHostTooltipsOfTopologyGraphTest() {
+ for (int i = 1; i <= 3; i++) {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ mouseClickAndHoldOverElementById("h" + i);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostNameTTXpath, getPropertyValue("member.M" + i + ".host"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.cpuUsageTTXpath, "0%");
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memoryUsageTTXpath, getPropertyValue("member.M" + i + ".UsedMemory"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.loadAvgTTXpath, getPropertyValue("member.M" + i + ".loadAverage"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.soketsTTXpath, getPropertyValue("member.M" + i + ".totalFileDescriptorOpen"));
+ mouseReleaseById("h" + i);
+ driver.navigate().refresh();
+ }
+ }
+
+ @Ignore("Issues with member tooltip xpath")
+ @Test
+ public void verifyMemberTooltipsOfTopologyGraphTest() {
+
+ verifyElementPresentById(PulseTestLocators.TopologyView.nodeH1Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH1Id);
+ mouseClickAndHoldOverElementById(PulseTestLocators.TopologyView.memberM1Id);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memNameTTXpath, getPropertyValue("member.M1.member"));
+ //verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memCpuUsageTTXpath, getPropertyValue("member.M1.cpuUsage") + "%");
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.jvmPausesTTXpath, getPropertyValue("member.M1.JVMPauses"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.regionsTTXpath, getPropertyValue("member.M1.totalRegionCount"));
+ verifyElementPresentById(PulseTestLocators.TopologyView.nodeH2Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH2Id);
+ mouseClickAndHoldOverElementById(PulseTestLocators.TopologyView.memberM2Id);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memNameTTXpath, getPropertyValue("member.M2.member"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memCpuUsageTTXpath, getPropertyValue("member.M2.cpuUsage") + "%");
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.jvmPausesTTXpath, getPropertyValue("member.M2.JVMPauses"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.regionsTTXpath, getPropertyValue("member.M2.totalRegionCount"));
+
+ verifyElementPresentById(PulseTestLocators.TopologyView.nodeH3Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH3Id);
+ mouseClickAndHoldOverElementById(PulseTestLocators.TopologyView.memberM3Id);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memNameTTXpath, getPropertyValue("member.M3.member"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memCpuUsageTTXpath, getPropertyValue("member.M3.cpuUsage") + "%");
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.jvmPausesTTXpath, getPropertyValue("member.M3.JVMPauses"));
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.regionsTTXpath, getPropertyValue("member.M3.totalRegionCount"));
+
+ }
+
+ @Test
+ public void VerifyRGraphTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ verifyElementPresentById(PulseTestLocators.TopologyView.nodeH1Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.nodeH2Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.nodeH3Id);
+ }
+
+ @Test
+ @Ignore("ElementNotVisible with phantomJS")
+ public void clickMembersOfTopologyGraphTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH1Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.memberM1Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH2Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.memberM2Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.nodeH3Id);
+ clickElementUsingId(PulseTestLocators.TopologyView.memberM3Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ }
+
+ @Test
+ public void clickTreeMapViewShowingTreeMapTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
+ }
+
+ @Test
+ public void verifyMembersPresentInTreeMapTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
+ verifyTextPresrntById(PulseTestLocators.TopologyView.memberM1Id, "M1");
+ verifyTextPresrntById(PulseTestLocators.TopologyView.memberM2Id, "M2");
+ verifyTextPresrntById(PulseTestLocators.TopologyView.memberM3Id, "M3");
+ }
+
+ @Test
+ public void clickMemberNavigatingToCorrespondingRegionTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
+ verifyTextPresrntById(PulseTestLocators.TopologyView.memberM1Id, "M1");
+ clickElementUsingId(PulseTestLocators.TopologyView.memberM1Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
+ verifyTextPresrntById(PulseTestLocators.TopologyView.memberM2Id, "M2");
+ clickElementUsingId(PulseTestLocators.TopologyView.memberM2Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
+ verifyTextPresrntById(PulseTestLocators.TopologyView.memberM3Id, "M3");
+ clickElementUsingId(PulseTestLocators.TopologyView.memberM3Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ }
+
+ @Test
+ public void clickGridButtonShowsGridTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.idM1Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM1Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH1Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.idM2Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM2Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH2Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.idM3Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM3Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH3Xpath);
+ }
+
+ @Test
+ public void verifyMembersPresentInGridTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM1Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.nameM1Xpath, "M1");
+
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM2Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.nameM2Xpath, "M2");
+
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM3Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.nameM3Xpath, "M3");
+ }
+
+ @Test
+ public void verifyHostNamesInGridTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH1Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostH1Xpath, "h1");
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH2Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostH2Xpath, "h2");
+ verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH3Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostH3Xpath, "h3");
+ }
+
+ @Test
+ public void clickOnGridMemNameNavigatingToCorrespondingRegionTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.nameM1Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.nameM2Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.nameM3Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ }
+
+ @Test
+ public void verifyMembersPresentInSvrGrpTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
+ verifyElementPresentById(PulseTestLocators.ServerGroups.serverGrp1Id);
+ verifyElementPresentById(PulseTestLocators.ServerGroups.serverGrp2Id);
+ verifyElementPresentById(PulseTestLocators.ServerGroups.serverGrp3Id);
+
+ verifyElementPresentById(PulseTestLocators.ServerGroups.sg1M1Id);
+ verifyElementPresentById(PulseTestLocators.ServerGroups.sg1M2Id);
+ verifyElementPresentById(PulseTestLocators.ServerGroups.sg1M3Id);
+
+ verifyElementPresentById(PulseTestLocators.ServerGroups.sg2M1Id);
+ verifyElementPresentById(PulseTestLocators.ServerGroups.sg2M2Id);
+
+ verifyElementPresentById(PulseTestLocators.ServerGroups.sg3M3Id);
+ }
+
+ @Test
+ @Ignore("ElementNotVisible with phantomJS")
+ public void expandAndCloseServerGroupsTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ //waitForElement(findElementByXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath));
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp1Xpath);
+ verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp1Id, "style", "width: 720px; height: 415px;");
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp1Xpath);
+ verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp1Id, "style", "width: 239.667px; height: 399px;");
+
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp2Xpath);
+ verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp2Id, "style", "width: 720px; height: 415px;");
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp2Xpath);
+ verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp2Id, "style", "width: 239.667px; height: 399px;");
+
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp3Xpath);
+ verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp3Id, "style", "width: 720px; height: 415px;");
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp3Xpath);
+ verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp3Id, "style", "width: 239.667px; height: 399px;");
+ }
+
+ @Test
+ public void verifyMembersInServGrpTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
+
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.serverGrp1Id, "SG1");
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.serverGrp2Id, "SG2");
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.serverGrp3Id, "SG3");
+
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.sg1M1Id, "M1");
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.sg1M2Id, "M2");
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.sg1M3Id, "M3");
+
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.sg2M1Id, "M1");
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.sg2M2Id, "M2");
+
+ verifyTextPresrntById(PulseTestLocators.ServerGroups.sg3M3Id, "M3");
+ }
+
+ @Test
+ public void memberNavigationFromServGrpTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
+ clickElementUsingId(PulseTestLocators.ServerGroups.sg1M1Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.sg1M2Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.sg1M3Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.sg2M1Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.sg2M2Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.sg3M3Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ }
+
+ @Test
+ public void clickServGrpGridButtonShowsGridTest() {
+ navigateToServerGroupGridView();
+ verifyElementPresentByXpath(PulseTestLocators.ServerGroups.idSG1M3Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.ServerGroups.idSG1M2Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.ServerGroups.idSG1M1Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.ServerGroups.nameM3Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.ServerGroups.nameM2Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.ServerGroups.nameM1Xpath);
+
+ }
+
+ @Test
+ public void memberNavigationFromServGrpGridTest() {
+ navigateToServerGroupGridView();
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.idSG1M3Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ navigateToServerGroupGridView();
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.idSG1M1Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ navigateToServerGroupGridView();
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.idSG1M2Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ }
+
+ @Test
+ public void verifyZonePresentTest() {
+ navigateToRedundancyZonesTreeView();
+ verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.zoneRZ1RZ2Xpath);
+ verifyElementPresentById(PulseTestLocators.RedundancyZone.zoneRZ2Id);
+ }
+
+ @Test
+ public void expandAndCloseRdncyZoneTest() {
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.zoneRZ1RZ2Xpath);
+ verifyElementAttributeById(PulseTestLocators.RedundancyZone.zoneRZ1Id, "style", "width: 720px; height: 415px;");
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.zoneRZ1RZ2Xpath);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.zoneRZ2Xpath);
+ verifyElementAttributeById(PulseTestLocators.RedundancyZone.zoneRZ2Id, "style", "width: 720px; height: 415px;");
+
+ }
+
+ @Test
+ public void clickRZMembersNavigationTest() {
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.m1RZ1RZ2Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.m2RZ1Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.m3RZ2Id);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ }
+
+ @Test
+ public void clickRZGridShowingGridTest() {
+ navigateToRedundancyZonesGridView();
+ verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.idM2Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.idM1Xpath);
+ verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.idM3Xpath);
+ verifyTextPresrntByXpath(PulseTestLocators.RedundancyZone.idM2Xpath, "M2");
+ verifyTextPresrntByXpath(PulseTestLocators.RedundancyZone.idM1Xpath, "M1");
+ verifyTextPresrntByXpath(PulseTestLocators.RedundancyZone.idM3Xpath, "M3");
+ }
+
+ @Test
+ public void clickRZGridMembersNavigationTest() {
+ navigateToRedundancyZonesGridView();
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.idM2Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
+ navigateToRedundancyZonesGridView();
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.idM1Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
+ navigateToRedundancyZonesGridView();
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.idM3Xpath);
+ verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
+ }
+
+
+ @Test
+ public void verifySortingOptionsTest() {
+ clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
+ clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
+ verifyElementPresentById(PulseTestLocators.TopologyView.hotSpotId);
+ clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
+ verifyElementPresentByLinkText("Heap Usage");
+ verifyElementPresentByLinkText("CPU Usage");
+ }
+
+ /*
+ * HotSpot test scripts -
+ */
+ //--- Topology view
+
+ @Test
+ public void testHotSpotOptPrsntOnTopologyView() {
+ navigateToTopologyTreeView();
+ Assert.assertEquals(PulseTestData.Topology.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.TopologyView.hotSpotId));
+ }
+
+ @Test
+ public void testHotSpotOptionsTopologyView() {
+ navigateToTopologyTreeView();
+ clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
+ assertEquals(PulseTestData.Topology.hotSpotHeapLbl, getTextUsingXpath(PulseTestLocators.TopologyView.heapUsageXpath));
+ assertEquals(PulseTestData.Topology.hotSpotCPULbl, getTextUsingXpath(PulseTestLocators.TopologyView.cpuUsageXpath));
+ }
+
+ @Test
+ public void testCpuUsageNavigationOnTopologyView() {
+ navigateToTopologyTreeView();
+ clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.cpuUsageXpath);
+ assertEquals(PulseTestData.Topology.hotSpotCPULbl, getTextUsingId(PulseTestLocators.TopologyView.hotSpotId));
+ }
+
+ @Test
+ public void testHeapUsageNavigationOnTopologyView() {
+ navigateToTopologyTreeView();
+ clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.heapUsageXpath);
+ assertEquals(PulseTestData.Topology.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.TopologyView.hotSpotId));
+ }
+
+ @Test
+ public void testSortingUsingCpuUsageOnTopologyView() {
+ navigateToTopologyTreeView();
+ clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.cpuUsageXpath);
+ assertMemberSortingByCpuUsage();
+ }
+
+ @Test
+ public void testSortingUsingHeapUsageOnTopologyView() {
+ navigateToTopologyTreeView();
+ clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.TopologyView.heapUsageXpath);
+ assertMemberSortingByHeapUsage();
+ }
+
+ //--- Server Group view
+
+ @Test
+ public void testHotSpotOptPrsntOnServerGroupView() {
+ navigateToServerGroupTreeView();
+ assertEquals(PulseTestData.ServerGroups.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.ServerGroups.hotSpotId));
+ }
+
+ @Test
+ public void testHotSpotOptionsServerGroupView() {
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
+ assertEquals(PulseTestData.ServerGroups.hotSpotHeapLbl, getTextUsingXpath(PulseTestLocators.ServerGroups.heapUsageXpath));
+ assertEquals(PulseTestData.ServerGroups.hotSpotCPULbl, getTextUsingXpath(PulseTestLocators.ServerGroups.cpuUsageXpath));
+ }
+
+ @Test
+ public void testCpuUsageNavigationOnServerGroupView() {
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.cpuUsageXpath);
+ assertEquals(PulseTestData.ServerGroups.hotSpotCPULbl, getTextUsingId(PulseTestLocators.ServerGroups.hotSpotId));
+ }
+
+ @Test
+ public void testHeapUsageNavigationOnServerGroupView() {
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.heapUsageXpath);
+ assertEquals(PulseTestData.ServerGroups.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.ServerGroups.hotSpotId));
+ }
+
+ @Test
+ public void testSortingUsingHeapUsageOnServerGroupView() {
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.heapUsageXpath);
+ assertMemberSortingBySgHeapUsage();
+ }
+
+ @Test
+ public void testSortingUsingCpuUsageOnServerGroupView() {
+ navigateToServerGroupTreeView();
+ clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.ServerGroups.cpuUsageXpath);
+ assertMemberSortingBySgCpuUsage();
+ }
+
+ //--- Redundancy Zone view
+
+ @Test
+ public void testHotSpotOptPrsntOnRedundancyZoneView() {
+ navigateToRedundancyZonesTreeView();
+ assertEquals(PulseTestData.RedundancyZone.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.RedundancyZone.hotSpotId));
+ }
+
+
+ @Test
+ public void testHotSpotOptionsRedundancyZoneView() {
+ // navigate to Redundancy Zones - Tree View
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
+ assertEquals(PulseTestData.RedundancyZone.hotSpotHeapLbl, getTextUsingXpath(PulseTestLocators.RedundancyZone.heapUsageXpath));
+ assertEquals(PulseTestData.RedundancyZone.hotSpotCPULbl, getTextUsingXpath(PulseTestLocators.RedundancyZone.cpuUsageXpath));
+ }
+
+ @Test
+ public void testCpuUsageNavigationOnRedundancyZoneView() {
+ // navigate to Redundancy Zones - Tree View
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.cpuUsageXpath);
+ assertEquals(PulseTestData.RedundancyZone.hotSpotCPULbl, getTextUsingId(PulseTestLocators.RedundancyZone.hotSpotId));
+ }
+
+ @Test
+ public void testHeapUsageNavigationOnRedundancyZoneView() {
+ // navigate to Redundancy Zones - Tree View
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.heapUsageXpath);
+ assertEquals(PulseTestData.RedundancyZone.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.RedundancyZone.hotSpotId));
+ }
+
+ @Test
+ public void testSortingUsingHeapUsageOnRedundancyView() {
+ // navigate to Redundancy Zones - Tree View
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.heapUsageXpath);
+ assertMemberSortingByRzHeapUsage();
+ }
+
+ @Test
+ public void testSortingUsingCpuUsageOnRedundancyView() {
+ // navigate to Redundancy Zones - Tree View
+ navigateToRedundancyZonesTreeView();
+ clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
+ clickElementUsingXpath(PulseTestLocators.RedundancyZone.cpuUsageXpath);
+ assertMemeberSortingByRzCpuUsage();
+ }
+
+ @Test
+ public void testDataBrowserFilterFeature() {
+ // navigate to Data browser page
+ loadDataBrowserpage();
+ List<WebElement> regionLst = getRegionsFromDataBrowser();
+ String[] regionNames = new String[regionLst.size()];
+ for (int regionIndex = 0; regionIndex < regionLst.size(); regionIndex++) {
+ regionNames[regionIndex] = findElementByXpath(PulseTestLocators.DataBrowser.rgnSpanFirstPart + (regionIndex + 1) + PulseTestLocators.DataBrowser.rgnSpanSecondPart).getText();
+ }
+ // type each region name in region filter and verify respective region(s) are displayed in region list
+ for (String region : regionNames) {
+ findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).clear();
+ findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).sendKeys(region);
+
+ List<WebElement> regionLst1 = getRegionsFromDataBrowser();
+
+ for (int regionIndex = 1; regionIndex <= regionLst1.size(); regionIndex++) {
+ assertEquals(region, findElementByXpath(PulseTestLocators.DataBrowser.rgnSpanFirstPart + regionIndex + PulseTestLocators.DataBrowser.rgnSpanSecondPart).getText());
+ }
+ }
+ }
+
+ @Test
+ public void testDataBrowserFilterPartialRegionName() {
+ // navigate to Data browser page
+ loadDataBrowserpage();
+ findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).clear();
+
+ // type partial region name in region filter and verify that all the regions that contains that text displays
+ findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).sendKeys(PulseTestData.DataBrowser.partialRgnName);
+ List<WebElement> regionLst = getRegionsFromDataBrowser();
+
+ for (int regionIndex = 0; regionIndex < regionLst.size(); regionIndex++) {
+ assertTrue(findElementByXpath(PulseTestLocators.DataBrowser.rgnSpanFirstPart + (regionIndex + 1) + PulseTestLocators.DataBrowser.rgnSpanSecondPart).
+ getText().
+ contains(PulseTestData.DataBrowser.partialRgnName));
+ }
+ }
+
+ @Test
+ public void testDataBrowserClearButton() {
+ // navigate to Data browser page
+ loadDataBrowserpage();
+
+ sendKeysUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId, PulseTestData.DataBrowser.query1Text);
+ String editorTextBeforeClear = getTextUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId);
+ clickElementUsingXpath(PulseTestLocators.DataBrowser.btnClearXpath);
+ String editorTextAfterClear = getTextUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId);
+
+ assertFalse(PulseTestData.DataBrowser.query1Text.equals(editorTextAfterClear));
+ }
+
+ @Ignore("WIP") // Data Browser's Query History not showing any data on button click, therefore this test is failing
+ @Test
+ public void testDataBrowserHistoryQueue() {
+ // navigate to Data browser page
+ loadDataBrowserpage();
+
+ List<WebElement> numOfReg = driver.findElements(By.xpath(PulseTestLocators.DataBrowser.divDataRegions));
+
+ for (int i = 1; i <= numOfReg.size(); i++) {
+ if (getTextUsingId("treeDemo_" + i + "_span").equals(PulseTestData.DataBrowser.regName)) {
+ searchByIdAndClick("treeDemo_" + i + "_check"); //driver.findElement(By.id("treeDemo_" + i + "_check")).click();
+ }
+ }
+
+ sendKeysUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId, PulseAbstractTest.QUERY_TYPE_ONE);
+ clickElementUsingId(PulseTestLocators.DataBrowser.btnExecuteQueryId);
+
+ //Get required datetime format and extract date and hours from date time.
+ DateFormat dateFormat = new SimpleDateFormat(PulseTestData.DataBrowser.datePattern);
+ String queryDateTime = dateFormat.format(System.currentTimeMillis());
+ String queryTime[] = queryDateTime.split(":");
+ System.out.println("Query Time from System: " + queryTime[0]);
+
+
+ clickElementUsingId(PulseTestLocators.DataBrowser.historyIcon);
+ List<WebElement> historyLst = driver.findElements(By.xpath(PulseTestLocators.DataBrowser.historyLst));
+ String queryText = findElementByXpath(PulseTestLocators.DataBrowser.historyLst).findElement(By.cssSelector(PulseTestLocators.DataBrowser.queryText)).getText();
+ String historyDateTime = findElementByXpath(PulseTestLocators.DataBrowser.historyLst).findElement(By.cssSelector(PulseTestLocators.DataBrowser.historyDateTime)).getText();
+ 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
+ assertTrue(PulseAbstractTest.QUERY_TYPE_ONE.equals(queryText));
+ assertTrue(historyDateTime.contains(queryTime[0]));
+
+ }
+}
[3/6] incubator-geode git commit: GEODE-999: Converted from Firefox
driver to PhantomJS driver to run UITests in headless mode
Posted by ji...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAutomatedTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAutomatedTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAutomatedTest.java
deleted file mode 100644
index 778acf9..0000000
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseAutomatedTest.java
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-/**
-* This test class contains automated tests for Pulse application related to
-* 1. Different grid data validations for example - Topology, Server Group, Redundancy Zone
-* 2. Data Browser
-* 3.
-*
-*
-* @version 1.0
-* @since GemFire 2014-04-02
-*/
-package org.apache.geode.tools.pulse.tests;
-
-import static org.junit.Assert.*;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-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;
-
-import org.apache.geode.test.junit.categories.UITest;
-
-@Category(UITest.class)
-public class PulseAutomatedTest extends PulseAbstractTest {
-
- @BeforeClass
- public static void beforeClassSetup() throws Exception {
- setUpServer("pulseUser", "12345", "pulse-auth.json");
- }
-
- @Test
- public void serverGroupGridDataValidation() {
- navigateToServerGroupGridView();
- validateServerGroupGridData();
- }
-
- @Test
- public void redundancyZonesGridDataValidation() {
- navigateToRedundancyZonesGridView();
- validateRedundancyZonesGridData();
- }
-
- @Test
- public void topologyGridDataValidation() {
- navigateToTopologyGridView();
- validateTopologyGridData();
- }
-
- @Test
- public void dataViewGridDataValidation() {
- navigateToDataPrespectiveGridView();
- validateDataPrespectiveGridData();
- }
-
- @Test
- public void regionDetailsGridDataValidation() {
- navigateToRegionDetailsGridView();
- validateRegionDetailsGridData();
-
- }
-
- @Test
- public void regionDetailsNavigationTest() {
- navigateToRegionDetailsView();
- assertEquals("/R2", getTextUsingId(PulseTestLocators.RegionDetailsView.regionNameDivId));
- }
-
- @Test
- public void regionName() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.name"), getTextUsingId(PulseTestLocators.RegionDetailsView.regionNameDivId));
- }
-
- @Test
- public void regionPath() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.fullPath"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionPathId));
- }
-
- @Test
- public void regionType() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.regionType"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionTypeId));
- }
-
- @Test
- public void regionMembers() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.memberCount"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionMembersTextId));
- }
-
- @Test
- public void regionEmptyNodes() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.emptyNodes"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionEmptyNodesId));
- }
-
- @Test
- public void regionEntryCount() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.systemRegionEntryCount"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionEntryCountTextId));
- }
-
- @Test
- public void regionDiskUsage() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.diskUsage"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionDiskUsageId));
- }
-
- @Test
- public void regionPersistence() {
- navigateToRegionDetailsView();
- assertEquals(getPersistanceEnabled(getPropertyValue("region.R2.persistentEnabled")),
- getTextUsingId(PulseTestLocators.RegionDetailsView.regionPersistenceId));
- }
-
- @Ignore("WIP")
- @Test
- public void regionMemoryUsage() {
- navigateToRegionDetailsView();
- // need to check the respective property values
- }
-
- @Test
- public void regionInMemoryRead() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.getsRate"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.inMemoryReadsId));
-
- }
-
- @Test
- public void regionInMemoryWrites() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.putsRate"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.inMemoryWritesId));
- }
-
- @Test
- public void regionDiskRead() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.diskReadsRate"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.diskReadsId));
- }
-
- @Test
- public void regionDiskWrites() {
- navigateToRegionDetailsView();
- assertEquals(getPropertyValue("region.R2.diskWritesRate"),
- getTextUsingId(PulseTestLocators.RegionDetailsView.diskWritesId));
- }
-
- @Test
- public void clickHostShowsMemberTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH1Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH2Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH3Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
- }
-
- @Test
- @Ignore("Issue with highlighting")
- public void verifyHostTooltipsOfTopologyGraphTest() {
- for (int i = 1; i <=3; i++) {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- mouseClickAndHoldOverElementById("h" + i);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostNameTTXpath, getPropertyValue("member.M" + i + ".host"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.cpuUsageTTXpath, "0%");
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memoryUsageTTXpath, getPropertyValue("member.M" + i
- + ".UsedMemory"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.loadAvgTTXpath, getPropertyValue("member.M" + i
- + ".loadAverage"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.soketsTTXpath, getPropertyValue("member.M" + i
- + ".totalFileDescriptorOpen"));
- mouseReleaseById("h" + i);
- driver.navigate().refresh();
- }
- }
-
- @Ignore("Issues with member tooltip xpath")
- @Test
- public void verifyMemberTooltipsOfTopologyGraphTest() {
-
- verifyElementPresentById(PulseTestLocators.TopologyView.nodeH1Id);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH1Id);
- mouseClickAndHoldOverElementById(PulseTestLocators.TopologyView.memberM1Id);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memNameTTXpath, getPropertyValue("member.M1.member"));
- //verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memCpuUsageTTXpath, getPropertyValue("member.M1.cpuUsage") + "%");
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.jvmPausesTTXpath, getPropertyValue("member.M1.JVMPauses"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.regionsTTXpath, getPropertyValue("member.M1.totalRegionCount"));
- verifyElementPresentById(PulseTestLocators.TopologyView.nodeH2Id);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH2Id);
- mouseClickAndHoldOverElementById(PulseTestLocators.TopologyView.memberM2Id);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memNameTTXpath, getPropertyValue("member.M2.member"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memCpuUsageTTXpath, getPropertyValue("member.M2.cpuUsage") + "%");
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.jvmPausesTTXpath, getPropertyValue("member.M2.JVMPauses"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.regionsTTXpath, getPropertyValue("member.M2.totalRegionCount"));
-
- verifyElementPresentById(PulseTestLocators.TopologyView.nodeH3Id);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH3Id);
- mouseClickAndHoldOverElementById(PulseTestLocators.TopologyView.memberM3Id);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memNameTTXpath, getPropertyValue("member.M3.member"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.memCpuUsageTTXpath, getPropertyValue("member.M3.cpuUsage") + "%");
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.jvmPausesTTXpath, getPropertyValue("member.M3.JVMPauses"));
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.regionsTTXpath, getPropertyValue("member.M3.totalRegionCount"));
-
- }
-
- @Test
- public void VerifyRGraphTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- verifyElementPresentById(PulseTestLocators.TopologyView.nodeH1Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.nodeH2Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.nodeH3Id);
- }
-
- @Test
- public void clickMembersOfTopologyGraphTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH1Id);
- clickElementUsingId(PulseTestLocators.TopologyView.memberM1Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH2Id);
- clickElementUsingId(PulseTestLocators.TopologyView.memberM2Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.nodeH3Id);
- clickElementUsingId(PulseTestLocators.TopologyView.memberM3Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- }
-
- @Test
- public void clickTreeMapViewShowingTreeMapTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
- }
-
- @Test
- public void verifyMembersPresentInTreeMapTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
- verifyTextPresrntById(PulseTestLocators.TopologyView.memberM1Id, "M1");
- verifyTextPresrntById(PulseTestLocators.TopologyView.memberM2Id, "M2");
- verifyTextPresrntById(PulseTestLocators.TopologyView.memberM3Id, "M3");
- }
-
- @Test
- public void clickMemberNavigatingToCorrespondingRegionTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM1Id);
- verifyTextPresrntById(PulseTestLocators.TopologyView.memberM1Id, "M1");
- clickElementUsingId(PulseTestLocators.TopologyView.memberM1Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM2Id);
- verifyTextPresrntById(PulseTestLocators.TopologyView.memberM2Id, "M2");
- clickElementUsingId(PulseTestLocators.TopologyView.memberM2Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- verifyElementPresentById(PulseTestLocators.TopologyView.memberM3Id);
- verifyTextPresrntById(PulseTestLocators.TopologyView.memberM3Id, "M3");
- clickElementUsingId(PulseTestLocators.TopologyView.memberM3Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- }
-
- @Test
- public void clickGridButtonShowsGridTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.idM1Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM1Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH1Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.idM2Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM2Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH2Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.idM3Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM3Xpath);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH3Xpath);
- }
-
- @Test
- public void verifyMembersPresentInGridTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM1Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.nameM1Xpath, "M1");
-
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM2Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.nameM2Xpath, "M2");
-
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.nameM3Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.nameM3Xpath, "M3");
- }
-
- @Test
- public void verifyHostNamesInGridTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH1Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostH1Xpath, "h1");
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH2Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostH2Xpath, "h2");
- verifyElementPresentByXpath(PulseTestLocators.TopologyView.hostH3Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.TopologyView.hostH3Xpath, "h3");
- }
-
- @Test
- public void clickOnGridMemNameNavigatingToCorrespondingRegionTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.nameM1Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
-
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.nameM2Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
-
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.nameM3Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- }
-
- @Test
- public void verifyMembersPresentInSvrGrpTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
-
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
- verifyElementPresentById(PulseTestLocators.ServerGroups.serverGrp1Id);
- verifyElementPresentById(PulseTestLocators.ServerGroups.serverGrp2Id);
- verifyElementPresentById(PulseTestLocators.ServerGroups.serverGrp3Id);
-
- verifyElementPresentById(PulseTestLocators.ServerGroups.sg1M1Id);
- verifyElementPresentById(PulseTestLocators.ServerGroups.sg1M2Id);
- verifyElementPresentById(PulseTestLocators.ServerGroups.sg1M3Id);
-
- verifyElementPresentById(PulseTestLocators.ServerGroups.sg2M1Id);
- verifyElementPresentById(PulseTestLocators.ServerGroups.sg2M2Id);
-
- verifyElementPresentById(PulseTestLocators.ServerGroups.sg3M3Id);
- }
-
- @Test
- public void expandAndCloseServerGroupsTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- //waitForElement(findElementByXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath));
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp1Xpath);
- verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp1Id, "style", "width: 720px; height: 415px;");
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp1Xpath);
- verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp1Id, "style", "width: 239.667px; height: 399px;");
-
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp2Xpath);
- verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp2Id, "style", "width: 720px; height: 415px;");
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp2Xpath);
- verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp2Id, "style", "width: 239.667px; height: 399px;");
-
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp3Xpath);
- verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp3Id, "style", "width: 720px; height: 415px;");
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrp3Xpath);
- verifyElementAttributeById(PulseTestLocators.ServerGroups.serverGrp3Id, "style", "width: 239.667px; height: 399px;");
- }
-
- @Test
- public void verifyMembersInServGrpTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
-
- verifyTextPresrntById(PulseTestLocators.ServerGroups.serverGrp1Id, "SG1");
- verifyTextPresrntById(PulseTestLocators.ServerGroups.serverGrp2Id, "SG2");
- verifyTextPresrntById(PulseTestLocators.ServerGroups.serverGrp3Id, "SG3");
-
- verifyTextPresrntById(PulseTestLocators.ServerGroups.sg1M1Id, "M1");
- verifyTextPresrntById(PulseTestLocators.ServerGroups.sg1M2Id, "M2");
- verifyTextPresrntById(PulseTestLocators.ServerGroups.sg1M3Id, "M3");
-
- verifyTextPresrntById(PulseTestLocators.ServerGroups.sg2M1Id, "M1");
- verifyTextPresrntById(PulseTestLocators.ServerGroups.sg2M2Id, "M2");
-
- verifyTextPresrntById(PulseTestLocators.ServerGroups.sg3M3Id, "M3");
- }
-
- @Test
- public void memberNavigationFromServGrpTest() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.serverGrpsRadioXpath);
- clickElementUsingId(PulseTestLocators.ServerGroups.sg1M1Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.sg1M2Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.sg1M3Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.sg2M1Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.sg2M2Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.sg3M3Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- }
-
- @Test
- public void clickServGrpGridButtonShowsGridTest() {
- navigateToServerGroupGridView();
- verifyElementPresentByXpath(PulseTestLocators.ServerGroups.idSG1M3Xpath);
- verifyElementPresentByXpath(PulseTestLocators.ServerGroups.idSG1M2Xpath);
- verifyElementPresentByXpath(PulseTestLocators.ServerGroups.idSG1M1Xpath);
- verifyElementPresentByXpath(PulseTestLocators.ServerGroups.nameM3Xpath);
- verifyElementPresentByXpath(PulseTestLocators.ServerGroups.nameM2Xpath);
- verifyElementPresentByXpath(PulseTestLocators.ServerGroups.nameM1Xpath);
-
- }
-
- @Test
- public void memberNavigationFromServGrpGridTest() {
- navigateToServerGroupGridView();
- clickElementUsingXpath(PulseTestLocators.ServerGroups.idSG1M3Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- navigateToServerGroupGridView();
- clickElementUsingXpath(PulseTestLocators.ServerGroups.idSG1M1Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- navigateToServerGroupGridView();
- clickElementUsingXpath(PulseTestLocators.ServerGroups.idSG1M2Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- }
-
- @Test
- public void verifyZonePresentTest() {
- navigateToRedundancyZonesTreeView();
- verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.zoneRZ1RZ2Xpath);
- verifyElementPresentById(PulseTestLocators.RedundancyZone.zoneRZ2Id);
- }
-
- @Test
- public void expandAndCloseRdncyZoneTest() {
- navigateToRedundancyZonesTreeView();
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.zoneRZ1RZ2Xpath);
- verifyElementAttributeById(PulseTestLocators.RedundancyZone.zoneRZ1Id, "style", "width: 720px; height: 415px;");
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.zoneRZ1RZ2Xpath);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.zoneRZ2Xpath);
- verifyElementAttributeById(PulseTestLocators.RedundancyZone.zoneRZ2Id, "style", "width: 720px; height: 415px;");
-
- }
-
- @Test
- public void clickRZMembersNavigationTest() {
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.m1RZ1RZ2Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.m2RZ1Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.m3RZ2Id);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- }
-
- @Test
- public void clickRZGridShowingGridTest() {
- navigateToRedundancyZonesGridView();
- verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.idM2Xpath);
- verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.idM1Xpath);
- verifyElementPresentByXpath(PulseTestLocators.RedundancyZone.idM3Xpath);
- verifyTextPresrntByXpath(PulseTestLocators.RedundancyZone.idM2Xpath, "M2");
- verifyTextPresrntByXpath(PulseTestLocators.RedundancyZone.idM1Xpath, "M1");
- verifyTextPresrntByXpath(PulseTestLocators.RedundancyZone.idM3Xpath, "M3");
- }
-
- @Test
- public void clickRZGridMembersNavigationTest() {
- navigateToRedundancyZonesGridView();
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.idM2Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M2");
- navigateToRedundancyZonesGridView();
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.idM1Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M1");
- navigateToRedundancyZonesGridView();
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.idM3Xpath);
- verifyTextPresrntById(PulseTestLocators.RegionDetailsView.memberNameId, "M3");
- }
-
-
- @Test
- public void verifySortingOptionsTest(){
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- verifyElementPresentById(PulseTestLocators.TopologyView.hotSpotId);
- clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
- verifyElementPresentByLinkText("Heap Usage");
- verifyElementPresentByLinkText("CPU Usage");
- }
-
- /*
- * HotSpot test scripts -
- */
- //--- Topology view
-
- @Test
- public void testHotSpotOptPrsntOnTopologyView(){
- navigateToTopologyTreeView();
- assertEquals(PulseTestData.Topology.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.TopologyView.hotSpotId));
- }
-
- @Test
- public void testHotSpotOptionsTopologyView(){
- navigateToTopologyTreeView();
- clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
- assertEquals(PulseTestData.Topology.hotSpotHeapLbl, getTextUsingXpath(PulseTestLocators.TopologyView.heapUsageXpath));
- assertEquals(PulseTestData.Topology.hotSpotCPULbl, getTextUsingXpath(PulseTestLocators.TopologyView.cpuUsageXpath));
- }
-
- @Test
- public void testCpuUsageNavigationOnTopologyView(){
- navigateToTopologyTreeView();
- clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.cpuUsageXpath);
- assertEquals(PulseTestData.Topology.hotSpotCPULbl, getTextUsingId(PulseTestLocators.TopologyView.hotSpotId));
- }
-
- @Test
- public void testHeapUsageNavigationOnTopologyView(){
- navigateToTopologyTreeView();
- clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.heapUsageXpath);
- assertEquals(PulseTestData.Topology.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.TopologyView.hotSpotId));
- }
-
- @Test
- public void testSortingUsingCpuUsageOnTopologyView(){
- navigateToTopologyTreeView();
- clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.cpuUsageXpath);
- assertMemberSortingByCpuUsage();
- }
-
- @Test
- public void testSortingUsingHeapUsageOnTopologyView(){
- navigateToTopologyTreeView();
- clickElementUsingId(PulseTestLocators.TopologyView.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.TopologyView.heapUsageXpath);
- assertMemberSortingByHeapUsage();
- }
-
- //--- Server Group view
-
- @Test
- public void testHotSpotOptPrsntOnServerGroupView(){
- navigateToServerGroupTreeView();
- assertEquals(PulseTestData.ServerGroups.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.ServerGroups.hotSpotId));
- }
-
- @Test
- public void testHotSpotOptionsServerGroupView(){
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
- assertEquals(PulseTestData.ServerGroups.hotSpotHeapLbl, getTextUsingXpath(PulseTestLocators.ServerGroups.heapUsageXpath));
- assertEquals(PulseTestData.ServerGroups.hotSpotCPULbl, getTextUsingXpath(PulseTestLocators.ServerGroups.cpuUsageXpath));
- }
-
- @Test
- public void testCpuUsageNavigationOnServerGroupView(){
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.cpuUsageXpath);
- assertEquals(PulseTestData.ServerGroups.hotSpotCPULbl, getTextUsingId(PulseTestLocators.ServerGroups.hotSpotId));
- }
-
- @Test
- public void testHeapUsageNavigationOnServerGroupView(){
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.heapUsageXpath);
- assertEquals(PulseTestData.ServerGroups.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.ServerGroups.hotSpotId));
- }
-
- @Test
- public void testSortingUsingHeapUsageOnServerGroupView(){
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.heapUsageXpath);
- assertMemberSortingBySgHeapUsage();
- }
-
- @Test
- public void testSortingUsingCpuUsageOnServerGroupView(){
- navigateToServerGroupTreeView();
- clickElementUsingId(PulseTestLocators.ServerGroups.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.cpuUsageXpath);
- assertMemberSortingBySgCpuUsage();
- }
-
- //--- Redundancy Zone view
-
- @Test
- public void testHotSpotOptPrsntOnRedundancyZoneView(){
- navigateToRedundancyZonesTreeView();
- assertEquals(PulseTestData.RedundancyZone.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.RedundancyZone.hotSpotId));
- }
-
-
- @Test
- public void testHotSpotOptionsRedundancyZoneView(){
- // navigate to Redundancy Zones - Tree View
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
- assertEquals(PulseTestData.RedundancyZone.hotSpotHeapLbl, getTextUsingXpath(PulseTestLocators.RedundancyZone.heapUsageXpath));
- assertEquals(PulseTestData.RedundancyZone.hotSpotCPULbl, getTextUsingXpath(PulseTestLocators.RedundancyZone.cpuUsageXpath));
- }
-
- @Test
- public void testCpuUsageNavigationOnRedundancyZoneView(){
- // navigate to Redundancy Zones - Tree View
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.cpuUsageXpath);
- assertEquals(PulseTestData.RedundancyZone.hotSpotCPULbl, getTextUsingId(PulseTestLocators.RedundancyZone.hotSpotId));
- }
-
- @Test
- public void testHeapUsageNavigationOnRedundancyZoneView(){
- // navigate to Redundancy Zones - Tree View
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.heapUsageXpath);
- assertEquals(PulseTestData.RedundancyZone.hotSpotHeapLbl, getTextUsingId(PulseTestLocators.RedundancyZone.hotSpotId));
- }
-
- @Test
- public void testSortingUsingHeapUsageOnRedundancyView(){
- // navigate to Redundancy Zones - Tree View
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.heapUsageXpath);
- assertMemberSortingByRzHeapUsage();
- }
-
- @Test
- public void testSortingUsingCpuUsageOnRedundancyView(){
- // navigate to Redundancy Zones - Tree View
- navigateToRedundancyZonesTreeView();
- clickElementUsingId(PulseTestLocators.RedundancyZone.hotSpotId);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.cpuUsageXpath);
- assertMemeberSortingByRzCpuUsage();
- }
-
- @Test
- public void testDataBrowserFilterFeature(){
- // navigate to Data browser page
- loadDataBrowserpage();
- List<WebElement> regionLst = getRegionsFromDataBrowser();
- String []regionNames = new String[regionLst.size()];
- for(int regionIndex = 0; regionIndex < regionLst.size(); regionIndex++){
- regionNames[regionIndex] = findElementByXpath(PulseTestLocators.DataBrowser.rgnSpanFirstPart + (regionIndex + 1 ) + PulseTestLocators.DataBrowser.rgnSpanSecondPart).getText();
- }
- // type each region name in region filter and verify respective region(s) are displayed in region list
- for (String region : regionNames) {
- findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).clear();
- findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).sendKeys(region);
-
- List<WebElement> regionLst1 = getRegionsFromDataBrowser();
-
- for(int regionIndex = 1; regionIndex <= regionLst1.size(); regionIndex++){
- assertEquals(region, findElementByXpath(PulseTestLocators.DataBrowser.rgnSpanFirstPart + regionIndex + PulseTestLocators.DataBrowser.rgnSpanSecondPart).getText());
- }
- }
- }
-
- @Test
- public void testDataBrowserFilterPartialRegionName(){
- // navigate to Data browser page
- loadDataBrowserpage();
- findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).clear();
-
- // type partial region name in region filter and verify that all the regions that contains that text displays
- findElementById(PulseTestLocators.DataBrowser.rgnFilterTxtBoxId).sendKeys(PulseTestData.DataBrowser.partialRgnName);
- List<WebElement> regionLst = getRegionsFromDataBrowser();
-
- for(int regionIndex = 0; regionIndex < regionLst.size(); regionIndex++){
- assertTrue(findElementByXpath(PulseTestLocators.DataBrowser.rgnSpanFirstPart +
- (regionIndex + 1 ) +
- PulseTestLocators.DataBrowser.rgnSpanSecondPart).
- getText().
- contains(PulseTestData.DataBrowser.partialRgnName));
- }
- }
-
- @Test
- public void testDataBrowserClearButton(){
- // navigate to Data browser page
- loadDataBrowserpage();
-
- sendKeysUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId, PulseTestData.DataBrowser.query1Text);
- String editorTextBeforeClear = getTextUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId);
- clickElementUsingXpath(PulseTestLocators.DataBrowser.btnClearXpath);
- String editorTextAfterClear = getTextUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId);
-
- assertFalse(PulseTestData.DataBrowser.query1Text.equals(editorTextAfterClear));
- }
-
- @Ignore("WIP") // Data Browser's Query History not showing any data on button click, therefore this test is failing
- @Test
- public void testDataBrowserHistoryQueue(){
- // navigate to Data browser page
- loadDataBrowserpage();
-
- List<WebElement> numOfReg = driver.findElements(By.xpath(PulseTestLocators.DataBrowser.divDataRegions));
-
- for(int i = 1; i <= numOfReg.size(); i ++){
- if(getTextUsingId("treeDemo_" + i + "_span").equals( PulseTestData.DataBrowser.regName)){
- searchByIdAndClick("treeDemo_" + i + "_check"); //driver.findElement(By.id("treeDemo_" + i + "_check")).click();
- }
- }
-
- sendKeysUsingId(PulseTestLocators.DataBrowser.queryEditorTxtBoxId, PulseAbstractTest.QUERY_TYPE_ONE);
- clickElementUsingId(PulseTestLocators.DataBrowser.btnExecuteQueryId);
-
- //Get required datetime format and extract date and hours from date time.
- DateFormat dateFormat = new SimpleDateFormat(PulseTestData.DataBrowser.datePattern);
- String queryDateTime = dateFormat.format(System.currentTimeMillis());
- String queryTime[] = queryDateTime.split(":");
- System.out.println("Query Time from System: " + queryTime[0]);
-
-
- clickElementUsingId(PulseTestLocators.DataBrowser.historyIcon);
- List<WebElement> historyLst = driver.findElements(By.xpath(PulseTestLocators.DataBrowser.historyLst));
- String queryText = findElementByXpath(PulseTestLocators.DataBrowser.historyLst)
- .findElement(By.cssSelector(PulseTestLocators.DataBrowser.queryText)).getText();
- String historyDateTime = findElementByXpath(PulseTestLocators.DataBrowser.historyLst)
- .findElement(By.cssSelector(PulseTestLocators.DataBrowser.historyDateTime)).getText();
- 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
- assertTrue(PulseAbstractTest.QUERY_TYPE_ONE.equals(queryText));
- assertTrue(historyDateTime.contains(queryTime[0]));
-
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseBaseTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseBaseTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseBaseTest.java
deleted file mode 100644
index 47b4e7e..0000000
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseBaseTest.java
+++ /dev/null
@@ -1,693 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.geode.tools.pulse.tests;
-
-import static org.apache.geode.tools.pulse.tests.PulseAbstractTest.*;
-import static org.junit.Assert.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.concurrent.TimeUnit;
-
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.interactions.Actions;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
-
-public class PulseBaseTest {
-
- public static int maxWaitTime = 20;
-
- WebElement element = null;
-
- public WebElement findElementUsingId(String id) {
- return driver.findElement(By.id(id));
- }
- public WebElement findElementUsingXpath(String xpath) {
- return driver.findElement(By.xpath(xpath));
- }
-
- public void clickElementUsingId(String id) {
- findElementUsingId(id).click();
- }
-
- public void clickElementUsingXpath(String xpath) {
- findElementUsingXpath(xpath).click();
- }
-
- public void enterTextUsingId(String id, String textToEnter) {
- findElementUsingId(id).sendKeys(textToEnter);
-
- }
-
- public void enterTextUsingXpath(String xpath, String textToEnter) {
- findElementUsingXpath(xpath).sendKeys(textToEnter);
- }
-
- public String getValueFromPropertiesFile(String key) {
- return JMXProperties.getInstance().getProperty(key);
- }
-
- public void sendKeysUsingId(String Id, String textToEnter){
- findElementById(Id).sendKeys(textToEnter);
- }
-
- public void waitForElement(WebElement element) {
- driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
- WebDriverWait wait = new WebDriverWait(driver, 20);
- wait.until(ExpectedConditions.visibilityOf(element));
- }
-
- public WebElement findElementById(String id) {
- return driver.findElement(By.id(id));
- }
-
- public WebElement findElementByXpath(String xpath) {
- return driver.findElement(By.xpath(xpath));
- }
-
- public String getTextUsingXpath(String xpath) {
- return findElementByXpath(xpath).getText();
- }
-
- public String getTextUsingId(String id) {
- return findElementById(id).getText();
- }
-
- public String getPersistanceEnabled(Region r) {
- String persitance = null;
-
- if (r.getPersistentEnabled()) {
- persitance = "ON";
- } else if (!r.getPersistentEnabled()) {
- persitance = "OFF";
- }
- return persitance;
- }
-
- public String getPersistanceEnabled(String trueOrFalse) {
- String persitance = null;
-
- if (trueOrFalse.contains("true")) {
- persitance = "ON";
- } else if (trueOrFalse.contains("false")) {
- persitance = "OFF";
- }
- return persitance;
- }
-
- public String HeapUsage(String valueInKB) {
-
- return null;
- }
-
- // WIP - need to work on this --
- public HashMap<String, HashMap<String, Region>> getRegionDetailsFromUI(String regionName) {
-
- String[] regionNames = JMXProperties.getInstance().getProperty("regions").split(" ");
- HashMap<String, HashMap<String, Region>> regionUiMap = new HashMap<String, HashMap<String, Region>>();
-
- for (String region : regionNames) {
- HashMap<String, Region> regionMap = regionUiMap.get(region);
- }
-
- return regionUiMap;
- }
-
- public void validateServerGroupGridData() {
- List<WebElement> serverGridRows = driver.findElements(By.xpath("//table[@id='memberListSG']/tbody/tr"));
- int rowsCount = serverGridRows.size();
- String[][] gridDataFromUI = new String[rowsCount][7];
-
- for (int j = 2, x = 0; j <= serverGridRows.size(); j++, x++) {
- for (int i = 0; i <= 6; i++) {
- gridDataFromUI[x][i] = driver.findElement(
- By.xpath("//table[@id='memberListSG']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
- }
- }
-
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, HashMap<String, Member>> sgMap = new HashMap<String, HashMap<String, Member>>();
-
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- String[] sgs = thisMember.getGroups();
-
- for (String sgName : sgs) {
- HashMap<String, Member> sgMembers = sgMap.get(sgName);
- if (sgMembers == null) {
- sgMembers = new HashMap<String, Member>();
- sgMap.put(sgName, sgMembers);
- }
- sgMembers.put(thisMember.getMember(), thisMember);
- }
- }
-
- for (int i = 0; i < gridDataFromUI.length - 1; i++) {
- String sgName = gridDataFromUI[i][0];
- String memName = gridDataFromUI[i][1];
- Member m = sgMap.get(sgName).get(memName);
-
- assertEquals(sgName, gridDataFromUI[i][0]);
- assertEquals(memName, gridDataFromUI[i][1]);
- assertEquals(m.getMember(), gridDataFromUI[i][2]);
- assertEquals(m.getHost(), gridDataFromUI[i][3]);
- String cupUsage = String.valueOf(m.getCpuUsage());
- assertEquals(cupUsage, gridDataFromUI[i][5]);
- }
-
- }
-
- public void validateRedundancyZonesGridData() {
- List<WebElement> rzGridRows = driver.findElements(By.xpath("//table[@id='memberListRZ']/tbody/tr"));
- int rowsCount = rzGridRows.size();
- String[][] gridDataFromUI = new String[rowsCount][7];
-
- for (int j = 2, x = 0; j <= rzGridRows.size(); j++, x++) {
- for (int i = 0; i <= 6; i++) {
- gridDataFromUI[x][i] = driver.findElement(
- By.xpath("//table[@id='memberListRZ']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
- }
- }
-
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, HashMap<String, Member>> rzMap = new HashMap<String, HashMap<String, Member>>();
-
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- //String[] rz = thisMember.getRedundancyZone();
- String sgName = thisMember.getRedundancyZone();
-
- //for (String sgName : rz) {
- HashMap<String, Member> rzMembers = rzMap.get(sgName);
-
- if (rzMembers == null) {
- rzMembers = new HashMap<String, Member>();
- rzMap.put(sgName, rzMembers);
- }
-
- rzMembers.put(thisMember.getMember(), thisMember);
- //}
- }
-
- for (int i = 0; i < gridDataFromUI.length - 1; i++) {
- String sgName = gridDataFromUI[i][0];
- String memName = gridDataFromUI[i][1];
- Member m = rzMap.get(sgName).get(memName);
-
- assertEquals(sgName, gridDataFromUI[i][0]);
- assertEquals(memName, gridDataFromUI[i][1]);
- assertEquals(m.getMember(), gridDataFromUI[i][2]);
- assertEquals(m.getHost(), gridDataFromUI[i][3]);
- String cupUsage = String.valueOf(m.getCpuUsage());
- assertEquals(cupUsage, gridDataFromUI[i][5]);
- }
-
- }
-
- public void validateTopologyGridData() {
- List<WebElement> rzGridRows = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));
- int rowsCount = rzGridRows.size();
- String[][] gridDataFromUI = new String[rowsCount][8];
-
- for (int j = 2, x = 0; j <= rzGridRows.size(); j++, x++) {
- for (int i = 0; i <= 7; i++) {
- gridDataFromUI[x][i] = driver.findElement(
- By.xpath("//table[@id='memberList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
- }
- }
-
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, Member> tpMap = new HashMap<String, Member>();
-
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- tpMap.put(thisMember.getMember(), thisMember);
-
- }
-
- for (int i = 0; i < gridDataFromUI.length - 1; i++) {
-
- String memName = gridDataFromUI[i][0];
- Member m = tpMap.get(memName);
-
- assertEquals(m.getMember(), gridDataFromUI[i][0]);
- assertEquals(m.getMember(), gridDataFromUI[i][1]);
- assertEquals(m.getHost(), gridDataFromUI[i][2]);
- String cupUsage = String.valueOf(m.getCpuUsage());
- assertEquals(cupUsage, gridDataFromUI[i][5]);
- }
- }
-
- public void validateDataPrespectiveGridData() {
- List<WebElement> serverGridRows = driver.findElements(By.xpath("//table[@id='regionsList']/tbody/tr"));
- int rowsCount = serverGridRows.size();
- String[][] gridDataFromUI = new String[rowsCount][7];
-
- for (int j = 2, x = 0; j <= serverGridRows.size(); j++, x++) {
- for (int i = 0; i <= 6; i++) {
- if (i < 5) {
- gridDataFromUI[x][i] = driver.findElement(
- By.xpath("//table[@id='regionsList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
- } else if (i == 5) {
- gridDataFromUI[x][i] = driver.findElement(
- By.xpath("//table[@id='regionsList']/tbody/tr[" + j + "]/td[" + (i + 4) + "]")).getText();
- }
- }
- }
-
- String[] regionNames = JMXProperties.getInstance().getProperty("regions").split(" ");
- HashMap<String, Region> dataMap = new HashMap<String, Region>();
-
- for (String region : regionNames) {
- Region thisRegion = new Region(region);
- dataMap.put(thisRegion.getName(), thisRegion);
-
- }
-
- for (int i = 0; i < gridDataFromUI.length - 1; i++) {
- String memName = gridDataFromUI[i][0];
- Region r = dataMap.get(memName);
-
- assertEquals(r.getName(), gridDataFromUI[i][0]);
- assertEquals(r.getRegionType(), gridDataFromUI[i][1]);
-
- assertEquals(String.valueOf(r.getSystemRegionEntryCount()), gridDataFromUI[i][2]);
- assertEquals(r.getFullPath(), gridDataFromUI[i][4]);
- assertEquals(getPersistanceEnabled(r), gridDataFromUI[i][5]);
- }
- }
-
- public void validateRegionDetailsGridData() {
- List<WebElement> serverGridRows = driver.findElements(By.xpath("//table[@id='memberList']/tbody/tr"));
- int rowsCount = serverGridRows.size();
- String[][] gridDataFromUI = new String[rowsCount][7];
-
- for (int j = 2, x = 0; j <= serverGridRows.size(); j++, x++) {
- for (int i = 0; i < 2; i++) {
- gridDataFromUI[x][i] = driver.findElement(
- By.xpath("//table[@id='memberList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")).getText();
- }
- }
-
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, Member> tpMap = new HashMap<String, Member>();
-
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- tpMap.put(thisMember.getMember(), thisMember);
- }
-
- for (int i = 0; i < gridDataFromUI.length - 1; i++) {
-
- String memName = gridDataFromUI[i][0];
- Member m = tpMap.get(memName);
- assertEquals(m.getMember(), gridDataFromUI[i][0]);
- }
-
- }
-
- public void navigateToToplogyView(){
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.TopologyView.radioButtonXpath);
- }
-
- public void navigateToServerGroupGView(){
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath);
- }
-
- public void navigateToRedundancyZoneView(){
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath);
- }
-
- // ------ Topology / Server Group / Redundancy Group - Tree View
-
- public void navigateToTopologyTreeView(){
- navigateToToplogyView();
- clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId);
- }
-
- public void navigateToServerGroupTreeView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath);
- }
-
- public void navigateToRedundancyZonesTreeView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath);
- }
-
- // ------ Topology / Server Group / Redundancy Group - Grid View
-
- public void navigateToTopologyGridView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.TopologyView.radioButtonXpath);
- clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId);
- }
-
- public void navigateToServerGroupGridView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath);
- clickElementUsingId(PulseTestLocators.ServerGroups.gridButtonId);
- }
-
- public void navigateToRedundancyZonesGridView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath);
- clickElementUsingId(PulseTestLocators.RedundancyZone.gridButtonId);
- }
-
- // ----- Data perspective / region details
-
- public void navigateToDataPrespectiveGridView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.downarrowButtonXpath);
- clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.dataViewButtonXpath);
- clickElementUsingId(PulseTestLocators.DataPerspectiveView.gridButtonId);
- }
-
- public void navigateToRegionDetailsView() {
- clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
- clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.downarrowButtonXpath);
- clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.dataViewButtonXpath);
- // clickElementUsingXpath(PulseTestLocators.RegionDetailsView.regionNameXpath);
- // // WIP - region navigation defect needs to fixed
- clickElementUsingXpath(PulseTestLocators.RegionDetailsView.treeMapCanvasXpath);
- }
-
- public void navigateToRegionDetailsGridView() {
- navigateToRegionDetailsView();
- clickElementUsingXpath(PulseTestLocators.RegionDetailsView.gridButtonXpath);
- }
-
- public String getPropertyValue(String propertyKey) {
- String propertyValue = JMXProperties.getInstance().getProperty(propertyKey);
- return propertyValue;
- }
-
- public void verifyElementPresentById(String id) {
- WebDriverWait wait = new WebDriverWait(driver, maxWaitTime, 500);
- wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.id(id)));
- }
-
- public void verifyElementPresentByLinkText(String lnkText) {
- WebDriverWait wait = new WebDriverWait(driver, maxWaitTime, 500);
- wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.linkText(lnkText)));
- }
-
- public void verifyElementPresentByXpath(String xpath) {
- WebDriverWait wait = new WebDriverWait(driver, maxWaitTime, 500);
- wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(xpath)));
- }
-
- public void verifyTextPresrntById(String id, String text) {
- WebDriverWait wait = new WebDriverWait(driver, maxWaitTime, 500);
- wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id(id), text));
- }
-
- public void verifyTextPresrntByXpath(String xpath, String text) {
- WebDriverWait wait = new WebDriverWait(driver, maxWaitTime, 500);
- wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath(xpath), text));
- }
-
- public void verifyElementAttributeById(String id, String attribute, String value) {
- String actualValue = findElementById(id).getAttribute(attribute);
- assertTrue(actualValue.equals(value) || actualValue.contains(value));
- }
-
-
- public void mouseReleaseById(String id){
- verifyElementPresentById(id);
- Actions action = new Actions(driver);
- WebElement we = driver.findElement(By.id(id));
- action.moveToElement(we).release().perform();
- }
- public void mouseClickAndHoldOverElementById(String id) {
- verifyElementPresentById(id);
- Actions action = new Actions(driver);
- WebElement we = driver.findElement(By.id(id));
- action.moveToElement(we).clickAndHold().perform();
- }
-
- public void mouseOverElementByXpath(String xpath) {
- Actions action = new Actions(driver);
- WebElement we = driver.findElement(By.xpath(xpath));
- action.moveToElement(we).build().perform();
- }
-
-
- public float stringToFloat(String stringValue){
- float floatNum = Float.parseFloat(stringValue);
- return floatNum;
- }
-
- public String floatToString(float floatValue){
- String stringValue = Float.toString(floatValue);
- return stringValue;
- }
-
-
- public String[] splitString(String stringToSplit, String splitDelimiter){
- String [] stringArray = stringToSplit.split(splitDelimiter);
- return stringArray;
- }
-
- public void assertMemberSortingByCpuUsage(){
- Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
- String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
- for (String member : membersNames) {
- Member thisMember = new Member(member);
- memberMap.put(thisMember.getCpuUsage(), thisMember.getMember());
- }
- for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberCPUUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM2;
- }else{
- refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM3;
- }
- assertTrue(findElementById(entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
- }
- }
-
- public void assertMemberSortingByHeapUsage(){
- Map<Long, String> memberMap = new TreeMap<Long,String>(Collections.reverseOrder());
- String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
- for (String member : membersNames) {
- Member thisMember = new Member(member);
- memberMap.put(thisMember.getCurrentHeapSize(), thisMember.getMember());
- }
- for(Map.Entry<Long, String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberHeapUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberHeapUsage = PulseTestData.Topology.heapUsagePaintStyleM1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberHeapUsage = PulseTestData.Topology.heapUsagePaintStyleM2;
- }else{
- refMemberHeapUsage = PulseTestData.Topology.heapUsagePaintStyleM3;
- }
- assertTrue(findElementById(entry.getValue()).getAttribute("style").contains(refMemberHeapUsage));
- }
- }
-
- public void assertMemberSortingBySGCpuUsage(){
- Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
- String [] membersNames = splitString(JMXProperties.getInstance().getProperty("members"), " ");
- for (String member : membersNames) {
- Member thisMember = new Member(member);
- memberMap.put(thisMember.getCpuUsage(), thisMember.getMember());
- }
- for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberCPUUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM2;
- }else{
- refMemberCPUUsage = PulseTestData.Topology.cpuUsagePaintStyleM3;
- }
- assertTrue(findElementById(entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
- }
- }
-
-
- public void assertMemberSortingBySgHeapUsage(){
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, HashMap<String, Member>> sgMap = new HashMap<String, HashMap<String, Member>>();
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- String[] sgs = thisMember.getGroups();
-
- for (String sgName : sgs) {
- HashMap<String, Member> sgMembers = sgMap.get(sgName);
- if (sgMembers == null) {
- sgMembers = new HashMap<String, Member>();
- sgMap.put(sgName, sgMembers);
- }
- sgMembers.put(thisMember.getMember(), thisMember);
- }
- }
- Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
-
- for(int sgId=1; sgId<=3; sgId++){
- String sgName = "SG1";
- String memName = "M" + sgId;
- Member m = sgMap.get(sgName).get(memName);
- memberMap.put((float) m.getCurrentHeapSize(), m.getMember());
- }
-
- for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberCPUUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberCPUUsage = PulseTestData.ServerGroups.heapUsagePaintStyleSG1M1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberCPUUsage = PulseTestData.ServerGroups.heapUsagePaintStyleSG1M2;
- }else{
- refMemberCPUUsage = PulseTestData.ServerGroups.heapUsagePaintStyleSG1M3;
- }
- assertTrue(findElementById("SG1(!)"+entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
- }
- }
-
-
-
- public void assertMemberSortingBySgCpuUsage(){
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, HashMap<String, Member>> sgMap = new HashMap<String, HashMap<String, Member>>();
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- String[] sgs = thisMember.getGroups();
-
- for (String sgName : sgs) {
- HashMap<String, Member> sgMembers = sgMap.get(sgName);
- if (sgMembers == null) {
- sgMembers = new HashMap<String, Member>();
- sgMap.put(sgName, sgMembers);
- }
- sgMembers.put(thisMember.getMember(), thisMember);
- }
- }
- Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
- //SG3(!)M3
- for(int sgId=1; sgId<=3; sgId++){
- String sgName = "SG1";
- String memName = "M" + sgId;
- Member m = sgMap.get(sgName).get(memName);
- memberMap.put(m.getCpuUsage(), m.getMember());
- }
-
- for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberCPUUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberCPUUsage = PulseTestData.ServerGroups.cpuUsagePaintStyleSG1M1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberCPUUsage = PulseTestData.ServerGroups.cpuUsagePaintStyleSG1M2;
- }else{
- refMemberCPUUsage = PulseTestData.ServerGroups.cpuUsagePaintStyleSG1M3;
- }
- assertTrue(findElementById("SG1(!)"+entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
- }
- }
-
- public void assertMemberSortingByRzHeapUsage(){
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, HashMap<String, Member>> rzMap = new HashMap<String, HashMap<String, Member>>();
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- String sgName = thisMember.getRedundancyZone();
- HashMap<String, Member> rzMembers = rzMap.get(sgName);
-
- if (rzMembers == null) {
- rzMembers = new HashMap<String, Member>();
- rzMap.put(sgName, rzMembers);
- }
-
- rzMembers.put(thisMember.getMember(), thisMember);
- }
- Map<Float, String> memberMap = new TreeMap<Float,String>(Collections.reverseOrder());
- String rzName = "RZ1 RZ2";
- String memName = "M1" ;
- Member m = rzMap.get(rzName).get(memName);
- memberMap.put((float) m.getCurrentHeapSize(), m.getMember());
-
- for(Map.Entry<Float,String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberHeapUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberHeapUsage = PulseTestData.RedundancyZone.heapUsagePaintStyleRZ1RZ2M1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberHeapUsage = PulseTestData.RedundancyZone.heapUsagePaintStyleRZ1RZ2M2;
- }else{
- refMemberHeapUsage = PulseTestData.RedundancyZone.heapUsagePaintStyleRZ3M3;
- }
- assertTrue(findElementById("RZ1 RZ2(!)"+entry.getValue()).getAttribute("style").contains(refMemberHeapUsage));
- }
- }
-
- public void assertMemeberSortingByRzCpuUsage(){
- String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
- HashMap<String, HashMap<String, Member>> rzMap = new HashMap<String, HashMap<String, Member>>();
- for (String member : memberNames) {
- Member thisMember = new Member(member);
- String sgName = thisMember.getRedundancyZone();
- HashMap<String, Member> rzMembers = rzMap.get(sgName);
-
- if (rzMembers == null) {
- rzMembers = new HashMap<String, Member>();
- rzMap.put(sgName, rzMembers);
- }
-
- rzMembers.put(thisMember.getMember(), thisMember);
- }
- Map<Double, String> memberMap = new TreeMap<>(Collections.reverseOrder());
- String rzName = "RZ1 RZ2";
- String memName = "M1" ;
- Member m = rzMap.get(rzName).get(memName);
- memberMap.put(m.getCpuUsage(), m.getMember());
-
- for(Map.Entry<Double,String> entry : memberMap.entrySet()) {
- //here matching painting style to validation that the members are painted according to their cpu usage
- String refMemberCPUUsage = null;
- if(entry.getValue().equalsIgnoreCase("M1")){
- refMemberCPUUsage = PulseTestData.RedundancyZone.cpuUsagePaintStyleRZ1RZ2M1;
- }else if(entry.getValue().equalsIgnoreCase("M2")){
- refMemberCPUUsage = PulseTestData.RedundancyZone.cpuUsagePaintStyleRZ1RZ2M2;
- }
- assertTrue(findElementById("RZ1 RZ2(!)"+entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
- }
- }
-
- public List<WebElement> getRegionsFromDataBrowser(){
- List<WebElement> regionList = driver.findElements(By.xpath("//span[starts-with(@ID,'treeDemo_')][contains(@id,'_span')]"));
- return regionList;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/dfb87a59/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseNoAuthTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseNoAuthTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseNoAuthTest.java
deleted file mode 100644
index e1021df..0000000
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/PulseNoAuthTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.geode.tools.pulse.tests;
-
-import org.apache.geode.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("admin", "admin", null);
- }
-}
[6/6] incubator-geode git commit: GEODE-1532: Fix Pulse Clickjacking
vuln.
Posted by ji...@apache.org.
GEODE-1532: Fix Pulse Clickjacking vuln.
* Removed firefox driver dependency
* This closes #256
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/a78fa753
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/a78fa753
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/a78fa753
Branch: refs/heads/develop
Commit: a78fa7537dfd656521649d57245ecd7fa05b2d31
Parents: 6054e00
Author: Jared Stewart <js...@pivotal.io>
Authored: Mon Oct 10 18:48:01 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Oct 12 09:52:40 2016 -0700
----------------------------------------------------------------------
geode-pulse/build.gradle | 1 -
geode-pulse/src/main/webapp/WEB-INF/spring-security.xml | 5 +++++
.../geode/tools/pulse/testbed/driver/PulseUITest.java | 11 +++++++++--
3 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a78fa753/geode-pulse/build.gradle
----------------------------------------------------------------------
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index ef29ab3..3d19dea 100755
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -73,7 +73,6 @@ dependencies {
exclude module: 'selenium-java' //by artifact name
}
- testCompile 'org.seleniumhq.selenium:selenium-firefox-driver:' + project.'selenium.version'
testCompile 'org.seleniumhq.selenium:selenium-api:' + project.'selenium.version'
testCompile 'org.seleniumhq.selenium:selenium-remote-driver:' + project.'selenium.version'
testCompile 'org.seleniumhq.selenium:selenium-support:' + project.'selenium.version'
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a78fa753/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml b/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
index b4fccf0..2842f64 100644
--- a/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
+++ b/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
@@ -47,6 +47,11 @@
<form-login login-page="/Login.html"
authentication-failure-handler-ref="authenticationFailureHandler"
default-target-url="/clusterDetail.html" />
+ <headers>
+ <frame-options policy="DENY" />
+ <content-type-options />
+ <xss-protection enabled="true" block="true" />
+ </headers>
<logout logout-url="/pulse/clusterLogout" success-handler-ref="customLogoutSuccessHandler"/>
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a78fa753/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
index ced298b..5a02edc 100644
--- 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
@@ -31,7 +31,8 @@ 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.phantomjs.PhantomJSDriver;
+import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
@@ -77,7 +78,13 @@ public class PulseUITest {
pulseURL = "http://" + host + ":" + port + context;
Thread.sleep(1000); //wait till tomcat settles down
- driver = new FirefoxDriver();
+
+ DesiredCapabilities capabilities = new DesiredCapabilities();
+ capabilities.setJavascriptEnabled(true);
+ capabilities.setCapability("takesScreenshot", true);
+ capabilities.setCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0) Gecko/20121026 Firefox/16.0");
+
+ driver = new PhantomJSDriver(capabilities);
driver.manage().window().maximize();//required to make all elements visible
Thread.sleep(5000); //wait till pulse starts polling threads...
[5/6] incubator-geode git commit: GEODE-1966: Unauthorized users
cannot access pulseVersion details
Posted by ji...@apache.org.
GEODE-1966: Unauthorized users cannot access pulseVersion details
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/6054e004
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/6054e004
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/6054e004
Branch: refs/heads/develop
Commit: 6054e00431b1e3a0826b1e6937c867da3fb6e6ce
Parents: dfb87a5
Author: Jared Stewart <js...@pivotal.io>
Authored: Mon Oct 10 16:59:07 2016 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Oct 12 09:47:10 2016 -0700
----------------------------------------------------------------------
.../src/main/webapp/WEB-INF/spring-security.xml | 1 -
.../tools/pulse/tests/ui/PulseAbstractTest.java | 11 +-
.../pulse/tests/ui/PulseAnonymousUserTest.java | 149 +++++++++++++++++++
3 files changed, 158 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6054e004/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
----------------------------------------------------------------------
diff --git a/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml b/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
index 7efc356..b4fccf0 100644
--- a/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
+++ b/geode-pulse/src/main/webapp/WEB-INF/spring-security.xml
@@ -28,7 +28,6 @@
<csrf disabled="true"/>
<!-- Can be invoked w/o auth -->
<intercept-url pattern="/Login.html" access="permitAll" />
- <intercept-url pattern="/pulse/pulseVersion" access="permitAll" />
<intercept-url pattern="/pulse/authenticateUser" access="permitAll" />
<intercept-url pattern="/pulse/pulseProductSupport" access="permitAll" />
<!-- Can be invoked w/o auth -->
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6054e004/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
index 709a831..ad8f67b 100644
--- a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAbstractTest.java
@@ -198,7 +198,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
passwordElement.sendKeys(password);
passwordElement.submit();
- Thread.sleep(3000);
+ driver.get(pulseURL + "/clusterDetail.html");
WebElement userNameOnPulsePage = (new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
@@ -207,7 +207,6 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
});
assertNotNull(userNameOnPulsePage);
driver.navigate().refresh();
- Thread.sleep(7000);
}
private static void setUpWebDriver() {
@@ -229,6 +228,7 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
@Before
public void setup() throws Exception {
+ driver.get(pulseURL + "/clusterDetail.html");
// Make sure we go to the home page first
searchByXPathAndClick(PulseTestLocators.TopNavigation.clusterViewLinkXpath);
}
@@ -975,4 +975,11 @@ public abstract class PulseAbstractTest extends PulseBaseTest {
// Assert data regions are displayed
assertTrue(driver.findElement(By.id("treeDemo_1")).isDisplayed());
}
+
+ @Test
+ public void userCannotGetToPulseDetails() {
+ driver.get(pulseURL + "/pulse/pulseVersion");
+
+ assertTrue(driver.getPageSource().contains("sourceRevision"));
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/6054e004/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAnonymousUserTest.java
----------------------------------------------------------------------
diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAnonymousUserTest.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAnonymousUserTest.java
new file mode 100644
index 0000000..1cf4ad4
--- /dev/null
+++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseAnonymousUserTest.java
@@ -0,0 +1,149 @@
+/*
+ * 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 org.apache.geode.tools.pulse.tests.ui;
+
+import static org.assertj.core.api.Assertions.*;
+
+
+import java.io.InputStream;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import com.jayway.awaitility.Awaitility;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runners.MethodSorters;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.phantomjs.PhantomJSDriver;
+import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import org.apache.geode.internal.admin.SSLConfig;
+import org.apache.geode.management.internal.JettyHelper;
+import org.apache.geode.test.junit.categories.UITest;
+import org.apache.geode.tools.pulse.tests.PulseTestLocators;
+import org.apache.geode.tools.pulse.tests.Server;
+
+@Category(UITest.class)
+@FixMethodOrder(MethodSorters.JVM)
+public class PulseAnonymousUserTest {
+
+ 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;
+
+ @BeforeClass
+ public static void beforeClassSetup() throws Exception {
+ setUpServer("pulseUser", "12345", "pulse-auth.json");
+ }
+
+ @Before
+ public void setup(){
+ driver.get(pulseURL + "/clusterDetail.html");
+ }
+
+ @Test
+ public void userCanGetToPulseLoginPage() {
+ driver.get(pulseURL + "/Login.html");
+ System.err.println("Pulse url: " + pulseURL);
+ System.err.println(driver.getPageSource().toString());
+
+ WebElement userNameElement = driver.findElement(By.id("user_name"));
+ WebElement passwordElement = driver.findElement(By.id("user_password"));
+
+ assertThat(userNameElement).isNotNull();
+ assertThat(passwordElement).isNotNull();
+ }
+
+ @Test
+ public void userCannotGetToPulseDetails() {
+ driver.get(pulseURL + "/pulse/pulseVersion");
+
+ assertThat(driver.getPageSource()).doesNotContain("sourceRevision");
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ driver.close();
+ jetty.stop();
+ }
+
+
+ public static void setUpServer(String username, String password, String jsonAuthFile) throws Exception {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+ final String jmxPropertiesFile = classLoader.getResource("test.properties").getPath();
+ path = getPulseWarPath();
+ server = Server.createServer(9999, jmxPropertiesFile, jsonAuthFile);
+
+ String host = "localhost";
+ int port = 8080;
+ String context = "/pulse";
+
+ jetty = JettyHelper.initJetty(host, port, new SSLConfig());
+ JettyHelper.addWebApplication(jetty, context, getPulseWarPath());
+ jetty.start();
+
+ pulseURL = "http://" + host + ":" + port + context;
+
+ Awaitility.await().until(() -> jetty.isStarted());
+
+ setUpWebDriver();
+ }
+
+ private static void setUpWebDriver() {
+ DesiredCapabilities capabilities = new DesiredCapabilities();
+ capabilities.setJavascriptEnabled(true);
+ capabilities.setCapability("takesScreenshot", true);
+ capabilities.setCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0) Gecko/20121026 Firefox/16.0");
+
+ driver = new PhantomJSDriver(capabilities);
+ driver.manage().window().maximize();
+ driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
+ }
+
+ 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 searchByXPathAndClick(String xpath) {
+ WebElement element = driver.findElement(By.xpath(xpath));
+ assertThat(element).isNotNull();
+ element.click();
+ }
+}