blob: 127ddf80de62c4a3eb5efd074bdd4dd6f7cf1b10 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2012-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.vmware.gemfire.tools.pulse.testbed.driver;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.InetAddress;
import java.util.List;
import junit.framework.Assert;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Locator;
import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Peer;
import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Region;
import com.vmware.gemfire.tools.pulse.testbed.GemFireDistributedSystem.Server;
import com.vmware.gemfire.tools.pulse.testbed.TestBed;
/**
* @author Sushant Rawal
* @author tushark
*
*/
public class PulseUITest {
private WebDriver driver;
private TestBed testBed;
private final String testBedPropertyfile = System.getProperty("pulse.propMockDataUpdaterFile");
private static String pulseURL = System.getProperty("pulse.url");
private static String path =System.getProperty("pulse.war");;
private static final String userName = "admin";
private static final String pasword = "admin";
private static final String DATA_VIEW_LABEL = "Data View";
private static final String CLUSTER_VIEW_MEMBERS_ID = "clusterTotalMembersText";
private static final String CLUSTER_VIEW_SERVERS_ID = "clusterServersText";
private static final String CLUSTER_VIEW_LOCATORS_ID = "clusterLocatorsText";
private static final String CLUSTER_VIEW_REGIONS_ID = "clusterTotalRegionsText";
private static Tomcat tomcat = null;
private static WebDriver initdriver = null;
@BeforeClass
public static void setUpTomcat(){
try {
String host = InetAddress.getLocalHost().getHostAddress();
int port = 8080;
String context = "/pulse";
//System.setProperty("pulse.propMockDataUpdaterClass", "com.vmware.gemfire.tools.pulse.testbed.PropMockDataUpdater");
tomcat = TomcatHelper.startTomcat(host, port, context, path);
pulseURL = "http://" + host + ":" + port + context;
Thread.sleep(1000); //wait till tomcat settles down
initdriver = new FirefoxDriver();
loginToPulse(initdriver, userName, pasword);
Thread.sleep(5000); //wait till pulse starts polling threads...
initdriver.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
Assert.fail("Error " +e.getMessage());
} catch (IOException e) {
e.printStackTrace();
Assert.fail("Error " +e.getMessage());
} catch (Exception e) {
e.printStackTrace();
Assert.fail("Error " +e.getMessage());
}
}
@Before
public void setUp() {
try {
testBed = new TestBed(testBedPropertyfile,true);
} catch (FileNotFoundException e) {
e.printStackTrace();
Assert.fail("Error " +e.getMessage());
} catch (IOException e) {
e.printStackTrace();
Assert.fail("Error " +e.getMessage());
} catch (Exception e) {
e.printStackTrace();
Assert.fail("Error " +e.getMessage());
}
driver = new FirefoxDriver();
driver.manage().window().maximize();//required to make all elements visible
loginToPulse();
}
private void loginToPulse() {
loginToPulse(driver, userName, pasword);
}
private static void loginToPulse(WebDriver driver, String userName,String password){
driver.get(pulseURL);
WebElement userNameElement = driver.findElement(By.id("user_name"));
WebElement passwordElement = driver.findElement(By.id("user_password"));
userNameElement.sendKeys(userName);
passwordElement.sendKeys(password);
passwordElement.submit();
WebElement userNameOnPulsePage = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("userName"));
}
});
Assert.assertNotNull(userNameOnPulsePage);
}
private void searchByLinkAndClick(String linkText){
WebElement dataViewButton= By.linkText(linkText).findElement(driver);
Assert.assertNotNull(dataViewButton);
dataViewButton.click();
}
private void searchByIdAndClick(String id){
WebElement element = driver.findElement(By.id(id));
Assert.assertNotNull(element);
element.click();
}
private void searchByXPathAndClick(String xpath){
WebElement element = driver.findElement(By.xpath(xpath));
Assert.assertNotNull(element);
element.click();
}
private void waitForElementByClassName(final String className, int seconds){
WebElement linkTextOnPulsePage1 = (new WebDriverWait(driver, seconds))
.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.className(className));
}
});
Assert.assertNotNull(linkTextOnPulsePage1);
}
private void waitForElementById(final String id, int seconds){
WebElement element = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id(id));
}
});
Assert.assertNotNull(element);
}
@Test
public void testClusterViewTopRibbon() {
List<Server> servers = testBed.getRootDs().getServers();
List<Locator> locators = testBed.getRootDs().getLocators();
List<Peer> peers = testBed.getRootDs().getPeers();
List<Region> regions = testBed.getRootDs().getRegions();
int totalMembers = servers.size() + locators.size() + peers.size();
int clusterMembers = Integer.parseInt(driver.findElement(
By.id(CLUSTER_VIEW_MEMBERS_ID)).getText());
int clusterServers = Integer.parseInt(driver.findElement(
By.id(CLUSTER_VIEW_SERVERS_ID)).getText());
int clusterLocators = Integer.parseInt(driver.findElement(
By.id(CLUSTER_VIEW_LOCATORS_ID)).getText());
int clusterRegions = Integer.parseInt(driver.findElement(
By.id(CLUSTER_VIEW_REGIONS_ID)).getText());
Assert.assertEquals(totalMembers, clusterMembers);
Assert.assertEquals(servers.size(), clusterServers);
Assert.assertEquals(locators.size(), clusterLocators);
Assert.assertEquals(regions.size(), clusterRegions);
}
@Test
public void testDataViewRegionProperties() {
searchByLinkAndClick(DATA_VIEW_LABEL);
waitForElementByClassName("pointDetailsPadding",10);
searchByIdAndClick("btngridIcon");
for(int i=1;i<testBed.getRootDs().getRegions().size();i++){
searchByIdAndClick(""+i);
String regionName1 = driver.findElement(By.id("regionName")).getText();
@SuppressWarnings("rawtypes")
List regionMemberscount1 = testBed.getRootDs().getRegion(regionName1)
.getMembers();
int regionEntCount1 = testBed.getRootDs().getRegion(regionName1)
.getEntryCount();
int regionMembers1 = Integer.parseInt(driver.findElement(
By.id("regionMembers")).getText());
int regionEntryCount1 = Integer.parseInt(driver.findElement(
By.id("regionEntryCount")).getText());
Assert.assertEquals(regionMemberscount1.size(), regionMembers1);
Assert.assertEquals(regionEntCount1, regionEntryCount1);
}
}
@Test
public void testMemberViewRegions() {
searchByLinkAndClick(DATA_VIEW_LABEL);
waitForElementByClassName("pointDetailsPadding",10);
searchByXPathAndClick("//div[@title='peer1']");
waitForElementById("memberRegionsCount",10);
List<Server> servers = testBed.getRootDs().getServers();
List<Locator> locators = testBed.getRootDs().getLocators();
List<Peer> peers = testBed.getRootDs().getPeers();
String prevSelectedMember = "peer1";
for (Peer p : peers) {
String peer = p.getName();
System.out.println("Checking regions mapping for member " + peer);
WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember));
comboBox.click();
WebElement comboList = driver.findElement(By.id("clusterMembersContainer"));
WebElement selectedMember = comboList.findElement(By.linkText(peer));
selectedMember.click();
timeout();
String peername = driver.findElement(By.id("memberName")).getText();
List<Region> peerRegionscount = testBed.getRootDs().getRegions(peer);
int peerRegions = Integer.parseInt(driver.findElement(
By.id("memberRegionsCount")).getText());
Assert.assertEquals(peerRegionscount.size(), peerRegions);
prevSelectedMember = peername;
}
for (Server s : servers) {
String server = s.getName();
System.out.println("Checking regions mapping for server " + server);
WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember));
comboBox.click();
WebElement comboList = driver.findElement(By.id("clusterMembersContainer"));
WebElement selectedMember = comboList.findElement(By.linkText(server));
selectedMember.click();
timeout();
String peername = driver.findElement(By.id("memberName")).getText();
List<Region> serverRegionscount = testBed.getRootDs().getRegions(server);
int serverRegions = Integer.parseInt(driver.findElement(
By.id("memberRegionsCount")).getText());
Assert.assertEquals(serverRegionscount.size(), serverRegions);
prevSelectedMember = peername;
}
/*
for (Locator l : locators) {
String locator = l.getName();
System.out.println("Checking regions mapping for locator " + locator);
WebElement comboBox = driver.findElement(By.linkText(prevSelectedMember));
comboBox.click();
WebElement comboList = driver.findElement(By.id("clusterMembersContainer"));
WebElement selectedMember = comboList.findElement(By.linkText(locator));
selectedMember.click();
timeout();
String peername = driver.findElement(By.id("memberName")).getText();
List<Region> locatorRegionscount = testBed.getRootDs().getRegions(locator);
int locatorRegions = Integer.parseInt(driver.findElement(
By.id("memberRegionsCount")).getText());
Assert.assertEquals(locatorRegionscount.size(), locatorRegions);
prevSelectedMember = peername;
}*/
}
public void timeout() {
WebElement memberNameOnPulsePage = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("memberName"));
}
});
Assert.assertNotNull(memberNameOnPulsePage);
}
@After
public void closeSession() {
driver.close();
}
@AfterClass
public static void stopTomcat(){
try {
if(tomcat!=null){
tomcat.stop();
tomcat.destroy();
}
} catch (LifecycleException e) {
e.printStackTrace();
}
}
}