diff options
author | Teemu Suo-Anttila <tsuoanttila@users.noreply.github.com> | 2018-08-24 11:25:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-24 11:25:06 +0300 |
commit | 38aedc92222a0be75364439faec2f223c15808f2 (patch) | |
tree | dd3e9b13fabfa14d579532fdce4bade37c115b85 | |
parent | f8b30a789399a2c61e8a3564b7b3e2a72a57d428 (diff) | |
download | vaadin-framework-38aedc92222a0be75364439faec2f223c15808f2.tar.gz vaadin-framework-38aedc92222a0be75364439faec2f223c15808f2.zip |
Introduce servlet container tests from Vaadin 8 (#11128)
70 files changed, 3718 insertions, 46 deletions
diff --git a/.gitignore b/.gitignore index d55a19aa04..fb667fdc3d 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,4 @@ phantomjsdriver.log .idea */.checkstyle - +error-screenshots diff --git a/test/addon-using-init-param-widget-set/pom.xml b/test/addon-using-init-param-widget-set/pom.xml index cd1f3d1b17..bc9df56444 100644 --- a/test/addon-using-init-param-widget-set/pom.xml +++ b/test/addon-using-init-param-widget-set/pom.xml @@ -32,7 +32,6 @@ <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-client-compiled</artifactId> - <version>${project.version}</version> </dependency> </dependencies> diff --git a/test/pom.xml b/test/pom.xml index b9c3456b03..bf36456e2a 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -2,16 +2,21 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>com.vaadin</groupId> - <artifactId>vaadin-root</artifactId> - <version>7.7-SNAPSHOT</version> - </parent> + <groupId>com.vaadin</groupId> <artifactId>vaadin-test</artifactId> + <version>7.7-SNAPSHOT</version> <name>vaadin-test</name> <packaging>pom</packaging> <properties> + <maven.compiler.source>1.6</maven.compiler.source> + <maven.compiler.target>1.6</maven.compiler.target> <failOnMissingWebXml>false</failOnMissingWebXml> + <jetty.version>9.3.7.v20160115</jetty.version> + <phantomjs.version>2.1.1</phantomjs.version> + <testbench.version>4.2.2</testbench.version> + <testbench.api.version>7.7.14</testbench.api.version> + <vaadin.version>${project.version}</vaadin.version> + <vaadin.maven.version>${vaadin.version}</vaadin.maven.version> </properties> <repositories> @@ -19,8 +24,61 @@ <id>vaadin-addons</id> <url>http://maven.vaadin.com/vaadin-addons</url> </repository> + <repository> + <id>vaadin-prereleases</id> + <url>http://maven.vaadin.com/vaadin-prereleases</url> + </repository> + <repository> + <id>vaadin-snapshots</id> + <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots</url> + <releases> + <enabled>false</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </repository> </repositories> + <pluginRepositories> + <pluginRepository> + <id>vaadin-prereleases</id> + <url>http://maven.vaadin.com/vaadin-prereleases</url> + </pluginRepository> + <pluginRepository> + <id>vaadin-snapshots</id> + <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots</url> + <releases> + <enabled>false</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </pluginRepository> + </pluginRepositories> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-bom</artifactId> + <version>${vaadin.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-testbench-api</artifactId> + <version>${testbench.api.version}</version> + </dependency> + </dependencies> + </dependencyManagement> + <dependencies> <!-- API DEPENDENCIES --> @@ -28,12 +86,10 @@ <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-server</artifactId> - <version>${project.version}</version> </dependency> <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-themes</artifactId> - <version>${project.version}</version> </dependency> <!-- Servlet 3.0 API --> @@ -49,7 +105,6 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>4.11</version> <scope>test</scope> </dependency> <dependency> @@ -61,7 +116,7 @@ <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-testbench</artifactId> - <version>4.0.3</version> + <version>${testbench.version}</version> <scope>test</scope> </dependency> </dependencies> @@ -75,9 +130,24 @@ <module>addon-using-init-param-widget-set</module> <module>space in directory</module> <module>vaadinservletconfiguration-widget-set</module> + <module>servlet-containers</module> </modules> <build> + <pluginManagement> + <plugins> + <plugin> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-maven-plugin</artifactId> + <version>${vaadin.maven.version}</version> + </plugin> + <plugin> + <artifactId>maven-jar-plugin</artifactId> + <version>3.1.0</version> + </plugin> + </plugins> + </pluginManagement> + <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> @@ -111,6 +181,7 @@ <plugin> <groupId>com.github.klieber</groupId> <artifactId>phantomjs-maven-plugin</artifactId> + <version>0.7</version> <executions> <execution> <goals> @@ -125,9 +196,11 @@ <plugin> <artifactId>maven-surefire-plugin</artifactId> + <version>2.22.0</version> </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> + <version>2.22.0</version> <executions> <execution> <goals> @@ -139,7 +212,11 @@ <configuration> <systemPropertyVariables> <phantomjs.binary.path>${phantomjs.binary}</phantomjs.binary.path> + <server-name>${server.name}</server-name> + <com.vaadin.testbench.Parameters.screenshotReferenceDirectory>${reference.directory}</com.vaadin.testbench.Parameters.screenshotReferenceDirectory> + <com.vaadin.testbench.Parameters.screenshotErrorDirectory>target/error-screenshots</com.vaadin.testbench.Parameters.screenshotErrorDirectory> </systemPropertyVariables> + <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> diff --git a/test/servlet-containers/generic-tests/pom.xml b/test/servlet-containers/generic-tests/pom.xml new file mode 100644 index 0000000000..794849a6d7 --- /dev/null +++ b/test/servlet-containers/generic-tests/pom.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-server-tests</artifactId> + <name>vaadin-test-server-tests</name> + <packaging>jar</packaging> + <properties> + <jetty.skip>true</jetty.skip> + </properties> + + <dependencies> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-testbench-api</artifactId> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + </dependencies> +</project> diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/AbstractIntegrationTest.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/AbstractIntegrationTest.java new file mode 100644 index 0000000000..cac426258f --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/AbstractIntegrationTest.java @@ -0,0 +1,146 @@ +package com.vaadin.tests.integration; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Locale; +import java.util.logging.Logger; + +import javax.imageio.ImageIO; + +import com.google.common.base.Predicate; +import com.vaadin.testbench.By; +import org.junit.After; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; + +import com.vaadin.testbench.annotations.RunLocally; +import com.vaadin.testbench.elements.UIElement; +import com.vaadin.testbench.parallel.Browser; +import com.vaadin.testbench.parallel.ParallelRunner; +import com.vaadin.testbench.parallel.ParallelTest; +import com.vaadin.testbench.parallel.TestNameSuffix; +import com.vaadin.testbench.screenshot.ImageFileUtil; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.ExpectedCondition; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +@RunLocally(Browser.PHANTOMJS) +@RunWith(ParallelRunner.class) +@TestNameSuffix(property = "server-name") +public abstract class AbstractIntegrationTest extends ParallelTest { + + /** + * Height of the screenshots we want to capture + */ + private static final int SCREENSHOT_HEIGHT = 850; + + /** + * Width of the screenshots we want to capture + */ + private static final int SCREENSHOT_WIDTH = 1500; + + private boolean screenshotErrors; + + @Override + public void setup() throws Exception { + super.setup(); + + testBench().resizeViewPortTo(SCREENSHOT_WIDTH, SCREENSHOT_HEIGHT); + + openTestURL(getParameters()); + } + + protected void openTestURL(String[] parameters) { + StringBuilder builder = new StringBuilder(); + builder.append(getDeploymentURL()).append(getContextPath()).append(getTestPath()); + builder.append("?"); + for (int i = 0; i < parameters.length; ++i) { + builder.append(parameters[i]); + if (i < parameters.length - 1) { + builder.append("&"); + } + } + + driver.get(builder.toString()); + + if (!isElementPresent(UIElement.class)) { + waitUntil(new ExpectedCondition<Boolean>() { + @Override + public Boolean apply(WebDriver webDriver) { + return isElementPresent(UIElement.class); + } + }); + } + } + + protected String[] getParameters() { + return new String[]{ "restartApplication" }; + } + + /** + * Returns a path where the test UI is found. + * + * @return path for test + */ + protected abstract String getTestPath(); + + private String getDeploymentURL() { + String deploymentUrl = System.getProperty("deployment.url"); + if (deploymentUrl == null || deploymentUrl.isEmpty()) { + // Default to http://localhost:8080 + return "http://localhost:8080"; + } + return deploymentUrl; + } + + protected void compareScreen(String identifier) throws IOException { + String refFileName = identifier + "-" + + getDesiredCapabilities().getBrowserName().toLowerCase(Locale.ROOT) + + ".png"; + String errorFileName = identifier + "-" + + getDesiredCapabilities().getBrowserName().toLowerCase(Locale.ROOT) + "-" + + System.getProperty("server-name") + "[" + + getClass().getSimpleName() + "].png"; + File referenceFile = ImageFileUtil + .getReferenceScreenshotFile(refFileName); + try { + BufferedImage reference = ImageIO.read(referenceFile); + if (testBench().compareScreen(reference, errorFileName)) { + return; + } + } catch (IOException e) { + Logger.getLogger(getClass().getName()).warning( + "Missing screenshot reference: " + referenceFile.getPath()); + } + screenshotErrors = true; + } + + @After + public void teardown() { + if (screenshotErrors) { + throw new RuntimeException("Screenshots failed."); + } + } + + /** + * Returns the deployment context path with a leading slash. If not provided + * through {@code deployment.context.path} system property, will default to + * {@code /demo}. + * + * @return deployment context path + */ + protected String getContextPath() { + String contextPath = System.getProperty("deployment.context.path"); + if (contextPath == null || contextPath.isEmpty()) { + // Default to /demo + return "/demo"; + } + return contextPath; + } + + protected void waitUntil(ExpectedCondition<Boolean> condition) { + new WebDriverWait(driver, 10).until(condition); + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/AbstractServletIntegrationTest.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/AbstractServletIntegrationTest.java new file mode 100644 index 0000000000..03d4f1ce18 --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/AbstractServletIntegrationTest.java @@ -0,0 +1,30 @@ +package com.vaadin.tests.integration; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.LabelElement; + +public abstract class AbstractServletIntegrationTest + extends AbstractIntegrationTest { + + @Test + public void runTest() throws Exception { + // Test initial state + GridElement grid = $(GridElement.class).first(); + Assert.assertFalse("Row should not be initially selected", + grid.getRow(0).isSelected()); + compareScreen("initial"); + + // Test selection and side effects + grid.getCell(0, 1).click(); + Assert.assertTrue("Row should be selected on click", + grid.getRow(0).isSelected()); + Assert.assertEquals("Text label should contain 'FI'", "FI", + $(LabelElement.class).first().getText()); + compareScreen("finland"); + + } + +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationDefaultPushIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationDefaultPushIT.java new file mode 100644 index 0000000000..d5a41c30ba --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationDefaultPushIT.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +public class ServletIntegrationDefaultPushIT + extends AbstractServletIntegrationTest { + // Uses the test method declared in the super class + + @Override + protected String getTestPath() { + return "/run/ServletIntegrationDefaultPushUI"; + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationIT.java new file mode 100644 index 0000000000..ec5c8f6af3 --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationIT.java @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +public class ServletIntegrationIT extends AbstractServletIntegrationTest { + // Uses the test method declared in the super class + + @Override + protected String getTestPath() { + return "/run/ServletIntegrationUI"; + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationLongPollingIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationLongPollingIT.java new file mode 100644 index 0000000000..888668a211 --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationLongPollingIT.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +public class ServletIntegrationLongPollingIT + extends AbstractServletIntegrationTest { + // Uses the test method declared in the super class + + @Override + protected String getTestPath() { + return "/run/ServletIntegrationLongPollingUI"; + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationStreamingIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationStreamingIT.java new file mode 100644 index 0000000000..e1050b326f --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationStreamingIT.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +public class ServletIntegrationStreamingIT + extends AbstractServletIntegrationTest { + // Uses the test method declared in the super class + + @Override + protected String getTestPath() { + return "/run/ServletIntegrationStreamingUI"; + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationTests.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationTests.java new file mode 100644 index 0000000000..db6d0da911 --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/ServletIntegrationTests.java @@ -0,0 +1,57 @@ +package com.vaadin.tests.integration; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.runner.RunWith; +import org.junit.runners.model.InitializationError; + +import com.vaadin.testbench.parallel.ParallelTestSuite; +import com.vaadin.tests.integration.ServletIntegrationTests.ServletIntegrationTestSuite; + +@RunWith(ServletIntegrationTestSuite.class) +public class ServletIntegrationTests { + + public static Set<String> notJSR356Compatible = new HashSet<String>(); + public static Set<String> notWebsocketCompatible = new HashSet<String>(); + + static { + notWebsocketCompatible.add("tomcat7apacheproxy"); + notWebsocketCompatible.add("weblogic10"); + notWebsocketCompatible.add("wildfly9-nginx"); + + notJSR356Compatible.add("jetty8"); + notJSR356Compatible.add("tomcat7"); + } + + public static class ServletIntegrationTestSuite extends ParallelTestSuite { + + public ServletIntegrationTestSuite(Class<?> klass) + throws InitializationError, IOException { + super(klass, AbstractIntegrationTest.class, + "com.vaadin.tests.integration", getIgnoredPackages()); + } + + private static String[] getIgnoredPackages() { + List<String> ignoredPackages = new ArrayList<String>(); + String serverName = System.getProperty("server-name"); + if (serverName == null) { + serverName = ""; + } + if (!serverName.equals("widfly9-nginx")) { + ignoredPackages.add("com.vaadin.tests.integration.push"); + } + if (notWebsocketCompatible.contains(serverName)) { + ignoredPackages.add("com.vaadin.tests.integration.websocket"); + } else if (notJSR356Compatible.contains(serverName)) { + ignoredPackages + .add("com.vaadin.tests.integration.websocket.jsr356"); + } + + return ignoredPackages.toArray(new String[ignoredPackages.size()]); + } + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/push/LongPollingProxyServerIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/push/LongPollingProxyServerIT.java new file mode 100644 index 0000000000..bf45076fbe --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/push/LongPollingProxyServerIT.java @@ -0,0 +1,125 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration.push; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.integration.AbstractIntegrationTest; +import org.openqa.selenium.support.ui.ExpectedCondition; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +@RunWith(Parameterized.class) +public class LongPollingProxyServerIT extends AbstractIntegrationTest { + + @Parameters(name = "{0}") + public static List<String[]> getTestParameters() { + List<String[]> parameters = new ArrayList<String[]>(); + addTestParams(parameters, "Buffering+Timeout", "buffering-timeout"); + addTestParams(parameters, "NonBuffering+Timeout", + "nonbuffering-timeout"); + addTestParams(parameters, "Buffering", "buffering"); + addTestParams(parameters, "NonBuffering", "nonbuffering"); + return parameters; + } + + private static void addTestParams(List<String[]> parameters, + String... pair) { + parameters.add(pair); + } + + @Parameter(0) + public String name; + + @Parameter(1) + public String path; + + @Override + @Before + public void setup() throws Exception { + Assume.assumeTrue( + "wildfly9-nginx".equals(System.getProperty("server-name"))); + + super.setup(); + } + + @Test + public void actionAfterFirstTimeout() throws Exception { + // The wildfly9-nginx server has a configured timeout of 10s for + // *-timeout urls + Thread.sleep(15000); + assertEquals(0, getClientCounter()); + getIncrementButton().click(); + assertEquals(1, getClientCounter()); + } + + @Test + public void basicPush() { + assertEquals(0, getServerCounter()); + getServerCounterStartButton().click(); + waitUntil(new ExpectedCondition<Boolean>() { + @Override + public Boolean apply(WebDriver webDriver) { + return getServerCounter() > 1; + } + }); + } + + @Override + protected String getContextPath() { + // Prefix with the context path with the parameter + return "/" + path + super.getContextPath(); + } + + @Override + protected String getTestPath() { + return "/"; + } + + private int getClientCounter() { + WebElement clientCounterElem = findElement( + By.id(BasicPush.CLIENT_COUNTER_ID)); + return Integer.parseInt(clientCounterElem.getText()); + } + + private int getServerCounter() { + WebElement serverCounterElem = findElement( + By.id(BasicPush.SERVER_COUNTER_ID)); + return Integer.parseInt(serverCounterElem.getText()); + } + + private WebElement getServerCounterStartButton() { + return findElement(By.id(BasicPush.START_TIMER_ID)); + } + + private WebElement getIncrementButton() { + return findElement(By.id(BasicPush.INCREMENT_BUTTON_ID)); + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/websocket/ServletIntegrationWebsocketIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/websocket/ServletIntegrationWebsocketIT.java new file mode 100644 index 0000000000..1c6891c0ee --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/websocket/ServletIntegrationWebsocketIT.java @@ -0,0 +1,79 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration.websocket; + +import static org.junit.Assert.assertEquals; + +import java.util.*; + +import org.junit.Assume; +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.By; +import com.vaadin.tests.integration.AbstractServletIntegrationTest; + +public class ServletIntegrationWebsocketIT + extends AbstractServletIntegrationTest { + // Uses the test method declared in the super class + + private static final Set<String> nonWebsocketServers = new HashSet<String>(); + + static { + nonWebsocketServers.add("liberty-microprofile"); + } + + @Override + public void setup() throws Exception { + Assume.assumeFalse("This server does not support Websockets", + nonWebsocketServers + .contains(System.getProperty("server-name"))); + + super.setup(); + } + + @Override + protected String getTestPath() { + return "/run/ServletIntegrationWebsocketUI"; + } + + @Test + public void testWebsockedUsed() { + List<String> params = new ArrayList<String>(); + for (String param : getParameters()) { + params.add(param); + } + params.add("debug"); + + // Reopen the page with debug window + openTestURL(params.toArray(new String[params.size()])); + + // Make sure the correct debug window tab is open. + findElements(By.className("v-debugwindow-tab")).get(1).click(); + + try { + // Wait to make sure correct tab is shown. + Thread.sleep(1000); + } catch (InterruptedException e) { + } + + WebElement row = findElements(By.className("v-debugwindow-row")).get(7); + assertEquals("Communication method", + row.findElement(By.className("caption")).getAttribute("innerText")); + assertEquals("Client to server: websocket, server to client: websocket", + row.findElement(By.className("value")).getAttribute("innerText")); + } +} diff --git a/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/websocket/jsr356/ServletIntegrationJSR356WebsocketIT.java b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/websocket/jsr356/ServletIntegrationJSR356WebsocketIT.java new file mode 100644 index 0000000000..5c158efa2a --- /dev/null +++ b/test/servlet-containers/generic-tests/src/main/java/com/vaadin/tests/integration/websocket/jsr356/ServletIntegrationJSR356WebsocketIT.java @@ -0,0 +1,47 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration.websocket.jsr356; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.Assume; + +import com.vaadin.tests.integration.websocket.ServletIntegrationWebsocketIT; + +public class ServletIntegrationJSR356WebsocketIT + extends ServletIntegrationWebsocketIT { + // Uses the test method declared in the super class + + private static final Set<String> nonJSR356Servers = new HashSet<String>(); + + static { + nonJSR356Servers.add("jetty8"); + } + + @Override + public void setup() throws Exception { + Assume.assumeFalse("This server does not support JSR356", + nonJSR356Servers.contains(System.getProperty("server-name"))); + + super.setup(); + } + + @Override + protected String getTestPath() { + return super.getTestPath().replace("/run/", "/run-jsr356/"); + } +} diff --git a/test/servlet-containers/generic-ui/pom.xml b/test/servlet-containers/generic-ui/pom.xml new file mode 100644 index 0000000000..c655431a50 --- /dev/null +++ b/test/servlet-containers/generic-ui/pom.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-server-ui</artifactId> + <name>vaadin-test-server-ui</name> + <packaging>jar</packaging> + <properties> + <jetty.skip>true</jetty.skip> + </properties> + + <dependencies> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-client-compiled</artifactId> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-push</artifactId> + </dependency> + </dependencies> +</project> diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/IntegrationTestUIProvider.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/IntegrationTestUIProvider.java new file mode 100644 index 0000000000..6f265b10f7 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/IntegrationTestUIProvider.java @@ -0,0 +1,58 @@ +package com.vaadin.tests; + +import com.vaadin.server.UIClassSelectionEvent; +import com.vaadin.server.UIProvider; +import com.vaadin.tests.integration.push.BasicPush; +import com.vaadin.ui.UI; + +public class IntegrationTestUIProvider extends UIProvider { + + public static final String[] defaultPackages = { + "com.vaadin.tests.integration", + "com.vaadin.tests.integration.push" }; + + @Override + public Class<? extends UI> getUIClass(UIClassSelectionEvent event) { + Class<? extends UI> uiClass = findUIClassFromPath(event); + return uiClass != null ? uiClass : BasicPush.class; + } + + private Class<? extends UI> findUIClassFromPath( + UIClassSelectionEvent event) { + String pathInfo = event.getRequest().getPathInfo(); + if (pathInfo != null) { + String className = pathInfo.substring(1); + if (className.startsWith("run/")) { + className = className.substring(4); + } + + if (className.contains(".")) { + return getUIClass(className); + } else { + return getUIClassFromDefaultPackage(className); + } + } + return null; + } + + private Class<? extends UI> getUIClassFromDefaultPackage(String className) { + for (String pkgName : defaultPackages) { + Class<? extends UI> uiClass = getUIClass(pkgName + "." + className); + if (uiClass != null) { + return uiClass; + } + } + return null; + } + + private Class<? extends UI> getUIClass(String className) { + try { + Class<?> loadClass = getClass().getClassLoader() + .loadClass(className.replace("/", ".")); + return (Class<? extends UI>) loadClass; + } catch (ClassNotFoundException e) { + return null; + } + } + +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/JSR356Servlet.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/JSR356Servlet.java new file mode 100644 index 0000000000..1a6c138f36 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/JSR356Servlet.java @@ -0,0 +1,18 @@ +package com.vaadin.tests; + +import com.vaadin.annotations.VaadinServletConfiguration; +import com.vaadin.server.VaadinServlet; +import com.vaadin.tests.integration.ServletIntegrationWebsocketUI; + +import javax.servlet.annotation.WebInitParam; +import javax.servlet.annotation.WebServlet; + +/** + * Created by elmot on 06-02-2017. + */ +@WebServlet(urlPatterns = "/run-jsr356/*", name = "IntegrationUIProvider-Jsr356", asyncSupported = false, initParams = { + @WebInitParam(name = "org.atmosphere.cpr.asyncSupport", value = "org.atmosphere.container.JSR356AsyncSupport")}) +@VaadinServletConfiguration(ui = ServletIntegrationWebsocketUI.class, productionMode = false) +public class JSR356Servlet extends VaadinServlet { + +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/ServerIntegrationTestServlet.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/ServerIntegrationTestServlet.java new file mode 100644 index 0000000000..9ca79b31a8 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/ServerIntegrationTestServlet.java @@ -0,0 +1,14 @@ +package com.vaadin.tests; + +import com.vaadin.annotations.VaadinServletConfiguration; +import com.vaadin.server.VaadinServlet; +import com.vaadin.tests.integration.ServletIntegrationUI; + +import javax.servlet.annotation.WebInitParam; +import javax.servlet.annotation.WebServlet; + +@WebServlet(urlPatterns = "/*" ,name = "IntegrationTestUIProvider", asyncSupported = true, initParams = { + @WebInitParam(name = "UIProvider", value = "com.vaadin.tests.IntegrationTestUIProvider")}) +@VaadinServletConfiguration(ui = ServletIntegrationUI.class, productionMode = false) +public class ServerIntegrationTestServlet extends VaadinServlet { +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationDefaultPushUI.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationDefaultPushUI.java new file mode 100644 index 0000000000..26038c88b9 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationDefaultPushUI.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +import com.vaadin.annotations.Push; + +/** + * Server test which uses the default push mechanisms + * + * @since 7.1.12 + * @author Vaadin Ltd + */ +@Push +public class ServletIntegrationDefaultPushUI extends ServletIntegrationUI { + +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationLongPollingUI.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationLongPollingUI.java new file mode 100644 index 0000000000..ca97e15d24 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationLongPollingUI.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +import com.vaadin.annotations.Push; +import com.vaadin.shared.ui.ui.Transport; + +/** + * Server test which uses long polling + * + * @since 7.1 + * @author Vaadin Ltd + */ +@Push(transport = Transport.LONG_POLLING) +public class ServletIntegrationLongPollingUI extends ServletIntegrationUI { + +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java new file mode 100644 index 0000000000..95f5ea238e --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationStreamingUI.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +import com.vaadin.annotations.Push; +import com.vaadin.shared.ui.ui.Transport; + +/** + * Server test which uses streaming + * + * @since 7.1 + * @author Vaadin Ltd + */ +@Push(transport = Transport.STREAMING) +public class ServletIntegrationStreamingUI extends ServletIntegrationUI { + +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationUI.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationUI.java new file mode 100644 index 0000000000..de2b34bbe1 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationUI.java @@ -0,0 +1,83 @@ +package com.vaadin.tests.integration; + +import com.vaadin.annotations.DesignRoot; +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.Widgetset; +import com.vaadin.data.util.BeanItemContainer; +import com.vaadin.event.SelectionEvent; +import com.vaadin.server.Resource; +import com.vaadin.server.ThemeResource; +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.*; +import com.vaadin.ui.declarative.Design; +import com.vaadin.ui.renderers.ImageRenderer; + +import java.util.Iterator; + +@Widgetset("com.vaadin.DefaultWidgetSet") +@Theme("valo") +public class ServletIntegrationUI extends UI { + + public static class Country { + private final String name; + private final String id; + private final Resource icon; + + public Country(String name, String id, Resource icon) { + this.name = name; + this.id = id; + this.icon = icon; + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } + + public Resource getIcon() { + return icon; + } + } + + @Override + protected void init(VaadinRequest request) { + VerticalLayout layout = new VerticalLayout(); + layout.setMargin(true); + setContent(layout); + + final BeanItemContainer<Country> container = new BeanItemContainer<Country>(Country.class); + final Grid grid = new Grid(container); + // TODO ImageRenderer does not support ClassResource + grid.getColumn("icon").setWidth(50).setHeaderCaption("").setRenderer(new ImageRenderer()); + grid.getColumn("name").setWidth(100).setHeaderCaption("Country"); + grid.setColumns("icon", "name"); + container.addBean(new Country("Finland", "FI", new ThemeResource("fi.gif"))); + container.addBean(new Country("Sweden", "SE", new ThemeResource("se.gif"))); + grid.setHeight("200px"); + grid.setWidth("200px"); + layout.addComponent(grid); + + final Label selectedLabel = new LabelFromDesign(); + grid.addSelectionListener(new SelectionEvent.SelectionListener() { + public void select(SelectionEvent selectionEvent) { + Iterator<Object> iterator = selectionEvent.getSelected().iterator(); + if (iterator.hasNext()) { + selectedLabel.setValue(container.getItem(iterator.next()).getBean().getId()); + } else { + selectedLabel.setValue(""); + } + } + }); + layout.addComponent(selectedLabel); + } + + @DesignRoot + public static class LabelFromDesign extends Label { + public LabelFromDesign() { + Design.read(this); + } + } +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java new file mode 100644 index 0000000000..88b5da7800 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/ServletIntegrationWebsocketUI.java @@ -0,0 +1,48 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +import com.vaadin.annotations.Push; +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.ui.Transport; +import com.vaadin.shared.ui.ui.UIState.PushConfigurationState; + +/** + * Server test which uses websockets + * + * @since 7.1 + * @author Vaadin Ltd + */ +@Push(transport = Transport.WEBSOCKET) +public class ServletIntegrationWebsocketUI extends ServletIntegrationUI { + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.tests.integration.IntegrationTestUI#init(com.vaadin.server + * .VaadinRequest) + */ + @Override + protected void init(VaadinRequest request) { + super.init(request); + // Ensure no fallback is used + getPushConfiguration().setParameter( + PushConfigurationState.FALLBACK_TRANSPORT_PARAM, "none"); + + } + +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/AbstractTestUI.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/AbstractTestUI.java new file mode 100644 index 0000000000..c2359af5ce --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/AbstractTestUI.java @@ -0,0 +1,226 @@ +package com.vaadin.tests.integration.push; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinServlet; +import com.vaadin.server.WebBrowser; +import com.vaadin.shared.communication.PushMode; +import com.vaadin.shared.ui.label.ContentMode; +import com.vaadin.shared.ui.ui.Transport; +import com.vaadin.shared.ui.ui.UIState.PushConfigurationState; +import com.vaadin.ui.Button; +import com.vaadin.ui.Component; +import com.vaadin.ui.Label; +import com.vaadin.ui.Notification; +import com.vaadin.ui.Notification.Type; +import com.vaadin.ui.PushConfiguration; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +import java.io.File; + +public abstract class AbstractTestUI extends UI { + + @Override + public void init(VaadinRequest request) { + getPage().setTitle(getClass().getName()); + + Label label = new Label(getTestDescription(), ContentMode.HTML); + label.setWidth("100%"); + + VerticalLayout rootLayout = new VerticalLayout(); + rootLayout.setSpacing(false); + setContent(rootLayout); + + layout = new VerticalLayout(); + layout.setSpacing(false); + layout.setMargin(false); + + rootLayout.addComponent(label); + rootLayout.addComponent(layout); + ((VerticalLayout) getContent()).setExpandRatio(layout, 1); + + warnIfWidgetsetMaybeNotCompiled(); + + setTransport(request); + + setup(request); + } + + protected void warnIfWidgetsetMaybeNotCompiled() { + // Can't check location if sendUrlAsParameters is disabled + if (!getSession().getConfiguration().isSendUrlsAsParameters()) { + return; + } + + // Ignore if using debug mode + String query = getPage().getLocation().getQuery(); + if (query != null && query.matches(".*[&?]gwt\\.codesvr.*")) { + return; + } + + // Find out the widgetset of this UI based on @Widgetset annotation + Class<?> currentType = getClass(); + String usedWidgetset = VaadinServlet.DEFAULT_WIDGETSET; + while (currentType != Object.class) { + Widgetset annotation = currentType.getAnnotation(Widgetset.class); + if (annotation != null) { + usedWidgetset = annotation.value(); + break; + } else { + currentType = currentType.getSuperclass(); + } + } + + // Assuming the same folder structure as in git repo + // Assuming project root is the working dir of this process + File widgetsetsFolder = new File("WebContent/VAADIN/widgetsets"); + if (!widgetsetsFolder.isDirectory()) { + return; + } + + // Find the most newly compiled widgetset + long newestWidgetsetTimestamp = -1; + String newestWidgetsetName = null; + File[] children = widgetsetsFolder.listFiles(); + for (File child : children) { + if (!child.isDirectory() || child.getName().equals("WEB-INF")) { + continue; + } + long lastModified = child.lastModified(); + if (lastModified > newestWidgetsetTimestamp) { + newestWidgetsetTimestamp = lastModified; + newestWidgetsetName = child.getName(); + } + } + + // Compare to currently used widgetset, with a 30 minute grace period + File currentWidgetsetFolder = new File(widgetsetsFolder, usedWidgetset); + long currentWidgetsetTimestamp = currentWidgetsetFolder.lastModified(); + int halfHour = 30 * 60 * 1000; + if (currentWidgetsetTimestamp + halfHour < newestWidgetsetTimestamp) { + Notification.show( + "The currently used widgetset (" + usedWidgetset + + ") was compiled long before the most recently compiled one (" + + newestWidgetsetName + + "). Are you sure you have compiled the right widgetset?", + Type.WARNING_MESSAGE); + } + } + + /** + * Sets the push transport according to the transport= URL parameter if such + * is given. Supports transport=xhr (disables push), transport=websocket + * (forces websocket into use), transport=streaming (forces streaming into + * use). Using ?transport=xyz disables the fallback transport. + * + * @param request + * The UI init request + */ + protected void setTransport(VaadinRequest request) { + String transport = request.getParameter("transport"); + PushConfiguration config = getPushConfiguration(); + + if ("xhr".equals(transport)) { + config.setPushMode(PushMode.DISABLED); + } else if ("websocket".equals(transport)) { + enablePush(Transport.WEBSOCKET); + } else if ("websocket-xhr".equals(transport)) { + enablePush(Transport.WEBSOCKET_XHR); + } else if ("streaming".equals(transport)) { + enablePush(Transport.STREAMING); + } else if ("long-polling".equals(transport)) { + enablePush(Transport.LONG_POLLING); + } else if (transport != null) { + throw new IllegalArgumentException("Unknown transport value '" + + transport + + "'. Supported are xhr,websocket,streaming,long-polling"); + } + } + + protected void enablePush(Transport transport) { + PushConfiguration config = getPushConfiguration(); + if (!config.getPushMode().isEnabled()) { + config.setPushMode(PushMode.AUTOMATIC); + } + config.setTransport(transport); + // Ensure no fallback is used + getPushConfiguration().setParameter( + PushConfigurationState.FALLBACK_TRANSPORT_PARAM, "none"); + } + + /** + * This method is inherited from the super class, but it should generally + * not be used. If you want to just add components to your test, use e.g. + * {@link #addComponent(Component)} instead to add the component to the + * layout used by this UI. If you don't want to use the top-level layout + * used by this class, you instead inherit directly from UI. + * + * @deprecated Use {@link #addComponent(Component)} or inherit from UI + * instead. + */ + @Override + @Deprecated + public void setContent(Component content) { + // Overridden just to deprecate + super.setContent(content); + } + + private VerticalLayout layout; + + protected VerticalLayout getLayout() { + return layout; + } + + protected abstract void setup(VaadinRequest request); + + public void addComponent(Component c) { + getLayout().addComponent(c); + } + + public void addComponents(Component... c) { + getLayout().addComponents(c); + } + + public void removeComponent(Component c) { + getLayout().removeComponent(c); + } + + public void replaceComponent(Component oldComponent, + Component newComponent) { + getLayout().replaceComponent(oldComponent, newComponent); + } + + protected void addButton(String caption, Button.ClickListener listener) { + Button button = new Button(caption); + button.addClickListener(listener); + addComponent(button); + } + + protected String getTestDescription() { + return null; + }; + + protected Integer getTicketNumber() { + return null; + }; + + protected WebBrowser getBrowser() { + return getSession().getBrowser(); + } + + /** + * Execute the provided runnable on the UI thread as soon as the current + * request has been sent. + */ + protected void runAfterResponse(final Runnable runnable) { + // Immediately start a thread that will start waiting for the session to + // get unlocked. + new Thread() { + @Override + public void run() { + accessSynchronously(runnable); + } + }.start(); + } +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/BasicPush.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/BasicPush.java new file mode 100644 index 0000000000..e5dfdfc4ae --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/BasicPush.java @@ -0,0 +1,146 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration.push; + +import java.util.Timer; +import java.util.TimerTask; + +import com.vaadin.annotations.Push; +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.label.ContentMode; +import com.vaadin.ui.Button; +import com.vaadin.ui.Label; + +@Push +public class BasicPush extends AbstractTestUI { + + public static final String CLIENT_COUNTER_ID = "clientCounter"; + + public static final String STOP_TIMER_ID = "stopTimer"; + + public static final String START_TIMER_ID = "startTimer"; + + public static final String SERVER_COUNTER_ID = "serverCounter"; + + public static final String INCREMENT_BUTTON_ID = "incrementCounter"; + + private int clientCounter = 0; + private int serverCounter = 0; + private final Timer timer = new Timer(true); + + private TimerTask task; + + @Override + protected void setup(VaadinRequest request) { + getReconnectDialogConfiguration().setDialogModal(false); + spacer(); + + /* + * Client initiated push. + */ + final Label lbl = new Label("0"); + lbl.setCaption("Client counter (click 'increment' to update):"); + lbl.setId(CLIENT_COUNTER_ID); + addComponent(lbl); + + Button incrementButton = new Button("Increment", + new Button.ClickListener() { + public void buttonClick(Button.ClickEvent clickEvent) { + clientCounter++; + lbl.setValue(String.valueOf(clientCounter)); + } + }); + incrementButton.setId(INCREMENT_BUTTON_ID); + addComponent(incrementButton); + + spacer(); + + /* + * Server initiated push. + */ + final Label serverCounterLabel = new Label("0"); + serverCounterLabel.setCaption( + "Server counter (updates each 3s by server thread) :"); + serverCounterLabel.setId(SERVER_COUNTER_ID); + addComponent(serverCounterLabel); + + Button startTimer = new Button("Start timer", new Button.ClickListener() { + + public void buttonClick(Button.ClickEvent clickEvent) { + serverCounter = 0; + serverCounterLabel.setValue(String.valueOf(serverCounter)); + if (task != null) { + task.cancel(); + } + task = new TimerTask() { + + @Override + public void run() { + access(new Runnable() { + public void run() { + serverCounter++; + serverCounterLabel + .setValue(String.valueOf(serverCounter)); + } + }); + } + }; + timer.scheduleAtFixedRate(task, 3000, 3000); + } + }); + startTimer.setId(START_TIMER_ID); + addComponent(startTimer); + + Button stopTimer = new Button("Stop timer", new Button.ClickListener() { + public void buttonClick(Button.ClickEvent clickEvent) { + if (task != null) { + task.cancel(); + task = null; + } + } + }); + stopTimer.setId(STOP_TIMER_ID); + addComponent(stopTimer); + } + + @Override + protected String getTestDescription() { + return "This test tests the very basic operations of push. " + + "It tests that client initiated changes are " + + "recieved back to the client as well as server " + + "initiated changes are correctly updated to the client."; + } + + @Override + protected Integer getTicketNumber() { + return 11494; + } + + private void spacer() { + addComponent(new Label("<hr/>", ContentMode.HTML)); + } + + @Override + public void attach() { + super.attach(); + } + + @Override + public void detach() { + super.detach(); + timer.cancel(); + } +} diff --git a/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/BasicPushLongPolling.java b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/BasicPushLongPolling.java new file mode 100644 index 0000000000..c59ddf852d --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/java/com/vaadin/tests/integration/push/BasicPushLongPolling.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2018 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration.push; + +import com.vaadin.annotations.Push; +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.ui.Transport; +import com.vaadin.shared.ui.ui.UIState.PushConfigurationState; + +@Push(transport = Transport.LONG_POLLING) +public class BasicPushLongPolling extends BasicPush { + + @Override + public void init(VaadinRequest request) { + super.init(request); + // Don't use fallback so we can easier detect if long polling fails + getPushConfiguration().setParameter( + PushConfigurationState.FALLBACK_TRANSPORT_PARAM, "none"); + } + +} diff --git a/test/servlet-containers/generic-ui/src/main/resources/VAADIN/themes/valo/fi.gif b/test/servlet-containers/generic-ui/src/main/resources/VAADIN/themes/valo/fi.gif Binary files differnew file mode 100644 index 0000000000..8d3a191828 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/resources/VAADIN/themes/valo/fi.gif diff --git a/test/servlet-containers/generic-ui/src/main/resources/VAADIN/themes/valo/se.gif b/test/servlet-containers/generic-ui/src/main/resources/VAADIN/themes/valo/se.gif Binary files differnew file mode 100644 index 0000000000..80f6285228 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/resources/VAADIN/themes/valo/se.gif diff --git a/test/servlet-containers/generic-ui/src/main/resources/com/vaadin/tests/integration/LabelFromDesign.html b/test/servlet-containers/generic-ui/src/main/resources/com/vaadin/tests/integration/LabelFromDesign.html new file mode 100644 index 0000000000..56329d7d19 --- /dev/null +++ b/test/servlet-containers/generic-ui/src/main/resources/com/vaadin/tests/integration/LabelFromDesign.html @@ -0,0 +1 @@ +<vaadin-label /> diff --git a/test/servlet-containers/generic/.gitignore b/test/servlet-containers/generic/.gitignore new file mode 100644 index 0000000000..e2f5dd2eb2 --- /dev/null +++ b/test/servlet-containers/generic/.gitignore @@ -0,0 +1 @@ +result
\ No newline at end of file diff --git a/test/servlet-containers/generic/build.properties b/test/servlet-containers/generic/build.properties new file mode 100644 index 0000000000..fab96cb262 --- /dev/null +++ b/test/servlet-containers/generic/build.properties @@ -0,0 +1,8 @@ +ivy.organisation=com.vaadin +vaadin.vendor=Vaadin Ltd +vaadin.url=http://vaadin.com +vaadin.java.version=1.6 +vaadin.version=8.2-SNAPSHOT +vaadin.sass.version=0.9.13 +gwt.version=2.7.0.vaadin3 +commons-io.version=2.4 diff --git a/test/servlet-containers/generic/build.xml b/test/servlet-containers/generic/build.xml new file mode 100644 index 0000000000..9cc90af0d6 --- /dev/null +++ b/test/servlet-containers/generic/build.xml @@ -0,0 +1,52 @@ +<?xml version="1.0"?> + +<project name="vaadin-uitest" basedir="." default="test-server" + xmlns:ivy="antlib:org.apache.ivy.ant"> + <description> + Provides a uitest WAR containing Vaadin UI tests + </description> + <include file="./common.xml" as="common" /> + + <!-- global properties --> + <property name="module.name" value="vaadin-test-generic-integration" /> + <property name="uitest.dir" location="${common.basedir}" /><!-- todo rename--> + <property name="result.dir" value="result" /> + <property name="result.war" + location="${uitest.dir}/target/${module.name}-${vaadin.version}.war" /> + <!--todo automate version number --> + <property name="result.jboss6.war" + location="${uitest.dir}/target/${module.name}-8.2-SNAPSHOT-jboss6.war" /> + + <!-- Need to give a default value to keep Ivy happy --> + <property name="vaadin.build.repository" value="http://maven.vaadin.com/vaadin-prereleases"/> + + <target name="clean"> + <fail unless="result.dir" message="No result.dir parameter given" /> + <delete dir="${result.dir}" /> + </target> + + <target name="test-server" depends="clean-testbench-errors"> + <mkdir dir="${vaadin.basedir}/result" /> + <ant antfile="integration_tests.xml" + target="integration-test-all" inheritall="false" + inheritrefs="false"> + <property name="demo.war" value="${result.war}" /> + <property name="demo.jboss6.war" value="${result.jboss6.war}" /> + </ant> + </target> + + + <target name="clean-testbench-errors"><!--todo remove when have got rid of screenshots--> + <fail unless="com.vaadin.testbench.screenshot.directory" + message="Define screenshot directory using -Dcom.vaadin.testbench.screenshot.directory" /> + <mkdir dir="${com.vaadin.testbench.screenshot.directory}/errors" /> + <delete> + <fileset + dir="${com.vaadin.testbench.screenshot.directory}/errors"> + <include name="*" /> + </fileset> + </delete> + </target> + + +</project> diff --git a/test/servlet-containers/generic/common.xml b/test/servlet-containers/generic/common.xml new file mode 100644 index 0000000000..7a105ca8bc --- /dev/null +++ b/test/servlet-containers/generic/common.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="common" basedir="." default="" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:antcontrib="antlib:net.sf.antcontrib" xmlns:cs="antlib:com.puppycrawl.tools.checkstyle"> + + <tstamp> + <format property="build.date" pattern="yyyy-MM-dd" /> + </tstamp> + + <dirname property="vaadin.basedir" file="${ant.file.common}/../../../" /> + <dirname property="common.basedir" file="${ant.file.common}" /> + <property file="${common.basedir}/build.properties" /> + + <ivy:settings file="${common.basedir}/ivysettings.xml" /> + <ivy:settings file="${common.basedir}/ivysettings.xml" id="ivysettings" /> + <ivy:resolve log="download-only" file="${common.basedir}/ivy-taskdefs.xml" conf="taskdefs" /> + <ivy:cachepath pathid="taskdefs.classpath" conf="taskdefs" /> + <taskdef uri="antlib:net.sf.antcontrib" resource="net/sf/antcontrib/antlib.xml" classpathref="taskdefs.classpath" /> + +</project> diff --git a/test/servlet-containers/generic/integration_base_files/base.xml b/test/servlet-containers/generic/integration_base_files/base.xml new file mode 100644 index 0000000000..74ea41ac06 --- /dev/null +++ b/test/servlet-containers/generic/integration_base_files/base.xml @@ -0,0 +1,144 @@ +<?xml version="1.0"?> +<project name="test" basedir="."> + <property file="deploy.properties" /> + <property name="vaadin.major.7" value="1" /> + <property name="lock" value="deploy/lock.file" /> + <property name="deployDir" value="deploy/${server}" /> + <property name="serverPort" value="8080" /> + <property name="war" value="demo.war" /> + <property name="startupSpawn" value="false" /> + <property name="JAVA_HOME" value="/usr/lib/jvm/default-java" /> + <property name="waitMinutes" value="3" /> + <property name="waitUrl" + value="http://localhost:${serverPort}/demo/VAADIN/themes/valo/styles.css" /> + <property name="shutdownWait" value="10" /> + + + <target name="afterDeploy"> + <!-- Empty default --> + </target> + + <target name="beforeDeploy"> + <!-- Empty default --> + </target> + + <target name="deploy"> + <antcall target="beforeDeploy" /> + <echo + message="${server}: Deploying ${war} to ${deployDir}/${autodeployDir}" /> + <copy file="${war}" todir="${deployDir}/${autodeployDir}" /> + <antcall target="afterDeploy" /> + </target> + + <target name="deployStatic"> + <unzip src="${war}" dest="${staticDeployDir}/tmp-unpack-jar/"> + <patternset> + <include name="WEB-INF/lib/*.jar" /> + </patternset> + </unzip> + <unzip dest="${staticDeployDir}"> + <fileset dir="${staticDeployDir}/tmp-unpack-jar/WEB-INF/lib" + includes="*.jar" /> + + <patternset> + <include name="VAADIN/**" /> + </patternset> + </unzip> + <delete dir="${staticDeployDir}/tmp-unpack-jar/" /> + + <unzip src="${war}" dest="${staticDeployDir}"> + <patternset> + <include name="VAADIN/**" /> + </patternset> + </unzip> + </target> + + <target name="unpack-server"> + <echo message="${server}: Unpacking ${server}.tar.gz" /> + <delete dir="${server}" /> + <exec executable="tar"> + <arg value="-xf" /> + <arg value="${server}.tar.gz" /> + </exec> + <move file="${server}" tofile="${deployDir}" /> + <echo message="Done." /> + </target> + + <target name="doStartup"> + <exec executable="./run.sh" spawn="${startupSpawn}"> + <env key="JAVA_HOME" value="${JAVA_HOME}" /> + </exec> + </target> + + <target name="startup"> + <antcall target="doStartup" /> + <echo message="${server}: Waiting for ${waitUrl} to become available." /> + <waitfor maxwait="${waitMinutes}" maxwaitunit="minute" + checkevery="10000" timeoutproperty="timeout"> + <http url="${waitUrl}" /> + </waitfor> + <!-- Print load averages to get an indicator on whether the server + still attempts to start up --> + <exec executable="uptime" /> + <fail if="timeout" message="${server} failed to deploy" /> + + <echo message="${server}: Demo deployed successfully." /> + </target> + + <target name="shutdown"> + <exec executable="./stop.sh"> + <env key="JAVA_HOME" value="${JAVA_HOME}" /> + </exec> + <sleep seconds="${shutdownWait}" /> + </target> + + <target name="force-shutdown"> + <exec executable="./cleanup.sh" /> + </target> + + <target name="check-port"> + <fail + message="${server}: Something is still listening on port ${serverPort}"> + <condition> + <socket server="localhost" port="${serverPort}" /> + </condition> + </fail> + </target> + + <target name="check-lock"> + <available file="${lock}" property="lockAvailable" /> + <fail unless="lockAvailable" message="Instance is not locked!" /> + </target> + + <target name="get-lock"> + <mkdir dir="deploy" /> + <echo>${server}: Getting the lock</echo> + <exec executable="lockfile" failonerror="true"> + <!-- Check every 10 seconds --> + <arg value="-10" /> + <!-- Retry for 55 minutes (build server gives up after 60 minutes) --> + <arg value="-r330" /> + <arg value="${lock}" /> + </exec> + <echo>${server}: Got the lock</echo> + </target> + + <target name="clean"> + <delete dir="${deployDir}" failonerror="false" /> + </target> + + <target name="release-lock"> + <!-- <exec executable="rm"> <arg value="-f" /> <arg value="${lock}" + /> </exec> --> + <delete> + <fileset dir="." includes="${lock}" /> + </delete> + <echo>${server}: Released the lock</echo> + </target> + + <target name="startup-and-deploy" + depends="check-lock,check-port,unpack-server,deploy,startup" /> + + <target name="shutdown-and-cleanup" depends="shutdown,clean,release-lock,force-shutdown" /> + +</project> diff --git a/test/servlet-containers/generic/integration_base_files/cleanup.sh b/test/servlet-containers/generic/integration_base_files/cleanup.sh new file mode 100644 index 0000000000..42fb5a434d --- /dev/null +++ b/test/servlet-containers/generic/integration_base_files/cleanup.sh @@ -0,0 +1,26 @@ +#! /bin/bash +echo checking and killing open servers + +# Find all java processes, except +# * grep, as we're running it +# * get-lock, as that one is just waiting for this cleanup to happen +# * shutdown-and-cleanup, as that could be the one we're running from +ps x | grep -E bin/java | grep -v grep | grep -v get-lock | grep -v shutdown-and-cleanup | awk '{print $1}' > temp + +#Read and kill processes marked to temp +while read line +do + kill -9 $line +done < temp + +#Remove temp +rm temp + +if [ -a /home/integration/demo.war ] + then + echo removing old demo.war + rm /home/integration/demo.war +fi + +echo Cleaning deploy dir +rm -rf /home/integration/deploy/* diff --git a/test/servlet-containers/generic/integration_base_files/lock_age.sh b/test/servlet-containers/generic/integration_base_files/lock_age.sh new file mode 100644 index 0000000000..115a8fef79 --- /dev/null +++ b/test/servlet-containers/generic/integration_base_files/lock_age.sh @@ -0,0 +1,21 @@ +#! /bin/bash +if lockfile -r0 -! /home/integration/deploy/lock.file &> /dev/null + then + # If we could not get the lock, check how old the lock file is + DATE=$(date +%s) + # What if the file is not there any more? + LOCK_AGE=$(stat -c %Z /home/integration/deploy/lock.file) + + AGE=$[($DATE - $LOCK_AGE)/60] + + if [ "$AGE" -gt "20" ] + then + echo lock.file is $AGE min old. + ./cleanup.sh +# else +# echo lock.file is $AGE min old. + fi + else + # If we got the lock, do a cleanup (releasing the lock) just in case something has still been left running + ./cleanup.sh &> /dev/null +fi diff --git a/test/servlet-containers/generic/integration_tests.xml b/test/servlet-containers/generic/integration_tests.xml new file mode 100644 index 0000000000..3562740009 --- /dev/null +++ b/test/servlet-containers/generic/integration_tests.xml @@ -0,0 +1,339 @@ +<?xml version="1.0"?> + +<project xmlns:antcontrib="antlib:net.sf.antcontrib" xmlns:ivy="antlib:org.apache.ivy.ant" name="Vaadin Integration Tests" basedir="." default="integration-test-all"> + + <!-- Import common targets --> + <import file="common.xml" /> + <dirname file="${ant.file.Vaadin Integration Tests}" property="integration_test.dir" /> + + <!-- Target deploying demo.war --> + <fail unless="test.integration.server" message="test.integration.server must be set for integration tests to run" /> + + <fail unless="test.integration.user" message="test.integration.user must be set for integration tests to run" /> + <fail unless="test.integration.antfile" message="test.integration.antfile must be set for integration tests to run" /> + + <!-- Test with these browsers --> + <property name="test_browsers" value="winxp-firefox17-esr" /> + + <!-- Path to key file. Default value --> + <property name="sshkey.file" value="id_dsa" /> + + <!-- path and name for demo.war to be deployed --> + <property name="demo.war" value="demo.war" /> + + <!-- Host running Testbench RC or Testbench Hub. Default value --> + <property name="com.vaadin.testbench.tester.host" value="127.0.0.1" /> + + <!-- Base url where the testable application is deployed --> + <property name="deployment.url" value="http://${test.integration.server}:8080" /> + + <!-- TestBench license parameter --> + <property name="vaadin.testbench.developer.license" value="" /> + + <property name="report.dir" location="${vaadin.basedir}/result/reports-integration" /> + + <!-- ssh host values --> + <property name="ant.hub" value="${test.integration.antfile}" /> + <property name="user" value="${test.integration.user}" /> + <property name="passphrase" value="" /> + + <ivy:resolve file="ivy.xml" conf="build, build-provided" /> + <ivy:cachepath pathid="classpath.tb3.lib" conf="build, build-provided" /> + <path id="classpath.tb3"> + <path location="target/test-classes" /> + <path refid="classpath.tb3.lib" /> + <path location="target/classes" /> + </path> + + <!-- Upload war to deploy to ssh host --> + <target name="integration-test-upload-demo"> + <scp file="${demo.war}" todir="${user}@${test.integration.server}:integration-tests/servers/demo.war" keyfile="${sshkey.file}" passphrase="${passphrase}" /> + </target> + + <target name="run-tb3-servlet-test"> + <antcall target="run-tb3-test" inheritall="true"> + <param name="junit.test.suite" value="com.vaadin.tests.integration.ServletIntegrationTests" /> + </antcall> + </target> + <target name="run-tb3-test"> + <fail unless="phantomjs.binary.path" message="Define PhantomJS binary using -Dphantomjs.binary.path" /> + <fail unless="server-name" message="Server name must be defined in server-name" /> + <fail unless="deployment.url" message="Deplyoment url must be defined in deployment.url" /> + <fail unless="com.vaadin.testbench.screenshot.directory" message="Screenshot directory must be defined in com.vaadin.testbench.screenshot.directory" /> + <property name="server.report.dir" location="${report.dir}/integration-test-tb3/${server-name}" /> + <!-- The junit task does not create the report dir... --> + <mkdir dir="${server.report.dir}" /> + + <junit showoutput="no" printsummary="no" fork="yes"> + <formatter type="xml" /> + <classpath refid="classpath.tb3" /> + + <jvmarg value="-Dcom.vaadin.testbench.screenshot.directory=${com.vaadin.testbench.screenshot.directory}" /> + <jvmarg value="-Ddeployment.url=${deployment.url}" /> + <jvmarg value="-Dserver-name=${server-name}" /> + <jvmarg value="-Djava.awt.headless=true" /> + <jvmarg value="-Ddemo.war=${demo.war}" /> + <jvmarg value="-Dvaadin.testbench.developer.license=${vaadin.testbench.developer.license}" /> + <jvmarg value="-Dphantomjs.binary.path=${phantomjs.binary.path}" /> + <test name="${junit.test.suite}" todir="${server.report.dir}" /> + </junit> + </target> + +<!-- + <target name="integration-test-tomcat7"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="tomcat7" /> + </antcall> + </target> +--> + <target name="integration-test-tomcat7apacheproxy"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="tomcat7apacheproxy" /> + </antcall> + </target> +<!-- + <target name="integration-test-tomcat8"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="tomcat8" /> + </antcall> + </target> + + <target name="integration-test-jetty8"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="90" /> + <param name="target-server" value="jetty8" /> + </antcall> + </target> + <target name="integration-test-jetty9"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="90" /> + <param name="target-server" value="jetty9" /> + </antcall> + </target> +--> + <target name="integration-test-jboss-eap6"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="jbosseap6" /> + <param name="demo.war" value="${demo.jboss6.war}"/> + </antcall> + </target> +<!-- + <target name="integration-test-wildfly8"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="wildfly8" /> + </antcall> + </target> + <target name="integration-test-wildfly9"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="wildfly9" /> + </antcall> + </target> + <target name="integration-test-wildfly10"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="wildfly10" /> + </antcall> + </target> +--> + <target name="integration-test-wildfly9-nginx"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="wildfly9-nginx" /> + <param name="target-port" value="80" /> + </antcall> + </target> +<!-- + <target name="integration-test-glassfish4"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="glassfish4" /> + </antcall> + </target> + <target name="integration-test-payara"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="10" /> + <param name="target-server" value="payara" /> + </antcall> + </target> +--> + + <target name="integration-test-weblogic12"> + <antcall target="run-generic-integration-test"> + <param name="startDelay" value="60" /> + <param name="target-port" value="7001" /> + <param name="target-server" value="weblogic12" /> + </antcall> + </target> + + + <!-- Upload demo, clean error screenshots and test deployment on all + servers --> + <target name="integration-test-all" unless="tests.integration.skip"> + <property name="passphrase" value="${passphrase}" /> + <fail unless="sshkey.file" message="You must define an ssh.keyfile parameter" /> + <fail unless="com.vaadin.testbench.screenshot.directory" message="You must define a com.vaadin.testbench.screenshot.directory parameter" /> + <delete dir="${report.dir}" /> + <mkdir dir="${report.dir}" /> + + <parallel> + <antcall target="integration-test-weblogic12" /> + +<!-- + <antcall target="integration-test-glassfish4" /> + <antcall target="integration-test-payara" /> +--> + + <antcall target="integration-test-jboss-eap6" /> + +<!-- + <antcall target="integration-test-wildfly8" /> + <antcall target="integration-test-wildfly9" /> + <antcall target="integration-test-wildfly10" /> + + <antcall target="integration-test-jetty8" /> + <antcall target="integration-test-jetty9" /> + + <antcall target="integration-test-tomcat7" /> + <antcall target="integration-test-tomcat8" /> +--> + <antcall target="integration-test-tomcat7apacheproxy" /> + </parallel> + + </target> + + <target name="do-run-generic-test"> + <property name="target-host" value="${target-server}.devnet.vaadin.com" /> + <property name="target-port" value="8080" /> + <antcontrib:if> + <isset property="startDelay" /> + <then> + <echo>Delaying startup of ${target-server} with ${startDelay} seconds</echo> + <sleep seconds="${startDelay}" /> + </then> + </antcontrib:if> + + <scp todir="${user}@${target-host}:." keyfile="${sshkey.file}" trust="yes" passphrase="${passphrase}"> + <fileset dir="integration_base_files"> + <include name="*" /> + </fileset> + </scp> + + <!-- trycatch probably not needed any more as it just fails with + the original message and doesn't do anything in the finally block --> + <antcontrib:trycatch property="error_message"> + <try> + <!-- timeout in one hour (remote end should timeout in 55 + minutes) --> + <sshexec host="${target-host}" outputproperty="lock-output" timeout="3600000" username="${user}" keyfile="${sshkey.file}" trust="yes" command="chmod +x *.sh; ant -f deploy.xml get-lock" /> + <antcall target="echo-prefix"> + <param name="prefix" value="${target-server}: " /> + <param name="message" value="${lock-output}" /> + </antcall> + + <scp file="${demo.war}" todir="${user}@${target-host}:demo.war" keyfile="${sshkey.file}" trust="yes" passphrase="${passphrase}" /> + + <!-- timeout in 15 minutes --> + <sshexec host="${target-host}" outputproperty="start-output" timeout="900000" username="${user}" keyfile="${sshkey.file}" trust="yes" command="ant -f deploy.xml startup-and-deploy" failonerror="false" /> + <antcall target="echo-prefix"> + <param name="prefix" value="${target-server}: " /> + <param name="message" value="${start-output}" /> + </antcall> + + <fail message="${start-output}"> + <condition> + <not> + <contains string="${start-output}" substring="Demo deployed successfully" /> + </not> + </condition> + </fail> + + <echo>Starting TB3 test for ${target-server}</echo> + <antcall target="run-tb3-servlet-test"> + <param name="server-name" value="${target-server}" /> + <param name="deployment.url" value="http://${target-host}:${target-port}" /> + </antcall> + + <!-- timeout in five minutes --> + <sshexec host="${target-host}" outputproperty="stop-output" timeout="600000" username="${user}" keyfile="${sshkey.file}" trust="yes" command="ant -f deploy.xml shutdown-and-cleanup" failonerror="false" /> + <antcall target="echo-prefix"> + <param name="prefix" value="${target-server}: " /> + <param name="message" value="${stop-output}" /> + </antcall> + </try> + <catch> + <fail message="${error_message}" /> + </catch> + </antcontrib:trycatch> + </target> + + <target name="echo-prefix"> + <antcontrib:propertyregex property="message-prefixed" input="${prefix}${message}" regexp="\n" replace="\0${prefix}" global="true" defaultValue="${prefix}${message}" /> + <echo message="${message-prefixed}" /> + </target> + + <target name="run-generic-integration-test"> + <concat>##teamcity[testStarted name='${target-server}' flowId='${target-server}']</concat> + <antcontrib:trycatch property="tried"> + <try> + <antcall target="do-run-generic-test" /> + </try> + <catch> + <antcontrib:antcallback target="teamcity-escape" return="tried-escaped"> + <param name="returnTo" value="tried-escaped" /> + <param name="message" value="${tried}" /> + </antcontrib:antcallback> + <concat>##teamcity[testFailed name='${target-server}' flowId='${target-server}' message='Integration test for ${target-server} failed.' details='${tried-escaped}']</concat> + </catch> + </antcontrib:trycatch> + <concat>##teamcity[testFinished name='${target-server}' flowId='${target-server}']"</concat> + </target> + + <target name="teamcity-escape"> + <property name="returnTo" value="return" /> + + <!-- Should also perform other escaping (\u0085, \u2028 and \u2029) + - see http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity --> + <!-- Immutable properties -> needs to create a new one every time --> + <antcontrib:propertyregex property="details-escaped1" input="${message}" regexp="['|\[\]]" replace="|\0" global="true" defaultValue="${message}" /> + <antcontrib:propertyregex property="details-escaped2" input="${details-escaped1}" regexp="\n" replace="|n" global="true" defaultValue="${details-escaped1}" /> + <antcontrib:propertyregex property="details-escaped3" input="${details-escaped2}" regexp="\r" replace="|r" global="true" defaultValue="${details-escaped2}" /> + + <property name="${returnTo}" value="${details-escaped3}" /> + </target> + + <target name="run-integration-test"> + <concat>##teamcity[testStarted name='${target-server}' flowId='${target-server}']</concat> + <antcontrib:trycatch property="tried"> + <try> + <antcall target="integration-test-${target-server}" /> + </try> + <catch> + <antcallback target="teamcity-escape" return="tried-escaped"> + <param name="returnTo" value="tried-escaped" /> + <param name="message" value="${tried}" /> + </antcallback> + <concat>##teamcity[testFailed name='${target-server}' flowId='${target-server}' message='Integration test for ${target-server} failed.' details='${tried-escaped}']"</concat> + </catch> + </antcontrib:trycatch> + <concat>##teamcity[testFinished name='${target-server}' flowId='${target-server}']"</concat> + </target> + + <target name="integration-test-get-lock"> + <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} get-lock" /> + </target> + + <target name="integration-test-release-lock"> + <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} release-lock" /> + </target> + + <!-- Remove demo.war --> + <target name="integration-test-clean"> + <sshexec host="${test.integration.server}" username="${user}" keyfile="${sshkey.file}" command="ant -f ${ant.hub} clean" /> + </target> +</project> diff --git a/test/servlet-containers/generic/ivy-taskdefs.xml b/test/servlet-containers/generic/ivy-taskdefs.xml new file mode 100644 index 0000000000..95dca014dc --- /dev/null +++ b/test/servlet-containers/generic/ivy-taskdefs.xml @@ -0,0 +1,24 @@ + +<ivy-module version="2.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> + + <info organisation="com.vaadin" module="vaadin" /> + <configurations> + <conf name="taskdefs" description="Ant task definitions" + visibility="private" /> + </configurations> + <publications /> + <dependencies> + <!-- Ant tasks --> + <dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" + conf="taskdefs ->master" /> + <dependency org="org.apache.maven" name="maven-ant-tasks" + rev="2.1.2" conf="taskdefs ->master" /> + <dependency org="com.googlecode.jarjar" name="jarjar" + rev="1.3" conf="taskdefs ->master" /> + <dependency org="com.puppycrawl.tools" name="checkstyle" + rev="5.6" /> + </dependencies> + +</ivy-module> diff --git a/test/servlet-containers/generic/ivy.xml b/test/servlet-containers/generic/ivy.xml new file mode 100644 index 0000000000..414f26d71b --- /dev/null +++ b/test/servlet-containers/generic/ivy.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ivy-module [ + <!ENTITY jetty.version "8.1.12.v20130726"> +]> +<ivy-module version="2.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" + xmlns:m="http://ant.apache.org/ivy/maven"> + + <info organisation="com.vaadin" module="vaadin-uitest" + revision="${vaadin.version}" /> + + <configurations> + <conf name="build" /> + <conf name="build-provided" visibility="private" /> + <conf name="jetty-run" visibility="private" /> + </configurations> + <dependencies defaultconf="build" defaultconfmapping="build->default"> + <!-- API DEPENDENCIES --> + <dependency org="javax.portlet" name="portlet-api" + rev="2.0" conf="build-provided -> default" /> + + <dependency org="javax.validation" name="validation-api" + rev="1.0.0.GA" conf="build -> default,sources" /> + <dependency org="org.hibernate" name="hibernate-validator" + rev="4.2.0.Final" conf="build -> default" /> + + <!-- LIBRARY DEPENDENCIES (compile time) --> + <!-- Project modules --> + <dependency org="com.vaadin" name="vaadin-server" + rev="${vaadin.version}" conf="build->default"> + <exclude org="javax.servlet"></exclude> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-compatibility-server" + rev="${vaadin.version}" conf="build->default"> + <exclude org="javax.servlet"></exclude> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-client" + rev="${vaadin.version}" conf="build->default"> + <exclude org="javax.validation"></exclude> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-compatibility-client" + rev="${vaadin.version}" conf="build->default"> + <exclude org="javax.validation"></exclude> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-client-compiled" + rev="${vaadin.version}" conf="build->default"> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-compatibility-client-compiled" + rev="${vaadin.version}" conf="build->default"> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-themes" + rev="${vaadin.version}" conf="build->default"> + <exclude type="pom" /> + </dependency> + <dependency org="com.vaadin" name="vaadin-push" rev="${vaadin.version}" + conf="build->default"> + <exclude org="javax.servlet"></exclude> + <exclude type="pom" /> + </dependency> + + <!-- For compiling TestingWidgetSet --> + <dependency org="com.vaadin" name="vaadin-client-compiler" + rev="${vaadin.version}" conf="build-provided-> default"> + <exclude type="pom" /> + </dependency> + + <!-- Servlet 3.0 API --> + <dependency org="javax.servlet" name="javax.servlet-api" + rev="3.0.1" conf="build-provided -> default" /> + + <dependency org="org.eclipse.jetty" name="jetty-server" + rev="&jetty.version;" conf="build-provided, jetty-run->default"> + <exclude org="org.eclipse.jetty.orbit"></exclude> + </dependency> + <!-- jetty-servlets needed by ProxyTest, but not by jetty-runner --> + <dependency org="org.eclipse.jetty" name="jetty-servlets" + rev="&jetty.version;" conf="build-provided, jetty-run->default"> + <exclude org="org.eclipse.jetty.orbit"></exclude> + </dependency> + <dependency org="org.eclipse.jetty" name="jetty-websocket" + rev="&jetty.version;" conf="build-provided, jetty-run->default"> + <exclude org="org.eclipse.jetty.orbit"></exclude> + </dependency> + <dependency org="org.eclipse.jetty" name="jetty-webapp" + rev="&jetty.version;" conf="build-provided, jetty-run->default"> + <exclude org="org.eclipse.jetty.orbit"></exclude> + </dependency> + <dependency org="org.eclipse.jetty" name="jetty-util" + rev="&jetty.version;" conf="build-provided, jetty-run->default"> + <exclude org="org.eclipse.jetty.orbit"></exclude> + </dependency> + <dependency org="org.mortbay.jetty" name="jetty-runner" + rev="&jetty.version;" conf="build-provided, jetty-run->default"> + <exclude org="org.eclipse.jetty.orbit"></exclude> + </dependency> + + <dependency org="junit" name="junit" rev="4.12" + conf="build -> default" /> + <dependency org="org.hamcrest" name="hamcrest-all" + rev="1.3" conf="build->default" /> + <dependency org="com.jcraft" name="jsch" rev="0.1.52" + conf="build->default" /> + <dependency org="commons-codec" name="commons-codec" + rev="1.5" conf="build->default" /> + <dependency org="commons-io" name="commons-io" + rev="${commons-io.version}" conf="build->default" /> + <!-- Mainly for SQLContainer tests --> + <dependency org="org.hsqldb" name="hsqldb" rev="2.2.6" + conf="build -> default" /> + <dependency org="com.vaadin" name="vaadin-testbench-api" + rev="${vaadin.version}" conf="build-provided -> default" /> + <!-- This should be removed once tests have been updated to use lang3 --> + <dependency org="commons-lang" name="commons-lang" + rev="2.6" conf="build -> default" /> + + <dependency org="org.eclipse.jgit" name="org.eclipse.jgit" + rev="3.5.1.201410131835-r" conf="build->default"> + <exclude org="org.apache.httpcomponents"></exclude> + </dependency> + + </dependencies> + +</ivy-module> diff --git a/test/servlet-containers/generic/ivysettings.xml b/test/servlet-containers/generic/ivysettings.xml new file mode 100644 index 0000000000..e807d3d36e --- /dev/null +++ b/test/servlet-containers/generic/ivysettings.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ivysettings> + <!-- Default ivysettings.xml stuff --> + <include url="${ivy.default.settings.dir}/ivysettings-public.xml" /> + <include url="${ivy.default.settings.dir}/ivysettings-shared.xml" /> + <include url="${ivy.default.settings.dir}/ivysettings-local.xml" /> + <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml" /> + <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml" /> + + <!-- Customized stuff --> + <settings defaultResolver="public" /> + <resolvers> + <ibiblio name="public" m2compatible="true" /> + <ibiblio name="vaadin-addons" usepoms="true" + m2compatible="true" root="http://maven.vaadin.com/vaadin-addons" /> + <filesystem name="local-maven" m2compatible="true"> + <artifact + pattern="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]" /> + <ivy + pattern="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).pom" /> + </filesystem> + <ibiblio name="vaadin-build" usepoms="true" + m2compatible="true" root="${vaadin.build.repository}" /> + <chain name="vaadin-maven" returnFirst="true"> + <resolver ref="local-maven" /> + <resolver ref="vaadin-build" /> + </chain> + </resolvers> + <modules> + <module organisation="com.vaadin" name="vaadin-testbench" + resolver="vaadin-addons" /> + <module organisation="com.vaadin" name="vaadin-testbench-parent" + resolver="vaadin-addons" /> + <module organisation="com.vaadin" name="vaadin-testbench-core" + resolver="vaadin-addons" /> + <module organisation="com.vaadin" name="vaadin-testbench-api" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-buildhelpers" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-root" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-shared" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-compatibility-shared" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-server" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-compatibility-server" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-client" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-compatibility-client" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-client-compiler" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-client-compiled" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-compatibility-client-compiled" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-themes" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-compatibility-themes" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-push" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-widgets" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-bom" + resolver="vaadin-maven" /> + <module organisation="com.vaadin" name="vaadin-liferay" + resolver="vaadin-maven" /> + </modules> + + +</ivysettings> diff --git a/test/servlet-containers/generic/pom.xml b/test/servlet-containers/generic/pom.xml new file mode 100644 index 0000000000..72741d1695 --- /dev/null +++ b/test/servlet-containers/generic/pom.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-generic-integration</artifactId> + <name>vaadin-test-generic-integration</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + </properties> + + <!-- This module exists only to run the Ant based server tests. + It will be removed in the future. --> + + <dependencies> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Extract test classes for ant script to use --> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>unpack-tests</id> + <phase>package</phase> + <configuration> + <artifactItems> + <artifactItem> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <includes>**/*.class</includes> + </artifactItem> + </artifactItems> + <outputDirectory>${project.build.directory}/test-classes</outputDirectory> + </configuration> + <goals> + <goal>unpack</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-deploy-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <artifactId>maven-failsafe-plugin</artifactId> + <!-- Currently tested using an Ant script. --> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <artifactId>maven-war-plugin</artifactId> + <!-- This execution builds an additional .war file with JBoss + 6 specific descriptor --> + <executions> + <execution> + <id>jboss6-war</id> + <phase>package</phase> + <goals> + <goal>war</goal> + </goals> + <configuration> + <classifier>jboss6</classifier> + <webResources> + <resource> + <directory>src/main/jboss-6</directory> + </resource> + </webResources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/generic/reference-screenshots/finland-phantomjs.png b/test/servlet-containers/generic/reference-screenshots/finland-phantomjs.png Binary files differnew file mode 100644 index 0000000000..7853307584 --- /dev/null +++ b/test/servlet-containers/generic/reference-screenshots/finland-phantomjs.png diff --git a/test/servlet-containers/generic/reference-screenshots/initial-phantomjs.png b/test/servlet-containers/generic/reference-screenshots/initial-phantomjs.png Binary files differnew file mode 100644 index 0000000000..8764e467f2 --- /dev/null +++ b/test/servlet-containers/generic/reference-screenshots/initial-phantomjs.png diff --git a/test/servlet-containers/generic/src/main/jboss-6/WEB-INF/jboss-web.xml b/test/servlet-containers/generic/src/main/jboss-6/WEB-INF/jboss-web.xml new file mode 100644 index 0000000000..bfa4bac003 --- /dev/null +++ b/test/servlet-containers/generic/src/main/jboss-6/WEB-INF/jboss-web.xml @@ -0,0 +1,7 @@ +<jboss-web version="7.2" xmlns="http://www.jboss.com/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee + schema/jboss-web_7_2.xsd"> + <!-- Enable websockets on JBoss EAP 6.4 --> + <enable-websockets>true</enable-websockets> +</jboss-web> diff --git a/test/servlet-containers/glassfish/pom.xml b/test/servlet-containers/glassfish/pom.xml new file mode 100644 index 0000000000..491b2eb111 --- /dev/null +++ b/test/servlet-containers/glassfish/pom.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-glassfish-server</artifactId> + <name>Vaadin Glassfish Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <glassfish.version>4.1.2.173</glassfish.version> + <server.name>glassfish</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.glassfish.embedded</groupId> + <artifactId>maven-embedded-glassfish-plugin</artifactId> + <version>4.1.1</version> + <executions> + <execution> + <id>start-glassfish</id> + <phase>pre-integration-test</phase> + <goals> + <goal>start</goal> + <goal>deploy</goal> + </goals> + </execution> + <execution> + <id>stop-glassfish</id> + <phase>post-integration-test</phase> + <goals> + <goal>stop</goal> + </goals> + </execution> + </executions> + <configuration> + <port>8080</port> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/jetty8/pom.xml b/test/servlet-containers/jetty8/pom.xml new file mode 100644 index 0000000000..dda3e6df28 --- /dev/null +++ b/test/servlet-containers/jetty8/pom.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-jetty8-server</artifactId> + <name>Vaadin Jetty 8 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <mortbay.jetty.version>8.1.16.v20140903</mortbay.jetty.version> + <server.name>jetty8</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- + This server test is for an old, outdated version of jetty. + The configuration is not moved to the parent pom, since this + is not useful anywhere else. + --> + <plugin> + <groupId>org.mortbay.jetty</groupId> + <artifactId>jetty-maven-plugin</artifactId> + <version>${mortbay.jetty.version}</version> + <executions> + <execution> + <id>start-jetty</id> + <phase>pre-integration-test</phase> + <goals> + <goal>start</goal> + </goals> + </execution> + <execution> + <id>stop-jetty</id> + <phase>post-integration-test</phase> + <goals> + <goal>stop</goal> + </goals> + </execution> + </executions> + <configuration> + <webApp> + <contextPath>${context.path}</contextPath> + </webApp> + <stopKey>q</stopKey> + <stopPort>8082</stopPort> + <daemon>true</daemon> + <skip>false</skip> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/jetty9/pom.xml b/test/servlet-containers/jetty9/pom.xml new file mode 100644 index 0000000000..d46b826786 --- /dev/null +++ b/test/servlet-containers/jetty9/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-jetty9-server</artifactId> + <name>Vaadin Jetty 9 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>false</jetty.skip> + <jetty.version>9.3.21.v20170918</jetty.version> + <server.name>jetty9</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/jsp-integration/pom.xml b/test/servlet-containers/jsp-integration/pom.xml new file mode 100644 index 0000000000..dbc45289b6 --- /dev/null +++ b/test/servlet-containers/jsp-integration/pom.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-jsp-integration</artifactId> + <name>vaadin-test-jsp-integration</name> + <packaging>war</packaging> + + <properties> + <context.path>/</context.path> + </properties> + + <dependencies> + + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-client-compiled</artifactId> + </dependency> + + </dependencies> + +</project> diff --git a/test/servlet-containers/jsp-integration/src/main/java/com/vaadin/tests/integration/AnotherTrivialUI.java b/test/servlet-containers/jsp-integration/src/main/java/com/vaadin/tests/integration/AnotherTrivialUI.java new file mode 100644 index 0000000000..446e9a3340 --- /dev/null +++ b/test/servlet-containers/jsp-integration/src/main/java/com/vaadin/tests/integration/AnotherTrivialUI.java @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2017 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Label; +import com.vaadin.ui.UI; + +public class AnotherTrivialUI extends UI { + @Override + protected void init(VaadinRequest request) { + setContent(new Label("Another Trivial UI")); + } + +} diff --git a/test/servlet-containers/jsp-integration/src/main/java/com/vaadin/tests/integration/TrivialUI.java b/test/servlet-containers/jsp-integration/src/main/java/com/vaadin/tests/integration/TrivialUI.java new file mode 100644 index 0000000000..e360f21bdc --- /dev/null +++ b/test/servlet-containers/jsp-integration/src/main/java/com/vaadin/tests/integration/TrivialUI.java @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2017 Vaadin Ltd. + * + * 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 com.vaadin.tests.integration; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Label; +import com.vaadin.ui.UI; + +public class TrivialUI extends UI { + @Override + protected void init(VaadinRequest request) { + setContent(new Label("Trivial UI")); + } + +} diff --git a/test/servlet-containers/jsp-integration/src/main/webapp/WEB-INF/web.xml b/test/servlet-containers/jsp-integration/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..1d0326bd19 --- /dev/null +++ b/test/servlet-containers/jsp-integration/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<web-app id="vaadin-uitest" version="3.0" + xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> + + <!-- THIS IS A DEVELOPMENT AND TESTING web.xml . --> + + <display-name>Vaadin</display-name> + <description>Vaadin JSP Integration Test</description> + + <context-param> + <param-name>productionMode</param-name> + <param-value>false</param-value> + </context-param> + + <servlet> + <servlet-name>VaadinStaticFiles</servlet-name> + <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> + <async-supported>false</async-supported> + </servlet> + + <servlet> + <servlet-name>PrimaryUIServlet</servlet-name> + <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> + <init-param> + <param-name>UI</param-name> + <param-value>com.vaadin.tests.integration.TrivialUI</param-value> + </init-param> + <async-supported>true</async-supported> + </servlet> + + <servlet> + <servlet-name>SecondaryUIServlet</servlet-name> + <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> + <init-param> + <param-name>UI</param-name> + <param-value>com.vaadin.tests.integration.AnotherTrivialUI</param-value> + </init-param> + <async-supported>true</async-supported> + </servlet> + + <servlet-mapping> + <servlet-name>PrimaryUIServlet</servlet-name> + <url-pattern>/primaryui/*</url-pattern> + </servlet-mapping> + + <servlet-mapping> + <servlet-name>SecondaryUIServlet</servlet-name> + <url-pattern>/secondaryui/*</url-pattern> + </servlet-mapping> + + <servlet-mapping> + <servlet-name>VaadinStaticFiles</servlet-name> + <url-pattern>/VAADIN/*</url-pattern> + </servlet-mapping> + +</web-app> diff --git a/test/servlet-containers/jsp-integration/src/main/webapp/staticfiles/vaadinsessions.jsp b/test/servlet-containers/jsp-integration/src/main/webapp/staticfiles/vaadinsessions.jsp new file mode 100644 index 0000000000..b22787a203 --- /dev/null +++ b/test/servlet-containers/jsp-integration/src/main/webapp/staticfiles/vaadinsessions.jsp @@ -0,0 +1,54 @@ +<!DOCTYPE> +<%@page import="com.vaadin.ui.UI"%> +<%@page import="com.vaadin.server.VaadinSession"%> +<HTML> +<HEAD> +<TITLE>JSP integration</TITLE> +<style> +table { + background: #fff; +} + +td { + border: 1px solid black; + padding: .5em; +} +</style> +</HEAD> +<BODY> + <table> + <tr> + <th align="left" colspan=4>Available UIs:</th> + </tr> + <tr> + <th>Service Name</th> + <th>CSRF token</th> + <th>UI id</th> + <th>UI type</th> + <th>Main content</th> + </tr> + <% + HttpSession httpSession = request.getSession(false); + for (VaadinSession vs : VaadinSession.getAllSessions(httpSession)) { + try { + vs.lock(); + for (UI ui : vs.getUIs()) { + out.append("<tr class='uirow'>"); + out.append("<td>" + vs.getService().getServiceName() + + "</td>"); + out.append("<td>" + vs.getCsrfToken() + "</td>"); + out.append("<td>" + ui.getUIId() + "</td>"); + out.append("<td>" + ui.getClass().getName() + "</td>"); + out.append("<td>" + ui.getContent().getClass().getName() + "</td>"); + out.append("</tr>"); + + } + } finally { + vs.unlock(); + } + + } + %> + </table> +</BODY> +</HTML>
\ No newline at end of file diff --git a/test/servlet-containers/jsp-integration/src/test/java/com/vaadin/tests/integration/JSPIntegrationIT.java b/test/servlet-containers/jsp-integration/src/test/java/com/vaadin/tests/integration/JSPIntegrationIT.java new file mode 100644 index 0000000000..230fc5f37e --- /dev/null +++ b/test/servlet-containers/jsp-integration/src/test/java/com/vaadin/tests/integration/JSPIntegrationIT.java @@ -0,0 +1,90 @@ +package com.vaadin.tests.integration; + +import com.vaadin.testbench.TestBenchTestCase; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.phantomjs.PhantomJSDriver; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class JSPIntegrationIT extends TestBenchTestCase { + + private static final String URL_PREFIX = "http://localhost:8080/"; + + private static final String primaryUIUrl = URL_PREFIX + "primaryui"; + private static final String jspUrl = URL_PREFIX + "staticfiles/vaadinsessions.jsp"; + private static final String secondaryUIUrl = URL_PREFIX + "secondaryui"; + + @Test + public void listVaadinSessions() { + + assertUICount(0); + + // Open a new UI + getDriver().navigate().to(primaryUIUrl); + + + assertUICount(1); + UIData firstUI = getUIs().get(0); + + // Open a new UI + getDriver().navigate().to(primaryUIUrl); + UIData secondUI = getUIs().get(0); + + // Should now have UI for the same service with different uiId + assertUICount(1); + assertNotEquals(firstUI.uiId, secondUI.uiId); + assertEquals(firstUI.serviceName, secondUI.serviceName); + + getDriver().navigate().to(secondaryUIUrl); + // Should now have another services + List<UIData> twoUIs = getUIs(); + assertEquals(2, twoUIs.size()); + assertNotEquals(twoUIs.get(0).serviceName, twoUIs.get(1).serviceName); + } + + private static class UIData { + private String serviceName; + private int uiId; + } + + private List<UIData> getUIs() { + List<UIData> uis = new ArrayList<UIData>(); + + getDriver().get(jspUrl); + List<WebElement> rows = getDriver() + .findElements(By.xpath("//tr[@class='uirow']")); + for (WebElement row : rows) { + UIData data = new UIData(); + List<WebElement> tds = row.findElements(By.xpath("./td")); + + data.serviceName = tds.get(0).getText(); + data.uiId = Integer.parseInt(tds.get(2).getText()); + + uis.add(data); + } + + return uis; + } + + private void assertUICount(int i) { + assertEquals(i, getUIs().size()); + } + + @Before + public void setup() { + setDriver(new PhantomJSDriver()); + } + + @After + public void teardown() { + getDriver().quit(); + } +} diff --git a/test/servlet-containers/liberty-javaee/pom.xml b/test/servlet-containers/liberty-javaee/pom.xml new file mode 100644 index 0000000000..5101d64e25 --- /dev/null +++ b/test/servlet-containers/liberty-javaee/pom.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-liberty-javaee-server</artifactId> + <name>Vaadin Liberty JavaEE7 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <liberty.version>17.0.0.1</liberty.version> + <liberty.profile>wlp-javaee7</liberty.profile> + <server.name>liberty-javaee</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-failsafe-plugin</artifactId> + <configuration> + <systemPropertyVariables> + <!-- FIXME: Fix liberty to use the same port as everything else. --> + <deployment.url>http://localhost:9080</deployment.url> + </systemPropertyVariables> + </configuration> + </plugin> + + <!-- Server configuration --> + <plugin> + <groupId>net.wasdev.wlp.maven.plugins</groupId> + <artifactId>liberty-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/liberty-webprofile/pom.xml b/test/servlet-containers/liberty-webprofile/pom.xml new file mode 100644 index 0000000000..755d0ad718 --- /dev/null +++ b/test/servlet-containers/liberty-webprofile/pom.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-liberty-webprofile-server</artifactId> + <name>Vaadin Liberty WebProfile Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <liberty.version>17.0.0.1</liberty.version> + <liberty.profile>wlp-webProfile7</liberty.profile> + <server.name>liberty-webprofile</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-failsafe-plugin</artifactId> + <configuration> + <systemPropertyVariables> + <!-- FIXME: Fix liberty to use the same port as everything else. --> + <deployment.url>http://localhost:9080</deployment.url> + </systemPropertyVariables> + </configuration> + </plugin> + + <!-- Server configuration --> + <plugin> + <groupId>net.wasdev.wlp.maven.plugins</groupId> + <artifactId>liberty-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/pom.xml b/test/servlet-containers/pom.xml new file mode 100644 index 0000000000..4dd5460b74 --- /dev/null +++ b/test/servlet-containers/pom.xml @@ -0,0 +1,277 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-servlet-containers-test</artifactId> + <name>vaadin-servlet-containers-test</name> + <packaging>pom</packaging> + + <properties> + <server.name>jetty9</server.name> + <context.path>/${project.build.finalName}</context.path> + + <!-- Default reference screenshot location, relative to the module path --> + <reference.directory>${project.basedir}/../screenshots</reference.directory> + </properties> + + <modules> + <module>generic-ui</module> + <module>generic-tests</module> + </modules> + + <build> + <pluginManagement> + <plugins> + <!-- Wildfly Configuration. Version selected with wildfly.version --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + <version>1.2.0.Final</version> + <executions> + <execution> + <id>start-wildfly</id> + <phase>pre-integration-test</phase> + <goals> + <goal>start</goal> + <goal>deploy</goal> + </goals> + </execution> + <execution> + <id>stop-wildfly</id> + <phase>post-integration-test</phase> + <goals> + <goal>shutdown</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Glassfish Embedded Configuration. --> + <plugin> + <groupId>org.glassfish.embedded</groupId> + <artifactId>maven-embedded-glassfish-plugin</artifactId> + <version>4.1.1</version> + <executions> + <execution> + <id>start-glassfish</id> + <phase>pre-integration-test</phase> + <goals> + <goal>start</goal> + <goal>deploy</goal> + </goals> + </execution> + <execution> + <id>stop-glassfish</id> + <phase>post-integration-test</phase> + <goals> + <goal>stop</goal> + </goals> + </execution> + </executions> + <configuration> + <port>8080</port> + </configuration> + </plugin> + + <!-- Generic cargo plugin configuration. Define container to use in submodule. --> + <plugin> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-maven2-plugin</artifactId> + <configuration> + <configuration> + <type>standalone</type> + <home> + ${project.build.directory}/cargo-server + </home> + <properties> + <cargo.servlet.port>8080</cargo.servlet.port> + </properties> + </configuration> + <deployables> + <deployable> + <groupId>${project.groupId}</groupId> + <artifactId>${project.artifactId}</artifactId> + <type>war</type> + <properties> + <context>${context.path}</context> + </properties> + </deployable> + </deployables> + </configuration> + <executions> + <execution> + <id>start-cargo-server</id> + <phase>pre-integration-test</phase> + <goals> + <goal>start</goal> + </goals> + </execution> + <execution> + <id>stop-cargo-server</id> + <phase>post-integration-test</phase> + <goals> + <goal>stop</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- WebSphere Liberty Configuration. Version and profile are configurable with liberty.version and liberty.profile --> + <plugin> + <groupId>net.wasdev.wlp.maven.plugins</groupId> + <artifactId>liberty-maven-plugin</artifactId> + <version>2.0</version> + <executions> + <execution> + <id>start-liberty</id> + <phase>pre-integration-test</phase> + <goals> + <goal>start-server</goal> + <goal>deploy</goal> + </goals> + </execution> + <execution> + <id>stop-liberty</id> + <phase>post-integration-test</phase> + <goals> + <goal>stop-server</goal> + </goals> + </execution> + </executions> + <configuration> + <!-- FIXME: This plug-in should also use port 8080 --> + <appArtifact> + <groupId>${project.groupId}</groupId> + <artifactId>${project.artifactId}</artifactId> + <version>${project.version}</version> + <type>${project.packaging}</type> + </appArtifact> + <assemblyArtifact> + <groupId>com.ibm.websphere.appserver.runtime</groupId> + <artifactId>${liberty.profile}</artifactId> + <version>${liberty.version}</version> + <type>zip</type> + </assemblyArtifact> + </configuration> + </plugin> + + <!-- Jetty Configuration. Version selected with jetty.version --> + <plugin> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-maven-plugin</artifactId> + <configuration> + <webApp> + <contextPath>${context.path}</contextPath> + </webApp> + </configuration> + </plugin> + + <!-- General purpose plugins --> + <plugin> + <artifactId>maven-deploy-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <artifactId>maven-failsafe-plugin</artifactId> + <configuration> + <dependenciesToScan> + <dependency>${project.groupId}:vaadin-test-server-tests</dependency> + </dependenciesToScan> + <systemPropertyVariables> + <deployment.context.path>${context.path}</deployment.context.path> + </systemPropertyVariables> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + + <profiles> + <profile> + <id>all</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <modules> + <module>jsp-integration</module> + <module>wildfly13</module> + <module>wildfly12</module> + <module>wildfly11</module> + <module>wildfly10</module> + <module>wildfly9</module> + <module>wildfly8</module> + <module>jetty8</module> + <module>jetty9</module> + <module>glassfish</module> + <!-- TODO: Payara 5 and Glassfish 5 --> + <module>tomcat7</module> + <module>tomcat80</module> + <module>tomcat85</module> + <module>tomcat9</module> + <module>liberty-javaee</module> + <module>liberty-webprofile</module> + </modules> + </profile> + <profile> + <!-- TODO Remove this when the ant build is no longer used. --> + <id>ant-test</id> + <modules> + <module>generic</module> + </modules> + </profile> + <profile> + <id>wildfly</id> + <modules> + <module>wildfly13</module> + <module>wildfly12</module> + <module>wildfly11</module> + <module>wildfly10</module> + <module>wildfly9</module> + <module>wildfly8</module> + </modules> + </profile> + <profile> + <id>jetty</id> + <modules> + <module>jetty9</module> + <module>jetty8</module> + </modules> + </profile> + <profile> + <id>liberty</id> + <modules> + <module>liberty-webprofile</module> + <module>liberty-javaee</module> + </modules> + </profile> + <profile> + <id>glassfish</id> + <modules> + <module>glassfish</module> + </modules> + </profile> + <profile> + <id>tomcat</id> + <modules> + <module>tomcat7</module> + <module>tomcat80</module> + <module>tomcat85</module> + <module>tomcat9</module> + </modules> + </profile> + </profiles> + +</project> diff --git a/test/servlet-containers/screenshots/finland-phantomjs.png b/test/servlet-containers/screenshots/finland-phantomjs.png Binary files differnew file mode 100644 index 0000000000..78ee903b5a --- /dev/null +++ b/test/servlet-containers/screenshots/finland-phantomjs.png diff --git a/test/servlet-containers/screenshots/initial-phantomjs.png b/test/servlet-containers/screenshots/initial-phantomjs.png Binary files differnew file mode 100644 index 0000000000..106ce30d79 --- /dev/null +++ b/test/servlet-containers/screenshots/initial-phantomjs.png diff --git a/test/servlet-containers/tomcat7/pom.xml b/test/servlet-containers/tomcat7/pom.xml new file mode 100644 index 0000000000..4e4c57f34e --- /dev/null +++ b/test/servlet-containers/tomcat7/pom.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-tomcat7-server</artifactId> + <name>Vaadin Tomcat 7 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <tomcat.version>7.0.82</tomcat.version> + <server.name>tomcat7</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-maven2-plugin</artifactId> + <configuration> + <container> + <containerId>tomcat7x</containerId> + <artifactInstaller> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat</artifactId> + <version>${tomcat.version}</version> + </artifactInstaller> + </container> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/tomcat80/pom.xml b/test/servlet-containers/tomcat80/pom.xml new file mode 100644 index 0000000000..c79fba6eb5 --- /dev/null +++ b/test/servlet-containers/tomcat80/pom.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-tomcat80-server</artifactId> + <name>Vaadin Tomcat 8.0 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <tomcat.version>8.0.47</tomcat.version> + <server.name>tomcat8.0</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-maven2-plugin</artifactId> + <configuration> + <container> + <containerId>tomcat8x</containerId> + <artifactInstaller> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat</artifactId> + <version>${tomcat.version}</version> + </artifactInstaller> + </container> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/tomcat85/pom.xml b/test/servlet-containers/tomcat85/pom.xml new file mode 100644 index 0000000000..405de2a255 --- /dev/null +++ b/test/servlet-containers/tomcat85/pom.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-tomcat85-server</artifactId> + <name>Vaadin Tomcat 8.5 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <tomcat.version>8.5.23</tomcat.version> + <server.name>tomcat8.5</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-maven2-plugin</artifactId> + <configuration> + <container> + <containerId>tomcat8x</containerId> + <artifactInstaller> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat</artifactId> + <version>${tomcat.version}</version> + </artifactInstaller> + </container> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/tomcat9/pom.xml b/test/servlet-containers/tomcat9/pom.xml new file mode 100644 index 0000000000..951353b76c --- /dev/null +++ b/test/servlet-containers/tomcat9/pom.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-tomcat9-server</artifactId> + <name>Vaadin Tomcat 9 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <tomcat.version>9.0.1</tomcat.version> + <server.name>tomcat9</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.codehaus.cargo</groupId> + <artifactId>cargo-maven2-plugin</artifactId> + <configuration> + <container> + <containerId>tomcat9x</containerId> + <artifactInstaller> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat</artifactId> + <version>${tomcat.version}</version> + </artifactInstaller> + </container> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/wildfly10/pom.xml b/test/servlet-containers/wildfly10/pom.xml new file mode 100644 index 0000000000..345a7e7030 --- /dev/null +++ b/test/servlet-containers/wildfly10/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-wildfly10-server</artifactId> + <name>Vaadin Wildfly 10 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <wildfly.version>10.1.0.Final</wildfly.version> + <server.name>wildfly10</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/wildfly11/pom.xml b/test/servlet-containers/wildfly11/pom.xml new file mode 100644 index 0000000000..f1638b5db4 --- /dev/null +++ b/test/servlet-containers/wildfly11/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-wildfly11-server</artifactId> + <name>Vaadin Wildfly 11 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <wildfly.version>11.0.0.Final</wildfly.version> + <server.name>wildfly11</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/wildfly12/pom.xml b/test/servlet-containers/wildfly12/pom.xml new file mode 100644 index 0000000000..0df910e9c1 --- /dev/null +++ b/test/servlet-containers/wildfly12/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-wildfly12-server</artifactId> + <name>Vaadin Wildfly 12 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <wildfly.version>12.0.0.Final</wildfly.version> + <server.name>wildfly12</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/wildfly13/pom.xml b/test/servlet-containers/wildfly13/pom.xml new file mode 100644 index 0000000000..c1d18572f6 --- /dev/null +++ b/test/servlet-containers/wildfly13/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-wildfly13-server</artifactId> + <name>Vaadin Wildfly 13 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <wildfly.version>13.0.0.Final</wildfly.version> + <server.name>wildfly13</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/wildfly8/pom.xml b/test/servlet-containers/wildfly8/pom.xml new file mode 100644 index 0000000000..21fbeceda2 --- /dev/null +++ b/test/servlet-containers/wildfly8/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-wildfly8-server</artifactId> + <name>Vaadin Wildfly 8 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <wildfly.version>8.2.1.Final</wildfly.version> + <server.name>wildfly8</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/servlet-containers/wildfly9/pom.xml b/test/servlet-containers/wildfly9/pom.xml new file mode 100644 index 0000000000..9f81a02032 --- /dev/null +++ b/test/servlet-containers/wildfly9/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-servlet-containers-test</artifactId> + <version>7.7-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-wildfly9-server</artifactId> + <name>Vaadin Wildfly 9 Test</name> + <packaging>war</packaging> + <properties> + <jetty.skip>true</jetty.skip> + <wildfly.version>9.0.2.Final</wildfly.version> + <server.name>wildfly9</server.name> + </properties> + + <dependencies> + <!-- UI classes and tests from dependencies --> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-ui</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test-server-tests</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <!-- Server configuration --> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/test/widget-set-testutil/src/test/java/com/vaadin/test/defaultwidgetset/AbstractWidgetSetIT.java b/test/widget-set-testutil/src/test/java/com/vaadin/test/defaultwidgetset/AbstractWidgetSetIT.java index c6d4f1756b..c492ab50f3 100644 --- a/test/widget-set-testutil/src/test/java/com/vaadin/test/defaultwidgetset/AbstractWidgetSetIT.java +++ b/test/widget-set-testutil/src/test/java/com/vaadin/test/defaultwidgetset/AbstractWidgetSetIT.java @@ -14,6 +14,8 @@ import com.vaadin.testbench.TestBenchTestCase; import com.vaadin.testbench.elements.ButtonElement; import com.vaadin.testbench.elements.LabelElement; import com.vaadin.testbench.elements.TextFieldElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; public abstract class AbstractWidgetSetIT extends TestBenchTestCase { @@ -68,11 +70,14 @@ public abstract class AbstractWidgetSetIT extends TestBenchTestCase { } protected void assertHasDebugMessage(String message) { + // Make sure the correct debug window tab is open. + findElements(By.className("v-debugwindow-tab")).get(0).click(); + List<WebElement> elements = getDriver().findElements( By.xpath("//span[@class='v-debugwindow-message']")); boolean found = false; for (WebElement element : elements) { - if (element.getText().contains(message)) { + if (element.getAttribute("innerText").contains(message)) { found = true; break; } diff --git a/uitest/vaadin-server.xml b/uitest/vaadin-server.xml deleted file mode 100644 index 5e9090a536..0000000000 --- a/uitest/vaadin-server.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0"?> -<project xmlns:antcontrib="antlib:net.sf.antcontrib" xmlns:ivy="antlib:org.apache.ivy.ant" name="vaadin-server" default="deploy-and-start" basedir="."> - <include file="../common.xml" /> - <dirname property="dir" file="${ant.file.vaadin-server}" /> - - <target name="deploy-and-start"> - <fail unless="war.file" message="No war file given in 'war.file'" /> - - <ivy:resolve log="download-only" file="${dir}/ivy.xml" /> - <ivy:cachepath pathid="classpath.jetty" conf="jetty-run" /> - <java classname="org.mortbay.jetty.runner.Runner" fork="yes" output="${vaadin.basedir}/result/jetty.java.out" resultproperty="resultCode" maxmemory="1024m"> - <arg value="--port" /> - <arg value="8888" /> - <arg value="--out" /> - <arg value="${vaadin.basedir}/result/jetty.out" /> - <arg value="--log" /> - <arg value="${vaadin.basedir}/result/jetty.log" /> - <arg value="${war.file}" /> - <classpath refid="classpath.jetty" /> - <jvmarg value="-ea" /> - </java> - <echo message="Jetty process ended with result code ${resultCode}" /> - - </target> - - <target name="wait-for-startup"> - <echo>Waiting for Servlet Container to start up.</echo> - <waitfor maxwait="60" maxwaitunit="second" checkevery="5" checkeveryunit="second" timeoutproperty="server.start.failed"> - <http url="http://localhost:8888" /> - </waitfor> - <fail if="server.start.failed" message="Server startup failed" /> - </target> - -</project> |