Skip to content
This repository has been archived by the owner on Jun 7, 2021. It is now read-only.

Commit

Permalink
Add arquillian protocol for remote arq testing [SWARM-138]
Browse files Browse the repository at this point in the history
This adds a simplified version of ALR's daemon
protocol (https://github.com/arquillian/arquillian-daemon).
  • Loading branch information
tobias committed Dec 3, 2015
1 parent d088fa4 commit d7c2f2d
Show file tree
Hide file tree
Showing 38 changed files with 1,907 additions and 167 deletions.
86 changes: 86 additions & 0 deletions arquillian/arquillian/pom.xml
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2015 Red Hat, Inc. and/or its affiliates.
~
~ Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
-->
<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>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-arquillian-parent</artifactId>
<version>1.0.0.Alpha6-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>

<artifactId>wildfly-swarm-arquillian</artifactId>

<name>WildFly Swarm: Arquillian</name>
<description>WildFly Swarm: Arquillian</description>

<packaging>jar</packaging>

<build>
<plugins>
</plugins>
</build>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>${version.org.arquillian}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-tools</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-msc</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-container-spi</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-container-test-spi</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-arquillian-daemon</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-container-test-impl-base</artifactId>
</dependency>

<dependency>
<groupId>org.jboss.arquillian.config</groupId>
<artifactId>arquillian-config-impl-base</artifactId>
</dependency>


<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>compile</scope>
</dependency>

</dependencies>


</project>
Expand Up @@ -15,29 +15,13 @@
*/
package org.wildfly.swarm.arquillian.adapter;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
import org.jboss.arquillian.container.spi.client.container.DeploymentException;
import org.jboss.arquillian.container.spi.client.container.LifecycleException;
import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
import org.jboss.arquillian.protocol.servlet.ServletMethodExecutor;
import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.Node;
import org.wildfly.swarm.arquillian.daemon.container.DaemonContainerConfigurationBase;
import org.wildfly.swarm.arquillian.daemon.container.DaemonDeployableContainerBase;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
Expand All @@ -50,14 +34,24 @@
import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepositories;
import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepository;
import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenUpdatePolicy;
import org.wildfly.swarm.arquillian.daemon.DaemonServiceActivator;
import org.wildfly.swarm.container.JARArchive;
import org.wildfly.swarm.msc.ServiceActivatorArchive;
import org.wildfly.swarm.tools.BuildTool;
import org.wildfly.swarm.tools.exec.SwarmExecutor;
import org.wildfly.swarm.tools.exec.SwarmProcess;

import java.io.File;
import java.nio.file.Files;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
* @author Bob McWhirter
* @author Toby Crawley
*/
public class WildFlySwarmContainer implements DeployableContainer<WildFlySwarmContainerConfiguration> {
public class WildFlySwarmContainer extends DaemonDeployableContainerBase<DaemonContainerConfigurationBase> {

private Class<?> testClass;

Expand All @@ -67,25 +61,13 @@ public class WildFlySwarmContainer implements DeployableContainer<WildFlySwarmCo


@Override
public Class<WildFlySwarmContainerConfiguration> getConfigurationClass() {
return WildFlySwarmContainerConfiguration.class;
}

@Override
public void setup(WildFlySwarmContainerConfiguration config) {
public Class<DaemonContainerConfigurationBase> getConfigurationClass() {
return DaemonContainerConfigurationBase.class;
}

@Override
public void start() throws LifecycleException {
}

@Override
public void stop() throws LifecycleException {
}

@Override
public ProtocolDescription getDefaultProtocol() {
return new ProtocolDescription("Servlet 3.0");
//disable start, since we call super.start() at deploy time
}

public void setTestClass(Class<?> testClass) {
Expand Down Expand Up @@ -119,18 +101,23 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {

/*
System.err.println( ">>> CORE" );
System.err.println(" NAME: " + archive.getName());
for (Map.Entry<ArchivePath, Node> each : archive.getContent().entrySet()) {
System.err.println("-> " + each.getKey());
}
System.err.println( "<<< CORE" );
*/


//System.err.println("is factory: " + isContainerFactory(this.testClass));
if (isContainerFactory(this.testClass)) {
archive.as(JavaArchive.class).addAsServiceProvider("org.wildfly.swarm.ContainerFactory", this.testClass.getName());
archive.as(JavaArchive.class).addClass(this.testClass);
}
archive.as(ServiceActivatorArchive.class)
.addServiceActivator(DaemonServiceActivator.class);
archive.as(JARArchive.class)
.addModule("org.wildfly.swarm.arquillian.daemon")
.addModule("org.jboss.msc");

BuildTool tool = new BuildTool();
tool.projectArchive(archive);
Expand Down Expand Up @@ -166,19 +153,18 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
}

SwarmExecutor executor = new SwarmExecutor();
executor.withDefaultSystemProperties();
executor.withDefaultSystemProperties();//.withDebug(8787);

try {

Archive<?> wrapped = tool.build();

/*
wrapped.as(ZipExporter.class).exportTo(new File("test.jar"), true);

/*wrapped.as(ZipExporter.class).exportTo(new File("test.jar"), true);
for (Map.Entry<ArchivePath, Node> each : wrapped.getContent().entrySet()) {
System.err.println("-> " + each.getKey());
}
*/
}*/

File executable = File.createTempFile("arquillian", "-swarm.jar");
wrapped.as(ZipExporter.class).exportTo(executable, true);
Expand All @@ -196,18 +182,22 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
this.process = executor.execute();
this.process.getOutputStream().close();

ProtocolMetaData metaData = new ProtocolMetaData();
HTTPContext context = new HTTPContext("localhost", 8080);
context.add(new Servlet(ServletMethodExecutor.ARQUILLIAN_SERVLET_NAME, "/"));
metaData.addContext(context);

this.process.awaitDeploy( 2, TimeUnit.MINUTES );

if ( ! this.process.isAlive() ) {
throw new DeploymentException( "Process failed to start" );
}
if ( this.process.getError() != null ) {
throw new DeploymentException( "Error starting process", this.process.getError() );
}

// start wants to connect to the remote container, which isn't up until now, so
// we override start above and call it here instead
super.start();

ProtocolMetaData metaData = new ProtocolMetaData();
metaData.addContext(createDeploymentContext(archive.getId()));

return metaData;
} catch (Exception e) {
throw new DeploymentException(e.getMessage(), e);
Expand All @@ -230,5 +220,4 @@ public void deploy(Descriptor descriptor) throws DeploymentException {
@Override
public void undeploy(Descriptor descriptor) throws DeploymentException {
}

}
Expand Up @@ -15,19 +15,10 @@
*/
package org.wildfly.swarm.arquillian.adapter;

import org.jboss.arquillian.container.spi.ConfigurationException;
import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;
import org.wildfly.swarm.arquillian.daemon.container.DaemonContainerConfigurationBase;

/**
* @author Bob McWhirter
*/
public class WildFlySwarmContainerConfiguration implements ContainerConfiguration {

public WildFlySwarmContainerConfiguration() {

}

@Override
public void validate() throws ConfigurationException {
}
public class WildFlySwarmContainerConfiguration extends DaemonContainerConfigurationBase {
}
Expand Up @@ -16,15 +16,18 @@
package org.wildfly.swarm.arquillian.adapter;

import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
import org.jboss.arquillian.container.test.spi.client.protocol.Protocol;
import org.jboss.arquillian.core.spi.LoadableExtension;
import org.wildfly.swarm.arquillian.daemon.protocol.DaemonProtocol;

/**
* @author Bob McWhirter
*/
public class WildFlySwarmExtension implements LoadableExtension {
@Override
public void register(ExtensionBuilder builder) {
builder.service(DeployableContainer.class, WildFlySwarmContainer.class);
builder.observer(WildFlySwarmObserver.class);
builder.service(Protocol.class, DaemonProtocol.class)
.service(DeployableContainer.class, WildFlySwarmContainer.class)
.observer(WildFlySwarmObserver.class);
}
}
13 changes: 13 additions & 0 deletions arquillian/arquillian/src/main/resources/arquillian.xml
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

<container qualifier="daemon" default="true">
<configuration>
<property name="host">localhost</property>
<property name="port">12345</property>
</configuration>
</container>

</arquillian>
55 changes: 55 additions & 0 deletions arquillian/daemon/api/pom.xml
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2015 Red Hat, Inc. and/or its affiliates.
~
~ Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
-->
<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>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-arquillian-daemon-parent</artifactId>
<version>1.0.0.Alpha6-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>

<artifactId>wildfly-swarm-arquillian-daemon</artifactId>

<name>WildFly Swarm: Arquillian Daemon API</name>
<description>WildFly Swarm: Arquillian Daemon API</description>

<packaging>jar</packaging>

<dependencies>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-container</artifactId>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.26.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-arquillian-daemon-modules</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.msc</groupId>
<artifactId>jboss-msc</artifactId>
<version>1.2.6.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-container-test-spi</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
</dependency>
</dependencies>

</project>

0 comments on commit d7c2f2d

Please sign in to comment.