keycloak-aplcache
Changes
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java 7(+4 -3)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainer.java 105(+105 -0)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainerConfiguration.java 25(+25 -0)
Details
diff --git a/testsuite/integration-arquillian/tests/adapters/karaf/pom.xml b/testsuite/integration-arquillian/tests/adapters/karaf/pom.xml
index fc29132..55ad00c 100644
--- a/testsuite/integration-arquillian/tests/adapters/karaf/pom.xml
+++ b/testsuite/integration-arquillian/tests/adapters/karaf/pom.xml
@@ -13,7 +13,8 @@
<properties>
<karaf.version>3.0.3</karaf.version>
- <karaf.home>${project.build.directory}/assembly</karaf.home>
+ <karaf.home>${containers.home}/apache-karaf-minimal-${karaf.version}</karaf.home>
+ <!--<karaf.home>${project.build.directory}/assembly</karaf.home>-->
<!--fuse examples expect auth server on 8080-->
<auth.server.port.offset>0</auth.server.port.offset>
@@ -25,82 +26,57 @@
</properties>
<dependencies>
- <!-- for karaf-maven-plugin -->
+
<dependency>
- <groupId>org.apache.karaf.features</groupId>
- <artifactId>framework</artifactId>
+ <groupId>org.apache.karaf</groupId>
+ <artifactId>apache-karaf-minimal</artifactId>
<version>${karaf.version}</version>
- <type>kar</type>
- </dependency>
- <dependency>
- <groupId>org.apache.camel.karaf</groupId>
- <artifactId>apache-camel</artifactId>
- <version>2.12.5</version>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.cxf.karaf</groupId>
- <artifactId>apache-cxf</artifactId>
- <version>2.7.14</version>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-osgi-features</artifactId>
- <version>${project.version}</version>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
+ <type>zip</type>
</dependency>
- <dependency>
- <groupId>org.keycloak.example.demo</groupId>
- <artifactId>keycloak-fuse-example-features</artifactId>
- <version>${project.version}</version>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
- <!-- for arquillian -->
+
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-container-karaf-managed</artifactId>
<version>2.1.0.CR18</version>
</dependency>
+
<dependency>
<groupId>org.apache.aries.jmx</groupId>
<artifactId>org.apache.aries.jmx</artifactId>
<version>1.1.1</version>
</dependency>
+
</dependencies>
<build>
<plugins>
+
<plugin>
- <groupId>org.apache.karaf.tooling</groupId>
- <artifactId>karaf-maven-plugin</artifactId>
- <version>${karaf.version}</version>
- <extensions>true</extensions>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
- <id>prepare-karaf-with-examples</id>
- <phase>generate-test-resources</phase>
+ <id>unpack-karaf</id>
+ <phase>generate-resources</phase>
<goals>
- <!-- creates custom karaf distro in ${project.build.directory}/assembly -->
- <goal>install-kars</goal>
+ <goal>unpack</goal>
</goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.apache.karaf</groupId>
+ <artifactId>apache-karaf-minimal</artifactId>
+ <version>${karaf.version}</version>
+ <type>zip</type>
+ <outputDirectory>${containers.home}</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ </configuration>
</execution>
</executions>
- <configuration>
- <bootFeatures>
- <!-- this installs all fuse examples -->
- <feature>keycloak-fuse-example</feature>
- </bootFeatures>
- </configuration>
</plugin>
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
diff --git a/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian.xsl b/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian.xsl
index fabd47b..b6aa589 100644
--- a/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian.xsl
+++ b/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian.xsl
@@ -14,13 +14,24 @@
<container qualifier="app-server-karaf" mode="manual" >
<configuration>
<property name="enabled">${app.server.karaf}</property>
- <property name="adapterImplClass">org.jboss.arquillian.container.osgi.karaf.managed.KarafManagedDeployableContainer</property>
+ <!--<property name="adapterImplClass">org.jboss.arquillian.container.osgi.karaf.managed.KarafManagedDeployableContainer</property>-->
+ <property name="adapterImplClass">org.keycloak.testsuite.arquillian.karaf.CustomKarafContainer</property>
<property name="autostartBundle">false</property>
<property name="karafHome">${karaf.home}</property>
<property name="javaVmArguments">-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n ${adapter.test.props}</property>
<property name="jmxServiceURL">service:jmx:rmi://127.0.0.1:44444/jndi/rmi://127.0.0.1:1099/karaf-root</property>
<property name="jmxUsername">karaf</property>
- <property name="jmxPassword">karaf</property>
+ <property name="jmxPassword">karaf</property>
+
+ <!-- The following commands are performed by the CustomKarafContainer -->
+ <property name="commandsAfterStart">
+ feature:repo-add mvn:org.apache.camel.karaf/apache-camel/2.15.1/xml/features,
+ feature:repo-add mvn:org.apache.cxf.karaf/apache-cxf/3.0.4/xml/features,
+ feature:repo-add mvn:org.keycloak/keycloak-osgi-features/1.7.0.Final-SNAPSHOT/xml/features,
+ feature:repo-add mvn:org.keycloak.example.demo/keycloak-fuse-example-features/1.7.0.Final-SNAPSHOT/xml/features,
+ feature:install keycloak-fuse-example
+ </property>
+
</configuration>
</container>
diff --git a/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian-fuse.xsl b/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian-fuse.xsl
new file mode 100644
index 0000000..75aea2a
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/adapters/karaf/src/main/xslt/arquillian-fuse.xsl
@@ -0,0 +1,45 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:a="http://jboss.org/schema/arquillian"
+ version="2.0"
+ exclude-result-prefixes="xalan a">
+
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4" standalone="no"/>
+ <xsl:strip-space elements="*"/>
+
+ <xsl:template match="/a:arquillian">
+ <xsl:copy>
+ <xsl:apply-templates select="node()|@*"/>
+
+ <container qualifier="app-server-karaf" mode="manual" >
+ <configuration>
+ <property name="enabled">${app.server.karaf}</property>
+ <property name="adapterImplClass">org.keycloak.testsuite.arquillian.karaf.CustomKarafContainer</property>
+ <property name="autostartBundle">false</property>
+ <property name="karafHome">${karaf.home}</property>
+ <property name="javaVmArguments">-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n ${adapter.test.props}</property>
+ <property name="jmxServiceURL">service:jmx:rmi://127.0.0.1:44444/jndi/rmi://127.0.0.1:1099/karaf-root</property>
+ <property name="jmxUsername">admin</property>
+ <property name="jmxPassword">admin</property>
+
+ <property name="commandsAfterStart">
+ features:addurl mvn:org.keycloak/keycloak-osgi-features/1.7.0.Final-SNAPSHOT/xml/features,
+ features:addurl mvn:org.keycloak.example.demo/keycloak-fuse-example-features/1.7.0.Final-SNAPSHOT/xml/features,
+ features:install keycloak-fuse-example
+ </property>
+
+ </configuration>
+ </container>
+
+ </xsl:copy>
+ </xsl:template>
+
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()" />
+ </xsl:copy>
+ </xsl:template>
+
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml
index 6317df8..41038cd 100644
--- a/testsuite/integration-arquillian/tests/base/pom.xml
+++ b/testsuite/integration-arquillian/tests/base/pom.xml
@@ -16,6 +16,14 @@
<exclude.account>-</exclude.account>
</properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.arquillian.container</groupId>
+ <artifactId>arquillian-container-karaf-managed</artifactId>
+ <version>2.1.0.CR18</version>
+ </dependency>
+ </dependencies>
+
<build>
<plugins>
<plugin>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java
index 6727108..9b68c43 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java
@@ -123,7 +123,8 @@ public class ContainersTestEnricher {
*/
private void checkServerLog() throws IOException {
Container container = containers.removeFirst();
- if (!container.getName().equals("auth-server-undertow")) {
+ if (container.getName().equals("auth-server-wildfly")
+ || container.getName().matches("auth-server-eap.")) {
String jbossHomePath = container.getContainerConfiguration().getContainerProperties().get("jbossHome");
log.debug("jbossHome: " + jbossHomePath + "\n");
@@ -133,8 +134,8 @@ public class ContainersTestEnricher {
= serverLogContent.contains("ERROR")
|| serverLogContent.contains("SEVERE")
|| serverLogContent.contains("Exception ");
- //There is expected string "Exception" in server log: Adding provider
- //singleton org.keycloak.services.resources.ModelExceptionMapper
+ //There is expected string "Exception" in server log: Adding provider
+ //singleton org.keycloak.services.resources.ModelExceptionMapper
if (containsError) {
throw new RuntimeException(container.getName() + ": Server log contains ERROR.");
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainer.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainer.java
new file mode 100644
index 0000000..fb90f83
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainer.java
@@ -0,0 +1,105 @@
+package org.keycloak.testsuite.arquillian.karaf;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServerConnection;
+import javax.management.ObjectName;
+import org.jboss.arquillian.container.osgi.jmx.ObjectNameFactory;
+import org.jboss.arquillian.container.osgi.karaf.managed.KarafManagedDeployableContainer;
+import org.jboss.arquillian.container.spi.client.container.LifecycleException;
+import org.jboss.logging.Logger;
+
+/**
+ *
+ * @author tkyjovsk
+ */
+public class CustomKarafContainer extends KarafManagedDeployableContainer<CustomKarafContainerConfiguration> {
+
+ protected final Logger log = Logger.getLogger(this.getClass());
+
+ private CustomKarafContainerConfiguration config;
+
+ protected MBeanServerConnection mbeanServer = null;
+ protected ObjectName feature;
+
+ @Override
+ public void start() throws LifecycleException {
+ super.start();
+ executePostStartCommands();
+ }
+
+ @Override
+ public void setup(CustomKarafContainerConfiguration config) {
+ super.setup(config);
+ this.config = config;
+ }
+
+ @Override
+ public Class<CustomKarafContainerConfiguration> getConfigurationClass() {
+ return CustomKarafContainerConfiguration.class;
+ }
+
+ protected void executePostStartCommands() throws LifecycleException {
+ try {
+ mbeanServer = getMBeanServerConnection(500, TimeUnit.MILLISECONDS);
+ } catch (TimeoutException ex) {
+ throw new LifecycleException("JMX connection timed out.");
+ }
+
+ try {
+
+ feature = ObjectNameFactory.create("org.apache.karaf:type=feature,name=root");
+ try {
+ mbeanServer.getObjectInstance(feature);
+ } catch (InstanceNotFoundException infe) {
+ try {
+ feature = ObjectNameFactory.create("org.apache.karaf:type=features,name=root");
+ mbeanServer.getObjectInstance(feature);
+ } catch (InstanceNotFoundException infe2) {
+ throw new RuntimeException("Feature MBean not found on server.");
+ }
+ }
+
+ featureMBean = getMBeanProxy(mbeanServer, feature, FeatureMBean.class, 30, TimeUnit.SECONDS);
+
+ log.info("Executing karaf after-start commands");
+ for (String command : config.getCommandsAfterStartAsArray()) {
+ String cmd = command.trim().split(" ")[0].trim();
+ String param = command.trim().split(" ")[1].trim();
+ log.info(String.format("command: %s, param: %s", cmd, param));
+ if (cmd.equals("feature:repo-add") || cmd.equals("features:addurl")) {
+ featureMBean.addRepository(param);
+ } else if (cmd.equals("feature:repo-remove") || cmd.equals("features:removeurl")) {
+ featureMBean.removeRepository(param);
+ } else if (cmd.equals("feature:install") || cmd.equals("features:install")) {
+ featureMBean.installFeature(param);
+ } else if (cmd.equals("feature:uninstall") || cmd.equals("features:uninstall")) {
+ featureMBean.uninstallFeature(param);
+ } else {
+ throw new RuntimeException(String.format("Unsupported command: '%s'. "
+ + "Supported commands on Karaf: 'feature:repo-add', 'feature:install'\n"
+ + "Supported commands on Fuse: 'features:addurl', 'features:install'", cmd));
+ }
+ }
+ } catch (IOException | RuntimeException | TimeoutException ex) {
+ stop();
+ throw new LifecycleException("Error when executing karaf post-start commands.", ex);
+ }
+ }
+
+ FeatureMBean featureMBean;
+
+ public interface FeatureMBean {
+
+ public void addRepository(String repository);
+
+ public void removeRepository(String repository);
+
+ public void installFeature(String feature);
+
+ public void uninstallFeature(String feature);
+ }
+
+}
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainerConfiguration.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainerConfiguration.java
new file mode 100644
index 0000000..05d063c
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/karaf/CustomKarafContainerConfiguration.java
@@ -0,0 +1,25 @@
+package org.keycloak.testsuite.arquillian.karaf;
+
+import org.jboss.arquillian.container.osgi.karaf.managed.KarafManagedContainerConfiguration;
+
+/**
+ *
+ * @author tkyjovsk
+ */
+public class CustomKarafContainerConfiguration extends KarafManagedContainerConfiguration {
+
+ private String commandsAfterStart;
+
+ public String getCommandsAfterStart() {
+ return commandsAfterStart;
+ }
+
+ public String[] getCommandsAfterStartAsArray() {
+ return getCommandsAfterStart().trim().split(",");
+ }
+
+ public void setCommandsAfterStart(String commandsAfterStart) {
+ this.commandsAfterStart = commandsAfterStart;
+ }
+
+}
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/KeycloakArquillianExtension.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/KeycloakArquillianExtension.java
index a987a16..969f8fc 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/KeycloakArquillianExtension.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/KeycloakArquillianExtension.java
@@ -10,6 +10,7 @@ import org.jboss.arquillian.graphene.location.CustomizableURLResourceProvider;
import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
import org.jboss.arquillian.test.spi.execution.TestExecutionDecider;
import org.keycloak.testsuite.arquillian.jira.JiraTestExecutionDecider;
+import org.keycloak.testsuite.arquillian.karaf.CustomKarafContainer;
import org.keycloak.testsuite.arquillian.migration.MigrationTestExecutionDecider;
import org.keycloak.testsuite.arquillian.undertow.CustomUndertowContainer;
@@ -34,7 +35,8 @@ public class KeycloakArquillianExtension implements LoadableExtension {
.observer(ContainersTestEnricher.class);
builder
- .service(DeployableContainer.class, CustomUndertowContainer.class);
+ .service(DeployableContainer.class, CustomUndertowContainer.class)
+ .service(DeployableContainer.class, CustomKarafContainer.class);
builder
.service(TestExecutionDecider.class, JiraTestExecutionDecider.class)
diff --git a/testsuite/integration-arquillian/tests/pom.xml b/testsuite/integration-arquillian/tests/pom.xml
index 074a08a..b339d11 100644
--- a/testsuite/integration-arquillian/tests/pom.xml
+++ b/testsuite/integration-arquillian/tests/pom.xml
@@ -340,6 +340,32 @@
<artifactId>infinispan-core</artifactId>
</dependency>
+ <dependency>
+ <groupId>jline</groupId>
+ <artifactId>jline</artifactId>
+ <version>2.12</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sshd</groupId>
+ <artifactId>sshd-core</artifactId>
+ <version>0.12.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.shell</groupId>
+ <artifactId>org.apache.karaf.shell.console</artifactId>
+ <version>3.0.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf</groupId>
+ <artifactId>org.apache.karaf.client</artifactId>
+ <version>3.0.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.jmx</groupId>
+ <artifactId>org.apache.aries.jmx</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+
</dependencies>
<build>
<plugins>