blob: 6d136f10dee78bdad2d549cac0898c1d8fd6c935 [file] [log] [blame]
/*
* 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.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
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.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
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 class PulseTestUtils {
private static Supplier<WebDriver> driverProvider;
public static void setDriverProvider(Supplier<WebDriver> 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 = 30;
public static int pollInterval = 1000;
public static WebElement waitForElementWithId(String id) {
return waitForElement(By.id(id));
}
public static WebElement waitForElement(By by) {
WebElement element = (new WebDriverWait(driverProvider.get(), maxWaitTime))
.until((ExpectedCondition<WebElement>) d -> d.findElement(by));
assertNotNull(element);
return element;
}
public static void clickElementUsingId(String id) {
WebDriverException lastException = null;
int attempts = 3;
while (attempts > 0) {
try {
waitForElementWithId(id).click();
return;
} catch (StaleElementReferenceException sere) {
lastException = sere;
}
attempts++;
}
throw lastException;
}
public static void clickElementUsingXpath(String xpath) {
findElementByXpath(xpath).click();
}
public static void sendKeysUsingId(String Id, String textToEnter) {
waitForElementWithId(Id).sendKeys(textToEnter);
}
public static WebElement findElementByXpath(String xpath) {
return waitForElement(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 persistence = null;
if (r.getPersistentEnabled()) {
persistence = "ON";
} else if (!r.getPersistentEnabled()) {
persistence = "OFF";
}
return persistence;
}
public static String getPersistanceEnabled(String trueOrFalse) {
String persistence = null;
if (trueOrFalse.contains("true")) {
persistence = "ON";
} else if (trueOrFalse.contains("false")) {
persistence = "OFF";
}
return persistence;
}
public static void validateServerGroupGridData() {
List<WebElement> 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<String, HashMap<String, Member>> sgMap = new HashMap<>();
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<>();
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<WebElement> 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<String, HashMap<String, Member>> 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<String, Member> 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<WebElement> 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<String, Member> 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<WebElement> 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<String, Region> 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<WebElement> 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<String, Member> 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, pollInterval);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.id(id)));
}
public static void verifyElementPresentByLinkText(String lnkText) {
WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, pollInterval);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.linkText(lnkText)));
}
public static void verifyElementPresentByXpath(String xpath) {
WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, pollInterval);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(xpath)));
}
public static void verifyTextPresrntById(String id, String text) {
WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, pollInterval);
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id(id), text));
}
public static void verifyTextPresrntByXpath(String xpath, String text) {
WebDriverWait wait = new WebDriverWait(getDriver(), maxWaitTime, pollInterval);
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<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(
waitForElementWithId(entry.getValue()).getAttribute("style").contains(refMemberCPUUsage));
}
}
public static void assertMemberSortingByHeapUsage() {
Map<Long, 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.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(waitForElementWithId(entry.getValue()).getAttribute("style")
.contains(refMemberHeapUsage));
}
}
public static void assertMemberSortingBySgHeapUsage() {
String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
HashMap<String, HashMap<String, Member>> sgMap = new HashMap<>();
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<>();
sgMap.put(sgName, sgMembers);
}
sgMembers.put(thisMember.getMember(), thisMember);
}
}
Map<Float, String> 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<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(waitForElementWithId("SG1(!)" + entry.getValue()).getAttribute("style")
.contains(refMemberCPUUsage));
}
}
public static void assertMemberSortingBySgCpuUsage() {
String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
HashMap<String, HashMap<String, Member>> sgMap = new HashMap<>();
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<>();
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(waitForElementWithId("SG1(!)" + entry.getValue()).getAttribute("style")
.contains(refMemberCPUUsage));
}
}
public static void assertMemberSortingByRzHeapUsage() {
String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
HashMap<String, HashMap<String, Member>> rzMap = new HashMap<>();
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<>();
rzMap.put(sgName, rzMembers);
}
rzMembers.put(thisMember.getMember(), thisMember);
}
Map<Float, String> 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<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(waitForElementWithId("RZ1 RZ2(!)" + entry.getValue()).getAttribute("style")
.contains(refMemberHeapUsage));
}
}
public static void assertMemeberSortingByRzCpuUsage() {
String[] memberNames = JMXProperties.getInstance().getProperty("members").split(" ");
HashMap<String, HashMap<String, Member>> rzMap = new HashMap<>();
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<>();
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(waitForElementWithId("RZ1 RZ2(!)" + entry.getValue()).getAttribute("style")
.contains(refMemberCPUUsage));
}
}
public static List<WebElement> getRegionsFromDataBrowser() {
List<WebElement> regionList = getDriver()
.findElements(By.xpath("//span[starts-with(@ID,'treeDemo_')][contains(@id,'_span')]"));
return regionList;
}
}