/* * JBoss, Home of Professional Open Source * Copyright 2015, Red Hat, Inc., and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed 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.jboss.weld.probe.ftest; import static org.junit.Assert.assertTrue; import static org.jboss.arquillian.graphene.Graphene.guardAjax; import static org.jboss.arquillian.graphene.Graphene.guardNoRequest; import static org.jboss.arquillian.graphene.Graphene.waitAjax; import static org.jboss.arquillian.graphene.Graphene.waitModel; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.RequestScoped; import javax.enterprise.event.Reception; import javax.enterprise.inject.Default; import javax.enterprise.inject.Model; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.page.Page; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.weld.bootstrap.spi.BeanDiscoveryMode; import org.jboss.weld.probe.InvocationMonitor; import org.jboss.weld.probe.ProbeFilter; import org.jboss.weld.probe.tests.integration.JSONTestUtil; import org.jboss.weld.probe.tests.integration.ProbeBeansTest; import org.jboss.weld.probe.tests.integration.deployment.InvokingServlet; import org.jboss.weld.probe.tests.integration.deployment.annotations.Collector; import org.jboss.weld.probe.tests.integration.deployment.beans.ApplicationScopedObserver; import org.jboss.weld.probe.tests.integration.deployment.beans.ModelBean; import org.jboss.weld.probe.tests.integration.deployment.beans.SessionScopedBean; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; /** * @author Tomas Remes * @author Matej Novotny */ @RunWith(Arquillian.class) @RunAsClient public class ProbeFunctionalTest { protected static final String PROBE = "weld-probe"; protected static final String ARCHIVE_NAME = "probe-ftest"; protected static final String SERVLET_INVOKED = "GET /probe-ftest/test"; @Drone WebDriver driver; @ArquillianResource private URL contextPath; @Page private PageFragment page; @FindBy(className = "form-control-static") List<WebElement> listOfTargetElements; @Deployment(testable = false) public static WebArchive createTestDeployment1() { WebArchive webArchive = ShrinkWrap.create(WebArchive.class, ARCHIVE_NAME + ".war") .addAsWebInfResource(ProbeBeansTest.class.getPackage(), "web.xml", "web.xml") .addAsWebInfResource(ProbeBeansTest.class.getPackage(), "beans.xml", "beans.xml") .addPackage(ModelBean.class.getPackage()) .addPackage(Collector.class.getPackage()) .addClass(InvokingServlet.class); return webArchive; } @Before public void openStartUrl() throws MalformedURLException { // By default you land on Dashboard tab driver.navigate().to(new URL(contextPath.toString() + PROBE)); waitModel().until().element(page.getBeanArchivesTab()).is().present(); } @Test public void testBeanArchiveDetail() { page.getBeanArchivesTab().click(); waitAjax(driver).until().element(By.partialLinkText(ARCHIVE_NAME)).is().visible(); guardNoRequest(driver.findElement(By.partialLinkText(ARCHIVE_NAME))).click(); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals(BeanDiscoveryMode.ALL.name()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().contains(InvocationMonitor.class.getName()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().contains(ARCHIVE_NAME))); } @Test public void testBeanDetail() { guardAjax(page.getBeansTab()).click(); String className = ModelBean.class.getSimpleName(); waitAjax(driver).until().element(By.partialLinkText(className)).is().visible(); WebElement modelBeanLink = driver.findElement(By.partialLinkText(className)); assertTrue("Cannot find element for " + className, modelBeanLink.isDisplayed()); guardAjax(modelBeanLink).click(); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals(ModelBean.class.getName()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals("@" + RequestScoped.class.getSimpleName()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals(JSONTestUtil.BeanType.MANAGED.name()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals(Model.class.getName()))); } @Test public void testObserverMethodDetail() { page.getObserversTab().click(); waitAjax().until().element(By.xpath("//h1[text()='Observer Methods']")).is().visible(); WebElement observerLink = driver.findElement(By.partialLinkText(ApplicationScopedObserver.class.getSimpleName())); assertTrue("Cannot find element for " + ApplicationScopedObserver.class.getSimpleName(), observerLink.isDisplayed()); guardAjax(observerLink).click(); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals(ApplicationScopedObserver.class.getName()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals("@" + ApplicationScoped.class.getSimpleName()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals(JSONTestUtil.BeanType.MANAGED.name()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().equals("@" + Default.class.getSimpleName()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().contains(Reception.ALWAYS.name()))); assertTrue(listOfTargetElements.stream().anyMatch(webElement -> webElement.getText().contains(Reception.IF_EXISTS.name()))); } @Test public void testMonitoringSessionScopeContext() throws MalformedURLException { invokeServletAndReturnToProbeClient(); page.getMonitoringTab().click(); waitAjax(driver).until().element(page.getSessionScopedContext()).is().visible(); guardAjax(page.getSessionScopedContext()).click(); WebElement sesionScopedBean = driver.findElement(By.partialLinkText(SessionScopedBean.class.getSimpleName())); assertTrue("Cannot find element for " + SessionScopedBean.class.getSimpleName(), sesionScopedBean.isDisplayed()); } @Test public void testMonitoringInvocationTree() throws MalformedURLException { invokeServletAndReturnToProbeClient(); page.getMonitoringTab().click(); waitAjax(driver).until().element(page.getInvocationTrees()).is().visible(); guardAjax(page.getInvocationTrees()).click(); waitAjax(driver).until().element(By.xpath("//h1[text()='Invocation Trees']")).is().visible(); List<WebElement> invocationTableValues = driver.findElements(By.tagName("td")); assertTrue(invocationTableValues.stream().anyMatch(webElement -> webElement.getText().equals(ProbeFilter.class.getName()))); assertTrue(invocationTableValues.stream().anyMatch(webElement -> webElement.getText().equals(SERVLET_INVOKED))); } private void invokeServletAndReturnToProbeClient() throws MalformedURLException { driver.navigate().to(new URL(contextPath.toString() + "test")); driver.navigate().to(new URL(contextPath.toString() + PROBE)); waitModel().until().element(page.getBeanArchivesTab()).is().present(); } }