From 456f14f5e557cd1f5be3c3161df8e4e26a99f36f Mon Sep 17 00:00:00 2001 From: Ilia Motornyi Date: Mon, 31 Jul 2017 14:25:55 +0300 Subject: Automatic test for OSGi/karaf --- test/servlet-containers/karaf/README.md | 31 ++++ .../karaf/karaf-run/karaf-run-pom.xml | 21 +++ test/servlet-containers/karaf/karaf-run/pom.xml | 122 +++++++++++++++ .../com/vaadin/test/osgi/KarafIntegrationIT.java | 67 +++++++++ test/servlet-containers/karaf/pom.xml | 37 +++++ .../karaf/vaadin-karaf-bundle1/bnd.bnd | 6 + .../karaf/vaadin-karaf-bundle1/pom.xml | 164 +++++++++++++++++++++ .../test/osgi/myapplication1/CustomWidgetSet.java | 14 ++ .../test/osgi/myapplication1/KarafTestTheme.java | 13 ++ .../com/vaadin/test/osgi/myapplication1/MyUI.java | 45 ++++++ .../VAADIN/themes/karaftesttheme/styles.scss | 12 ++ .../test/osgi/widgetset/CustomWidgetSet.gwt.xml | 7 + .../karaf/vaadin-karaf-bundle2/bnd.bnd | 5 + .../karaf/vaadin-karaf-bundle2/pom.xml | 154 +++++++++++++++++++ .../com/vaadin/test/osgi/myapplication/MyUI.java | 42 ++++++ 15 files changed, 740 insertions(+) create mode 100644 test/servlet-containers/karaf/README.md create mode 100644 test/servlet-containers/karaf/karaf-run/karaf-run-pom.xml create mode 100644 test/servlet-containers/karaf/karaf-run/pom.xml create mode 100644 test/servlet-containers/karaf/karaf-run/src/test/java/com/vaadin/test/osgi/KarafIntegrationIT.java create mode 100644 test/servlet-containers/karaf/pom.xml create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/bnd.bnd create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/CustomWidgetSet.java create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/KarafTestTheme.java create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/MyUI.java create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/VAADIN/themes/karaftesttheme/styles.scss create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/com/vaadin/test/osgi/widgetset/CustomWidgetSet.gwt.xml create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle2/bnd.bnd create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml create mode 100644 test/servlet-containers/karaf/vaadin-karaf-bundle2/src/main/java/com/vaadin/test/osgi/myapplication/MyUI.java (limited to 'test/servlet-containers') diff --git a/test/servlet-containers/karaf/README.md b/test/servlet-containers/karaf/README.md new file mode 100644 index 0000000000..0ee2cb1ad0 --- /dev/null +++ b/test/servlet-containers/karaf/README.md @@ -0,0 +1,31 @@ +Automatic test for Karaf deployment +=== + +What is tested +--- +* Multiple applications are deployed and work properly +* Default widgetset works +* Custom widgetset works +* Custom theme works + +Tips and Tricks +--- +* Karaf is downloaded and deployed by maven karaf plugin +* Karaf is run as a background process using maven `exec:exec` goal +* Karaf is shut down using maven `karaf:client` goal during `post-integration-test` phase +* All required karaf features and project bundles are deployed using maven karaf plugin with `client` goal + +Running and stopping karaf manually +--- +* To start karaf as a foreground process and deploy both vaadin bundles and two existing applications, run `mvn -f karaf-run-pom.xml clean karaf:run` +in `karaf-run` module +* To start karaf as a background process and deploy both vaadin bundles and two existing applications, run `mvn clean pre-integration-test` +in `karaf-run` module +* Karaf console is available via ssh at `127.0.0.0:8101` port, username/password is `karaf/karaf` +* To stop background karaf process, run `mvn karaf:client@karaf-client-shutdown` +in `karaf-run` module + +Potential problems +--- +* Maven executable should be in `PATH` +* Background karaf process may be left running for 10 minutes if the build fails prior `integration-test` phase. diff --git a/test/servlet-containers/karaf/karaf-run/karaf-run-pom.xml b/test/servlet-containers/karaf/karaf-run/karaf-run-pom.xml new file mode 100644 index 0000000000..9e222565de --- /dev/null +++ b/test/servlet-containers/karaf/karaf-run/karaf-run-pom.xml @@ -0,0 +1,21 @@ + + karaf-runner + com.vaadin + 8.1-SNAPSHOT + 4.0.0 + + + + org.apache.karaf.tooling + karaf-maven-plugin + 4.0.8 + + false + true + + + + + diff --git a/test/servlet-containers/karaf/karaf-run/pom.xml b/test/servlet-containers/karaf/karaf-run/pom.xml new file mode 100644 index 0000000000..40d3043f37 --- /dev/null +++ b/test/servlet-containers/karaf/karaf-run/pom.xml @@ -0,0 +1,122 @@ + + + + vaadin-test-karaf + com.vaadin + .. + 8.1-SNAPSHOT + + 4.0.0 + + karaf-run + Vaadin Karaf Test Runner + + + + + com.vaadin + vaadin-server + ${vaadin.version} + provided + + + com.vaadin + vaadin-themes + ${vaadin.version} + provided + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + pre-integration-test + + exec + + + mvn + true + true + -f karaf-run-pom.xml karaf:run + + + + + + + org.apache.karaf.tooling + karaf-maven-plugin + 4.0.8 + + + karaf-client-ctrl + pre-integration-test + + client + + + 5 + 150 + + + shutdown -f +10 + feature:install http + feature:install http-whiteboard + bundle:install -s mvn:org.jsoup/jsoup/1.8.3 + bundle:install -s mvn:com.vaadin.external/gentyref/1.2.0.vaadin1 + bundle:install -s mvn:com.vaadin/vaadin-shared/${vaadin.version} + bundle:install -s mvn:com.vaadin/vaadin-server/${vaadin.version} + bundle:install -s mvn:com.vaadin/vaadin-osgi-integration/${vaadin.version} + bundle:install -s mvn:com.vaadin/vaadin-client-compiled/${vaadin.version} + bundle:install -s mvn:com.vaadin/vaadin-themes/${vaadin.version} + + + + + + + + + karaf-client-shutdown + post-integration-test + + client + + + 5 + 10 + + system:shutdown -f + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.19.1 + + + + integration-test + verify + + + + + + ${vaadin.version} + + + + + + diff --git a/test/servlet-containers/karaf/karaf-run/src/test/java/com/vaadin/test/osgi/KarafIntegrationIT.java b/test/servlet-containers/karaf/karaf-run/src/test/java/com/vaadin/test/osgi/KarafIntegrationIT.java new file mode 100644 index 0000000000..d2d8e54a9c --- /dev/null +++ b/test/servlet-containers/karaf/karaf-run/src/test/java/com/vaadin/test/osgi/KarafIntegrationIT.java @@ -0,0 +1,67 @@ +/* + * 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.test.osgi; + +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 static org.junit.Assert.assertEquals; + +public class KarafIntegrationIT extends TestBenchTestCase { + + private static final String URL_PREFIX = "http://localhost:8181/"; + private static final String APP1_URL = URL_PREFIX + "myapp1"; + private static final String APP2_URL = URL_PREFIX + "myapp2"; + + + @Test + public void testApp1() { + runBasicTest(APP1_URL, "bar"); + //App theme should make a button pink + WebElement element = getDriver().findElement(By.className("v-button")); + String buttonColor = element.getCssValue("color"); + assertEquals("rgba(255, 128, 128, 1)", buttonColor); + } + + @Test + public void testApp2() { + runBasicTest(APP2_URL, "foo"); + } + + private void runBasicTest(String app1Url, String text) { + getDriver().navigate().to(app1Url); + getDriver().findElement(By.className("v-textfield")).sendKeys(text); + getDriver().findElement(By.className("v-button")).click(); + String foundText = getDriver().findElement(By.className("v-label")).getText(); + assertEquals("Thanks " + text + ", it works!", foundText); + } + + + @Before + public void setup() { + setDriver(new PhantomJSDriver()); + } + + @After + public void teardown() { + getDriver().quit(); + } +} diff --git a/test/servlet-containers/karaf/pom.xml b/test/servlet-containers/karaf/pom.xml new file mode 100644 index 0000000000..eb15f7147b --- /dev/null +++ b/test/servlet-containers/karaf/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + com.vaadin + vaadin-test + 8.1-SNAPSHOT + ../.. + + vaadin-test-karaf + pom + Vaadin Karaf TestRoot + + + vaadin-karaf-bundle1 + vaadin-karaf-bundle2 + karaf-run + + + + 4.0.8 + local + + + + + org.eclipse.jetty + jetty-maven-plugin + + true + + + + + + diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/bnd.bnd b/test/servlet-containers/karaf/vaadin-karaf-bundle1/bnd.bnd new file mode 100644 index 0000000000..d9ac46fb69 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/bnd.bnd @@ -0,0 +1,6 @@ +Bundle-Name: ${project.name} +Bundle-Version: ${project.version} +Bundle-SymbolicName: ${project.groupId}.${project.artifactId} +Export-Package: com.vaadin.test.osgi.myapplication1 +Import-Package: * +Web-ContentPath: /myapp1 diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml b/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml new file mode 100644 index 0000000000..f30a1877dd --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/pom.xml @@ -0,0 +1,164 @@ + + + 4.0.0 + + + com.vaadin + vaadin-test-karaf + 8.1-SNAPSHOT + .. + + vaadin-karaf-bundle1 + jar + Vaadin Karaf test bundle 1 + + + + + com.vaadin + vaadin-bom + ${vaadin.version} + pom + import + + + + + + + com.vaadin + vaadin-server + provided + + + com.vaadin + vaadin-client-compiled + provided + + + com.vaadin + vaadin-themes + provided + + + com.vaadin + vaadin-osgi-integration + 8.1.0.beta1 + provided + + + org.osgi + osgi.core + 6.0.0 + provided + + + org.osgi + osgi.annotation + 6.0.1 + provided + + + org.osgi + osgi.cmpn + 6.0.0 + provided + + + + com.vaadin + vaadin-client + ${vaadin.version} + provided + + + + + + + + biz.aQute.bnd + bnd-maven-plugin + 3.3.0 + + + + bnd-process + + + + + + + + + com.vaadin + vaadin-maven-plugin + ${vaadin.plugin.version} + + + + compile + compile-theme + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + + + + + vaadin-prerelease + + true + + + + + vaadin-prereleases + http://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + true + + + + + + vaadin-prereleases + http://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + true + + + + + + + diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/CustomWidgetSet.java b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/CustomWidgetSet.java new file mode 100644 index 0000000000..7a34f343f6 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/CustomWidgetSet.java @@ -0,0 +1,14 @@ +package com.vaadin.test.osgi.myapplication1; + +import com.vaadin.osgi.resources.OsgiVaadinTheme; +import com.vaadin.osgi.resources.OsgiVaadinWidgetset; +import com.vaadin.ui.themes.ValoTheme; +import org.osgi.service.component.annotations.Component; + +@Component +public class CustomWidgetSet implements OsgiVaadinWidgetset { + @Override + public String getName() { + return "com.vaadin.test.osgi.widgetset.CustomWidgetSet"; + } +} diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/KarafTestTheme.java b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/KarafTestTheme.java new file mode 100644 index 0000000000..0b300b8680 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/KarafTestTheme.java @@ -0,0 +1,13 @@ +package com.vaadin.test.osgi.myapplication1; + +import com.vaadin.osgi.resources.OsgiVaadinTheme; +import com.vaadin.ui.themes.ValoTheme; +import org.osgi.service.component.annotations.Component; + +@Component +public class KarafTestTheme extends ValoTheme implements OsgiVaadinTheme { + @Override + public String getName() { + return "karaftesttheme"; + } +} diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/MyUI.java b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/MyUI.java new file mode 100644 index 0000000000..1da8cc51ff --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/java/com/vaadin/test/osgi/myapplication1/MyUI.java @@ -0,0 +1,45 @@ +package com.vaadin.test.osgi.myapplication1; + +import javax.servlet.annotation.WebServlet; + +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.Widgetset; +import org.osgi.service.component.annotations.Component; + +import com.vaadin.annotations.VaadinServletConfiguration; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinServlet; +import com.vaadin.ui.Button; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +@Theme("karaftesttheme") +@Widgetset("com.vaadin.test.osgi.widgetset.CustomWidgetSet") +public class MyUI extends UI { + + @Override + protected void init(VaadinRequest vaadinRequest) { + final VerticalLayout layout = new VerticalLayout(); + + final TextField name = new TextField(); + name.setCaption("Type your name here:"); + + Button button = new Button("Click Me"); + button.addClickListener(e -> { + layout.addComponent(new Label("Thanks " + name.getValue() + ", it works!")); + }); + + layout.addComponents(name, button); + + setContent(layout); + } + + @Component(service = VaadinServlet.class) + @WebServlet(urlPatterns = "/myapp1/*", name = "MyUIServlet", asyncSupported = true) + @VaadinServletConfiguration(ui = MyUI.class, productionMode = false) + public static class MyUIServlet extends VaadinServlet { + } + +} diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/VAADIN/themes/karaftesttheme/styles.scss b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/VAADIN/themes/karaftesttheme/styles.scss new file mode 100644 index 0000000000..2346cfd785 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/VAADIN/themes/karaftesttheme/styles.scss @@ -0,0 +1,12 @@ +@import "../valo/valo.scss"; + +@mixin karaftesttheme { + @include valo; + .v-button { + color: rgba(255, 128, 128, 1) + } +} + +.karaftesttheme { + @include karaftesttheme; +} diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/com/vaadin/test/osgi/widgetset/CustomWidgetSet.gwt.xml b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/com/vaadin/test/osgi/widgetset/CustomWidgetSet.gwt.xml new file mode 100644 index 0000000000..4cadd95714 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle1/src/main/resources/com/vaadin/test/osgi/widgetset/CustomWidgetSet.gwt.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle2/bnd.bnd b/test/servlet-containers/karaf/vaadin-karaf-bundle2/bnd.bnd new file mode 100644 index 0000000000..33013281da --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle2/bnd.bnd @@ -0,0 +1,5 @@ +Bundle-Name: ${project.name} +Bundle-Version: ${project.version} +Bundle-SymbolicName: ${project.groupId}.${project.artifactId} +Import-Package: * +Web-ContentPath: /myapp2 diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml b/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml new file mode 100644 index 0000000000..d2183d0dc3 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle2/pom.xml @@ -0,0 +1,154 @@ + + + 4.0.0 + + + vaadin-test-karaf + com.vaadin + .. + 8.1-SNAPSHOT + + vaadin-karaf-bundle2 + jar + Vaadin Karaf test bundle 2 + + + + + com.vaadin + vaadin-bom + ${vaadin.version} + pom + import + + + + + + + com.vaadin + vaadin-server + provided + + + com.vaadin + vaadin-client-compiled + provided + + + com.vaadin + vaadin-themes + provided + + + com.vaadin + vaadin-osgi-integration + 8.1.0.beta1 + provided + + + org.osgi + osgi.core + 6.0.0 + provided + + + org.osgi + osgi.annotation + 6.0.1 + provided + + + org.osgi + osgi.cmpn + 6.0.0 + provided + + + + + + + + biz.aQute.bnd + bnd-maven-plugin + 3.3.0 + + + + bnd-process + + + + + + com.vaadin + vaadin-maven-plugin + ${vaadin.plugin.version} + + + process-resources + + compile-theme + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + + + + + vaadin-prerelease + + true + + + + + vaadin-prereleases + http://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + true + + + + + + vaadin-prereleases + http://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + true + + + + + + + diff --git a/test/servlet-containers/karaf/vaadin-karaf-bundle2/src/main/java/com/vaadin/test/osgi/myapplication/MyUI.java b/test/servlet-containers/karaf/vaadin-karaf-bundle2/src/main/java/com/vaadin/test/osgi/myapplication/MyUI.java new file mode 100644 index 0000000000..eb52336eb5 --- /dev/null +++ b/test/servlet-containers/karaf/vaadin-karaf-bundle2/src/main/java/com/vaadin/test/osgi/myapplication/MyUI.java @@ -0,0 +1,42 @@ +package com.vaadin.test.osgi.myapplication; + +import javax.servlet.annotation.WebServlet; + +import com.vaadin.annotations.Theme; +import org.osgi.service.component.annotations.Component; + +import com.vaadin.annotations.VaadinServletConfiguration; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinServlet; +import com.vaadin.ui.Button; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +public class MyUI extends UI { + + @Override + protected void init(VaadinRequest vaadinRequest) { + final VerticalLayout layout = new VerticalLayout(); + + final TextField name = new TextField(); + name.setCaption("Type your name here:"); + + Button button = new Button("Click Me"); + button.addClickListener(e -> { + layout.addComponent(new Label("Thanks " + name.getValue() + ", it works!")); + }); + + layout.addComponents(name, button); + + setContent(layout); + } + + @Component(service = VaadinServlet.class) + @WebServlet(urlPatterns = "/myapp2/*", name = "MyUIServlet", asyncSupported = true) + @VaadinServletConfiguration(ui = MyUI.class, productionMode = false) + public static class MyUIServlet extends VaadinServlet { + } + +} -- cgit v1.2.3