Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 65841200BDB for ; Mon, 12 Dec 2016 23:36:07 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 644E5160B36; Mon, 12 Dec 2016 22:36:07 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 24AD3160B3B for ; Mon, 12 Dec 2016 23:36:05 +0100 (CET) Received: (qmail 73685 invoked by uid 500); 12 Dec 2016 22:36:05 -0000 Mailing-List: contact commits-help@geode.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@geode.apache.org Delivered-To: mailing list commits@geode.apache.org Received: (qmail 73258 invoked by uid 99); 12 Dec 2016 22:36:04 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Dec 2016 22:36:04 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 8E7BCF2DCF; Mon, 12 Dec 2016 22:36:04 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: klund@apache.org To: commits@geode.apache.org Date: Mon, 12 Dec 2016 22:36:15 -0000 Message-Id: <10a8bc8956754f5aab3d3c82a735ee5b@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [12/46] geode git commit: GEODE-2112: Fix UITests failing due to insufficient cleanup archived-at: Mon, 12 Dec 2016 22:36:07 -0000 http://git-wip-us.apache.org/repos/asf/geode/blob/190f3a21/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseTestUtils.java ---------------------------------------------------------------------- diff --git a/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseTestUtils.java b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseTestUtils.java new file mode 100644 index 0000000..9e2c531 --- /dev/null +++ b/geode-pulse/src/test/java/org/apache/geode/tools/pulse/tests/ui/PulseTestUtils.java @@ -0,0 +1,661 @@ +/* + * 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.function.Supplier; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +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.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 final class PulseTestUtils { + private static Supplier driverProvider; + + public static void setDriverProvider(Supplier driverProvider) { + PulseTestUtils.driverProvider = driverProvider; + } + + public static WebDriver getDriver() { + if (driverProvider == null) { + throw new IllegalStateException("No WebdriverProvider has been set."); + } else { + return driverProvider.get(); + } + } + + public static int maxWaitTime = 20; + + public static WebElement waitForElementWithId(String id) { + WebElement element = + (new WebDriverWait(driverProvider.get(), 10)).until(new ExpectedCondition() { + @Override + public WebElement apply(WebDriver d) { + return d.findElement(By.id(id)); + } + }); + assertNotNull(element); + return element; + } + + + public static WebElement findElementUsingXpath(String xpath) { + return getDriver().findElement(By.xpath(xpath)); + } + + public static void clickElementUsingId(String id) { + waitForElementWithId(id).click(); + } + + public static void clickElementUsingXpath(String xpath) { + findElementUsingXpath(xpath).click(); + } + + + public static void sendKeysUsingId(String Id, String textToEnter) { + waitForElementWithId(Id).sendKeys(textToEnter); + } + + + public static WebElement findElementByXpath(String xpath) { + return getDriver().findElement(By.xpath(xpath)); + } + + public static String getTextUsingXpath(String xpath) { + return findElementByXpath(xpath).getText(); + } + + public static String getTextUsingId(String id) { + return waitForElementWithId(id).getText(); + } + + public static String getPersistanceEnabled(Region r) { + String persitance = null; + + if (r.getPersistentEnabled()) { + persitance = "ON"; + } else if (!r.getPersistentEnabled()) { + persitance = "OFF"; + } + return persitance; + } + + public static String getPersistanceEnabled(String trueOrFalse) { + String persitance = null; + + if (trueOrFalse.contains("true")) { + persitance = "ON"; + } else if (trueOrFalse.contains("false")) { + persitance = "OFF"; + } + return persitance; + } + + public static void validateServerGroupGridData() { + List serverGridRows = + getDriver().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] = getDriver() + .findElement( + By.xpath("//table[@id='memberListSG']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")) + .getText(); + } + } + + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap> sgMap = new HashMap>(); + + for (String member : memberNames) { + Member thisMember = new Member(member); + String[] sgs = thisMember.getGroups(); + + for (String sgName : sgs) { + HashMap sgMembers = sgMap.get(sgName); + if (sgMembers == null) { + sgMembers = new HashMap(); + 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 static void validateRedundancyZonesGridData() { + List rzGridRows = + getDriver().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] = getDriver() + .findElement( + By.xpath("//table[@id='memberListRZ']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")) + .getText(); + } + } + + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap> rzMap = new HashMap>(); + + for (String member : memberNames) { + Member thisMember = new Member(member); + // String[] rz = thisMember.getRedundancyZone(); + String sgName = thisMember.getRedundancyZone(); + + // for (String sgName : rz) { + HashMap rzMembers = rzMap.get(sgName); + + if (rzMembers == null) { + rzMembers = new HashMap(); + 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 static void validateTopologyGridData() { + List rzGridRows = + getDriver().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] = getDriver() + .findElement( + By.xpath("//table[@id='memberList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")) + .getText(); + } + } + + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap tpMap = new HashMap(); + + 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 static void validateDataPrespectiveGridData() { + List serverGridRows = + getDriver().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] = getDriver() + .findElement( + By.xpath("//table[@id='regionsList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")) + .getText(); + } else if (i == 5) { + gridDataFromUI[x][i] = getDriver() + .findElement( + By.xpath("//table[@id='regionsList']/tbody/tr[" + j + "]/td[" + (i + 4) + "]")) + .getText(); + } + } + } + + String[] regionNames = JMXProperties.getInstance().getProperty("regions").split(" "); + HashMap dataMap = new HashMap(); + + 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 static void validateRegionDetailsGridData() { + List serverGridRows = + getDriver().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] = getDriver() + .findElement( + By.xpath("//table[@id='memberList']/tbody/tr[" + j + "]/td[" + (i + 1) + "]")) + .getText(); + } + } + + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap tpMap = new HashMap(); + + 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 static void navigateToToplogyView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.TopologyView.radioButtonXpath); + } + + // ------ Topology / Server Group / Redundancy Group - Tree View + + public static void navigateToTopologyTreeView() { + navigateToToplogyView(); + clickElementUsingId(PulseTestLocators.TopologyView.treeMapButtonId); + } + + public static void navigateToServerGroupTreeView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath); + } + + public static void navigateToRedundancyZonesTreeView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath); + } + + // ------ Topology / Server Group / Redundancy Group - Grid View + + public static void navigateToTopologyGridView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.TopologyView.radioButtonXpath); + clickElementUsingId(PulseTestLocators.TopologyView.gridButtonId); + } + + public static void navigateToServerGroupGridView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.ServerGroups.radioButtonXpath); + clickElementUsingId(PulseTestLocators.ServerGroups.gridButtonId); + } + + public static void navigateToRedundancyZonesGridView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.RedundancyZone.radioButtonXpath); + clickElementUsingId(PulseTestLocators.RedundancyZone.gridButtonId); + } + + // ----- Data perspective / region details + + public static void navigateToDataPrespectiveGridView() { + clickElementUsingXpath(PulseTestLocators.TopNavigation.clusterViewLinkXpath); + clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.downarrowButtonXpath); + clickElementUsingXpath(PulseTestLocators.DataPerspectiveView.dataViewButtonXpath); + clickElementUsingId(PulseTestLocators.DataPerspectiveView.gridButtonId); + } + + public static 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 static void navigateToRegionDetailsGridView() { + navigateToRegionDetailsView(); + clickElementUsingXpath(PulseTestLocators.RegionDetailsView.gridButtonXpath); + } + + public static String getPropertyValue(String propertyKey) { + String propertyValue = JMXProperties.getInstance().getProperty(propertyKey); + return propertyValue; + } + + public static void verifyElementPresentById(String id) { + WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, 500); + wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.id(id))); + } + + public static void verifyElementPresentByLinkText(String lnkText) { + WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, 500); + wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.linkText(lnkText))); + } + + public static void verifyElementPresentByXpath(String xpath) { + WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, 500); + wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(xpath))); + } + + public static void verifyTextPresrntById(String id, String text) { + WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, 500); + wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id(id), text)); + } + + public static void verifyTextPresrntByXpath(String xpath, String text) { + WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, 500); + wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath(xpath), text)); + } + + public static void verifyElementAttributeById(String id, String attribute, String value) { + String actualValue = waitForElementWithId(id).getAttribute(attribute); + assertTrue(actualValue.equals(value) || actualValue.contains(value)); + } + + + public static void mouseReleaseById(String id) { + verifyElementPresentById(id); + Actions action = new Actions(getDriver()); + WebElement we = getDriver().findElement(By.id(id)); + action.moveToElement(we).release().perform(); + } + + public static void mouseClickAndHoldOverElementById(String id) { + verifyElementPresentById(id); + Actions action = new Actions(getDriver()); + WebElement we = getDriver().findElement(By.id(id)); + action.moveToElement(we).clickAndHold().perform(); + } + + public static String[] splitString(String stringToSplit, String splitDelimiter) { + String[] stringArray = stringToSplit.split(splitDelimiter); + return stringArray; + } + + public static void assertMemberSortingByCpuUsage() { + Map 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 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( + waitForElementWithId(entry.getValue()).getAttribute("style").contains(refMemberCPUUsage)); + } + } + + public static void assertMemberSortingByHeapUsage() { + Map memberMap = new TreeMap(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 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(waitForElementWithId(entry.getValue()).getAttribute("style") + .contains(refMemberHeapUsage)); + } + } + + + public static void assertMemberSortingBySgHeapUsage() { + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap> sgMap = new HashMap>(); + for (String member : memberNames) { + Member thisMember = new Member(member); + String[] sgs = thisMember.getGroups(); + + for (String sgName : sgs) { + HashMap sgMembers = sgMap.get(sgName); + if (sgMembers == null) { + sgMembers = new HashMap(); + sgMap.put(sgName, sgMembers); + } + sgMembers.put(thisMember.getMember(), thisMember); + } + } + Map memberMap = new TreeMap(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 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(waitForElementWithId("SG1(!)" + entry.getValue()).getAttribute("style") + .contains(refMemberCPUUsage)); + } + } + + + + public static void assertMemberSortingBySgCpuUsage() { + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap> sgMap = new HashMap>(); + for (String member : memberNames) { + Member thisMember = new Member(member); + String[] sgs = thisMember.getGroups(); + + for (String sgName : sgs) { + HashMap sgMembers = sgMap.get(sgName); + if (sgMembers == null) { + sgMembers = new HashMap(); + sgMap.put(sgName, sgMembers); + } + sgMembers.put(thisMember.getMember(), thisMember); + } + } + Map 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 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(waitForElementWithId("SG1(!)" + entry.getValue()).getAttribute("style") + .contains(refMemberCPUUsage)); + } + } + + public static void assertMemberSortingByRzHeapUsage() { + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap> rzMap = new HashMap>(); + for (String member : memberNames) { + Member thisMember = new Member(member); + String sgName = thisMember.getRedundancyZone(); + HashMap rzMembers = rzMap.get(sgName); + + if (rzMembers == null) { + rzMembers = new HashMap(); + rzMap.put(sgName, rzMembers); + } + + rzMembers.put(thisMember.getMember(), thisMember); + } + Map memberMap = new TreeMap(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 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(waitForElementWithId("RZ1 RZ2(!)" + entry.getValue()).getAttribute("style") + .contains(refMemberHeapUsage)); + } + } + + public static void assertMemeberSortingByRzCpuUsage() { + String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" "); + HashMap> rzMap = new HashMap>(); + for (String member : memberNames) { + Member thisMember = new Member(member); + String sgName = thisMember.getRedundancyZone(); + HashMap rzMembers = rzMap.get(sgName); + + if (rzMembers == null) { + rzMembers = new HashMap(); + rzMap.put(sgName, rzMembers); + } + + rzMembers.put(thisMember.getMember(), thisMember); + } + Map 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 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(waitForElementWithId("RZ1 RZ2(!)" + entry.getValue()).getAttribute("style") + .contains(refMemberCPUUsage)); + } + } + + public static List getRegionsFromDataBrowser() { + List regionList = getDriver() + .findElements(By.xpath("//span[starts-with(@ID,'treeDemo_')][contains(@id,'_span')]")); + return regionList; + } +}